Importazione/Esportazione anagrafiche merci (IMPMER)¶
Identificazione¶
- Programma: IMPMER
- Autore: Andrea Parmeggiani - Eurosystem
- Area: Anagrafica / Magazzino
- Descrizione: Importazione ed esportazione massiva di anagrafiche articoli/merci da/verso file Excel/CSV
Funzionalità principale¶
Il programma IMPMER gestisce il caricamento e l'estrazione massiva di anagrafiche merci, permettendo di: - Importare articoli da file Excel/CSV con aggiornamento/creazione automatica - Esportare articoli verso file Excel/CSV per modifica esterna - Gestire fino a 121 campi diversi dell'anagrafica merce - Operare in modalità interattiva o batch
Modalità di utilizzo¶
1. Modalità interattiva¶
Lancio da menu con interfaccia grafica: - Selezione operazione (Import/Export) - Scelta file sorgente/destinazione - Configurazione parametri - Visualizzazione progressivo elaborazione - Log errori/segnalazioni
2. Modalità batch¶
Chiamata da altro programma con parametri:
move "IMPMER-CALLED" to impmer-called
move "E" to impmer-operazione *> E=Export, I=Import
move "M" to impmer-classe *> Classe merce
move "S" to impmer-batch-mode
move "model.xlsx" to impmer-modello
move "output.xlsx" to impmer-output
call "IMPMER" using stringhe util-impmer
Parametri di chiamata¶
| Parametro | Valori | Descrizione |
|---|---|---|
impmer-operazione |
"I" / "E" | Importazione o Esportazione |
impmer-classe |
"M", "S", "A", ecc. | Classe merce da elaborare |
impmer-solo-esistenti |
"S" / "N" | Solo merci già esistenti |
impmer-ordinamento |
"C" / altro | Ordinamento merci |
impmer-tutti-i-dati |
"S" / "N" | Esporta tutti i campi |
impmer-solo-cma-vuoti |
"S" / "N" | Solo tabelle CMA vuote |
impmer-data-ins-da |
AAAAMMGG | Filtro data inserimento (da) |
impmer-data-ins-a |
AAAAMMGG | Filtro data inserimento (a) |
impmer-modello |
path file | File modello da usare |
impmer-output |
path file | File output da generare |
impmer-batch-mode |
"S" / "N" | Modalità batch (no UI) |
Flusso operativo¶
Importazione (I)¶
1. Preparazione file¶
- Copia file in directory temporanea (
ext-tmp-dir) - Se formato Excel (
.xls,.xlsx): - Conversione in TXT tramite programma
ESTRXLS - Estrazione dati con delimitatore configurato
- Creazione file log risultati (
impmer.txt)
2. Caricamento definizione campi¶
Paragrafo: a1-carica-campi
- Legge prima riga: tipi campo (S=stringa, N=numerico)
- Legge seconda riga: identificatori campo (es. MER-GRU, MER-COD, MER-DESCR)
- Costruisce tabella di mapping campi (tab-campi)
3. Elaborazione righe¶
Paragrafo: b-importa → b-10-loop
Per ogni riga del file:
1. Parsing riga (b1-carica-delimitato):
- Split campi per delimitatore
- Popolamento tab-dati con valori
- Validazione formato
- Aggiornamento anagrafica (
b3-aggiorna): - Ricerca merce esistente (se richiesto)
- Validazione campi obbligatori
-
Scrittura/aggiornamento record in:
- COGMERCI (anagrafica principale)
- COGMERAP (dati acquisti)
- COGMERA2 (dati secondari)
- COGMERA3 (dati terziari)
- COGMERA4 (dati aggiuntivi: strati pallet, pallet, tempi consegna, shelf life)
- CAPMEACC (dati doganali - se consorzi)
- CAPMEADR (dati ADR - se consorzi)
-
Contatori:
- Righe lette (
tm-r-l) - Righe valide (
tm-r-v) - Aggiornamenti/inserimenti
4. Modalità test¶
Se tm-test = "S": elabora file senza salvare (dry-run)
Esportazione (E)¶
1. Preparazione file output¶
Paragrafo: c-esporta
- Crea file CSV temporaneo (merci.csv)
- Scrive intestazioni:
- Riga 1: Tipi campo (S/N)
- Riga 2: ID campi (MER-GRU, MER-COD, ecc.)
2. Estrazione merci¶
Paragrafo: c-10-loop
Per ogni merce (usando COGU16W per navigazione):
1. Lettura record correlati:
- COGMERCI (mer-rec) - dati base
- COGMERAP (map-rec) - dati acquisti
- COGMERA2 (ma2-rec) - dati secondari
- COGMERA3 (ma3-rec) - dati terziari
- COGMERA4 (ma4-rec) - dati aggiuntivi (strati pallet, pallet, tempi consegna, shelf life)
- COGMERLF (mlf-rec) - listini fornitori
- Filtri applicati:
- Classe merce (
tm-classe) - Periodo inserimento (
tm-data-ins-i/tm-data-ins-a) -
Solo tabelle CMA vuote (se richiesto)
-
Formattazione campi (
c1-formatta-campo): - Conversione numeri con decimali
- Gestione date in formato leggibile
- Escape caratteri speciali
-
Padding/trim spazi
-
Scrittura riga CSV:
- Campi separati da delimitatore
- Quote per campi con caratteri speciali
3. Modalità "tutti i dati"¶
Se tm-esp-tutto = "S":
- Esporta anche tabelle collegate (CMA, info CRM, ecc.)
- Paragrafo: a2-carica-campi → a2-esporta-tabelle-cma
Campi gestiti (117 totali)¶
Dati identificativi¶
- MER-GRU: Gruppo merce
- MER-SOT: Sottogruppo
- MER-COD: Codice articolo
- MER-DESCR: Descrizione
- MER-DESC-SHORT: Descrizione breve
- MER-CMA: Codice CMA
- MER-CLASSE: Classe merce
- MER-STATO: Stato articolo
Unità di misura¶
- MER-UM: Unità misura principale
- MER-UM-PROD: UM produzione
- MER-UM-PROD-FATT: Fattore conversione UM prod
- MER-UM-PROD-COEFF: Coefficiente UM prod
- MER-UM-ORD-INT: UM ordine interno
- MER-UM-ORD-INT-FATT: Fattore UM ordine
- MER-UM-ORD-INT-COEFF: Coefficiente UM ordine
Dati fiscali/contabili¶
- MER-REP: Reparto
- MER-CODIVA: Codice IVA vendita
- MER-ART-ESE: Articolo esenzione IVA
- MER-IVA-ACQUISTO: Codice IVA acquisto
- MER-CODCONTR: Codice contropartita
- MER-CONTR-FOR: Contropartita fornitore
- MER-CC-VENDITE: Centro costo vendite
- MER-CC-ACQUISTI: Centro costo acquisti
Prezzi e listini¶
- MER-PMA: Prezzo medio acquisto
- MER-PREZACQ: Prezzo acquisto
- MER-LISTINO: Listino vendita
- MER-LIS-PAR: Listino particolare
- MER-PRE-IMP: Prezzo importazione
- MER-TIP-PRE: Tipo prezzo
Ubicazione magazzino¶
- MER-UBICAZIONE: Ubicazione principale (stringa unica)
- MER-UBICAZIONE2: Ubicazione secondaria
- MER-UBI1-BOX/CORSIA/COLONNA/PIANO: Ubicazione 1 (campi separati)
- MER-UBI2-BOX/CORSIA/COLONNA/PIANO: Ubicazione 2 (campi separati)
- MER-MODULA: Modula (automazione)
- MA3-MODULA-SCOMPARTO: Scomparto Modula
- MA3-MODULA-QL: Quantità limite Modula
Gestione lotti¶
- MER-GES-LOTTI: Gestione lotti (S/N)
- MER-LOTTO-OBBL: Lotto obbligatorio
- MER-DATE-LOTTI: Gestione date lotti
- MER-GES-LOTTI-CAP: Gestione lotti CAP
Dati fisici¶
- MER-PESO: Peso unitario
- MER-VOLUME: Volume
- MER-CONFEZIONE: Confezione
- MER-EAN: Codice EAN/Barcode
Sconti e provvigioni¶
- MER-FL-PROVV: Flag provvigione
- MER-FL-SCONTI: Flag gestione sconti
- MER-SCO-MIN: Sconto minimo
- MER-SCO-MAX: Sconto massimo
Magazzino/Logistica¶
- MER-CONSUMO: Consumo medio
- MER-SCORTA: Scorta minima
- MER-QTA-MIN-ORD: Quantità minima ordine
- MER-TEMPO-APP: Tempo approvvigionamento
- MER-TIPO-RIORDINO: Tipo riordino
- MER-SERVIZIO: Articolo di servizio
Produzione/Distinta base¶
- MER-PADRE: Articolo padre
- MER-TIPO-DISTINTA: Tipo distinta base
- MER-COE-LAV: Coefficiente lavorazione
- MA3-TEMPO-INST: Tempo installazione
- MER-FL-CROCE-DENTI: Flag croce/denti
Dati commerciali¶
- MER-MADE-IN: Made in (paese origine)
- MER-MADE-IN-PREC: Made in precisazione
- MER-MADE-IN-PROVV: Made in provvisorio
- MER-NOM-DOGANA: Nomenclatura doganale
- MER-FL-DICH-CONF: Flag dichiarazione conformità
- MER-MESI-GARANZIA: Mesi garanzia
Dati statistici/analitici¶
- MER-TIPO-STAT: Tipo statistico
- MER-RAGR-1/2/3: Raggruppamenti analitici
- MER-GRUPPO-AZIONI: Gruppo azioni
- MER-SOTTOGRU: Sottogruppo statistico
- RIC-CATEGORIA: Categoria ricambi
- RIC-GRUPPOSCO: Gruppo sconto ricambi
- RIC-FAMIGLIA: Famiglia ricambi
Dati tecnici¶
- MER-NOTE-TECNICHE: Note tecniche
- MER-DES-PROG: Descrizione progressiva
- MER-NOTE-PROG: Note progressivo
- MER-FL-SU-NOTE-PROG: Flag su note progressivo
- MER-AMTR-TIP: Tipo attrezzatura
- MER-AMTR-MARCA: Marca attrezzatura
- MER-AMTR-MODELLO: Modello attrezzatura
Imballo¶
- MER-IMB-GRU: Gruppo imballo
- MER-IMB-SOT: Sottogruppo imballo
- MER-IMB-COD: Codice imballo
Flags operativi¶
- MER-FL-ETI: Flag etichetta
- MER-FL-GIA: Flag giacenza
- MER-FL-STATI: Flag stati
- MER-FL-SN: Flag serial number
- MA3-SN-CARICO: SN a carico
- MER-FL-SN-ASN: Flag SN ASN
- MER-FL-SCA-PRO: Flag scarico produzione
- MER-FL-MANODOPERA: Flag manodopera
- MA3-TRASPORTO-DDT: Trasporto su DDT
- MA3-PREZZO-TRASPORTO: Prezzo trasporto
Dati aggiuntivi (COGMERA4)¶
- MER-STRATI-PALLET: Strati per pallet
- MER-PALLET: Numero pallet
- MER-TEMPI-CONS: Tempi di consegna
- MER-SELF-LIFE: Shelf life (durata a scaffale)
Dati doganali/ADR (se consorzi)¶
- ACC-CPA: CPA (Classificazione Prodotti Attività)
- ACC-NCOMB: Nomenclatura combinata
- ACC-TARIC: Codice TARIC
- ACC-CADD: Codici addizionali
- MER-ADR-NUSL: Numero UN/SL (ADR)
- MER-PATENTINO: Patentino richiesto
Date e audit¶
- MER-DATA-INI: Data inizio validità
- MER-DATA-FIN: Data fine validità
- MER-DATA-AGG: Data ultimo aggiornamento
Info aggiuntive (tabelle collegate)¶
- MER-I-xxx: Info CRM (campi multipli)
- MER-A-xxx: Info CMA (campi multipli)
- MER-TRGR-xxx: Info trigger (campi multipli)
- MER-COD-A62: Codice A62
- MER-ESA-OBSOLETA: Esagono (obsoleto)
- MER-DESAG: Descrizione aggiuntiva
- MER-STAMPO-UBI: Stampa ubicazione
- MER-TIP-PROP: Tipo proposta
File coinvolti¶
| File | Prefisso | Descrizione | Operazioni |
|---|---|---|---|
| COGMERCI | mer- | Anagrafica merci principale | Read/Write/Rewrite |
| COGMERAP | map- | Dati acquisti merci | Read/Write/Rewrite |
| COGMERA2 | ma2- | Dati secondari merci | Read/Write/Rewrite |
| COGMERA3 | ma3- | Dati terziari merci | Read/Write/Rewrite |
| COGMERA4 | ma4- | Dati aggiuntivi merci (strati pallet, pallet, tempi consegna, shelf life) | Read/Write/Rewrite |
| COGMERLF | mlf- | Listini fornitori | Read |
| CAPMEACC | - | Dati doganali (consorzi) | Read/Write |
| CAPMEADR | - | Dati ADR (consorzi) | Read/Write |
| COGEXPRT | exp- | File export (temp) | Write |
| COGSEQUE | seq- | File import (temp) | Read |
| COGRISUL | ris- | File log risultati | Write |
| COGTABEL | euta- | Tabelle sistema | Read |
Costanti e limiti¶
| Costante | Valore | Descrizione |
|---|---|---|
| k-max-campi | 500 | Max campi gestibili |
| k-len-record | 8000 | Lunghezza max record |
| k-len-ris-rec | 256 | Lunghezza record log |
| k-campo-svuotato | "#@#" | Valore campo vuoto |
Configurazioni¶
Delimitatore¶
Configurabile tramite tm-cfg-delimiter:
- Default: ";" per CSV
- Tab (0x09) per file Excel
Supporto thin client¶
Se ext-thin-client = "S":
- File copiati da/verso client remoto
- Uso prefisso @[DISPLAY]: per path client
Debug¶
Se w-tm-cfg-debug = "S":
- Logging dettagliato operazioni
- File log: geslprc-msg
Programmi chiamati¶
| Programma | Funzione |
|---|---|
| ESTRXLS | Conversione Excel → TXT |
| COGU16W | Navigazione merci sequenziale |
| CRMS06 | Gestione info CRM |
| CRMS09 | Gestione info CRM aggiuntive |
| COGL61 | Gestione listini |
| COGS01F | Gestione fornitori |
| COGS37B | Gestione articoli speciali |
| OPENFILE | Apertura file esterno |
Gestione errori¶
File log (impmer.txt)¶
Contiene segnalazioni per: - Righe con formato errato - Campi obbligatori mancanti - Codici merci non trovati (se solo-esistenti) - Errori di validazione - Vincoli referenziali non rispettati
Contatori finali¶
Al termine elaborazione:
- tm-r-l: Righe lette totali
- tm-r-v: Righe valide elaborate
- tm-errori: Flag presenza errori (S/N)
Visualizzazione log¶
Se errori presenti:
- Modalità interattiva: propone apertura file log
- Modalità batch: restituisce path in impmer-o-msg
Casi d'uso tipici¶
1. Aggiornamento prezzi massivo¶
- Esportare articoli attuali (E)
- Modificare campo MER-LISTINO in Excel
- Importare file modificato (I) con solo-esistenti=S
2. Creazione nuove merci¶
- Preparare file Excel con colonne: MER-GRU, MER-SOT, MER-COD, MER-DESCR (minimo)
- Aggiungere altri campi necessari
- Importare con solo-esistenti=N
3. Verifica dati (dry-run)¶
- Impostare tm-test = "S"
- Eseguire importazione
- Verificare log errori senza modificare DB
4. Estrazione batch programmata¶
initialize util-impmer
move "IMPMER-CALLED" to impmer-called
move "E" to impmer-operazione
move "M" to impmer-classe
move "C" to impmer-ordinamento
move "S" to impmer-batch-mode
move "S" to impmer-tutti-i-dati
move "/tmp/export.xlsx" to impmer-output
call "IMPMER" using stringhe util-impmer
if impmer-esito = "S"
*> Elaborazione OK
end-if
Logica campi obbligatori¶
I campi obbligatori variano in base all'operazione e alla configurazione.
Importazione con inserimento nuovi articoli¶
Obbligatori: MER-GRU, MER-SOT, MER-COD, MER-DESCR, MER-CLASSE. In alternativa al codice interno, e' possibile usare MER-CMA se la gestione codice merce avanzato e' attiva (az-mer-ava = "S" o "C").
Se il progressivo CMA automatico non e' attivo (tm-cfg-cma-prog-aut <> "S"), il CMA deve essere specificato per i nuovi articoli.
Importazione solo esistenti¶
Obbligatorio: MER-GRU/SOT/COD oppure MER-CMA per identificare l'articolo.
Campi co-dipendenti¶
MER-UM-PROD-FATT+MER-UM-PROD-COEFFrichiedonoMER-UM-PROD(tutti e tre insieme)MER-UM-ORD-INT-FATT+MER-UM-ORD-INT-COEFFrichiedonoMER-UM-ORD-INT(tutti e tre insieme)
Determinazione nuovo vs esistente¶
La sequenza di ricerca per determinare se un articolo e' nuovo o esistente:
- Ricerca per codice interno (
MER-GRU/SOT/COD): se trovato in COGMERCI → aggiornamento - Se non trovato e solo-esistenti attivo: errore "Solo aggiornamento - merce inesistente ignorata"
- Ricerca per CMA (
MER-CMAtramite COGRACMC): - Se trovato: usa il codice interno corrispondente → aggiornamento
- Se non trovato e
tm-cfg-cma-prog-aut = "S": assegna automaticamente il primo codice interno libero → inserimento - Se non trovato e CMA manuale: usa gruppo/sottogruppo/codice specificati → inserimento
Warning articolo cancellato¶
Quando un articolo aggiornato risulta con MER-VAL = "C" (cancellato), il programma registra un warning nel log: "Merce {codice} aggiornata con stato cancellato". Il warning e' informativo: l'aggiornamento procede comunque. Questo avvisa l'operatore che sta modificando un articolo gia' segnalato come cancellato.
Note tecniche¶
Parsing file delimitato¶
Paragrafo: b1-carica-delimitato
- Gestione quote per campi con delimitatore interno
- Escape caratteri speciali
- Gestione newline (CR/LF)
Formattazione numeri¶
- Numeri interi: senza decimali
- Importi: 6 decimali (es. prezzi)
- Percentuali: 2 decimali
- Quantità: 3 decimali
Conversione Excel¶
Il programma ESTRXLS estrae:
- Primo foglio del workbook
- Tutte le righe con dati
- Conversione formule → valori
- Output: file TXT delimitato
Gestione consorzi¶
Se az-consorzi = "S":
- Apertura file aggiuntivi: CAPTABEL, CAPMEACC, CAPMEADR
- Gestione campi doganali: ACC-CPA, ACC-TARIC, ecc.
- Dati ADR per trasporto merci pericolose
Manutenzione¶
Aggiunta nuovo campo¶
Per aggiungere un nuovo campo all'import/export:
1. Definire costante k-mer-xxx in WORKING-STORAGE
2. Aggiungere gestione in a11-carica-inf (import)
3. Aggiungere estrazione in c1-formatta-campo (export)
4. Documentare tipo campo (S/N)
Copybook utilizzati¶
impmer.select: File controlimpmer.fd: File descriptionsimpmer.wrk: Working storageimpmer.decla: Declarativesk-personal.cpy: Personalizzazionik-tipi-cogtabel.cpy: Tipi tabellecostanti-clipot.cpy: Costanti cliente potenziale
Riferimenti nel codice¶
Paragrafi principali¶
- Riga 691:
apri- Inizializzazione - Riga 826:
a4- Entry point principale - Riga 1644:
x-esecuzione- Avvio elaborazione - Riga 1818:
a1-carica-campi- Carica definizione campi - Riga 3113:
a2-carica-campi- Carica campi export completo - Riga 3719:
b-importa- Loop importazione - Riga 3824:
b1-carica-delimitato- Parsing CSV - Riga 9357:
c-esporta- Loop esportazione
Costanti campi¶
- Riga 77-199: Definizione 117 ID campi