Cette exemple est dédié aux développeurs ayant à générer la création d’articles de type U.V.C. (Unité de Ventes Consommateurs) et utilisant la gestion de codes à barres de type AEN 13
Ce type d’articles est utilisé par exemple dans le prêt à porter ou chaque produit est décliné en différents coloris et plusieurs tailles.
Vous ne pourrez donc pas utiliser la gestion de produit de type classique car il vous faut différencier le produit « TOTO » en coloris NOIR et en taille 38 du modèle TOTO en coloris NOIR en taille 40.
La solution consiste donc à générer autant d’U.V.C. que de déclinaison et ensuite attribuer un code barre unique à chacune de ces U.V.C.
Pour l’exemple, j’utilise un serveur SQL et la version WD14.

1- Dans la première partie, nous allons contrôler si l’article que nous souhaitons créer existe déjà ou non dans le BDD.
a. Dans le cas ou il existerait déjà, ce code tiendra compte des UVC déjà crées et créera les nouvelles en tenant compte de la plus grande UVC existante
2- Pour l’exemple, nous allons dire que le résultat final sera le suivant : XN-OLGA400\1 ce qui correspond au modèle XN-OLGA400 en coloris NOIR et en taille 36
a. On aura donc pour le même modèle dans le même coloris mais pour la taille 38 le résultat : \2, et ainsi de suite

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
variable est une chaîne
Suffixe est une chaîne
NouveauCode est une chaîne
				
sRequete est une chaîne="SELECT MAX(ART_CODE), ART_DATE_CREATION, MAX(ART_LIBRE10) FROM ARTICLES WHERE ART_CODE LIKE '"+SAI_ART_CODE+"%'  GROUP BY ART_CODE, ART_DATE_CREATION, ART_LIBRE10 ORDER BY ART_DATE_CREATION, ART_LIBRE10 DESC "
SI SQLExec(sRequete,"REQ") ALORS
SI SQLAvance("REQ") = 0 ALORS
variable=SQLLitCol("REQ", 1)
// Récupération de ce qu'il y a après l'anti-slash si l’article existe
Suffixe=ExtraitChaîne(variable,2,"\") 
// Incrémente UVC de 1
Suffixe=Val(Suffixe)+1 
// Constitution de la nouvelle UVC	
NouveauCode=ExtraitChaîne(variable,1,"\")+"\"+Suffixe 
						
SINON
Dans le cas ou l’article n’existe pas
NouveauCode=SAI_ART_CODE+"\1"
FIN
SQLFerme("REQ")
//-- Le principe est le même que pour la création de l’UVC, on recherche le dernier code barre créé

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
sVariable_EAN est une chaîne
prefixe_AEN est une chaîne
nouveauCode_AEN est une chaîne
Cle est une chaîne
nTotal est un entier

Requete est une chaîne="SELECT MAX(ART_CODEBARRE) FROM ARTICLES " 
SI SQLExec(Requete, "REQ1") ALORS
SI SQLAvance("REQ1")=0 ALORS
sVariable_EAN=SQLLitCol("REQ1", 1)
//-- On extrait les 12 premiers nombre auquel nous ajoutons 1
prefixe_AEN=Gauche(sVariable_EAN,12)
prefixe_AEN=NumériqueVersChaîne(Val(prefixe_AEN)+1,"012d")
FIN
SINON
SQLInfoGene("REQ1")
Trace("Erreur SQL R1 : ", SQL.MesErreur)
FIN
SQLFerme("REQ1")
					
//Calcul du caractère de contrôle, on trouve ce type de code de calcul sur de nombreux sites internet.
POUR ii = 1 A Taille(prefixe_AEN)        
SI EstPair(ii) ALORS
nTotal+=Val(prefixe_AEN[[ii]])*3
SINON
nTotal+=Val(prefixe_AEN[[ii]])
FIN
FIN 
Cle = ((PartieEntière(nTotal/10)+1)*10)-nTotal
SI Cle = 10 ALORS
Cle = 0
FIN
					
NouveauCode_AEN=prefixe_AEN + Cle
Voilà, ce sujet a souvent été abordé sur le Forum, et de fait, j’espère que celui-ci aidera certains d’entre vous.
Pour l’avoir effectué, une modification de ce code permet aisément de créer un code à barres de type AEN 128
Bon courage à Toutes et Tous