Vai al contenuto

SWN126 - Esportazione ARPSTVEN

Nome programma SWN126 Linkage section UTILAGPRG - Linkage comune Id processo: 126 Nome processo: ARPSTVEN Tabelle principali gestite

AREA AREAGATE Direzione
COGTESBO
COGMOMAG
COGCONTR
ARPSTVEN ------>
COGTESBO
COGMOMAG
APCOGTESBO
APCOGMOMAG

Logica generale Esportazione dei movimenti di vendita su un archivio statistico Esportazione Esportazione di tutti i record effettivamente modificati (con dati variati). Importazione Non prevista ATTENZIONE Le tabelle di origine non sono ottimizzate per poter effettuare un'esportazione efficente. Pero' in questa versione cerco di renderla più performante rispetto alla versione precedente, tenendo conto anche del fatto che ora è presente l'id_sincro sulla tabella ARPSTVEN e anche il flag di cancellazione logica (necessario per rendere l'importazione su APP efficiente). Quindi: * Non si utilizza più il "periodo di esportazione", ma si gira su COGTESAP partendo dall'ultima esportazione * Per ogni documento il giro rimane simile a SWA015: non effettuiamo il confronto campo-campo come viene tipicamente fatto sugli SWN, per evitare la complicazione di dover intercettare le righe documento cancellate. Quindi per ciascun documento si effettua: * Cancellazione logica di tutte le righe * Esportazione delle righe attuali * Documenti cancellati: rimane il punto più critico, che cerco di risolvere implementando un evento di cancellazione ddt su COGEVLOG, e quindi effettuando qui la ricerca dei documenti da cancellare * Contemporaneamente all'esportazione su ARPSTVEN, viene effettuata anche l'esportazione su APCOGTESBO/APCOGMOMAG Autorizzazioni trasferimenti Se è richiesta la gestione autorizzazione su trasferimenti, quando questo programma esporta un documento "trasferimento" su APCOGTESBO/APCOGMOMAG, creerà anche i record di autorizzazione richiesti e l'invio della notifica. Nota per i trasferimenti provenienti da APP Se un trasferimento proviene da APP sarà memorizzato su ARPTRTES/ARPTRRIG, e verrà importato da SWN098 - Importazione/esportazione trasferimenti Di conseguenza, alla prossima esecuzione di questo programma il procedimento di autorizzazione avverrà naturalmente. Quindi, forse non è necessario che la APP si preoccupi di creare l'autorizzazione quando il trasferimento nasce in quell'ambiente. E' importante però che la richiesta di autorizzazione contenga, nelle note, tutte le info necessarie per l'utente che deve effettuare l'autorizzazione, perchè la richiesta di autorizzazione conterrà un solo documento collegato (per default, quello di entrata, che è quello da autorizzare). Se ad esempio viene effettuato un trasferimento da magazzino 1 a magazzino "H" (viaggiante), l'autorizzazione verrà creata a fronte del documento "H/2024/T/000123", e nelle note potrebbe comparire: "Trasferimento inviato dal magazzino '1 (sede)' " Viceversa se viene effettuato un trasferimento da magazzino "H" a magazzino "1", l'autorizzazione verrà creata a fronte del documento "1/2024/T/006532", e nelle note potrebbe comparire: "Trasferimento inviato dal magazzino 'H (Veicolo GF123XS)' " Nel caso in cui l'autorizzazione venga rifiutata, la funzione di autorizzazione dovrà creare un trasferimento contrario a quello originale, che non dovrà essere soggetto ad autorizzazione: dovremo aggiungere un apposito campo su ARPTRTES. Quindi questo programma potrà leggere il record prima di esportare, e decidere se creare l'autorizzazione. Configurazioni possibili

Gruppo Parametro Note
abilita attiva-areaapp
areaapp cod-azienda
areaapp db-conn-string
areaapp agg-postgres-online
gestbuonip causale-contanti-1
gestbuonip causale-contanti-2
bint no-merci-bi0009
bint cod-merce-bi0009
bint n-mesi-bi0009

Elaborazione Tipi di segnalazione: Vedi Tipi di segnalazione A - Controllo di esecuzione Vedi Controllo di esecuzione A.1 - Aggiornamento KEEP-ALIVE Per il momento non lo eseguiamo: il keep-alive viene tenuto aggiornato dal thread autonomo di aglancio; se il programma venisse chiamato in "tempo reale" dal programma di gestione, non necessita comunque del keep-alive. A.2 - Apertura A.2.1 Apertura tabelle Tentare l'apertura della tabella da sincronizzare: ARPSTVEN Se fallita inviare una Segnalazione critica e chiudere. A.3 Ricerca abilitazione alle autorizzazioni Effettuare una ricerca su CFGAUTORIZZAZIONI:

Dato Contenuto
C-AUT-AZIENDA Azienda attiva
C-AUT-DOC-CLASSE K-DOC-TIP-DOC-MAG-GEN
C-AUT-DOC-SUDD "TR"

Se il record esiste, e C-AUT-ABILITA <> "N ", allora la gestione abilitazioni sui trasferimenti è attiva Qui è presente anche il flag C-AUT-FL-NOTIFICA; se vale "S" si dovrà gestire anche l'invio di una notifica, come spiegato sotto. B - Esportazione informazioni aggiornate * ID SINCRO: gestito * Esportazione differenziale: gestita e ottimizzata * Cancellazione logica: gestita In questa fase si dovrà tenere conto di * Limite record * Limite errori * "Esporta tutto" B.1 - Stato sincronizzazione ARPSTVEN Sulla tabella APSTATOSYN, leggere il record relativo alla tabella/oggetto da sincronizzare "ARPSTVEN"; se il record non esiste, crearlo impostando

Dato Contenuto
A_SYN_AZIENDA Codice azienda
A_SYN_TABELLA "ARPSTVEN"
A_SYN_DA_GES_DATA 0
A_SYN_DA_GES_ORA 0
A_SYN_DA_ID_SINCRO 1
A-SYN-VERSIONE 2

Qui otterremo due informazioni importanti: * Data/ora ultima esportazione da gestionale a postgres (A_SYN_DA_GES_DATA e A_SY_DA_GES_ORA) * Questa informazione vale anche per l'esportazione su APCOGTESBO/APCOGMOMAG * Prossimo ID sincronizzazione da memorizzare sulla tabella (A_SYN_ID_SINCRO) NB: Per ottimizzare la prima elaborazione, se data/ora ultimo aggiornamento è vuoto verrà forzato con il numero di giorni configurati in "bint"-"n-mesi-bi0009" APCOGTESBO Sulla tabella APSTATOSYN, leggere il record relativo alla tabella/oggetto da sincronizzare "APCOGTESBO"; se il record non esiste, crearlo impostando

Dato Contenuto
A_SYN_AZIENDA Codice azienda
A_SYN_TABELLA "APCOGTESBO"
A_SYN_DA_GES_DATA 0
A_SYN_DA_GES_ORA 0
A_SYN_DA_ID_SINCRO 1
A-SYN-VERSIONE 2

Qui otterremo solo il p.rossimo ID sincronizzazione da memorizzare sulla tabella (A_SYN_ID_SINCRO) Data/ora prossimo aggiornamento sono gli stessi di ARPSTVEN (in fase di aggiornamento comunque li aggiorneremo anche qui) B.2 - Ricerca record da esportare B.2.1 Ricerca record da esportare

Tipo di elaborazione Condizione Cosa fare
Singolo record AGPRG-KEY <> " "
(tes-chia3)
Si legge direttamente il documento da aggiornare su COGTESBO
Verrà eseguita se agg-postgres-online è attiva
Se viene sincronizzato un record cancellato, verrà effettuata la cancellazione logica
Esportazione totale AGPRG-ESPORTA-TUTTO = "S" Si scorrono tutti i record di COGTESBO; ogni record va considerato
Esportazione standard Si scorrono tutti i record di COGTESAP, usando la chiave TSA-CHIA3, partendo da A-SYN-DA-GES-DATA+A-SYN-DA-GES-ORA
Pulizia AGPRG-OPE = "PULIZIA" Non prevista

Ciascun record letto corrisponde ad un documento; B.2.1.1 Controlli documento ARPSTVEN Il documento viene considerato se: * La causale del documento è da fatturare * Per K-PERSONAL-SGARBI considero anche le causali configurate causale-contanti-1 e causale-contanti-2 * Il documento è intestato a un cliente (TES-TIPOCF = 'C') APCOGTESBO/APCOGMOMAG Tutti i documenti vengono considerati B.2.2 Documento valido B.2.2.1 Cancellazione logica righe ARPSTVEN Effettuare la cancellazione logica delle righe presenti su ARPSTVEN, effettuando la selezione delle righe tramite una query: SELECT * FROM arpstven WHERE arpsve-azi = azienda AND arpsve-key-maga = tes-chia3 "con separatori" AND SET arpsve_fl_canc <> 'C' Per ciascun movimento trovato effettuare la cancellazione logica:

Nome campo Note
ARPSVE_ID_SINCRO Id sincro progressivo
ARPSVE_FL_CANC "C"

APCOGTESBO/APCOGMOMAG Effettuare la cancellazione fisica delle righe presenti su APCOGMOMAG tramite una query: DELETE FROM APCOGMOMAG WHERE a-mag-azi = azienda AND a-mag-mag = tes-mag AND a-mag-ann = tes-anno AND a-mag-tip = tes-tipob AND a-mag-num = tes-bolla3 B.2.2.2 Esportazione testata documento ARPSTVEN Non previsto APCOGTESBO/APCOGMOMAG Verifichiamo se il documento inserito/aggiornato è già stato esportato, con una ricerca diretta su APCOGTESBO, usando A_TES_CHIA1, impostando:

Nome campo Contenuto
A_TES_AZIENDA azienda in elaborazione
A_TES_MAG TES-CHIA3
A_TES_ANN
A_TES_TIP
A_TES_NUM

Se il record esiste dovrà essere aggiornato, altrimenti inserito; in ogni caso i campi da aggiornare sono gli stessi:

Dato Descrizione
A_TES_AZIENDA Codice azienda
A_TES_MAG TSA-CHIA1
A_TES_ANN
A_TES_TIP
A_TES_NUM
A_TES_ANA_NONNO TES-NONNO
A_TES_ANA_PADRE TES-PADRE
A_TES_RIFLISTINO TES-RIFLISTINO
A_TES_CAUSALE TES-CAUSALE
A_TES_DATA TES-DATA
A_TES_RAGGR TES-RAGGRUPP
A_TES_PAG TES-PAG1
A_TES_RB TES-RB
A_TES_CURRENCY TES-CURRENCY
A_TES_IMP_PAGATO 0
A_TES_FL_CREA_FAT "N"
A_TES_FATTURA_SPEDITA "N"
A_TES_NOME_FATTURA " "
A_TES_FL_CANC " "
A_TES_ID_SINCRO Nuovo id di sincronizzazione
A_TES_AGG_APP "N"

B.2.2.3 Ricerca movimenti su COGMOMAG Per il documento in esame si ricercano i movimenti su COGMOMAG ARPSTVEN Per ciascun movimento effettuare la ricerca su ARPSTVEN, e l'eventuale inserimento o aggiornamento:

Nome campo Note
ARPSVE_AZI Codice azienda
ARPSVE_KEY_FATTU Chiave fattura eventualmente collegata al documento, nel formato
"CL/2022/0012345", altrimenti vuoto
ARPSVE_KEY_MAGA Chiave bolla nel formato "1/2022/I/000123"
ARPSVE_MAG_PROG MAG-PROG
ARPSVE_CAGE TES-MAG
ARPSVE_CLI Cliente (es. "C00123")
ARPSVE_DATA TES-DATA
ARPSVE_DATA_AGG Data sistema
ARPSVE_SERVIZIO MAP-REPARTO
ARPSVE_DIVISIONE " "
ARPSVE_LINEA " "
ARPSVE_MERCE MAG-MERCE3
ARPSVE_QTA Quantità movimento, se previsto dal tipo statistico dell'anagrafica merci (MA2-TIPO-STAT)
ARPSVE_IMP_VEN MAG-VALORE
ARPSVE_IMP_ACQ MAG-QTAMAGAZ * MER-PMA
ARPSVE_DATA_BOLLA TES-DATA
ARPSVE_TRASP_AGE '0
ARPSVE_OMAGGIO " "
ARPSVE_PREZZO MAG-PREZZO
ARPSVE_PREZZO_NO_SCONT MAG-PRE-NO-SCO
ARPSVE_PREZZO_LISTINO Il prezzo di listino della merce alla data
ARPSVE_SCONTO MAG-SCO-1
ARPSVE_PREZZO_MEDIO_ACQ MER-PMA
ARPSVE_ID_SINCRO Id sincro progressivo
ARPSVE_FL_CANC " "

APCOGTESBO/APCOGMOMAG Per ciascun movimento effettuare l'inserimento su APCOGMOMAG

Dato Descrizione
A_MAG_AZIENDA Codice azienda
A_MAG_MAG MAG-CHIAP
A_MAG_ANN
A_MAG_TIP
A_MAG_NUM
A_MAG_PROG
A_MAG_MERCE MAG-MERCE3
A_MAG_SEGNO MAG-ENTRUSC
A_MAG_UM MER-UM
A_MAG_QTA MAG-QTAMAGAZ
A_MAG_PRE_LOR MAG-PRE-NO-SCO
A_MAG_SCO_1 MAG-SCO-1
A_MAG_SCO_2 MAG-SCO-1
A_MAG_PRE_NET MAG-PREZZO
A_MAG_VALORE MAG-VALORE
A_MAG_COLLI MAG-COLLI
A_MAG_FL_PROMO " "
A_MAG_LOTTO_ESTERNO " "
A_MAG_IVA MAG-ALF

B.2.2.3 Ricerca movimenti su COGCONTR ARPSTVEN Questa parte si esegue solo se la configurazione merci-bi0009 vale "S", e se la configurazione cod-merce-bi0009 è significativa Per il documento in esame si ricercano i movimenti su COGCONTR Per ciascun movimento effettuare la ricerca su ARPSTVEN, e l'eventuale inserimento o aggiornamento:

Nome campo Note
ARPSVE_AZI Codice azienda
ARPSVE_KEY_FATTU Chiave fattura eventualmente collegata al documento, nel formato
"CL/2022/0012345", altrimenti vuoto
ARPSVE_KEY_MAGA Chiave bolla nel formato "1/2022/I/000123"
ARPSVE_MAG_PROG CON-PROG
ARPSVE_CAGE TES-MAG
ARPSVE_CLI Cliente (es. "C00123")
ARPSVE_DATA TES-DATA
ARPSVE_DATA_AGG Data sistema
ARPSVE_SERVIZIO " "
ARPSVE_DIVISIONE " "
ARPSVE_LINEA " "
ARPSVE_MERCE La merce configurata in cod-merce-bi0009
ARPSVE_QTA Quantità movimento CON-QTA
ARPSVE_IMP_VEN CON-VALORE
ARPSVE_IMP_ACQ CON-QTA * MER-PMA
ARPSVE_DATA_BOLLA TES-DATA
ARPSVE_TRASP_AGE '0
ARPSVE_OMAGGIO " "
ARPSVE_PREZZO CON-PREZZO
ARPSVE_PREZZO_NO_SCONT CON-PREZZO
ARPSVE_PREZZO_LISTINO CON-PREZZO
ARPSVE_SCONTO 0
ARPSVE_PREZZO_MEDIO_ACQ 0
ARPSVE_ID_SINCRO Id sincro progressivo
ARPSVE_FL_CANC " "

APCOGTESBO/APCOGMOMAG Non previsto B.2.3 Esportazione autorizzazione B.2.3.1 Esportazione autorizzazione trasferimenti Se il documento non è un trasferimento, o se la gestione autorizzazioni sui trasferimenti non è attiva (vedi sopra), saltare questa sezione Consideriamo per ora solo i trasferimenti "interni", contraddistinti da TES-TIPOB = 'T' Ricerca documento complementare Il trasferimento è composto da due documenti collegati tra di loro; il secondo è presente negli ultimi 12 caratteri di TES-DESCR1 (vedi COGMAE). Trasferimento da Web Come prima cosa cerchiamo se il trasferimento proviene da APP: in questo caso sarà presente su ARPTRTES, e dovremo cercarlo: 1. Con il documento in esame 2. Se non trovato, con il documento complementare. La ricerca verrà fatta con una semplice query: SELECT * FROM arptrtes WHERE a_trtes_azi = azienda AND a_trtes_key_sede = documento Se il record viene trovato, e A_TRTES_ESCLUDI_AUT = "S", saltare la parte successiva della sezione Determinazione del documento di entrata Ora, se il documento è da autorizzare, dobbiamo identificare quale dei 2 è quello di entrata: quindi, per ciascuno dei due documenti, cercare la prima riga su COGMOMAG e valutare il segno MAG-ENTRUSC Creazione autorizzazione/i Tramite una query, effettuare la cancellazione logica di tutte le autorizzazioni collegate al documento ancora da valutare: UPDATE tbautorizzazioni SET a_aut_fl_canc = 'C' WHERE a_aut_azienda = azienda AND a_aut_doc_key = documento_entrata AND a_aut_stato = 'I' Dopodichè per tutte le righe del documento di entrata, cercare se esiste il record autorizzazione, con una ricerca diretta con chiave 3

Nome campo Contenuto
A-AUT-AZIENDA Azienda attiva
A-AUT-DOC-CLASSE K-DOC-TIP-DOC-MAG-GEN
A-AUT-DOC-KEY MAG-TESTA
A-AUT-DOC-RIGA MAG-PROG

Se il record esiste, l'autorizzazione esiste già; quindi: * Se cancellata, riattivarla impostando A-AUT-FL-CANC = " " * Se non cancellata non fare niente Se invece il record non esiste, inserirlo

Nome campo Contenuto
A-AUT-AZIENDA Azienda attiva
A-AUT-ID Id autoincrementante
A-AUT-DOC-CLASSE K-DOC-TIP-DOC-MAG-GEN
A-AUT-DOC-KEY MAG-TESTA
A-AUT-DOC-RIGA MAG-PROG
A-AUT-RIC-DATA TES-DATA
A-AUT-RIC-OPE Operatore collegato al magazzino di uscita
Vedi sotto
A-AUT-RIC-NOTE " "
A-AUT-DST-OPE Operatore collegato al magazzino di entrata
Vedi sotto
A-AUT-DST-GRP " "
A-AUT-STATO "I"
A-AUT-ID-SINCRO Primo id sincro disponibile (Ricerca e aggiornamento immediato)
A-AUT-FL-CANC " "

Ricerca operatore collegato al magazzino di uscita Se il magazzino di uscita è di tipo "Viaggiante" (MAGZ-FL-TIP = "V"), allora l'operatore che richiede l'autorizzazione al magazzino ricevente, è quello collegato al magazzino di uscita stesso; quindi: * Ricerca del veicolo a cui è associato il magazzino (ASNVEICL.AVEI-MAG) * Ricerca del tecnico a cui è associato il veicolo: scansione sequenziale su COGANAT2 fino a trovare ATN2-VEICOLO = AVEI-TARGA * Trovato il tecnico si preleva il codice opertore presente su COGANATN.ATN-OPE-COD Se invece il magazzino di uscita non è "Viaggiante", si ottiene il destinatario da CFGAUTORIZZAZIONI: * C-AUT-DST-OPE: se significativo, sarà questo operatore * C-AUT-DST-GRP: se significativo, saranno tutti gli operatori collegati al gruppo (ricerca su PRNTGROD) NB: Diamo per scontato che: * Sia attiva la gestione "Assist" * I magazzini viaggianti sono di tipo "Interno"; se si dovesse usare in ambienti come "Progresso" si dovranno effettuare le implementazioni per la ricerca su magazzino secondario. Ricerca operatore collegato al magazzino di entrata Se il magazzino di entrata è di tipo "Viaggiante" (MAGZ-FL-TIP = "V"), allora l'operatore che deve autorizzare è quello collegato al magazzino stesso; quindi: * Ricerca del veicolo a cui è associato il magazzino (ASNVEICL.AVEI-MAG) * Ricerca del tecnico a cui è associato il veicolo: scansione sequenziale su COGANAT2 fino a trovare ATN2-VEICOLO = AVEI-TARGA * Trovato il tecnico si preleva il codice opertore presente su COGANATN.ATN-OPE-COD Se invece il magazzino di entrata non è "Viaggiante", si ottiene il destinatario da CFGAUTORIZZAZIONI: * C-AUT-DST-OPE: se significativo, sarà questo operatore * C-AUT-DST-GRP: se significatico, saranno tutti gli operatori collegati al gruppo (ricerca su PRNTGROD) NB: Diamo per scontato che: * Sia attiva la gestione "Assist" * I magazzini viaggianti sono di tipo "Interno"; se si dovesse usare in ambienti come "Progresso" si dovranno effettuare le implementazioni per la ricerca su magazzino secondario. Creazione notifica Se viene creata almeno una riga di autorizzazione per un documento, ed è abilitata la creazione della notifica su CFGAUTORIZZAZIONI, effettuare la creazione di uno o più record su ARPNOTIFICHE: * 1 record se il magazzino è viaggiante, quindi il trasferimento è assegnato ad un tecnico * "n" record se il magazzino non è viaggiante quindi il trasferimento è assegnato all'operatore o al gruppo configurati su CFGAUTORIZZAZIONI

Nome campo Contenuto
ANTP-ID Id autoincrement
ANTP-AZI Azienda attiva
ANTP-CLASSE "AU"
ANTP-ID-OGGETTO A-AUT-ID (Il primo id per il documento)
ANTP-ID-TECNICO

ANTP-TIP 1
ANTP-EMAIL

B.3 - Ricerca documenti cancellati Scorrere COGEVLOG per gli eventi di tipo k-evl-canc-cogtesbo (vedi SWN117) Per ciascun record esistente: ARPSTVEN * Controllare se il documento è ancora esistente su COGTESBO (potrebbe essere stato ricreato nel frattempo) * Se non esiste, effettuare il ciclo di cancellazione logica di tutti i movimenti, come al punto B.2.2.1 APCOGTESBO/APCOGMOMAG * Controllare se il documento è ancora esistente su COGTESBO (potrebbe essere stato ricreato nel frattempo) * Se non esiste, effettuare la cancellazione logica su APCOGTESBO

Nome campo Contenuto
A_TES_FL_CANC "C"
A_TES_ID_SINCRO Nuovo ID sincro progressivo
A_TES_AGG_APP "N"

Al termine cancellare il record di COGEVLOG B.9 - Aggiornamento id syncro ARPSTVEN aggiornare il record APSTATOSYN:

Dato Contenuto
A-SYN-AZIENDA Codice azienda
A-SYN-TABELLA "ARPSTVEN"
A-SYN-DA-GES-DATA Data/ora dell'ultimo record aggiornato
A-SYN-DA-GES-ORA
A-SYN-DA-ID-SINCRO Ultimo id sincro "ARPSTVEN" + 1
A-SYN-VERSIONE 2

APCOGTESBO/APCOGMOMAG aggiornare il record APSTATOSYN:

Dato Contenuto
A-SYN-AZIENDA Codice azienda
A-SYN-TABELLA "APCOGTESBO"
A-SYN-DA-GES-DATA Data/ora memorizzata anche sul record precedente
A-SYN-DA-GES-ORA
A-SYN-DA-ID-SINCRO Ultimo id sincro "APCOGMOMAG" + 1
A-SYN-VERSIONE 2

Estratto da documentazione interna ClickUp