SWA023 - Sincronizzazione lotti merce¶
Logica generale Import/export dei lotti merce tra gestionale e database KPN Al momento è previsto solo l'esportazione da gestionale. Ad ogni esportazione saranno aggiornati sulla tabella ARPLOTTI i seguenti record: * I record modificati dopo l'ultimo aggiornamento eseguito NB: attualmente l'esportazione sarà assai poco performante, dato che manca completamente la possibilità di sapere quando un record di COGMERLT è stato inserito/aggiornato. Configurazioni possibili
| Gruppo | Parametro | Note |
|---|---|---|
Elaborazione A - Esportazione lotti aggiornati Su POSTGRES, tabella APSTATOSYN, leggere il record relativo alla tabella/oggetto da sincronizzare "COGMERLT"; se il record non esiste, crearlo impostando
| Dato | Contenuto |
|---|---|
| A_SYN_AZIENDA | Codice azienda |
| A_SYN_TABELLA | "COGMERLT" |
| A_SYN_DA_GES_DATA | 0 |
| A_SYN_DA_GES_ORA | 0 |
| A_SYN_DA_ID_SINCRO | 1 |
Qui otterremo due informazioni importanti: * Data/ora ultima esportazione da gestionale a postgres (A_SYN_DA_GES_DATA e A_SY_DA_GES_ORA) (al momento queste informazioni saranno registrate al termine dell'esportazione, ma non servono come data/ora di inizio esportazione perchè non sono dati disponibili su COGMERLT). * Prossimo ID sincronizzazione da memorizzare sulla tabella (A_SYN_ID_SINCRO) Ricerca record da esportare * Scorrere COGMERLT; per ora è necessario considerare ciascun record presente. A.1 - Esportazione Lotti * Per ciascun record valido cercare su ARPLOTTI l'esistenza di un record avente:
| Dato | Descrizione |
|---|---|
| A-MLT-AZI | Codice azienda |
| A-MLT-ID-DISPOSITIVO | 0 |
| A-MLT-IDD-PROG | 0 |
| A-MLT-MERCE | MLT-MERCE |
| A-MLT-MAG | MLT-MAG |
| A-MLT-PROG | MLT-PROG |
Se non esiste, inserirlo. Se esiste, aggiornarlo solo almeno una delle informazioni è aggiornata:
| Dato su ARPLOTTI | Dato su COGMERLT |
|---|---|
| A-MLT-LOTTO | MLT-LOTTO |
| A-MLT-QTA | MLT-QTA |
| A-MLT-STATO | MLT-STATO |
| A-MLT-DATA-PROD | MLT-DATA-PROD |
| A-MLT-DATA-SCAD | MLT-DATA-SCAD |
Nel caso sia necessario inserire/aggiornare il record ARPLOTTI, oltre ad aggiornare le informazioni di cui sopra, aggiornare anche:
| Dato | Descrizione |
|---|---|
| A-MLT-ID-SINCRO | Incrementare il campo ID-SYNCRO trovato sul file APSTATOSYN per ciascun record aggiornato |
| A-MLT-FL-CANC | " " |
| A-MLT-AGG-APP | "N" |
A.2 - Identificazione dei record cancellati [Gio: Io procederei in maniera diversa: 1) con query iniziale setto per tutti record non cancellati (A-MLT-AZI = @codice_azienda AND A-MLT-FL-CANC <> "C") A-MLT-FL-CANC = "U" 2) eseguo gli aggiornamenti visti al punto A.1 3) query che setta a A-MLT-FL-CANC = "C" e A-MLT-ID-SINCRO = Ultimo id sincro + 1 tutte le righe che hanno (A-MLT-AZI = @codice_azienda AND A-MLT-FL-CANC = "U") ovvero tutti i record non aggiornati dalle fasi precedenti Gio: no dai test fatti questa modalità è più penalizzante perchè la riscrittura di molti dati pesa più della seconda lettura di molti dati (e magari dal loro non aggiornamento) dal Database quindi utilizzo il metodo descritto sotto ] Attraverso una apposita query scorrere tutti i record non cancellati di ARPLOTTI (A-MLT-FL-CANC <> "C"); per ciascun record trovato, cercare se esiste ancora il record corrispondente lato gestionale, con una lettura di COGMERLT. Se il record non esiste significa che è stato cancellato sul gestionale. Di conseguenza è necessario marcare come cancellato il record su ARPLOTTI, aggiornando contemporaneamente l'id di sincronizzazione:
| Dato | Descrizione |
|---|---|
| A-MLT-FL-CANC | "C" |
| A-MLT-ID-SINCRO | Ultimo id sincro + 1 |
B Aggiornamento id syncro Al termine dell'elaborazione, aggiornare il record APSTATOSYN:
| Dato | Contenuto |
|---|---|
| A_SYN_AZIENDA | Codice azienda |
| A_SYN_TABELLA | "COGMERLT" |
| A_SYN_DA_GES_DATA | Data/ora attuale |
| A_SYN_DA_GES_ORA | |
| A_SYN_DA_ID_SINCRO | Ultimo ID sincro aggiornato |
C Log Il programma indica sul log "scarica_app.log" presente nelal log-dir, se ha fallito o meno aggiornamenti, poi indica quali erano gli id sincro di partenza e quello di arrivo sia per le fasi di update che per quelle di arrivo
Estratto da documentazione interna ClickUp