COGP20 - Stampa Etichette Merce¶
Intestazione¶
| Campo | Valore |
|---|---|
| Programma | COGP20 |
| Titolo | Stampa Etichette Merce (Etichette con Bar Code) |
| Autore | Andrea Parmeggiani - Eurosystem |
| Conversione Windows | Daniele |
| Posizione menu | Magazzino > Archivi & Tabelle > Stampe > Merci > Etichette con Bar Code |
Scopo e logica generale¶
COGP20 stampa etichette con bar code per le merci. Supporta cinque tipi di stampante con protocolli differenti e sei modalità di estrazione dei dati. Il programma può essere lanciato direttamente dall'utente oppure chiamato da altri programmi (COGM85, COGO55, COGO16, COGV14, COGV94, COGV06NO) tramite interfaccia standard a linkage.
Il flusso principale è:
- Inizializzazione: lettura configurazione (RNEWCONF, gruppo
PRNTCOGP20), dati azienda, divisa, lingua. - Presentazione maschera: l'utente seleziona bar code, tipo estrazione, numero copie, ordinamento, filtri merce/documento/ordine/matricole, data da stampare e posizione di partenza per KYOCERA.
- Selezione stampante: COGS54 gestisce la scelta della stampante fisica.
- Caricamento modello (opzionale): se configurato
usa-file-modello=S, carica da file esterno il template per le etichette (via COGPA3 e COPIAF). - Estrazione dati: in base a
tm-estitera su merci, documenti, ordini, consegne o matricole. - Stampa etichette: per ogni merce trovata esegue la procedura
s-stampache delega as-stampa-eti, la quale seleziona il percorso stampante o il percorso template. - Chiusura: COGS54 post-stampa, chiusura file, uscita.
Tipi di stampante (tm-cfg-prn)¶
| Codice | Protocollo | Routine di stampa | Note |
|---|---|---|---|
| A | Laser PCL / Bull | s1-type-a |
Comandi ESC PCL, bar code EAN via sequenze binarie |
| B | Zebra ZPL | s2-type-b |
ZPL2 (^XA...^XZ); variante A=etichetta grande, B=piccola con/senza matricola |
| C | KYOCERA Prescribe | s3-type-c |
Comandi PRESCRIBE (BARC, TEXT, MAP, PAGE); gestione multi-etichette per foglio A4 |
| D | Eltron/Zebra EPL2 | s4-type-d |
EPL2 (B..., A..., P...); varianti per-azienda (es. Ferranti, Eurosystem, Foti, Blutekna, Torricelli, MDA) |
| E | OPOS / Clever-Alfa TSPL | s5-type-e |
Linguaggio TSPL (BARCODE, TEXT, PRINT) |
Modalità di estrazione (tm-est)¶
| Valore | Descrizione | Routine | File letti |
|---|---|---|---|
| M | Tutte le merci (intervallo gru/sot/cod) | a-merci via COGU16W |
COGMERCI |
| X | Singola merce (passata da chiamante) | singola-merce |
COGMERCI |
| V | Elenco merci selezionate manualmente | e-merci |
COGMERCI |
| D | Da documento di magazzino (bolla) | b-docum |
COGMOMAG, COGMERCI, COGMATRI |
| S | Da intervallo matricole | d-matric |
COGMATRI, COGMERCI |
| O | Da ordine o da consegna | c-ordine → c1-ordine/c2-cons |
COGRIGOR/COGCONOR, COGMERCI |
Parametri di configurazione (gruppo PRNTCOGP20)¶
Letti tramite RNEWCONF nella procedura x99-src-cfg. Le chiavi sono in parte in euta-c017-* (tabella COGTABEL tipo C, codice 017) e in parte in altri gruppi.
| Chiave configurazione | Campo interno | Descrizione |
|---|---|---|
PRNTCOGP20 / euta-c017-prn |
tm-cfg-prn |
Tipo stampante: A, B, C, D, E |
PRNTCOGP20 / euta-c017-bar |
tm-cfg-bar |
Tipo bar code stampato (es. A=EAN grande, B=piccolo) |
PRNTCOGP20 / euta-c017-n-col |
tm-cfg-n-col |
Numero colonne etichette per riga (1 o 2, usato su Zebra) |
PRNTCOGP20 / euta-c017-pre |
tm-cfg-pre |
Stampa prezzo: S=sì con IVA, I=codice interno, A=codice avanzato, F=codice fornitore |
PRNTCOGP20 / euta-c017-lis2 |
tm-cfg-lis |
Numero listino da usare per il prezzo |
PRNTCOGP20 / euta-c017-frm |
tm-cfg-frm |
Formato foglio KYOCERA: A, B, C (determina dimensioni e posizionamento etichette) |
PRNTCOGP20 / euta-c017-ric-cmf |
tm-cfg-ric-cmf |
Se S, ricerca codice merce fornitore e lo pre-imposta sulla maschera |
PRNTCOGP20 / euta-c017-una-copia |
tm-cfg-una-copia |
Se S, forza sempre 1 copia indipendentemente dalla quantità documento |
PRNTCOGP20 / euta-c017-solo-mat |
tm-cfg-solo-mat |
Se S, estrae solo merci con gestione matricole (mer-fl-sn ≠ N) |
PRNTCOGP20 / euta-c017-forn-p |
tm-cfg-forn-p |
Se P, usa il codice del fornitore preferenziale sulla merce |
PRNTCOGP20 / nome-file-logo |
tm-cfg-nome-file-logo |
Nome file logo da includere nell'etichetta (EPL2/MDA) |
locazioni / uso-box |
tm-cfg-uso-box |
Se M, filtra le locazioni in base al magazzino della postazione |
prntcogp20 / usa-file-modello |
tm-cfg-usa-file-modello |
Se S, usa un file modello esterno con tag invece dei percorsi hardcoded |
Tag del modello (quando usa-file-modello=S)¶
Il file modello è un file testo con tag sostituiti a runtime dalla procedura s-stampa-fill-valori tramite GESSTR.
| Tag | Contenuto |
|---|---|
<MER-BARCODE> |
Serial number (fornitore o interno) oppure EAN |
<MER-SN> |
Serial number fornitore (w-snf) |
<MER-MAT> |
Matricola interna (w-mtr o w-mtr2) |
<MER-EAN> |
Codice EAN a 13 cifre |
<MER-MI> |
Codice merce interno (gru/sot/cod) |
<MER-CMA> |
Codice merce avanzato (COGRACMC) |
<MER-CMF> |
Codice merce fornitore (primo fornitore da COGMERFO) |
<MER-DES> |
Descrizione merce completa |
<MER-DES1> |
Prima parte descrizione (max 26 caratteri) |
<MER-DES2> |
Seconda parte descrizione (max 26 caratteri) |
<MER-DAG> |
Descrizione aggiuntiva merce completa (256 car.) |
<MER-DAG1> |
Prima riga descrizione aggiuntiva (40 car.) |
<MER-DAG2> |
Seconda riga descrizione aggiuntiva (40 car.) |
<MER-DAG1-nnn> |
Prima riga descrizione aggiuntiva a lunghezza variabile (nnn = numero caratteri, max 75) |
<MER-DAG2-nnn> |
Seconda riga descrizione aggiuntiva a lunghezza variabile |
<MER-DAG3-nnn> |
Terza riga descrizione aggiuntiva a lunghezza variabile |
<MER-BOX> |
Box locazione magazzino |
<MER-CORSIA> |
Corsia locazione magazzino |
<MER-COLONNA> |
Colonna locazione magazzino |
<MER-PIANO> |
Piano locazione magazzino |
<LIST-CFG-SI-IVA> |
Prezzo di listino con IVA inclusa |
<LIST-CFG-NO-IVA> |
Prezzo di listino senza IVA |
<N-COPIE> |
Numero copie (se presente nel modello, disabilita il loop copie) |
Il programma gestisce due modelli distinti:
- Modello per merci senza serial number (tipo P20MER, cercato via COGPA3 → COGMDSTS)
- Modello per merci con serial number (tipo P20SN, cercato via COGPA3 → COGMDSTS)
File e tabelle acceduti¶
| File | Alias FD | Modalità | Uso |
|---|---|---|---|
| COGTABEL | cogtabel | Lettura | Tabelle di sistema (tipo C cod.017 per configurazione, tipo 67 per aliquote IVA) |
| COGMERCI | cogmerci | Lettura | Anagrafica merci (descrizione, EAN, flag serial, flag etichetta, confezione) |
| COGMAGAZ | cogmagaz | Lettura | Anagrafica magazzini (validazione magazzino documento) |
| COGTESBO | cogtesbo | Lettura | Testata documenti di magazzino (validazione doc.) |
| COGMOMAG | cogmomag | Lettura | Righe movimenti magazzino (estrazione per documento) |
| COGTESOR | cogtesor | Lettura | Testata ordini (validazione ordine) |
| COGRIGOR | cogrigor | Lettura | Righe ordini (estrazione per ordine) |
| COGLGMER | coglgmer | Lettura | Locazioni magazzino merce (corsia/colonna/piano/box) |
| COGMERFO | cogmerfo | Lettura | Fornitori della merce (codice merce fornitore) |
| COGDESAG | cogdesag | Lettura | Descrizioni aggiuntive merce |
| COGCONOR | cogconor | Lettura | Righe consegne ordini (estrazione per consegna) |
| COGCNDCF | cogcndcf | Lettura | Condizioni cliente/fornitore (fornitore preferenziale) |
| COGMATRI | cogmatri | Lettura | Matricole/serial number (estrazione per matricola o da documento) |
| COGRACMC | cogracmc | Lettura | Codici merce avanzati/alternativi |
| COGMDSTS | cogmdsts | Lettura/Scrittura | Modelli di stampa (ricerca modelli P20MER e P20SN) |
| PRNTPOST | prntpost | Lettura | Postazioni stampa (lettura magazzino postazione) |
| FEURTAB | feurtab | Lettura | Tabella generica Eurosystem |
| FLSTA | flsta | Output | File di output stampante (file binario sequenziale) |
| PCLINP | pclinp | Input | File temporaneo per caricamento modello da disco |
Programmi CALL¶
| Programma | Scopo |
|---|---|
RNEWCONF |
Lettura configurazione da COGCNF (gruppo PRNTCOGP20) |
COGS54 |
Gestione selezione stampante (prima e dopo la stampa) |
COGS01 |
Lettura prezzo da listino |
COGU05 |
Selezione multipla merci (modalità V) |
COGU10W |
Editing numeri/importi (prezzi) |
COGU16W |
Ricerca/navigazione merci con ordinamento |
GESSTR |
Manipolazione stringhe: REPLACE (tag), SCOMPONI-NOTE, COMPONI-NOTE, FIND |
COGPA3 |
Ricerca modello di stampa (tipi P20MER e P20SN) in COGMDSTS |
COPIAF |
Copia file modello dal client al server (tmp) |
PUTLOGO |
Caricamento logo su stampante EPL2 |
WIN028.COB |
Selezione consegna da ordine |
C$JUSTIFY |
Giustificazione stringa a sinistra |
C$FILEINFO |
Lettura dimensione file per caricamento modello |
COGS60W |
Gestione combo-box (bar code, tipo estrazione, ordinamento, tipo ordine) |
Copybook inclusi¶
FILE-CONTROL¶
| Copybook | Contenuto |
|---|---|
feurtab.fd |
SELECT per FEURTAB |
cogp20.select |
SELECT per tutti i file dati (generato da Screen Designer) |
flsta.fd |
SELECT per FLSTA (stampante) |
FILE SECTION / FD¶
| Copybook | Contenuto |
|---|---|
cogfiles.cpy |
Record FD per FEURTAB |
cogp20.fd |
FD per tutti i file dati (generato da Screen Designer) |
flsta.cpy |
Record FD per FLSTA |
WORKING-STORAGE¶
| Copybook | Contenuto |
|---|---|
cogp20.wrk |
Working storage generata da Screen Designer |
k-personal.cpy |
Costanti identificazione azienda (az-personal) |
k-u10.cpy |
Costanti per COGU10W |
wstato.cpy |
Variabili stato I/O |
wgrave.cpy |
Gestione errori gravi |
wopenf.cpy |
Gestione apertura file |
wnscr.cpy |
Navigazione screen |
utillogo.cpy |
Struttura per PUTLOGO |
utils21.cpy |
Struttura util-s21 |
utils22.cpy |
Struttura util-s22 |
utils54.cpy |
Struttura util-s54 (COGS54) |
utilu05.cpy |
Struttura util-u05 (COGU05) |
UTILU10.CPY |
Struttura util-u10 (COGU10W) |
UTILU16.CPY |
Struttura util-u16 (COGU16W) |
UTILS50.CPY |
Struttura util-s50 |
utils68.cpy |
Struttura util-s68 (ricerca merce) |
utilw28.cpy |
Struttura util-w28 (WIN028.COB) |
utilw36.cpy |
Struttura util-w36 (calendario magazzino) |
utilcogpa3.cpy |
Struttura util-cogpa3 (COGPA3) |
l-copiaf.cpy |
Struttura link-copiaf (COPIAF) |
utilgesstr.cpy |
Struttura util-gesstr (GESSTR) |
utils52.cpy |
Struttura util-s52 (anno/calendario) |
cogazien.cpy |
Dati azienda |
utilncnf.cpy |
Struttura util-ncnf (RNEWCONF) |
LINKAGE SECTION¶
| Copybook | Contenuto |
|---|---|
wcont.cpy |
Area stringhe condivisa |
utilp20.cpy |
Parametri in ingresso (p20-merce, p20-mtr-da/a, p20-in-call, p20-in-caller, p20-documento) |
utils01.cpy |
Struttura util-s01 (COGS01) |
u-copiaf.cpy |
Struttura chiamante per COPIAF |
wcont1.cpy |
Area condivisa estesa |
SCREEN SECTION¶
| Copybook | Contenuto |
|---|---|
cogp20-01.scr |
Definizione maschera principale |
PROCEDURE DIVISION (inline)¶
| Copybook | Contenuto |
|---|---|
cogp20.decla |
Dichiarativi I/O error e USE per FLSTA |
stato.cpy |
Gestione stati file |
stato1.cpy |
Gestione stati file estesa |
grave.cpy |
Errori gravi |
winmsg.cpy |
Messaggi a finestra |
opengen.cpy |
Apertura file generica |
mmmask.cpy |
Dimensioni maschera |
SENDW36.CPY |
Invio W36 (calendario magazzino) |
cogp20.prc |
Procedure generate da Screen Designer (combo, validazioni campo) |
GetDCont.cpy |
Lettura divisa contabile |
cogmatri.k03 |
Chiave 3 di COGMATRI (per ricerca per documento+merce) |
cogracmc.k02 |
Chiave 2 di COGRACMC |
Paragrafi principali¶
| Paragrafo | Funzione |
|---|---|
a000 |
Inizializzazione: lettura parametri chiamata, configurazione, apertura file, maschera |
a4 |
Reset maschera per nuovo ciclo di accept |
a-tm-bar ... a-tm-kyo-h-cur |
Accept dei singoli campi della maschera con validazione campo per campo |
a-richiesta-conferma |
Validazione finale di tutti i campi prima della stampa |
a-cogs54 |
Selezione stampante via COGS54; avvia elaborazione quando confermata |
carica-modelli |
Carica in memoria i modelli da file esterno (mer e sn) |
a-merci / a-10-loop |
Iterazione su tutte le merci via COGU16W |
b-docum / b-10-loop |
Iterazione righe documento COGMOMAG |
c-ordine / c1-ordine / c2-cons |
Iterazione righe ordine (COGRIGOR) o righe consegna (COGCONOR) |
d-matric / d-10-loop |
Iterazione matricole COGMATRI con filtro su intervallo e documento |
e-merci |
Iterazione su lista merci selezionate da COGU05 |
singola-merce |
Stampa per singola merce passata dal chiamante |
s-stampa |
Punto di ingresso stampa per singola merce: cerca listino, legge COGMERCI, decide se stampare |
s-stampa-eti |
Dispatcher: percorso modello o percorso stampante (A/B/C/D/E) |
stampa-da-modello-sub |
Per modalità modello: sceglie fra stampa con o senza serial |
stampa-etichetta-modello-sn |
Itera sulle matricole del documento per la merce corrente |
stampa-etichetta-modello-w-copie |
Loop copie: chiama download-buffer |
s-stampa-fill-valori |
Sostituisce tutti i tag nel buffer modello con i valori reali |
s1-type-a |
Stampa su Bull/laser PCL |
s2-type-b |
Stampa su Zebra ZPL (dispatcher A/B) |
s21-tb-a |
Zebra etichetta grande con EAN |
s22-tb-b |
Zebra etichetta piccola (dispatcher con/senza matricola) |
s22-tb-b1-zebra |
Zebra piccola con matricola |
s22-tb-b2-zebra |
Zebra piccola senza matricola (EAN) |
s221-sn / s222-sn |
Lettura serial number da COGMATRI per Zebra |
s3-type-c |
Stampa su KYOCERA Prescribe: gestione griglia multi-etichette |
s4-type-d |
Stampa su Eltron EPL2: dispatcher con/senza matricola e per azienda |
s4-td-d1-epl2 |
EPL2 etichetta con matricola (standard) |
s4-td-d1-epl2-mda / -es / -fo / -ff / -bt / -ti |
Varianti EPL2 per aziende specifiche |
s4-td-d2-epl2 |
EPL2 etichetta senza matricola (EAN) |
s5-type-e |
Stampa su OPOS/Clever-Alfa TSPL |
s31-set-map |
Genera comando MAP per posizionamento KYOCERA |
s32-src-cmf |
Ricerca codice merce fornitore da COGMERFO |
s32-src-cma |
Ricerca codice merce avanzato da COGRACMC |
s32_des_mf |
Ricerca descrizione merce fornitore da COGMERFO |
s34-dividi-descr |
Divide descrizione in due righe rispettando le parole |
search-dag-merce |
Legge descrizioni aggiuntive da COGDESAG e le compone in stringa unica |
search-prima-locazione |
Legge prima locazione magazzino da COGLGMER |
x1-set-printer / x11-set-a / x12-set-b / x13-set-c |
Invio sequenze inizializzazione stampante |
x2-end-print / x21-end-a ... x24-end-d |
Invio sequenze chiusura stampante |
x6-conv-asc |
Conversione BCD→ASCII per comandi Bull PCL |
x7-acc-start |
Inizializza posizione di partenza KYOCERA da maschera |
x99-src-cfg |
Lettura configurazione da RNEWCONF |
download-buffer |
Scarica il buffer modello sulla stampante a blocchi di 2 byte |
load-modello-into-buffer / load-file-from-disk |
Carica file modello dal disco nel buffer in-memory |
call-cogpa3 |
Chiama COGPA3 per ottenere nome file modello (P20MER e P20SN) |
m-cerca-cogmdsts |
Crea record in COGMDSTS se non esiste il modello |
m-cerca-mer-dagnnn |
Cerca nel modello la presenza di tag <MER-DAG1-nnn> per descrizioni a lunghezza variabile |
fine / z-chiudi |
Chiusura file, cancel moduli, uscita programma |
Regole di business¶
- Selezione etichetta con bar code: la merce viene stampata solo se
tm-bar = 'T'(forza sempre) oppure semer-fl-bar = 'S'(abilitata a livello merce). - Merci con etichetta a confezione: se
mer-fl-eti = 'C', il numero di copie è calcolato comeQTA / MER-CONFEZIONE(arrotondato per eccesso). - Esclusione merci senza serial: se
tm-cfg-solo-mat = 'S', vengono saltate le merci conmer-fl-sn = 'N'. - Esclusione serial da fornitore: per l'estrazione da documento, se
mer-fl-sn = 'T'il serial number viene stampato dal fornitore; il campo viene comunque incluso se esplicitamente richiesto dalla modalità Matricole (S). - Una sola copia: se
tm-cfg-una-copia = 'S', il numero copie viene forzato a 1 indipendentemente dalla quantità del documento/ordine. - Bar code con prezzo: per KYOCERA e EPL2/MDA, se
mer-fl-iq = 'I'e il campo EAN 7-12 è zero, vengono calcolati automaticamente i digit del prezzo nel codice EAN e il check digit. - Fornitore preferenziale: se
tm-cfg-forn-p = 'P', il codice merce fornitore usato è quello del fornitore marcato come preferenziale in COGCNDCF. - Modalità ordine: se l'ordine ha
tor-valuni = 'C', non vengono cercate consegne associate; altrimenti viene mostrata la popup WIN028.COB per la selezione della consegna. - Modello esterno: quando
tm-cfg-usa-file-modello = 'S', l'output verso la stampante è in formato binario (record 2 byte); altrimenti testo normale (78 caratteri). Il file modello viene copiato dal client al tmp server via COPIAF prima di essere caricato in memoria. - Locazione per magazzino: se
tm-cfg-uso-box = 'M', la locazione dell'etichetta mostra solo quella relativa al magazzino della postazione operatore (letto da PRNTPOST). - Chiamata esterna: se il programma riceve
p20-in-call = 'COGP20-CALLED', imposta automaticamente i parametri in base al chiamante (COGM85=estrazione da matricola entrata, COGO55=da ordine, COGO16=da consegna, COGV14=da documento, COGV94=da matricola uscita, COGV06NO=singola merce) senza mostrare i campi corrispondenti.