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 :

]d2GS1 DataMatrix
]C1GS1 128 symbol
]e0GS1 Databar
]I0ITF14, check digit was not transmitted by the scanner
]I1GS1 ITF14, check digit has been validated and transmitted by the scanner
]E0EAN-8EAN-13UPC-A or UPC-E
]E1Two digit Add-On symbol
]E2Five digit Add-On symbol
]E3EAN-13UPC-A or UPC-E with Add-On symbol
]E4

EAN-8

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

CodeDescriptiondata length (without AI)
00Serial Shipping Container Code (SSCC)18
01Global Trade Item Number (GTIN)14
02GTIN of Contained Trade Items14
10Batch/Lot Numbervariable, up to 20
11Production Date6
12Due Date6
13Packaging Date6
15Best Before Date (YYMMDD)6
17Expiration Date6
20Product Variant2
21Serial Numbervariable, up to 20
37Number of Units Containedvariable, up to 8
314yQty in square meters6
330yContainer 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. :

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 :

Masque 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) :