Code-barres
Généralités
Le WMS traite différentes symbologies de code-barres. Il s'agit essentiellement d'une problématique de configuration de lecteur.
Le lecteur devra être configuré avec un retour chariot après chaque scan pour que la saisie soit automatiquement validée.
Exemple de code 128 d'un emplacement :
Code 39 d'un emplacement :
Simple datamatrix (AIM ]d1 si rendu)
AIM
Le code AIM permet d'identifier le type de code-barres. Divalto filtre l'AIM s'il est rendu par le lecteur, et ne rend dans le champ de saisie que la valeur sans l'AIM.
Le code AIM doit impérativement être rendu par le lecteur en cas de GS1-128. Cf. plus bas.
Exemples d'AIM :
]d2 | GS1 DataMatrix |
]C1 | GS1 128 symbol |
]e0 | GS1 Databar |
]I0 | ITF14, check digit was not transmitted by the scanner |
]I1 | GS1 ITF14, check digit has been validated and transmitted by the scanner |
]E0 | EAN-8, EAN-13, UPC-A or UPC-E |
]E1 | Two digit Add-On symbol |
]E2 | Five digit Add-On symbol |
]E3 | EAN-13, UPC-A or UPC-E with Add-On symbol |
]E4 |
GS1-128
Le GS1-128 est un code-barres particulier, normé, qui permet de stocker différentes informations dans le même code-barres :
- SSCC
- Article
- Quantité
- Lot
- Poids
- ...
Divalto WMS intègre en standard un décodage du GS1-128. Il peut être en 1D ou 2D. Le code AIM devra être restitué par le lecteur pour permettre à Divalto d'activer ses fonctions de décodage du GS1-128.
L'avantage de l'utilisation de ce code-barres réside dans le fait qu'en un seul scan de code-barres, plusieurs champs/étapes du scénario de saisie sont remplis : inventaire, réception, préparation...
La quantité contenue dans un GS1-128 doit TOUJOURS être exprimée en unité de travail.
GS1-128 1D (AIM ]c1)
GS1-128 Datamatrix 2D (AIM ]d2)
Quelques segments du GS1-128
Code | Description | data length (without AI) |
---|---|---|
00 | Serial Shipping Container Code (SSCC) | 18 |
01 | Global Trade Item Number (GTIN) | 14 |
02 | GTIN of Contained Trade Items | 14 |
10 | Batch/Lot Number | variable, up to 20 |
11 | Production Date | 6 |
12 | Due Date | 6 |
13 | Packaging Date | 6 |
15 | Best Before Date (YYMMDD) | 6 |
17 | Expiration Date | 6 |
20 | Product Variant | 2 |
21 | Serial Number | variable, up to 20 |
37 | Number of Units Contained | variable, up to 8 |
314y | Qty in square meters | 6 |
330y | Container Gross Weight (kg) | 6 |
Des AIM séparateurs entre deux segments peuvent être insérés pour les segments de taille variable afin que vous ne soyez pas obligé d'utiliser tous les caractères du segment (qté...). Cependant, pour certains segments, il n'est pas possible de procéder autrement (lot...), sauf si vous placez ces segments à la fin.
Exemple de lecture dans le bloc-notes d'un GS1-128 :
]d2000623680009000009180200623680000377370000006033000002001519071910887788
]d20006236800090000091802006236800003773760|33000002001519071910887788
]d20006236800090000091802006236800003773760|10887788|330000020015190719
Plus d'informations ici : https://www.gs1.fr
Si vous avez besoin de stocker une information « spécifique », Divalto vous invite à le faire dans un segment 91-99 prévu à cet effet et qui ne sera pas interprété par le standard.
Vous pouvez surcharger la fonction GS1_Decoder_SegmentInconnu de wmtmbarcod pour décoder cette partie.
;* Public Function int GS1_Decoder_SegmentInconnu(&wmGS1128, wmbarcodval, &PositionActuelle) ;appelé après la lecture d'un segment non implémenté en standard ;Renvoie 0 si segment géré : dans ce cas PositionActuelle doit être placé au caractère suivant la donnée interprétée en spécifique ici ; wmGS1128 peut être alimenté en fonction (champ standard ou spécifique) ;En standard le code-barres est de fait incorrect 1 wmbarcodval >wmsfdd.dhsd wmbarcodval Record wmsfdd.dhsd wmGS1128 wmGS1128 1 PositionActuelle 4,0 ;Position actuelle de décodage du code-barres beginf Freturn(1) endf
Suivant le contexte :
- wmbarcodval peut être alimenté par la valeur lue,
- le record wmGS1128 est à surcharger dans le dictionnaire pour ajouter votre segment, segment que vous remplirez dans cette fonction.
Cf. :
- https://en.wikipedia.org/wiki/GS1-128
- Fichier joint GS1_Datamatrix_GuideLine.pdf
Edition des codes-barres
Les masques d'impression Divalto permettent en standard toute sortie de code-barres, dont le GS1-128.
Divalto WMS permet en standard de sortir divers codes-barres.
La génération est basée sur une DLL venant du logiciel Zint https://sourceforge.net/projects/zint/, qui peut aussi être utilisé en dehors de Divalto si vous souhaitez éditer des codes-barres en dehors de Divalto.
Sinon, nombreux sont les sites Web qui conviennent pour faire des tests unitaires.
Le code-barres GS1-DataMatrix se présente en général sous la forme d'un seul carré, mais suivant les paramètres du code-barres et son contenu, on peut passer de 1 à 2, voire 4 carrés. L'important est que ce code-barres soit bien lu avec vos lecteurs, aux distances souhaitées (min et max).
Si vous voulez intervenir sur la forme du code-barres, ou sa taille pour ajuster les distances de lecture, intervenez sur la fonction suivante située dans les masques dhsi :
;* Public Procedure Bloc_AvGestion ; 1 Scale 4,2 1 wmbarcodval >wmsfdd.dhsd wmbarcodval ;pour évaluation taille et ajustement du scale Beginp scale = 4.3 GS1_Encoder(wmbarcodval, wmGS1128) ;réduction du zoom pour calage sur la page ? Switch length(wmbarcodval) Case Vsw > 36 scale = 2.7 case Vsw > 22 scale = 3.1 EndSwitch BC_GS1_DATAMATRIX(wmbarcodcontenant, wmGS1128, scale) Endp
EAN/UPC/EAN8/GTIN14...
Lorsque Divalto imprime une étiquette article, cela ne présente pas de problème particulier. On imprime la valeur contenue dans le champ EAN de Divalto : sous-référence, à défaut article.
En revanche, lors de l'impression (codage) ou de la lecture (décodage) d'un GS1-128, ce code-barres contiendra toujours 14 caractères pour le code article. Cependant, si l'on prend le cas d'un UPC, il fait 12 caractères, et non 13 caractères.
La logique suivante a été retenue. Le GTIN14 est tout d'abord recherché dans le champ dédié sur les colis types. A défaut, on soustrait tous les « 0 » situés au début pour en trouver le code-barres article à chercher dans Divalto.
Exemple de décodage GTIN :
EAN
01234567890128 => recherche GTIN à défaut 1234567890128
21234567890122 => recherche GTIN à défaut 1234567890128 => Ici, on ne finit pas par un « 2 ». La clé de contrôle change puisqu'on n'a plus le « 2 » du préfixe GTIN-14.
UPC
00123456789012 => recherche GTIN à défaut 123456789012
20123456789016 => recherche GTIN à défaut 123456789012 => Ici, on ne finit pas par un « 6 ». La clé de contrôle change puisqu'on n'a plus le « 2 » du préfixe GTIN-14.
Divalto recalcule donc parfois la clé de contrôle pour trouver la valeur correcte dans Divalto.
Remarque : les modules WMPMBARCOD et WMTMBARCOD gèrent ces notions.
Exemple d'utilisation du premier caractère du GTIN 14 (devant le code article EAN) :