Vai al contenuto

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

  1. Copia file in directory temporanea (ext-tmp-dir)
  2. Se formato Excel (.xls, .xlsx):
  3. Conversione in TXT tramite programma ESTRXLS
  4. Estrazione dati con delimitatore configurato
  5. 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-importab-10-loop

Per ogni riga del file: 1. Parsing riga (b1-carica-delimitato): - Split campi per delimitatore - Popolamento tab-dati con valori - Validazione formato

  1. Aggiornamento anagrafica (b3-aggiorna):
  2. Ricerca merce esistente (se richiesto)
  3. Validazione campi obbligatori
  4. 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)
  5. Contatori:

  6. Righe lette (tm-r-l)
  7. Righe valide (tm-r-v)
  8. 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

  1. Filtri applicati:
  2. Classe merce (tm-classe)
  3. Periodo inserimento (tm-data-ins-i / tm-data-ins-a)
  4. Solo tabelle CMA vuote (se richiesto)

  5. Formattazione campi (c1-formatta-campo):

  6. Conversione numeri con decimali
  7. Gestione date in formato leggibile
  8. Escape caratteri speciali
  9. Padding/trim spazi

  10. Scrittura riga CSV:

  11. Campi separati da delimitatore
  12. 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-campia2-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

  1. Esportare articoli attuali (E)
  2. Modificare campo MER-LISTINO in Excel
  3. Importare file modificato (I) con solo-esistenti=S

2. Creazione nuove merci

  1. Preparare file Excel con colonne: MER-GRU, MER-SOT, MER-COD, MER-DESCR (minimo)
  2. Aggiungere altri campi necessari
  3. Importare con solo-esistenti=N

3. Verifica dati (dry-run)

  1. Impostare tm-test = "S"
  2. Eseguire importazione
  3. 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-COEFF richiedono MER-UM-PROD (tutti e tre insieme)
  • MER-UM-ORD-INT-FATT + MER-UM-ORD-INT-COEFF richiedono MER-UM-ORD-INT (tutti e tre insieme)

Determinazione nuovo vs esistente

La sequenza di ricerca per determinare se un articolo e' nuovo o esistente:

  1. Ricerca per codice interno (MER-GRU/SOT/COD): se trovato in COGMERCI → aggiornamento
  2. Se non trovato e solo-esistenti attivo: errore "Solo aggiornamento - merce inesistente ignorata"
  3. Ricerca per CMA (MER-CMA tramite COGRACMC):
  4. Se trovato: usa il codice interno corrispondente → aggiornamento
  5. Se non trovato e tm-cfg-cma-prog-aut = "S": assegna automaticamente il primo codice interno libero → inserimento
  6. 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 control
  • impmer.fd: File descriptions
  • impmer.wrk: Working storage
  • impmer.decla: Declaratives
  • k-personal.cpy: Personalizzazioni
  • k-tipi-cogtabel.cpy: Tipi tabelle
  • costanti-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