Vai al contenuto

IMPMER - Import/export di massa merci

Intestazione

Campo Valore
Programma IMPMER
Titolo Importazione/Esportazione anagrafiche merci
Modulo Sistema
Posizione menu Sistema > Utility > Imp/exp di massa > Magazzino > Merci

Scopo e logica generale

IMPMER e' il programma piu' esteso del framework IMP* (oltre 12.000 righe) e gestisce l'import ed export massivo delle anagrafiche merci/articoli da/verso file CSV o Excel, in modalita' interattiva o batch. Il flusso di business e i tracciati campi sono descritti in dettaglio nella pagina Importazione/Esportazione anagrafiche merci; le criticita' note sono raccolte in impmer-criticita.md.

Il programma opera in due direzioni (campo maschera / parametro impmer-operazione):

  • "I" (Importazione): legge un file delimitato (o Excel convertito), interpreta le colonne in base agli ID campo di intestazione e scrive/aggiorna la merce principale COGMERCI e decine di tabelle collegate.
  • "E" (Esportazione): scorre le merci filtrate per classe/data, produce un file CSV (o TSV per Excel) e lo apre come foglio Excel (GRIDTOXS) oppure lo copia sulla path di output richiesta in batch.

Puo' essere richiamato da altri programmi in modalita' batch passando impmer-called = "IMPMER-CALLED" e i parametri via util-impmer; in tal caso lavora senza interfaccia utente.


Flusso principale

I riferimenti di riga interni evolvono col sorgente; i paragrafi chiave sono i seguenti.

  1. apri (main): z-99-init-program, apertura debug (gesdebug) se configurato, rd-azi, open-files; se azienda a consorzi apre anche CAPTABEL/CAPMEACC/CAPMEADR (dati doganali/ADR). Carica la configurazione (x99-load-config -> RNEWCONF), imposta i tasti funzione (F1/F3/F8/F9), recupera la divisa conto (COGU10W) e carica la lingua.
  2. Modalita' batch: se impmer-called = "IMPMER-CALLED" copia i parametri linkage nell'area di lavoro (w-dc-*) e prosegue senza UI.
  3. Scelta operazione e parametri (a-tm-file, a-tm-test, a-richiesta-conferma): l'utente sceglie il file (F7 = C$OPENSAVEBOX), il flag "elaborazione di prova" (tm-test) e conferma (F3).
  4. x-esecuzione: compone il nome del file di log (impmer.txt in ext-tmp-dir); in import copia il file scelto (C$COPY, con prefisso @[DISPLAY]: per thin client) e, se e' .xls/.xlsx, lo converte in testo con ESTRXLS forzando il delimitatore. Apre il file risultati cogrisul.
  5. Caricamento campi (a1-carica-campi per import/export normale, a2-carica-campi per export "tutti i dati"): legge la prima riga del file, spezza gli ID colonna sul delimitatore (gestendo gli apici) e mappa ciascuno su un indice campo (tc-inf/tc-id-*). Valida i campi obbligatori (gruppo/sottogruppo/codice o CMA, classe, descrizione) in base a operazione e "solo esistenti".
  6. b-importa / b-10-loop: legge riga per riga cogseque; ogni 10 righe aggiorna la UI e chiama C$SLEEP (anti-timeout). Per i record delimitati chiama b1-carica-delimitato.
  7. b1-carica-delimitato: scandisce le colonne isolando ogni valore sul delimitatore, gestisce il marcatore di azzeramento #@# (td-azzera) e il prefisso '!', valida per tipo campo (EVALUATE su tc-inf) e popola td-dato/td-dato-num/td-dato-data.
  8. b3-aggiorna: se non in test, scrive/aggiorna COGMERCI e tutte le tabelle collegate (COGMERAP/COGMERA2/COGMERA3/COGMERA4, listini, note, raggruppamenti, ubicazioni logiche, dati Modula, ecc.).
  9. c-esporta / c-10-loop: crea merci.csv, scrive la riga dei tipi campo (N/S) e la riga degli ID campo (delimitatore ; per CSV, TAB per Excel), poi naviga le merci con COGU16W (Set-Estremi/Leggi), filtra per classe/data, legge i record correlati e formatta ogni campo (c1-formatta-campo) scrivendo su cogexprt.
  10. c-90: chiude cogexprt; se interattivo converte in Excel con GRIDTOXS, se batch copia l'estratto sulla path impmer-output (client o server secondo impmer-output-loc) via COPIAF.
  11. a-fine / fine / z-chiudi: chiude cogrisul; in batch valorizza impmer-esito/impmer-o-msg; in interattivo, se ci sono errori, propone di aprire il log (OPENFILE). Cancella le subroutine dinamiche, chiude i file ed esegue exit program.

File e tabelle acceduti

File sequenziali di lavoro (SELECT interni, dichiarati manualmente nel sorgente):

File Record Modalita' Uso
cogseque seq-rec x(8000) Input Righe da importare (file gia' copiato/convertito)
cogexprt exp-rec (occurs 0-8000) Output File CSV/TSV generato in export
cogrisul ris-rec (occurs 0-256) Output Log risultati impmer.txt
FEURTAB (cogfiles.cpy) - I-O Tabella generalizzata

Tabelle scritte/aggiornate (import): COGMERCI, COGMERAP, COGMERA2, COGMERA3, COGMERA4, COGMERLF, COGMERNT (note), COGMERLK, COGRACMC, COGRACMT, COGANRAG, COGLGMER (ubicazioni logiche), COGDESAG (descrizioni aggiuntive), COGMDLCS (confezione/scomparto/area Modula), COGLISNW (listini), COGSTAMP, COGTABUM.

Tabelle solo lette (validazione/lookup): COGTABEL, COGRAGGR, COGMAGAZ, COGTESLS, COGMERFO, COGSLMAG, COGMOMAG, COGRIGOR, COGDBASE, COGCNDCF. Se azienda a consorzi: CAPTABEL, CAPMEACC, CAPMEADR.

Chiavi secondarie aggiunte a fine procedure (.k0x): cogmerci.k03, cogracmc.k02, cogracmt.k02, coganrag.k02, cogrigor.k03, cogmomag.k04, cogdbase.k02, asnmodel.k02, cogmerlk.k02, asnprest.k02, lodinfal.k03.


Copybook principali

Strutture / record: feurtab.fd, cogfiles.cpy, opensave.def.

Linkage: utilimpmer.cpy (util-impmer) - parametri di richiamo batch.

Utility / servizio: utilestrxls.cpy (ESTRXLS), utilopenfile.cpy (OPENFILE), utilncnf.cpy (RNEWCONF), utilgesstr.cpy (GESSTR), utilgesdebug.cpy (gesdebug), utilcogs0c.cpy, utilcogl61.cpy (COGL61), utils01f.cpy (COGS01F), utils05/utils35/utils37/utils37b/utils52/utils55/utils68, utilu10/utilu16/utilu20, utilcrms06/utilcrms09, l-copiaf.cpy/u-copiaf.cpy (COPIAF).

Working standard / costanti: k-personal.cpy, k-tipi-cogtabel.cpy, costanti-clipot.cpy, k-u10.cpy, wgrave.cpy, wnscr.cpy, wopenf.cpy, wstato.cpy, cogazien.cpy, wcont.cpy, wcont1.cpy.

Screen Designer: impmer.select, impmer.fd, impmer.wrk, impmer.decla, impmer.prc, impmer-01.scr.

Routine finali: stato.cpy, stato1.cpy, winmsg.cpy, grave.cpy, opengen.cpy, mmmask.cpy, poi impmer.prc, gesdebug.cpy.


Programmi chiamati (CALL)

Programma Scopo
ESTRXLS Conversione file Excel in testo delimitato per l'import
GRIDTOXS Apertura del file esportato come foglio Excel (interattivo)
COPIAF / C$COPY Copia file client/server; in batch copia l'estratto sulla path di output
C$OPENSAVEBOX Dialog di scelta file (F7)
C$SLEEP Pausa nel loop ogni 10 record (anti-timeout thin client)
OPENFILE Apertura del log risultati su richiesta
RNEWCONF Lettura configurazioni
COGU10W / COGU10 Utility divisa/conto
COGU16W Navigazione sequenziale merci in export
COGS01F Gestione fornitori
COGS52W Subroutine listini/CMA
COGS05 Ubicazioni logiche
COGS35 / COGS36 / COGS37 / COGS37B Subroutine anagrafica merci / DAM
COGS55 Subroutine di supporto
COGL61 Gestione listini fornitore
CRMS06 / CRMS09 Informazioni CRM merce
GESSTR Sanificazione/gestione stringhe
AZVALIDA Validazione campo

Note

  • Parametri linkage (util-impmer): impmer-called, impmer-operazione (I/E), impmer-classe, impmer-solo-esistenti, impmer-ordinamento, impmer-tutti-i-dati, impmer-solo-cma-vuoti, impmer-data-ins-da, impmer-data-ins-a, impmer-modello, impmer-output, impmer-output-loc (C=client/S=server), impmer-batch-mode, impmer-esito, impmer-o-msg.
  • Gli ID campo sono definiti come costanti 78 k-mer-*/k-ma2-*/k-ma3-*/k-ma4-*/k-ric-*/k-mlf-* (circa 168 costanti, in crescita per aggiunte progressive datate). Limite hard k-max-campi = 500, k-len-record = 8000. Alcuni ID sono prefissi per informazioni multiple (es. GIA-QTA-, LISV-, info Modula MER-MDL-C-/S-/A-).
  • Il valore #@# (k-campo-svuotato) forza l'azzeramento esplicito del campo in import.
  • La modalita' test (tm-test = "S") esegue parsing e validazioni senza scrivere sulle tabelle.
  • Configurazioni RNEWCONF lette (in blocco unico): tra le altre COGESYS/DELIMITATORE-COLONNE-EXCEL, PROGCOGV06/EUTA-C073-SIZ-DES, CLIPOT/RAGGR-MERCE-PER-SINCRO, CLIPOT/INFO-MERCE-CMI, ricambi/gruppo-merce-ricambi, assist/um-prestazioni-a-tempo, ABILITA/GRUPPO-AZIENDE, merci/ordinamento-default, merci/v06-pagina-listini-fornitore, SISTMERAVA/EUTA-C039-PROG-AUT, LISTVEND/CLASSE-RAGGR-SCONTI, odonto/info-allegati-merci.

Documentazione tecnica -- creata 2026-08-06