Vai al contenuto

Import/export commesse

Nel modulo "Laboratori odontotecnici" del progetto è presente la possibilità di trasferire commesse di lavorazione tra due ambienti. Questo ha la motivazione di permettere di fare test su nuove procedure in un ambiente e poi trasferire il risultato in quello definitivo. Il processo è gestito dai programmi COGZ66 che innesca COGZ63.

Ora stiamo implementando un processo simile ma architetturalmente migliorato, governato dai programmi COGZ6A che chiama COGZ6B La differenza fondamentale è data dal fatto che il processo di trasferimento può essere distinto in 2 fasi: - Esportazione - Importazione In mezzo a queste due fasi c'è un file XML che contiene tutti i dati in chiaro della commessa in modo che l'utente possa eseguire anche proprie elaborazioni.

La procedura e' stata estesa con: 1) Verifica completezza tabelle rispetto a COGZ63 (completata) 2) Esportazione/importazione di un secondo file XML con le referenze anagrafiche interessate dalle commesse trasferite (Fasi 1-2 completate)

Questo permette di fare in modo che nell'ambiente di destinazione i dati della commessa risultino consistenti (ad esempio potrebbe mancare un materiale o un modello inserito nell'altro ambiente).


Stato implementazione (aggiornamento 12/03/2026)

Fase 1 — Completata

Tabelle anagrafiche con approccio "record grezzo" (export/import dell'intero record): - COGMERCI — Anagrafica merci - COGGEANA — Clienti/fornitori/medici - COGMERAP — Dati aggiuntivi merci - LODTABEL — Tabelle codici laboratorio - COGTABEL — Tabelle codici generali

Fase 2 — Completata

Tabelle anagrafiche con approccio "tgg-idx" (export/import campo per campo): - LODAZION — Azioni di piano (chiave: azione x(08)) - LODMODEL — Modelli tecnici (chiave composita: mdl-tip+mdl-mod+mdl-pag+mdl-inf+mdl-prog) - COGLISNW — Corpo listino di vendita (chiave: lnw-merce+lnw-tip-lis+lnw-rif+lnw-fascia+lnw-data)

Per LODMODEL e' stato implementato un meccanismo di esportazione filtrata: vengono esportati solo i record i cui mdl-mod corrispondono ai codici modello accumulati durante la scansione delle prescrizioni (LODPRESC.lpm-mod). Questo evita di esportare l'intero archivio modelli.

Per COGLISNW viene usata la stessa logica di filtro: vengono esportati solo i record il cui codice merce (lnw-gru+lnw-sot+lnw-cod) corrisponde alle merci accumulate durante l'export delle commesse (accumulatore w-acc-merci). La tabella COGLISML (corpo listino multi-livello) non viene esportata perche' viene rigenerata automaticamente dal trigger COGS0C, invocato ad ogni write/rewrite/delete su COGLISNW.

Fase 2B — Completata

Scontistica cliente con approccio "record grezzo": - COGSCONT — Sconti generalizzati cliente (filtrati per scc-tip="A", accumulatore w-acc-anagr) - COGGRSCT — Testata gruppi sconto (filtrati per gst-tip="C", accumulatore w-acc-anagr)

Per COGSCONT vengono esportati solo gli sconti di tipo "A" (sconto su anagrafica) i cui riferimenti anagrafici corrispondono ai clienti accumulati. Per COGGRSCT vengono esportate le testate dei gruppi sconto di tipo "C" (gruppo sconto cliente) associate ai clienti accumulati.

Fase 3 — Da fare

Tabelle secondarie: LODMACCH, LODCONTR, LODISTRU, LODTABDU, LODAZOPE, LODMODST


Piano di implementazione (analisi del 23/02/2026)

Punto 1: Confronto COGZ63 vs COGZ6B

Risultato: COGZ6B copre tutte le tabelle transazionali di COGZ63. Le uniche tabelle "mancanti" (COGTABEL, COGMERCI, COGGEANA) in COGZ63 erano usate solo in lettura per configurazione, non come dati trasferiti. Nessuna modifica necessaria.

Punto 2: Export/Import anagrafiche

Architettura

Si estende COGZ6B con due nuove operazioni: - "EA" — Export Anagrafiche: genera un secondo file XML con le referenze raccolte - "IA" — Import Anagrafiche: legge il file XML anagrafiche e inserisce/aggiorna i record

Il file anagrafiche ha nome derivato automaticamente: se il file commesse è cogz6b-xxx.xml, il file anagrafiche sarà cogz6b-xxx-anagr.xml.

Flusso Export (modifiche a COGZ6A)

1. CALL COGZ6B "EP"     → Prepara export commesse + inizializza accumulatori
2. FOR EACH commessa:
     CALL COGZ6B "E"     → Export commessa + accumula referenze anagrafiche
3. CALL COGZ6B "EE"     → Finalizza XML commesse
4. CALL COGZ6B "EA"     → Genera XML anagrafiche dagli accumulatori    ← NUOVO
5. Copia entrambi i file in locale                                      ← MODIFICA

Flusso Import (modifiche a COGZ6A)

1. Copia entrambi i file da locale a server                             ← MODIFICA
2. CALL COGZ6B "IA"     → Import anagrafiche (PRIMA delle commesse)    ← NUOVO
3. CALL COGZ6B "I"      → Import commesse (invariato)
4. Pulizia

Tabelle anagrafiche da gestire

Fase 1 — Critiche (senza queste le commesse sono inconsistenti):

Tabella Descrizione Referenziata da Chiave Già nel SELECT
COGMERCI Anagrafica merci LODPNMAT.lmt-merce, LODCMART.lca-articolo, LODCMMTA mer-gru+mer-sot+mer-cod
COGGEANA Clienti/fornitori/medici LODCMTES.lct-med, LODPNMAT.lmt-for, LODSUBFR ana-tipo+ana-cod
COGMERAP Dati aggiuntivi merci Complemento COGMERCI mer-chia+mea-tipo
LODTABEL Tabelle codici laboratorio (tipo 02=operatori, 08=dispositivi, 11=reparti) LODCMTES.lct-resp, LODCMRIG.lcr-ope, LODCMDET.lcd-ope lot-tipo+lot-cod
COGTABEL Tabelle codici generali Vari campi di configurazione euta-tipo+euta-cod

Fase 2 — Importanti (completano il quadro):

Tabella Descrizione Referenziata da Già nel SELECT
LODAZION Azioni di piano LODCMRIG.lcr-azione, LODPNRIG.lpr-azione No → aggiungere
LODMODEL Modelli tecnici LODPROGE No → aggiungere
COGLISNW Corpo listino di vendita Prezzi delle merci Sì (aggiunto)
LODASSIS Operatori/assistenti Vari No → aggiungere

Fase 2B — Scontistica cliente:

Tabella Descrizione Referenziata da Già nel SELECT
COGSCONT Sconti generalizzati Condizioni sconto cliente Sì (aggiunto)
COGGRSCT Testata gruppi sconto Gruppi sconto cliente Da aggiungere

Fase 3 — Secondarie (da valutare): LODMACCH, LODCONTR, LODISTRU, LODTABDU, LODAZOPE, LODMODST

Meccanismo di raccolta referenze

Durante l'export di ogni commessa (operazione "E"), si accumulano i codici univoci in tabelle working-storage. Le procedure di accumulo (ea-acc-merce, ea-acc-anagrafica, ecc.) cercano il codice nella tabella, se non presente lo aggiungono. Vengono richiamate durante l'export delle tabelle transazionali (LODPNMAT→merce+fornitore, LODCMTES→medico+responsabile, LODCMRIG→azione+operatore, ecc.).

Struttura del file XML anagrafiche

<?xml version="1.0" encoding="utf-8"?>
<set_anagrafiche>
  <table>
    <table_name>cogmerci</table_name>
    <record>
      <record_number>1</record_number>
      <MER-GRU>01</MER-GRU>
      <MER-SOT>02</MER-SOT>
      <MER-COD>00001</MER-COD>
      <MER-DESCR>Porcellana dentale tipo A</MER-DESCR>
      ...
    </record>
  </table>
  <table>
    <table_name>coggeana</table_name>
    ...
  </table>
</set_anagrafiche>

Stessa struttura del file commesse ma senza il livello <commessa>. Tag radice: <set_anagrafiche>.

Comportamento in importazione

Per ogni record anagrafico nel file XML: 1. Leggi la chiave del record 2. Cerca il record nell'archivio di destinazione 3. Se non esiste → inserisci (write) 4. Se esiste → aggiorna (rewrite)

Viene prodotto un log con il conteggio: N inseriti, N aggiornati, N errori.

Modifiche ai file

/programmi/eurocoge/cbl/cogz6b.cbl — Modifiche principali: - Working-storage: tabelle di accumulo referenze - Evaluate principale (riga 610): aggiungere casi "EA" e "IA" - Procedure accumulo: ea-acc-merce, ea-acc-anagrafica, ea-acc-lodtab - Durante export tabelle transazionali: chiamate accumulo dopo lettura record - Nuova sezione ea-esporta-anagrafiche: loop sugli accumulatori, leggi anagrafica, scrivi XML - Nuova sezione ia-importa-anagrafiche: parsing XML, per ogni record read→write/rewrite

/programmi/eurocoge/cbl/cogz6a.cbl — Modifiche: - Working-storage: variabile nome file anagrafiche - Flusso export: aggiungere chiamata "EA" dopo "EE", copia secondo file - Flusso import: aggiungere chiamata "IA" prima di "I", copia secondo file

/programmi/eurocoge/cbl/screens/cogz6b.select — Aggiungere: - Fase 2: copy "lodazion.fd"., copy "lodmodel.fd"., copy "lodassis.fd". - Fase 2B: copy "coglisnw.fd". (aggiunto), copy "cogscont.fd". (aggiunto), copy "coggrsct.fd". (DA AGGIUNGERE)

/programmi/eurocoge/cpy/ — Nuove copybook util-wrk da creare (MANUALMENTE): - cogmerci-util-wrk.cpy (basata su cogmerci.cpy) - coggeana-util-wrk.cpy (basata su coggeana.cpy) - cogmerap-util-wrk.cpy (basata su cogmerap.cpy) - lodtabel-util-wrk.cpy (basata su lodtabel.cpy) - cogtabel-util-wrk.cpy (basata su cogtabel.cpy) - Fase 2: lodazion-util-wrk.cpy, lodmodel-util-wrk.cpy, lodassis-util-wrk.cpy

Fasi di lavoro

  1. ~~Fase 1A: Creare le copybook util-wrk~~ — COMPLETATA
  2. ~~Fase 1B: Aggiungere accumulatori e procedure di raccolta in COGZ6B~~ — COMPLETATA
  3. ~~Fase 1C: Modificare l'export delle tabelle transazionali per raccogliere le referenze~~ — COMPLETATA
  4. ~~Fase 1D: Implementare operazione "EA" (export anagrafiche)~~ — COMPLETATA
  5. ~~Fase 1E: Implementare operazione "IA" (import anagrafiche)~~ — COMPLETATA
  6. Fase 1F: Modificare COGZ6A per orchestrare le nuove chiamate e la gestione file — DA FARE
  7. ~~Fase 2: Aggiungere LODAZION, LODMODEL, COGLISNW~~ — COMPLETATA (LODASSIS posticipata a Fase 3)
  8. ~~Fase 2B: Aggiungere COGSCONT, COGGRSCT~~ — COMPLETATA
  9. Fase 3: Aggiungere tabelle secondarie — DA FARE

Dettagli implementazione Fasi 1-2

Accumulatori (working-storage)
Tabella Costante max Staging area Tabella accumulo Campo chiave
COGMERCI k-acc-max-merci (200) ea-stg-merce (gru+sot+cod) w-acc-merci mer-gru+mer-sot+mer-cod
COGGEANA k-acc-max-anagr (200) ea-stg-anagr (tipo+cod) w-acc-anagr ana-tipo+ana-cod
LODTABEL k-acc-max-lodtab (200) ea-stg-lodtab (tipo+cod) w-acc-lodtab lot-tipo+lot-cod
COGTABEL k-acc-max-cogtab (200) ea-stg-cogtab (tipo+cod) w-acc-cogtab euta-tipo+euta-cod
LODAZION k-acc-max-lodazion (200) ea-stg-lodazion (cod) w-acc-lodazion laz-cod x(08)
LODMODEL k-acc-max-lodmodel (50) ea-stg-lodmodel (cod) w-acc-lodmodel mdl-mod x(02)
COGLISNW — (usa w-acc-merci) lnw-gru+lnw-sot+lnw-cod
COGSCONT — (usa w-acc-anagr) scc-ana-tip+scc-ana-cod
COGGRSCT — (usa w-acc-anagr) gst-cod (chiave anagr.)

Flag di overflow: w-acc-ovf-* (una segnalazione per tabella, evita messaggi ripetuti).

Punti di accumulo nelle sezioni di export commessa

I perform ea-acc-* sono inseriti nelle 9 sezioni di export delle tabelle transazionali:

Sezione export Accumula
LODPRESC (c-lodcmpra) merce, lodazion, lodmodel (da lpm-mod)
LODCMTES (c-lodcmmta) anagrafica (medico, responsabile)
LODCMRIG (c-lodcmctr) lodazion, lodtab (operatore)
LODSUBFR (c-lodinfcc) anagrafica (subfornitore)
LODCMDET (c-lodgirdt) lodtab (operatore)
LODCMART (c-lodimpdt) merce (articolo), cogtab
LODPNRIG (c-lodprris) lodazion, lodtab (operatore)
LODPNMAT (c-lodpnprt) merce, anagrafica (fornitore), cogtab
LODCMMTA (c-lodcmmor) — (nessun accumulo specifico)
Export anagrafiche (operazione "EA")

Paragrafi principali: - ea-esporta-anagrafiche: apre XML anagrafiche, chiama le 7 sezioni di export, chiude XML - ea-acc-merce, ea-acc-anagrafica, ea-acc-lodtab, ea-acc-cogtab, ea-acc-lodazion, ea-acc-lodmodel: procedure di accumulo (cerca duplicato, se non presente aggiunge) - ea-exp-record-grezzo-merci, ea-exp-record-grezzo-geana, ea-exp-record-grezzo-merap, ea-exp-record-grezzo-cogtab, ea-exp-record-grezzo-lodtab: export record grezzo per Fase 1 - ea-exp-record-grezzo-cogscont, ea-exp-record-grezzo-coggrsct: export record grezzo per Fase 2B (scontistica)

Per LODAZION, LODMODEL e COGLISNW: export campo per campo usando le copybook *-util-prc.cpy (approccio tgg-idx).

Per LODMODEL: scansione sequenziale di tutti i record (rdnxt-lodmodel), filtro con flag e-commessa-ok verificando che mdl-mod corrisponda a uno dei codici accumulati.

Import anagrafiche (operazione "IA")

Paragrafi principali: - ia-importa-anagrafiche: parsing XML, dispatch per tabella - ia-parse-file-anagr: apre e parsa il file XML anagrafiche - ia-importa-record-grezzo: dispatch evaluate su table_name (include cogscont, coggrsct) - ia-importa-record-tgg: dispatch evaluate per tabelle tgg-idx (LODAZION, LODMODEL, COGLISNW) - ia-imp-cogmerci, ia-imp-coggeana, ia-imp-cogmerap, ia-imp-cogtabel, ia-imp-lodtabel: import record grezzo - ia-imp-cogscont, ia-imp-coggrsct: import record grezzo (scontistica) - ia-imp-lodazion, ia-imp-lodmodel, ia-imp-coglisnw: import campo per campo (tgg-idx)

Logica di import: salva record importato → read per chiave → se esiste: rewrite; se non esiste: write. Log con conteggio inseriti/aggiornati/errori.

Verifica

  • [x] Compilazione senza errori
  • [ ] Esportare una commessa con materiali, medico e operatori dall'ambiente A
  • [ ] Verificare che il file XML anagrafiche contenga i record referenziati senza duplicati
  • [ ] Importare in un ambiente B vuoto: verificare che le anagrafiche vengano inserite
  • [ ] Importare di nuovo: verificare che vengano aggiornate (rewrite) senza errori
  • [ ] Importare poi le commesse: verificare che siano consistenti (nessun riferimento orfano)
  • [ ] Esportare piu' commesse con referenze comuni: verificare consolidamento (no duplicati)
  • [ ] Verificare backward compatibility: import/export senza file anagrafiche deve continuare a funzionare

Note tecniche

  • Le copybook .k01-agg (contenenti i paragrafi wr-/rwr-) sono incluse automaticamente dal generatore di Screens. Non vanno aggiunte manualmente nel sorgente.
  • LODAZION.k01 non ha paragrafi wr-/rwr-: sono stati aggiunti inline in cogz6b.cbl
  • Il file sorgente deve essere in codifica Latin-1/CP437 (single-byte). I caratteri accentati nelle stringhe eseguibili vanno sostituiti con apostrofo (es. gia' al posto di gia+accento).
  • COGLISML non va esportata: viene rigenerata automaticamente dal trigger COGS0C, invocato ad ogni write/rewrite/delete su COGLISNW (vedi coglisnw.k01-agg).
  • COGLISNW, COGSCONT e COGGRSCT non richiedono nuovi accumulatori: riutilizzano gli accumulatori esistenti w-acc-merci (per COGLISNW) e w-acc-anagr (per COGSCONT e COGGRSCT).
  • COGGRSCT: va ancora aggiunto in cbl/screens/cogz6b.select tramite il tool Screens (copy "coggrsct.fd".) e rigenerato.