SWN140 - Esportazione Codici Merce Fornitore¶
Sorgente: cbl/swn140.cbl | Program-ID: SWN140 | Tipo: Subroutine di sincronizzazione (solo esportazione)
Id processo: 140 Nome processo: ARPMERCA-F
Scopo¶
Esporta i codici merce fornitore (tabella COGMERFO) verso la tabella APP ARPMERCA con tipo-codice = "F". Il programma gestisce solo l'esportazione (nessuna importazione). L'esportazione e' differenziale tramite LOGAGREC su COGMERFO: vengono esportati solo i record 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 COGMERFO.
Tabelle principali¶
| AREA | AREAGATE | Direzione |
|---|---|---|
| COGMERFO | ARPMERCA (tipo "F") | ------> |
File e tabelle¶
| File/Tabella | Modalita' | Descrizione |
|---|---|---|
| FEURTAB | I-O | Tabella generale Eurosystem (per attivazione LOG su COGMERFO) |
| COGMERFO | Input | Codici merce fornitore (sorgente) |
| ARPMERCA | I-O (DB) | Tabella APP destinazione (codici merce alternativi) |
| LOGAGREC | I-O | Log aggiornamenti per esportazione differenziale |
| LOGIDREC | I-O | Chiavi reali dei record da LOGAGREC |
| APSTATOSYN | I-O (DB) | Stato sincronizzazione (tabella "ARPMERCA-F") |
| ARPSTPRC | Input (DB) | Parametri processo (limiti record/errori) |
Copybook utilizzate¶
| Copybook | Descrizione |
|---|---|
swn140.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:
az-ges-lo = "S"(gestione laboratorio attiva)- Configurazione Aglancio attiva (
tm-cfg-aglancio-attivo = "S") - Sincronizzazione generale attiva (
tm-cfg-attiva-areaapp <> "N") - Attivazione automatica LOG su COGMERFO (archivio 32 in FEURTAB) se non gia' attivo
- Apertura tabelle DB (APSTATOSYN, ARPSTPRC, ARPMERCA)
- 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 "ARPMERCA-F")
- Se prima volta (data = 0) o esportazione completa richiesta: scansione totale COGMERFO
- Altrimenti: esportazione differenziale via LOGAGREC
Esportazione differenziale (b-esporta-differenziale)¶
Scorre LOGAGREC per file "cogmerfo" a partire dalla data/ora dell'ultima esportazione. Per ogni record:
- Recupera la chiave reale da LOGIDREC
- Se operazione "C" (cancellazione): propaga cancellazione logica su ARPMERCA
- Se inserimento/modifica: rilegge COGMERFO e chiama
b-esporta-record
Esportazione singolo record (b-esporta-record)¶
Costruisce la chiave ARPMERCA:
| Campo ARPMERCA | Valore |
|---|---|
a-mca-azi |
Codice azienda |
a-mca-merce |
mfr-merce (gruppo+sotto+codice) |
a-mca-tipo-codice |
"F" (Fornitore) |
a-mca-ana |
"F" + mfr-for (codice fornitore) |
Cerca il record esistente con b-cerca-arpmerca-fornitore (start+rdnxt sui primi 4 campi chiave):
- Se trovato: aggiorna descrizione (
a-mca-des = mfr-desc), resetta flag cancellazione, incrementa id-sincro - Se non trovato: inserisce nuovo record con tutti i campi compilati (date di inserimento e aggiornamento)
Cancellazione logica (b-cancella-arpmerca)¶
Cerca il record su ARPMERCA e imposta a-mca-fl-canc = "C".
Esportazione singola chiave (b-esporta-key)¶
Per chiamate in tempo reale (ESPORTA-KEY): esporta un singolo record identificato dalla chiave in agprg-key (struttura mfr-chia1: merce 9 + fornitore 5). Se il record sorgente non esiste piu', propaga la cancellazione logica.
Configurazioni¶
| Gruppo | Parametro | Uso |
|---|---|---|
| abilita | attiva-areaapp | Attivazione sincronizzazione |
| areaapp | cod-azienda | Codice azienda |
| areaapp | db-conn-string | Stringa 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 COGMERFO (archivio 32) viene fatta automaticamente alla prima esecuzione se non gia' attiva.
- La sincronizzazione online (
ESPORTA-KEY) e' supportata ma richiedetm-cfg-agg-online = "S". - Il campo
a-mca-tipo-codice = "F"distingue i codici merce fornitore da altri tipi di codice su ARPMERCA. - La ricerca su ARPMERCA usa start+rdnxt sui primi 4 campi della chiave primaria (azienda, merce, tipo-codice, anagrafica) poiche' per un fornitore il codice e' unico.
Storico modifiche¶
2026-07-27 - TASK-5716: gestione cambio codice fornitore (codice in chiave su ARPMERCA)¶
Il campo a-mca-codice (che riceve il codice fornitore mfr-cod-for) fa parte della chiave di
ARPMERCA e non puo' essere aggiornato "in place". In b-esporta-record, quando il record esiste
gia' ma il codice fornitore e' cambiato (a-mca-codice not = mfr-cod-for), il programma ora esegue
prima la cancellazione logica del vecchio record (a-mca-fl-canc = "C" con nuovo id-sincro) e
poi l'inserimento del nuovo record con il codice aggiornato. In precedenza il vecchio record
restava e il nuovo codice non veniva propagato.
Contestualmente il log di processo (gesdebug-write) e' stato arricchito con i codici effettivamente
modificati o inseriti (nel formato merce - fornitore - codice), per rendere tracciabile l'esito
dell'esportazione.
Casistica problemi noti¶
Codici merce fornitore modificati non esportati su ARPMERCA (2026-07-27)¶
- Sintomo: i codici merce fornitore aggiornati sul gestionale non venivano propagati su ARPMERCA (APP). Nel caso Blutekna (merce "005704" CMA, codice "19/11/03571"), la tabella APP continuava a mostrare il valore precedente; il log dichiarava di aver esportato dei record senza indicare quali, e le riesportazioni forzate non cambiavano il dato.
- Causa:
a-mca-codice(codice fornitore) e' in chiave su ARPMERCA. Al cambio del codice, il ramo di aggiornamento del record esistente non poteva modificare un campo in chiave: il vecchio record restava e il nuovo codice non veniva scritto. - Correzione: al cambio di
mfr-cod-for, cancellazione logica del vecchio record e inserimento del nuovo (TASK-5716); log arricchito con i codici modificati/inseriti. - Riferimento: dettaglio bug | ClickUp 869e9k8jc
Documentazione tecnica generata -- 2026-04-09