Vai al contenuto

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)

  1. Controllo abilitazione (ctr-abil)
  2. Apertura log di processo
  3. Lettura parametri lancio da util-agprg
  4. Verifica prerequisiti:
  5. Configurazione Aglancio attiva (tm-cfg-aglancio-attivo = "S")
  6. Sincronizzazione generale attiva (tm-cfg-attiva-areaapp <> "N")
  7. Attivazione automatica LOG su COGDBASE (archivio 35 in FEURTAB, tipo "CO") se non gia' attivo
  8. Apertura LOGAGREC e LOGIDREC
  9. Apertura tabelle DB (APSTATOSYN, ARPSTPRC, ARPDBASE)
  10. Lettura parametri processo da ARPSTPRC (limiti record/errori)
  11. Direzione forzata a "E" (solo esportazione)
  12. Avvio esportazione

Esportazione (b-esportazione)

  1. Lettura stato sincronizzazione da APSTATOSYN (tabella "ARPDBASE")
  2. Se prima volta (data = 0) o esportazione completa richiesta: scansione totale COGDBASE
  3. Altrimenti: esportazione differenziale via LOGAGREC

Esportazione completa (b-raccolta-completa)

Scansione diretta di COGDBASE con elaborazione a rottura su dba-merce:

  1. Per ogni record letto, controlla se dba-merce e' cambiato rispetto alla lettura precedente
  2. A rottura (cambio merce), elabora la distinta appena terminata tramite b-distinta-elabora
  3. Dopo l'elaborazione, riposiziona il cursore alla riga corrente per proseguire
  4. 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:

  1. Per ogni record log, recupera la chiave reale da LOGIDREC
  2. Estrae dba-merce (primi 9 byte della chiave)
  3. Aggiunge il codice merce a una tabella di transito (max 500 elementi, senza duplicati)
  4. 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:

  1. Legge il record COGMERCI corrispondente alla merce padre
  2. Se mer-padre <> "P" (merce non e' padre di distinta) oppure la merce non esiste:
  3. Cancellazione logica completa: scorre tutti i componenti su ARPDBASE e marca come cancellati quelli non gia' cancellati
  4. Se mer-padre = "P":
  5. 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, resetta a-dba-fl-canc, assegna nuovo a-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" (costante k-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-comp corrisponde a dba-merce-f di COGDBASE (codice merce del componente figlio).

Documentazione tecnica generata -- 2026-04-18