Data ultimo aggiornamento: 27/09/2016

Clicca per accedere al sito di NTS Informatica
Clicca per accedere all'argomentoClicca per accedere all'argomentoClicca per accedere all'argomentoClicca per accedere all'argomento
Clicca per accedere al sito di NTS Informatica

Gestione barcode EAN 128 SSCC (GS1-128)

La funzionalità è abilitata in automatico nella gestione documenti, e funziona 'sparando' il barcode nel campo codice articolo della griglia del corpo del documento (non funziona negli scarichi collegati), nella stessa modalità la funzione è attiva anche nella gestione ordini, nella griglia di dettaglio delle liste selezionate articoli e nei programmi della logistica su palmare di ricevimento merce, movimentazione interna, picking e inventario.

Visto che il campo accetta solo 18 caratteri (la lunghezza massima del cod. articolo) se i caratteri vengono inseriti da barcode in emulazione tastiera (ovvero il tempo tra l'inserimento di un carattere e l'altro è minore di 25 millisecondi) il campo può accettare più di 18 caratteri (non c'è limite). In questa versione la parte di codice barcode che identifica un codice a barre (ed in Business tale codice è stato associato ad una fase), oltre ad acquisire il cod. articolo viene impostata correttamente anche la fase associata al codice barcode.

Visto che non è possibile determinare in modo preciso se il codice inserito è un EAN128 che segue lo standard SSCC (da qui in avanti semplicemente EAN128), viene assunto che il codice inizi per '00' e che la sua lunghezza sia almeno 20 caratteri, oppure che inizi per '01' o '02' e che sia lungo almeno 16 caratteri.

Nel codice a barre EAN128 il codice è una normale sequenza di caratteri, dove alcuni sono degli identificativi di campo, altri il valore, ad esempio il codice:

(01)00614141999996(17)100101(10)123ABC(21)1234567890

Identifica:

  • 01 = codice a barre dell'articolo
  • 17 = data scadenza lotto (nel formato YYMMDD)
  • 10 = lotto
  • 21 = matricola

Quando il lettore legge il barcode, lo acquisisce senza le () e qui nasce il problema, visto che alcuni marcatori sono a lunghezza fissa (ad esempio il codice che segue lo (01) è sempre numerico di 14 caratteri, il codice che segue lo (00) è sempre numerico 18 caratteri), mentre altri sono a lunghezza variabile (ad esempio il codice (10) lotto può essere da 1 a 20 caratteri) ed alla fine viene 'passato' un carattere terminatore che determina la fine del campo e l'inizio di quello successivo (solitamente tale carattere non è visibile).

Alcuni lettori di barcode, come carattere di fine campo variabile passano "APPS", "MENU" o "F8", ma non sappiamo se sono presenti altre soluzioni. Al momento Business tratta in maniera particolare solo quei 3 tipi di carattere, ed è possibile aggiungerne un'ulteriore utilizzando l'opzione OPZIONI\FineMarcatoreEan128 che permette di indicare un carattere speciale per la determinazione dei terminatori degli EAN128. Nell'opzione deve essere indicato il nome del carattere indicando il nome del tasto e non il carattere che stampa, per esempio il carattere "+" potrebbe in realtà chiamarsi "ADD" o "OEMPLUS" e nell'opzione di registro occorre indicare uno di quei nomi per intercettarlo, la stessa cosa potrà valere anche per tutti gli altri caratteri speciali. Per una mappatura di riferimento ad esempio consultare il seguente link microsoft https://msdn.microsoft.com/en-us/library/system.windows.forms.keys.aspx :

Apps The application key (Microsoft Natural Keyboard)
Menu The ALT key
F8 The F8 key

E' possibile anche usare l'opzione OPZIONI\FineMarcatoreEan128Char dove è possibile indicare il carattere terminatore in formato testo, quindi è possibile scrivere scrivere direttamente il "+", il "|" o il tasto che più si preferisce, attivando tale opzione il programma nel riconoscimento dei barcode EAN128 effettuerà l'elaborazione sul testo visibile nel campo dove è stato letto il barcode. Attivando l'opzione FineMarcatoreEan128Char questa ha precedenza rispetto alla precedente FineMarcatoreEan128 che verrà ignorata.

Per esempio, impostando i seguenti 2 barcode su un articolo:

leggendo da lettore barcode il seguente 0112345678901234 (con identificatore 01 e quindi 14 caratteri) oppure il seguente 00123456789012345678 (con identificatore 00 e quindi 18 caratteri)

nel caso il barcode letto contenga il lotto un possibile barcode letto dal barcode potrebbe avere la forma:

01 12345678904444 10 3400001MENU

Al momento Business traduce il barcode EAN128 letto tramite i marcatori (AI); i marcatori letti da Business sono solo:

  • 00 o 01: in Business viene cercato un barcode con codice uguale a quello che segue il marcatore, qualora in Business non esista tale codice non sarà possibile determinare il cod. articolo, quindi verrà dato il messaggio di articolo inesistente
  • 10: lotto alfanumerico (si consiglia di impostare in Business, nell'anagrafica ditta, la gestione dei lotti alfanumerici)
  • 11: data produzione lotto
  • 17: data scadenza lotto
  • 21: matricola (in Business la matricola avrà sempre quantità proposta = 1)
  • 310x: Peso netto in chilogrammi, la x può assumere un valore tra 0 e 6 e indica il numero di decimali, il valore letto da tale AI verrà sempre valutato come quantità
  • 311x: Lunghezza, la x può assumere un valore tra 0 e 6 e indica il numero di decimali, il valore letto da tale AI verrà sempre valutato come quantità
  • 314x: Superficie, la x può assumere un valore tra 0 e 6 e indica il numero di decimali, il valore letto da tale AI verrà sempre valutato come quantità
  • 316x: Volume, la x può assumere un valore tra 0 e 6 e indica il numero di decimali, il valore letto da tale AI verrà sempre valutato come quantità
  • 02: Identificativo del cartone, contiene il barcode in formato GTIN indicato nell'anagrafica dell'articolo
  • 37: Moltiplicatore della quantità indicata nel GTIN, presente solo nel caso di AI iniziale 02, il valore letto da tale AI verrà sempre valutato come quantità
  • 30: come AI 37
  • 15: "Da consumarsi preferibilmente entro", data che verrà indicata nell'anagrafica lotti, se il lotto dovrà essere generato e non è stato indicato AI 17.

Gestione del confenzionamento, a seguito degli AI 01 e 02 viene indicato un barcode:

  • GTIN-12: "00" + 12 cifre del barcode
  • GTIN-13: "0" + 13 cifre del barcode
  • GTIN-14: 14 cifre del barcode, dove la prima è l'identificativo della confezione e le restanti 13 corrispondono al GTIN-13 con il carattere di controllo finale ricalcolato

Per gestire il tipo di confezionamento, nell'anagrafica dei barcode il Tipo Barcode UPC (bc_tipo = 'U') è stato rinominato in GTIN\EAN14. Per i barcode di questa tipologia la colonna quantità sarà modificabile e sarà utilizzata SOLO durante la lettura di barcode GS1 (salvo presenza di opzioni di registro già esistenti a standard che derogano su questo comportamento).

Casi particolari del confezionamento:

  • GTIN-14 con primo carattere 9: indica un barcode a confezionamento variabile, dovrà essere presente nel barcode anche un AI 310x
  • GTIN-13 e GTIN-12: il primo carattere è 0, non è definito il confezionamento.

In entrambi i casi, per evitare di dover caricare i barcode che iniziano con 9, con 0 o con 00, durante la verifica di questi barcode il programma verificherà se esiste un barcode uguale per quanto riguarda la parte di identificazione dell'articolo. In pratica verrà escluso il carattere 9 iniziale (o i primi 2 zeri) e il carattere finale di controllo.

Gestione dei colli:

Alla lettura dei barcode GS1 che inizia con 01 verrà indicata come Unità di Misura l'unità di misura indicata nel barcode, come numero di colli fisso a 1 e come quantità quella determinata dal confezionamento (dalla tabella barcode). Per i barcode GS1 che iniziano con 02, valgono le regole sopra, ma sia i colli che le quantità saranno moltiplicate per la quantità indicata nel'AI 37.

Note per programmatori

Per ottenere la seguente funzionalità negli entity dei programmi in cui la funzionalità è presente, nella routine di validazione del cod. articolo (BeforeColUpdate_CORPO_ec_codart) è stata estrapolata la funzione per determinale il cod. articolo dato un codice in input (nuova funzione BeforeColUpdateCodart_TrovaArticolo), questa funzione lo cerca prima nell'anagrafica articoli, poi nel barcode (tutto il codice passato deve essere codificato nel campo barcode.bc_code), poi nei codici utilizzati da cliente/fornitore (codarfo), poi verifica se il codice indicato potrebbe essere un lotto (e nel caso compila il campo cod. articolo e si memorizza nella variabile strLottoXDaAnalotti il lotto, che verrà impostato in automatico alla fine della routine AfterColUpdate_CORPO_ec_codart), poi verifica se il codice potrebbe essere un EAN128 (funzione ereditabile BeforeColUpdateCodart_TrovaArticoloEAN128), poi verifica se il codice inserito è presente nel catalogo degli articoli da importare di Business.

Per realizzare la gestione dei barcode EAN128 è stata aggiunta la routine.

Nella nuova funzione suddetta possono venir impostate le variabili 'strEAN128Matric', 'strEAN128Lotto', 'strEAN128DtProd', 'strEAN128DtScad' (che potrebbero essere compilate dalla lettura del barcode). Se valorizzate, nella routine 'AfterColUpdate_CORPO_ec_codart' dopo aver inserito il cod. articolo verranno compilati lotto, matricola e nell'anagrafica del lotto e impostate le date di produzione e scadenza.

Se la funzione per leggere il cod. EAN128 non risponde alle specifiche richieste di determinati casi, potrà essere facilmente ereditata da BEVEBOLL.

La funzione BeforeColUpdateCodart_TrovaArticoloEAN128 riceve in input il codice STRINGA letto, dove non sono presenti gli eventuali caratteri di fine campo a lunghezza variabile. Per avere il codice effettivamente 'sparato' dal lettore è disponibile all'interno della funzione la variabile strEAN128Barcode, che andrà opportunamente tradotta (ogni carattere letto è separato da '§').

NB: le routine in oggetto 'BeforeColUpdateCodart_TrovaArticoloEAN128' aggiunte nei vari programmi chiamano tutti comunque la funzione presente in BELBMENU: Public Overridable Function TrascodificaBarcodeEan128(ByVal strDitta As String, ByVal strChiamante As String, ByVal strBarcodeEAN128 As String, ByVal strCodiceBarcodeEAN128 As String, ByRef dttOut As DataTable) As Boolean

Quindi eventulmente se necessaria in altri programmi potra essere richiamata o in caso anche ereditata creanto un apposita enity su BELBMENU.

Clicca per accedere al sito di NTS Informatica