SWN118 - Sincronizzazione testata commesse¶
Nome programma SWN118 Linkage section UTILAGPRG - Linkage comune Id processo: 118 Nome processo:COMMESSE-TES Tabelle principali gestite
| AREA | AREAGATE | Direzione |
|---|---|---|
| COGTESCM COGBUDCM |
ARPTESCM ARPBUDCM |
------> |
Logica generale Sincronizzazione delle testate commessa Esportazione Esportazione di tutti i record effettivamente modificati (con dati variati). Ad ogni esportazione saranno aggiornati sulla tabella ARPTESCM i seguenti record: * I record modificati dopo l'ultimo aggiornamento eseguito * I record cancellati sul gestionale (sarà alzato il flag di cancellazione) NB: attualmente l'esportazione non è ottimizzata, perchè su COGTESCM manca un indice diretto su data-ora aggiornamento. Se necessario si dovrà costruire questo indice. NB: Il programma non è ottimizzato, nè strutturato come gli altri SWN in modo che l'aggiornamento sia fatto solo quando necessario. Si dovrà eventualmente rivedere. Importazione Non prevista Configurazioni possibili
| Gruppo | Parametro | Note |
|---|---|---|
| abilita | attiva-areaapp | |
| areaapp | cod-azienda | |
| areaapp | db-conn-string | |
| areaapp | agg-postgres-online |
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: ARPTESCM Se fallita inviare una Segnalazione critica e chiudere. C - Importazione aggiornamenti Non prevista B - Esportazione informazioni aggiornate * ID SINCRO: gestito * Esportazione differenziale: gestita e ottimizzata, attraverso una data specifica collegata a data/ora aggiornamento * Cancellazione logica: non gestita In questa fase si dovrà tenere conto di * Limite record * Limite errori * "Esporta tutto" B.1 - Stato sincronizzazione Sulla tabella APSTATOSYN, leggere il record relativo alla tabella/oggetto da sincronizzare "ARPAREAT"; se il record non esiste, crearlo impostando
| Dato | Contenuto |
|---|---|
| A_SYN_AZIENDA | Codice azienda |
| A_SYN_TABELLA | "ARPAREAT" |
| 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) * Prossimo ID sincronizzazione da memorizzare sulla tabella (A_SYN_ID_SINCRO) B.2 - Ricerca record da esportare B.2.1 Ricerca record da esportare
| Tipo di elaborazione | Condizione | Cosa fare |
|---|---|---|
| Singolo record | AGPRG-KEY <> " " | Si legge direttamente il record da aggiornare su ARPTESCM 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 COGTESCM; ogni record va considerato |
| Esportazione standard | Si scorrono tutti i record di COGTESCM, usando la chiave primaria (non c'è una chiave su data/ora aggiornamento), considerando solo i record con: |
|
| Pulizia | AGPRG-OPE = "PULIZIA" | Eseguire solo il giro di cancellazione logica B.3 quindi uscire |
Per ciascun record valido si cercano tutti i record collegati (in questo caso non ce ne sono) B.2.2 Verifica ed esportazione record Attenzione: questo giro viene fatto ancora nel modo tradizionale (clonato da SWA059) * Per ciascun record valido leggere anche il corrispondente record su COGTCMAG, poi cercare su APCRMDOSTP l'esistenza di un record avente:
| Dato | Contenuto |
|---|---|
| A-TSC-AZIENDA | Codice azienda |
| A-TSC-COD | TSC-COD |
Se non esiste, inserirlo. Se esiste, aggiornarlo: Informazioni con cui inserire/aggiornare un record su ARPTESCM:
| Dato | Contenuto |
|---|---|
| A-TSC-AZIENDA | Id azienda |
| A-TSC-COD | TSC-COD |
| A-TSC-DES | PGOT-DES |
| A-TSC-PROGETTO | TSC-PROGETTO |
| A-TSC-DES-BREVE | TSC-DES-BREVE |
| A-TSC-ANA | TSC-ANA |
| A-TSC-DATA-ACQ | TSC-DATA-ACQ |
| A-TSC-DATA-APE | TSC-DATA-APE |
| A-TSC-DATA-CHI | TSC-DATA-CHI |
| A-TSC-DATA-CNT | TSC-DATA-CNT |
| A-TSC-STATO | TSC-STATO |
| A-TSC-FL-CONS | TSC-FL-CONS |
| A-TSC-FL-LOTTO | TSC-FL-LOTTO |
| A-TSC-DIVISA | TSC-DIVISA |
| A-TSC-IMP-PRV | TSC-IMP-PRV |
| A-TSC-MAGG-ORE | TSC-MAGG-ORE |
| A-TSC-MAGG-SPESE | TSC-MAGG-SPESE |
| A-TSC-PROVV | TSC-PROVV |
| A-TSC-TIPO | TSC-TIPO |
| A-TSC-RAGGR | TSC-RAGGR |
| A-TSC-ANA-DST | TSCA-CLIENTE-ASS |
| A-TSC-DST-TIP | A-TSC-DST-TIP |
| A-TSC-DST-IDX | A-TSC-DST-IDX |
| A-TSC-ID-SINCRO | Ultimo id sincro + 1 |
| A-TSC-VAL | TSC-VAL |
| A-TSC-AGG-APP | " " |
| A-TSC-DATA-INI-EFF | TSCA-DATA-INI-EFF |
| A-TSC-DATA-FIN-EFF | TSCA-DATA-FINI-EFF |
In questa fase tenere memoria di data+ora dell'ultimo record aggiornato. B.2.2.1 - Esportazione collegamento con sottocommesse Usando una query marcare con A-BDSC-VAL="T" tutti i record ARPBUDSC collegati alla commessa in elaborazione Poi scorrere COGRIGCM per recuperare tutte le sottocommesse collegate:
| Dato | Contenuto |
|---|---|
| RGC-TSC | Codice commessa |
| RGC-SOT | " " |
| RGC-TIP | "SC" |
Ciascun record trovato corrisponde ad una sottocommessa collegata; cercare quindi l'esistenza del record budget COGBUDSC collegato:
| Dato | Contenuto |
|---|---|
| BDSC-COMMESSA | RGC-TSC |
| BDSC-SOTTOCOMMESSA | RGC-CHIAVE |
Quindi con i dati trovati verificare se esiste già su ARPBUDSC il record di collegamento:
| Dato | Contenuto |
|---|---|
| A-BDSC-AZIENDA | Azienda in elaborazione |
| A-BDSC-COMMESSA | RGC-TSC |
| A-BDSC-SOTTOCOMMESSA | RGC-CHIAVE |
B.2.2.1.1 - Inserimento Se il record non esiste, inserirlo:
| Dato | Contenuto |
|---|---|
| A-BDSC-AZIENDA | Azienda in elaborazione |
| A-BDSC-COMMESSA | RGC-TSC |
| A-BDSC-SOTTOCOMMESSA | RGC-CHIAVE |
| A-BDSC-COSTO-MAT | BDSC-COSTO-MAT |
| A-BDSC-COSTO-MO | BDSC-COSTO-MO |
| A-BDSC-COSTO-ALTRI | BDSC-COSTO-ALTRI |
| A-BDSC-MANODOPERA | BDSC-MANODOPERA |
| A-BDSC-ID-GANTT | A-BDSC-COMMESSA + A-BDSC-SOTTOCOMMESSA |
| A-BDSC-VAL | " " |
| A-BDSC-ID-SINCRO | Ultimo id-sincro "ARPBUDSC" + 1 |
| A-BDSC-AGG-APP | " " |
B.2.2.1.2 - Modifica Se il record esiste, confrontare i dati variabili che provengono da AREA; Se sono diversi, aggiornare il record con:
| Dato | Contenuto |
|---|---|
| A-BDSC-COSTO-MAT | BDSC-COSTO-MAT |
| A-BDSC-COSTO-MO | BDSC-COSTO-MO |
| A-BDSC-COSTO-ALTRI | BDSC-COSTO-ALTRI |
| A-BDSC-MANODOPERA | BDSC-MANODOPERA |
| A-BDSC-VAL | " " |
| A-BDSC-ID-SINCRO | Ultimo id-sincro "ARPBUDSC" + 1 |
| A-BDSC-AGG-APP | " " |
Se sono uguali, è sufficiente aggiornare il record con:
| Dato | Contenuto |
|---|---|
| A-BDSC-VAL | " " |
(quindi senza aggiornare l'id sincro) B.2.2.2 - Cancellazione logica sottocommesse non più presenti Usando una query rileggere i record di ARPBUDSC collegati alla commessa, che non sono stati trattati in precedenza: SELECT * FROM arpbudsc WHERE a_bdsc_azienda = ..... AND a_bdsc_commessa = ..... AND a_bdsc_val = "T" Per ciascun record trovato, effettuare la cancellazione logica:
| Dato | Contenuto |
|---|---|
| A-BDSC-VAL | "C" |
| A-BDSC-ID-SINCRO | Ultimo id-sincro "ARPBUDSC" + 1 |
| A-BDSC-AGG-APP | " " |
B.2.2.3 - Collegamento con sottocommessa "nulla" Se la commessa non è collegata a nessuna sottocommessa, per la corretta gestione sullo scheduler GANTT, è necessario creare un collegamento con la sottocommessa "NULLA"; quindi in questo caso se non esiste il seguente record, inserirlo:
| Dato | Contenuto |
|---|---|
| A-BDSC-AZIENDA | Azienda in elaborazione |
| A-BDSC-COMMESSA | RGC-TSC |
| A-BDSC-SOTTOCOMMESSA | "*" |
| A-BDSC-COSTO-MAT | 0 |
| A-BDSC-COSTO-MO | 0 |
| A-BDSC-COSTO-ALTRI | 0 |
| A-BDSC-MANODOPERA | 0 |
| A-BDSC-ID-GANTT | A-BDSC-COMMESSA + "*" |
| A-BDSC-VAL | " " |
| A-BDSC-ID-SINCRO | Ultimo id-sincro "ARPBUDSC" + 1 |
| A-BDSC-AGG-APP | " " |
B.3 Verifica record cancellati Sulla tabella di origine COGTESCM/COGTCMAG non esiste il flag di cancellazione logica. Quindi per esportare l'informazione relativa ai record cancellati si opererà come segue: 1. Scorrere tutti i record di ARPTESCM per l'azienda 2. Ricerca, per ciascuno, del corrispondente record su COGTESCM A questo punto la situazione potrebbe essere la seguente:
| COGTESCM trovato? |
A-TSC-VAL | Cosa fare |
|---|---|---|
| Si | "C" | Aggiornare ARPTESCM impostando |
| Si | " " | Nessuna operazione |
| No | "C" | Nessuna operazione |
| No | " " | Aggiornare ARPTESCM impostando |
B.9 - Aggiornamento id syncro Al termine dell'elaborazione, aggiornare il record APSTATOSYN:
| Dato | Contenuto |
|---|---|
| A-SYN-AZIENDA | Codice azienda |
| A-SYN-TABELLA | "ARPTESCM" |
| A-SYN-DA-GES-DATA | Data/ora dell'ultimo record aggiornato |
| A-SYN-DA-GES-ORA | |
| A-SYN-DA-ID-SINCRO | Ultimo id sincro + 1 |
| A-SYN-VERSIONE | 2 |
Estratto da documentazione interna ClickUp