Mercator peut générer de façon automatique un code-barres EAN13 lors de la création d'un nouvel article. Ce code-barres est stocké dans une des 3 clés de la fiche "Articles". Le n° de cette clé est déterminé dans "Outils / Options / Signalétiques / N° clé EAN 13".
L'option "Dernier N° EAN 13" permet de fixer la racine qui sera utilisée pour la génération de ce code. Elle reprend les 12 premiers caractères du code EAN 13. Mercator y ajoute le caractère de contrôle. Les codes sont calculés par incrémentation (+1) des 12 premiers caractères.
Attention : cette première option ne doit pas être confondue avec "Outils / Options / Signalétiques / Clé EAN 13", qui reprend le n° de la clé de la fiche article, qui est destinée à recevoir un code-barres de type EAN13 encodé manuellement. Si, lors de l'encodage, le code-barres n'est pas conforme à la structure EAN13, un avertissement sera affiché.
S'il est souhaité de générer en bloc des codes EAN13 pour des articles existant déjà, il suffit d'appliquer le script suivant via "Outils / Editeur de code" : (exemple donné ici pour la clé 2)
Il faut exécuter sous transaction ce script dans un onglet SQL de l'éditeur de code. Dans ce script, il faut adapter "s_cle2" par la clé que l'on souhaite compléter avec le code EAN13. (Voir valeur de l'option X1AUTO_EAN) Ce nom de colonne est à modifier à 2 endroits du script. Enfin, après exécution, il faut redémarrer Mercator pour que l'option X2AUTO_EAN qui est mise à jour par le script dans la table OPTIONS soit bien prise en compte dans le dictionnaire MercatorUi.Globals.Params.
declare @X2AUTO_EAN varchar(20)
select @X2AUTO_EAN=rtrim(valeur) from OPTIONS (NOLOCK) where (type='X2AUTO_EAN') and (stem='PARAMS')
if (@X2AUTO_EAN is null) or (len(@X2AUTO_EAN)<>12) or (isNumeric(@X2AUTO_EAN)=0)
return
select ROW_NUMBER() over (ORDER BY s_id) as recno,s_id
into #stock_ean_tmp
from stock where s_cle2=''
create index s_id on #stock_ean_tmp (s_id)
if exists(select * from #stock_ean_tmp)
begin
update stock set s_cle2=dbo.XEANCHECK(right(replicate('0',12) + rtrim(cast(cast(@X2AUTO_EAN as bigint)+recno as char(12))),12))
from #stock_ean_tmp where (#stock_ean_tmp.s_id=stock.s_id)
declare @max_recno int
select @max_recno=max(recno) from #stock_ean_tmp
update OPTIONS set valeur=right(replicate('0',12)+rtrim(cast(cast(@X2AUTO_EAN as bigint)+@max_recno as char(12))),12) where (type='X2AUTO_EAN') and (stem='PARAMS')
end
drop table #stock_ean_tmp