SWN142 - Esportazione Distinte Base¶
Sorgente: cbl/swn142.cbl | Program-ID: SWN142 | Tipo: Subroutine di sincronizzazione (solo esportazione)
Id processo: 142 Nome processo: ARPDBASE
Scopo¶
Esporta le distinte base dal gestionale (tabelle COGDBASE + COGMERCI) verso la tabella APP ARPDBASE con classe-distinta = "A". Il programma gestisce solo l'esportazione (nessuna importazione). L'esportazione e' differenziale tramite LOGAGREC su COGDBASE: vengono esportate solo le distinte i cui componenti sono stati effettivamente modificati dall'ultima esecuzione.
Se e' la prima esecuzione (data ultima sincronizzazione = 0) o viene richiesta l'esportazione completa, viene effettuata una scansione completa di COGDBASE.
I dati esportati vengono poi esposti dall'API Distinte Base.
Tabelle principali¶
| AREA | AREAGATE | Direzione |
|---|---|---|
| COGDBASE + COGMERCI | ARPDBASE (classe "A") | ------> |
File e tabelle¶
| File/Tabella | Modalita' | Descrizione |
|---|---|---|
| FEURTAB | I-O | Tabella generale Eurosystem (per attivazione LOG su COGDBASE) |
| COGDBASE | Input | Distinte base sorgente (componenti) |
| COGMERCI | Input | Anagrafica merci (verifica mer-padre = "P") |
| ARPDBASE | I-O (DB) | Tabella APP destinazione (distinte base) |
| LOGAGREC | I-O | Log aggiornamenti per esportazione differenziale |
| LOGIDREC | I-O | Chiavi reali dei record da LOGAGREC |
| APSTATOSYN | I-O (DB) | Stato sincronizzazione (tabella "ARPDBASE") |
| ARPSTPRC | Input (DB) | Parametri processo (limiti record/errori) |
Copybook utilizzate¶
| Copybook | Descrizione |
|---|---|
swn142.select, .fd, .wrk, .prc, .decla |
Definizioni generate da Screens |
cogfiles.cpy |
Struttura FEURTAB |
logagrec.cpy, .fd |
Log aggiornamenti |
logidrec.cpy, .fd |
Chiavi record log |
k-tipi-cogtabel.cpy |
Costanti tipi tabella |
costanti-sync.cpy |
Costanti sincronizzazione |
wstato.cpy, wgrave.cpy, wopenf.cpy, wnscr.cpy |
Working standard |
cogazien.cpy |
Dati azienda |
utilswgets.cpy |
Utility sincronizzazione |
utilgesstr.cpy |
Utility stringhe |
utilgesdebug.cpy |
Log di processo |
utilncnf.cpy |
Configurazioni RNEWCONF |
utilagprg.cpy |
Linkage parametri lancio |
Logica di elaborazione¶
Inizializzazione (m-00)¶
- Controllo abilitazione (
ctr-abil) - Apertura log di processo
- Lettura parametri lancio da
util-agprg - Verifica prerequisiti:
- Configurazione Aglancio attiva (
tm-cfg-aglancio-attivo = "S") - Sincronizzazione generale attiva (
tm-cfg-attiva-areaapp <> "N") - Attivazione automatica LOG su COGDBASE (archivio 35 in FEURTAB, tipo "CO") se non gia' attivo
- Apertura LOGAGREC e LOGIDREC
- Apertura tabelle DB (APSTATOSYN, ARPSTPRC, ARPDBASE)
- Lettura parametri processo da ARPSTPRC (limiti record/errori)
- Direzione forzata a "E" (solo esportazione)
- Avvio esportazione
Esportazione (b-esportazione)¶
- Lettura stato sincronizzazione da APSTATOSYN (tabella "ARPDBASE")
- Se prima volta (data = 0) o esportazione completa richiesta: scansione totale COGDBASE
- Altrimenti: esportazione differenziale via LOGAGREC
Esportazione completa (b-raccolta-completa)¶
Scansione diretta di COGDBASE con elaborazione a rottura su dba-merce:
- Per ogni record letto, controlla se
dba-mercee' cambiato rispetto alla lettura precedente - A rottura (cambio merce), elabora la distinta appena terminata tramite
b-distinta-elabora - Dopo l'elaborazione, riposiziona il cursore alla riga corrente per proseguire
- Supporta limiti su record letti e numero errori
Esportazione differenziale (b-esporta-differenziale)¶
Scorre LOGAGREC per file "cogdbase" a partire dalla data/ora dell'ultima esportazione:
- Per ogni record log, recupera la chiave reale da LOGIDREC
- Estrae
dba-merce(primi 9 byte della chiave) - Aggiunge il codice merce a una tabella di transito (max 500 elementi, senza duplicati)
- Se la tabella si riempie, l'elaborazione si ferma salvando il timestamp dell'ultimo log gestito; al lancio successivo riprende da quel punto
Dopo la raccolta, elabora tutte le distinte nella tabella di transito tramite b-elabora-tran-tabella.
Elaborazione distinta (b-distinta-elabora)¶
Per ogni distinta individuata:
- Legge il record COGMERCI corrispondente alla merce padre
- Se
mer-padre <> "P"(merce non e' padre di distinta) oppure la merce non esiste: - Cancellazione logica completa: scorre tutti i componenti su ARPDBASE e marca come cancellati quelli non gia' cancellati
- Se
mer-padre = "P": - Riconciliazione tramite
b-sincronizza-distinta
Sincronizzazione distinta attiva (b-sincronizza-distinta)¶
Lavora in due fasi:
Fase 1 -- Inserimento/aggiornamento: scansione COGDBASE per la merce padre; per ogni componente, cerca il record corrispondente su ARPDBASE (stessa chiave azi + merce + classe + prog):
- Se trovato: aggiorna
a-dba-merce-comp,a-dba-qta, resettaa-dba-fl-canc, assegna nuovoa-dba-id-sincro - Se non trovato: inserisce un nuovo record con tutti i campi compilati
Fase 2 -- Cancellazione componenti scomparsi: scansione ARPDBASE per la merce padre; per ogni componente non gia' cancellato, verifica se esiste ancora un record COGDBASE con lo stesso progressivo. Se non esiste, marca il componente come cancellato con nuovo a-dba-id-sincro.
Strategia di esportazione¶
Quando una distinta viene toccata (anche su una sola riga di COGDBASE), tutti i suoi componenti attivi vengono riesportati con un nuovo id sincro. In questo modo chi importa in modo differenziale, filtrando per id sincro, riceve sempre la distinta completa e non rischia di disallinearsi per aver visto solo una parte delle righe.
I componenti gia' cancellati logicamente su ARPDBASE (a-dba-fl-canc = "C") vengono lasciati intatti: l'host li ha gia' acquisiti come cancellati e non serve attribuirgli un nuovo id sincro.
Prelievo atomico id sincro (m-preleva-id-sincro)¶
L'id sincro viene incrementato atomicamente su APSTATOSYN tramite UPDATE ... RETURNING *. Ogni componente inserito/aggiornato/cancellato riceve un id sincro distinto e crescente, che consente la sincronizzazione incrementale lato API.
Contatori¶
Il programma traccia quattro contatori separati:
| Contatore | Significato |
|---|---|
tm-r-let |
Distinte lette (testate) |
tm-r-agg |
Componenti aggiornati (passati alla fase 1) |
tm-r-esp |
Componenti esportati (inseriti o aggiornati su ARPDBASE) |
tm-r-err |
Componenti cancellati logicamente su ARPDBASE |
Configurazioni¶
| Gruppo | Parametro | Uso |
|---|---|---|
| abilita | attiva-areaapp | Attivazione sincronizzazione |
| areaapp | cod-azienda | Codice azienda |
| areaapp | db-log-level | Livello log connessione DB |
| areaapp | agg-postgres-online | Sincronizzazione online |
| areaapp | aglancio-attivo | Attivazione Aglancio |
Note¶
- Il programma e' solo esportazione: la direzione e' forzata a "E" indipendentemente dai parametri.
- L'attivazione del LOG su COGDBASE (archivio 35, tipo "CO") viene fatta automaticamente alla prima esecuzione se non gia' attiva. Vengono anche impostati 90 giorni di retention log.
- La tabella di transito ha un limite di 500 distinte per ciclo differenziale. Se il limite viene raggiunto, l'elaborazione si ferma e deve essere rilanciata per proseguire.
- La classe distinta e' fissata a
"A"(costantek-classe-distinta). - La chiave COGDBASE e' composta da
dba-merce(9) +dba-prog(5) +dba-merce-f(9). Il match con ARPDBASE avviene sui primi due segmenti (merce + prog). - Il campo
a-dba-merce-compcorrisponde adba-merce-fdi COGDBASE (codice merce del componente figlio).
Documentazione tecnica generata -- 2026-04-18