Vai al contenuto

SWN137 - Esportazione delle tabelle CMA

Nome programma SWN137 Linkage section UTILAGPRG - Linkage comune Id processo: 137 Nome processo: TABELLECMA Tabelle principali gestite

AREA AREAGATE Direzione
COGTABEL (62) ARPTABELLECMA ------>

Logica generale Sincronizzazione tabelle CMA Esportazione Esportazione tabelle CMA. 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: ARPTABELLECMA. Se fallita inviare una Segnalazione critica e chiudere. B - Esportazione elementi aggiornati * ID SINCRO: gestito * Esportazione differenziale: gestita ma non ottimizzata: non esiste una chiave diretta per ottenere solo i record aggiornati * 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 "ARPTABELLECMA"; se il record non esiste, crearlo impostando

Dato Contenuto
A_SYN_AZIENDA Codice azienda
A_SYN_TABELLA "ARPTABELLECMA"
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 <> " "
(conterrà EUTA-KEY)
Si legge direttamente il record da aggiornare su COGTABEL
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 COGTABEL di tipo EUTA-TIPO 62; ogni record va considerato, ignorando il controllo sulla variazione dei record
Esportazione standard Si scorrono tutti i record di COGTABEL; non si effettua un controllo su data aggiornaento poichè non c'è su COGTABEL
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: Nessuno B.2.2 Verifica ed esportazione record Dopodichè si effettua la ricerca dell'informazione su ARPTABELLECMA

Dato Contenuto
a-ptc-azi Codice azienda
a-ptc-tip a-ptc-cod euta-ptc-tip euta-ptc-cod

Se non esiste, inserirlo. Se esiste, aggiornarlo l'aggiornamento del record deve avvenire solo se almeno un dato tra quelli da modificare è diverso. NB: se è stata richiesta l'esportazione completa (AGPRG-ESPORTA-TUTTO = "S") allora il record dovrà essere esportato a prescindere dal confronto Suggerimento Invece di popolare direttamente i dati del record di destinazione, portarli su delle copie in w/s. Al termine confrontare i dati sulla destinazione con la copia in w/s. Aggiornamento da COGTABEL NB: se a questo punto A-PTC-FL-AGG vale "A", significa che nel lasso di tempo tra la fase di importazione e questa, qualcuno ha aggiornato il record su APP: quindi segnalare sul log e ignorare l'esportazione.

Dato Contenuto Confronto?
a-ptc-azienda Codice azienda
a-ptc-tip a-ptc-cod euta-ptc-tip euta-ptc-cod
a-ptc-des euta-tma-des (*) Si
a-ptc-FL-CANC " " Si
a-ptc-ID-SINCRO Prossimo id sincro
a-ptc-FL-AGG " "

(*) Questi campi devono essere parsati da GESSTR con operazione "CONV-TESTO-X-ESPORT" prima di effettuare il confronto In questa fase tenere memoria di data+ora dell'ultimo record di input considerato. B.3 Verifica record cancellati Sulla tabella di origine COGTABEL non esiste il flag di cancellazione logica. Quindi si opererà come segue: 1. Scorrere tutti i record di ARPTABELLECMA per l'azienda 2. Ricerca, per ciascuno, del corrispondente record su COGTABEL A questo punto la situazione potrebbe essere la seguente:

COGTABEL trovato? A-PTC-FL-CANC Cosa fare
Si "C" Aggiornare ARPTABELLECMA impostando


Si " " Nessuna operazione
No "C" Nessuna operazione
No " " Aggiornare ARPTABELLECMA impostando


B.9 - Aggiornamento id syncro Al termine dell'elaborazione, aggiornare il record APSTATOSYN:

Dato Contenuto
A_SYN_AZIENDA Codice azienda
A_SYN_TABELLA "ARPTABELLECMA"
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

DFN010 - Importazione giacenze da DB frontiera

Nome programma DFN010 Linkage section UTILAGPRG - Linkage comune Id processo: 51010 Nome processo:DFN010 Tabelle principali gestite

AREA DB FRONTIERA Direzione
COGSLMAG DFGIACENZE <------

Logica generale Sincronizzazione delle giacenze di magazzino tra AREA e il DB frontiera. Per il momento funziona solo in IMPORT Magazzini secondari Per il momento l'importazione giacenze è prevista solo per i magazzini principali. Il programma pero' se non trova il collegamento con un magazzino principale, cercherà se il magazzino da importare è collegato con un magazzino secondario: in questo caso la riga verrà marcata come importata senza dare segnalazioni, ma non effettuerà - per ora - nessuna importazione NOTA operativa/funzionale La sincronizzazione delle giacenze potrebbe provocare delle incongruenze: in primo luogo, se si decide di non importare anche i movimenti di magazzino dall'HOST che la determinano. In secondo luogo, a seconda dei tempi di aggiornamento. Se importo una giacenza immediatamente dopo che su AREA è stato effettuato un movimento, la giacenza attesa su AREA potrebbe non essere corretta. Questo finchè non si effettua il seguente procedimento: 1. Esportazione movimento AREA->DB frontiera 2. Importazione movimento DB frontiera -> HOST e conseguente aggiornamento della giacenza 3. Esportazione giacenza HOST -> DB frontiera 4. Importazione giacenza DB frontiera -> AREA Si potrebbe pensare, se questo crea disfunzioni, di studiare un metodo che impedisce l'aggiornamento a seconda della data e ora di aggiornamento su AREA e sul DB frontiera, ma potrebbe risultare difficoltoso e comunque non risolvere il problema. Configurazioni possibili

Gruppo Parametro Note
dbfront sincro-attiva
dbfront email-segnalazioni
dbfront db-tipo
dbfront db-conn-string
dbfront db-log-level

Elaborazione

Operazione Descrizione
" " Elaborazione standard:
Importa i record aggiornati dal db host.
"PULIZIA" Controllo approfondito dati importati
In questa modalità si esegue come prima cosa l'elaborazione standard. Poi si
scorre tutto il contenuto delle giacenze su AREA, e per ciascun record non più presente su DBF lo cancella su AREA

Tipi di segnalazione: Vedi Tipi di segnalazione A - Controllo di esecuzione Vedi Controllo di esecuzione B - Apertura B.1 Apertura tabelle Tentare l'apertura della tabella da sincronizzare: DFGIACENZE. Se fallita inviare una Segnalazione grave e chiudere. Tentare l'apertura della tabella semaforo: DFSEMAFORO. Se fallita inviare una Segnalazione grave e chiudere. B.2 Blocco semaforo Lettura del record DFSEMAFORO:

Nome campo Note
DF_SMF_TABELLA DFGIACENZE

Se il record non esiste inserirlo. Se risulta bloccato dal gestonale host (DF_SMF_USO_HOST = 1) Informazione sul log e chiudere. Dopodichè aggiornare il semaforo impostando:

Nome campo Note
DF_SMF_USO_AREA 1
DF_SMF_VERSIONE Versione attuale: 1

B.3 Aggiornamento stato Aggiornamento dello stato sul record specifico; in particolare:

Dato Contenuto
DBFST-STATO "I"
DBFST-ATT-DATA Data sistema
DBFST-ATT-ORA Ora sistema
DBFST-SCHED-DATA Sommare il tempo di attesa a data/ora sistema
DBFST-SCHED-ORA
DBFST-ERRORI 0
DBFST-MSG-ERRORE " "
DBFST-LOG-PROCEDURA " "

C - Sincronizzazione (Importazione) C.1 Selezione record da importare Tramite un comando SQL specifico, estrazione di tutti i record aggiornati dall'HOST: SELECT * FROM DFGIACENZE WHERE DF_GIA_AGG_HOST = 1 C.2 Controllo record Per ciascun record letto, verificare la correttezza delle informazioni contenute NB: per ottimizzare i tempi di elaborazione, precaricare in tabella di working l'elenco dei magazzini. Controllo DF_GIA_MAG_HOST Questa informazione deve essere significativa, altrimenti segnalare Errore . 1. Si dovrà cercare su COGMAGAG se esiste già un magazzino con MAGG-CODICE-HOST = DF_GIA_MAG_HOST. Se non esiste: 2. Si dovrà cercare su COGMAGPE se esiste un magazzino secondario con MGP-CODICE-HOST = DF_GIA_MAG_HOST. Se non esiste: 3. Segnalare Errore : "DF_GIA_MAG_HOST : magazzino non collegato ad un magazzino di area" Se esiste ed è collegato ad un magazzino interno, sarà quello su cui aggiornare la giacenza. Se esiste ed è collegato ad un magazzino secondario, marcare il record come importato, ma non fare nulla e non dare segnalazioni. Controllo DF_GIA_MPR_HOST questa informazione contiene il codice merce avanzato di una merce (che corrisponde al codice articolo HOST) su cui impostare lo sconto. Quindi, cercare su COGRACMC; se non esiste segnalare Errore "DF_GIA_MPR_HOST; merce non esistente" C.3 Importazione record Se tutti i controlli sono superati, proseguire con l'inserimento/variazione della giacenza. Ricerca su COGSLMAG:

Nome campo Contenuto
MSAL-MAG1 Il magazzino collegato a DF_GIA_MAG_HOST
MSAL-MERCE Il codice merce collegato a DF_GIA_MPR_HOST

Se il record non esiste inserirlo. Dopodichè, aggiornare la quantità giacenza, ma solo se diversa da quella già presente, per minimizzare la successiva esportazione verso WEB:

Nome campo Contenuto
MSAL-QTA DF_GIA_QTA_GIA
MSAL-FL-AGG "S"

C.4 Aggiornamento stato record Aggiornare il record DFGIACENZE impostando:

Nome campo Contenuto
DF_GIA_AGG_HOST 0
DF_GIA_AGG_AREA 0

D - Sincronizzazione (esportazione) Fase non prevista in questo programma E - Chiusura E.1 Rilascio semaforo Aggiornare il record semaforo relativo a DFGIACENZE, impostando

Nome campo Note
DF_SMF_USO_AREA 0

E.2 Chiusura tabelle Chiudere le tabella DFGIACENZE e DFSEMAFORO E.3 Aggiornamento stato Aggiornamento dello stato sul record specifico; in particolare:

Dato Contenuto
DBFST-STATO "A"
DBFST-ERRORI Numero di errori rilevati
DBFST-MSG-ERRORE Ultimo errore rilevato
DBFST-LOG-PROCEDURA Codice procedura di gestione log

F - Cancellazione logica record non presenti (Operazione "PULIZIA") F.1 Blocco semaforo Lettura del record DFSEMAFORO:

Nome campo Note
DF-SMF-TABELLA DFGIACENZE

Se il record non esiste inserirlo. Se risulta bloccato dal gestonale host (DF-SMF-USO-HOST = 1) segnalare sul log e chiudere. Dopodichè aggiornare il semaforo impostando:

Nome campo Note
DF-SMF-USO-AREA 1

F.2 Elaborazione Scorrere COGSLMAG. Per ciascuna riga presente fare una ricerca su DFGIACENZE, usando la chiave primaria:

Nome campo Contenuto
DF-GIA-MAG-HOST Codice magazzino host di MSAL-MAG1 (trovato su COGMAGAG.MAGG-CODICE-HOST)
DF-MPR-KEY-HOST Il codice merce avanzato di MSAL-MERCE (RCM-COD-AVA)

Se il record non viene trovato, eliminare fisicamente il record di COGSLMAG: Al termine registrare sul log i contatori di record letti/cancellati F.3 Rilascio semaforo Lettura del record DFSEMAFORO:

Nome campo Note
DF-SMF-TABELLA DFGIACENZE

Dopodichè aggiornare il semaforo impostando:

Nome campo Note
DF-SMF-USO-AREA 0

Altri processi schedulati

Qui descrivo altri processi nati per essere schedulati da AGLANCIO, anche se non direttamente correlati alla sincronizzazione.

COGT42N - Schedulazione-avvisi-n

Nome programma COGT42N Linkage section UTILAGPRG - Linkage comune Id processo: 30001 Nome processo:AVVISI-N Logica generale Questo programma genera degli avvisi per ciascuna commessa fatturata parzialmente, e per la quale non sono state emesse fatture entro "n" giorni Mettere nel programma la scrittura dei log di procedura sufficienti a capire lo svolgimento dell'elaborazione. 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. B - Elaborazione B.0 - Ricerca testata segnalazione Ricerca della testata segnalazione su COGSGTIP:

Dato Contenuto
SGC-CAT "A"
SGC-COD "N"

Se il record esiste, e SGT-FL-ATTIVA = 'S' proseguire con l'elaborazione; altrimenti uscire segnalando nel log che l'elaborazione non è attiva. Questo record contiene anche altri dati necessari in seguito. B.0.1 - Ricerca destinatari Creare una tabella in working contenente di destinatari (elenco di operatori) Scorrere i record di COGSGDST per il tipo avviso:

Dato Contenuto
SGD-CAT "A"
SGD-COD "N"
SGD-LIV 1

Ogni record trovato corrisponde ad un destinatario dell'avviso; quindi, se SGD-DST-TIP vale:

SGD-DST-TIP Cosa fare
"O" SGD-DST-OPE contiene un operatore da aggiungere alla tabella (se non esiste già)
"G" SGD-DST-GRP contiene un gruppo di utenti; quindi, cercare gli utenti contenuti nel gruppo, con una ricerca su PRNTGROD:

Ciascun record trovato corrisponde ad un operatore; aggiungere quindi PGOD-OPE alla tabella, se non esiste già

B.1 - Ricerca commesse Ricerca delle commesse aperte: scansione di COGTESCM via TSC-CHIA7. La commessa è valida se è a preventivo: cercare il tipo commessa su COGTABEL:

Dato Contenuto
EUTA-TIPO K-EUTA-TIPO-TIPO-COMMESSA
EUTA-COD TSC-TIPO

Il record trovato deve avere EUTA-COM-FL-ECON <> "S" -> Commesse a preventivo Per "IMPERNOVO": considerare solo le commesse con TSC-RAGGR = "F" B.2 Analisi dati commessa Se la commessa è valida, effettuare una chiamata a COGUA0 :

Dato Contenuto
COGUA0-COMMESSA TSC-COD

All'uscita valutare il totalizzatore "DIFF-PREV-FATT" (restituito nella tabella COGUA0-TAB-TOTALIZZATORI) Se è > 0 proseguire B.3 Ricerca data ultima fattura Cercare tutte le fatture collegate alla commessa, con ricerca su COGRIGCM : RGC-TSC = TSC-COD Considerare quindi solo i record con RGC-TIP = 'FT'; RGC-CHIAVE conterrà la chiave fattura. Con questa cercare la testata fattura su COGFATTU. Determinare la data fattura più recente per la commessa. No, siccome il tipo "FT" non e' gestito, la data e la chiave dell' ultima fattura viene restituita da COGUA0:

  • cogua0-ult-fat-data
  • cogua0-ult-fat-key Calcolare la differenza tra la data odierna e la data ultima fattura, in giorni: se è > numero di giorni configurati in SGT-SOGLIA-1, allora proseguire con il punto B.4 B.4 - Creazione avviso (prendere spunto da COGT42M) B.4.1 Ricerca segnalazione per la commessa Fare una ricerca su COGSEGNA con chiave SGN-CHIA2:
Dato Contenuto
SGN-CAT "A"
SGN-COD "N"
SGN-KEY-LIV 1
SGN-KEY TSC-COD

Scorrere tutti i record trovati, e verificare se esiste una segnalazione ancora aperta per la commessa in esame (SGN-FL-EVA <> "S"); i casi potrebbero essere: * Non esiste -> Creazione di una nuova segnalazione * Esiste: "Refresh" segnalazione B.4.2 Creazione nuova segnalazione B.4.2.1 Testata segnalazione Cercare il primo numero libero di segnalazione, con una ricerca all'indietro su COGSEGNA. Quindi creare il record di testata:

Dato Contenuto
SGN-NUM Primo numero libero
SGN-CAT "A"
SGN-COD "N"
SGN-KEY-LIV 1
SGN-KEY TSC-COD
SGN-AUT-TIP "P"
SGN-AUT k-program-id
SGN-DATA-EMI Data sistema
SGN-ORA-EMI Ora sistema
SGN-OGG Commessa non fatturata completamente: TSC-COD
SGN-FL-RISP "N"
SGN-FL-AGG "S"
SGN-FL-EVA "N"

B.4.2.2 Note segnalazione Inserire un record su COGSGNNT

Dato Contenuto
SGL-NUM SGN-NUM
SGL-LEN Lunghezza della nota creata
SGL-NOTE L'ultima fattura sulla commessa è TT/AAAA/NNNNNNN del GG/MM/AAAA

B.4.2.3 Destinatari Per ciascun operatore presente nella tabella preparata all'inizio, aggiungere un record su COGSGNDT:

Dato Contenuto
SGO-NUM SGN-NUM
SGO-OPE Codice operatore
SGO-FL-EVA "N"
SGO-DATA-EVA 0
SGO-ORA-EVA 0
SGO-DATA-EMI SGN-DATA-EMI
SGO-ORA-EMI SGN-ORA-EMI
SGO-FL-ALLARME "N"

B.4.3 Refresh segnalazione esistente In questo caso una segnalazione potrebbe essere stata vista anche solo da 1 utente del gruppo, quindi non risulta ancora evasa. E' necessario quindi "riaprire la segnalazione" per tutti gli utenti interessati: Loop su COGSGNDT. impostando

Dato Contenuto
SGO-NUM SGN-NUM

Per ciascun record letto, se SGO-FL-EVA = "S", aggiornare impostando * SGO-FL-EVA = "N" * SGO-FL-VISTA = "N"

SKG002 - Ricalcolo calendario

Nome programma SKG002 Linkage section UTILAGPRG - Linkage comune Id processo: 30002 Nome processo: RIC-CALENDARIO Logica generale Questo processo è propedeutico a SWN123 - Giorni di non disponibilità Lo scopo è quello di ricreare il calendario aziendale e/o per operatore, con una chiamata a ASN120 Configurazioni possibili

Gruppo Parametro Note
abilita attiva-areaapp
areaapp cod-azienda
areaapp db-conn-string
areaapp agg-postgres-online
areaapp arpggnondisp-giorni-ricalcolo

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 ARPSTPRC Se fallita inviare una Segnalazione critica e chiudere. B - Elaborazione Se la configurazione arpggnondisp-giorni-ricalcolo vale 0, non effettuare nessuna elaborazione B.1 Ricalcolo calendario Il ricalcolo del calendario viene fatto semplicemente con una una chiamata a CRM120:

Dato Contenuto
CRM120-CALLER k-program-id
CRM120-CALLED "CRM120"
CRM120-OPE 0
CRM120-DATA-MIN Oggi
CRM120-DATA-MAX Oggi + arpggnondisp-giorni-ricalcolo
CRM120-BATCH-MODE "S"

Questo ricostruisce il contenuto di CRMAGCAL per il periodo in corso.

CLR001 - Pulizia calendario CRM

Nome programma CLR001 Linkage section UTILAGPRG - Linkage comune Id processo: 4001 Nome processo: CLR001 Logica generale Programma che effettua la pulizia periodica delle tabelle che gestiscono l'agenda CRM: * CRMAGCAL * CRMAGASP Le informazioni riguardanti le cancellazioni effettuate verranno registrate su COGEVCLR La pulizia verrà effettuata in base al periodo identificato dalla configurazione limite-pulizia Configurazioni possibili

Gruppo Parametro Note
abilita attiva-areaapp
areaapp cod-azienda
areaapp db-conn-string
areaapp agg-postgres-online
cogesys limite-pulizia

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 ARPSTPRC Se fallita inviare una Segnalazione critica e chiudere. B - Elaborazione Se la configurazione limite-pulizia è vuota, non effettuare nessuna elaborazione Come prima cosa effettuare una chiamata a GESDATE, operazione "TOGLI-PERIODO"

Dato Contenuto
GESDATE-OPE "TOGLI-PERIODO"
GESDATE-DATA-IN Data di sistema
GESDATE-STRING limite-pulizia

Questa funzione restituisce in GESDATE-DATA-OUT la data fino a cui effettuare la pulizia. Se vuota, segnalare nel log con un errore critico e uscire B.1 Ricerca operatori Entrambe le tabelle hanno in chiave primaria il codice operatore, ma non hanno una chiave diretta sulla data calendario. Scorere quindi la tabella operatori (PRNTOPER); per ciascun operatore trovato: B.1.1 Pulizia CRMAGCAL Scorrere tutti i record di CRMAGCAL per l'operatore, usando la chiave primaria:

Dato Contenuto
CCA-OPE PTOP-COD
CCA-DATA 0

Effettuare la cancellazione di tutti i record, finchè CCA-DATA < GESDATE-DATA-OUT, quindi interrompere Aumentare un contatore per tutti i record cancellati sulla tabella B.1.2 Pulizia CRMAGASP Scorrere tutti i record di CRMAGASP per l'operatore, usando ASP-CHIA2:

Dato Contenuto
ASP-OPE PTOP-COD
ASP-DATA 0

Effettuare la cancellazione di tutti i record, finchè ASP-DATA < GESDATE-DATA-OUT, quindi interrompere Aumentare un contatore per tutti i record cancellati sulla tabella B.2 Inserimento COGEVCLR Per ciascun contatore dei record cancellati, se sono > 0 inserire un record su COGEVCLR

Dato Contenuto
EVC-ID Primo id disponibile
EVC-PRG K-PROGRAM-ID
EVC-TABELLA La tabella interessata
EVC-DATA Data sistema
EVC-DATA-LIMITE GESDATE-DATA-OUT
EVC-N-RECORD-CANC Numero di record cancellati

CLR003 - Pulizia listini vendita/acquisto

Nome programma CLR003 Linkage section UTILAGPRG - Linkage comune Id processo: 40003 Nome processo: CLR003 Logica generale Programma che effettua la pulizia periodica delle tabelle che gestiscono i listini vendita/acquisto: * COGLISNW * COGLISFO La pulizia verrà effettuata tramite chiamate a COGU67 Le informazioni riguardanti le cancellazioni effettuate verranno registrate su COGEVCLR La pulizia verrà effettuata in base al periodo identificato dalla configurazione limite-pulizia Aggiungere le informazioni principali dell'elaborazione nel log di processo Configurazioni possibili Gestire le configurazioni impostando NCNF-SUDD = 'CLR003'

Gruppo Parametro Note
abilita attiva-areaapp
areaapp cod-azienda
areaapp db-conn-string
areaapp agg-postgres-online
cogesys limite-pulizia

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 ARPSTPRC Se fallita inviare una Segnalazione critica e chiudere. B - Elaborazione Se la configurazione limite-pulizia è vuota, non effettuare nessuna elaborazione Come prima cosa effettuare una chiamata a GESDATE, operazione "TOGLI-PERIODO"

Dato Contenuto
GESDATE-OPE "TOGLI-PERIODO"
GESDATE-DATA-IN Data di sistema
GESDATE-STRING limite-pulizia

Questa funzione restituisce in GESDATE-DATA-OUT la data fino a cui effettuare la pulizia. Se vuota, segnalare nel log con un errore critico e uscire B.1 Pulizia listini clienti standard Effettuare una chiamata a COGU67

Dato Contenuto
COGU67-CALLED "COGU67-CALLED"
COGU67-DATA-LIS GESDATE-DATA-OUT
COGU67-TIP-OP "N"
COGU67-COMPATTA "S"
COGU67-TIP-LIS "L"
COGU67-RIF-LIS 0

B.2 Pulizia listini particolari clienti Effettuare una chiamata a COGU67

Dato Contenuto
COGU67-CALLED "COGU67-CALLED"
COGU67-DATA-LIS GESDATE-DATA-OUT
COGU67-TIP-OP "N"
COGU67-COMPATTA "S"
COGU67-TIP-LIS "C"
COGU67-RIF-LIS 0

B.3 Pulizia listini fornitori Effettuare una chiamata a COGU67

Dato Contenuto
COGU67-CALLED "COGU67-CALLED"
COGU67-DATA-LIS GESDATE-DATA-OUT
COGU67-TIP-OP "N"
COGU67-COMPATTA "S"
COGU67-TIP-LIS "F"
COGU67-RIF-LIS 0

B.4 Inserimento COGEVCLR Ogni chiamata a COGU67 restituità i record letti e quelli elaborati: quelli con tipo listino "C" e "L" vanno sommati. Poi per ciascun contatore dei record cancellati, se sono > 0 inserire un record su COGEVCLR

Dato Contenuto
EVC-ID Primo id disponibile
EVC-PRG K-PROGRAM-ID
EVC-TABELLA La tabella interessata (COGLISNW/COGLISFO)
EVC-DATA Data sistema
EVC-DATA-LIMITE GESDATE-DATA-OUT
EVC-N-RECORD-CANC Numero di record cancellati

TGL473 - Importazione lavorazioni LVD

Nome programma TGL473 Linkage section UTILAGPRG - Linkage comune Id processo: 90001 Nome processo: TGL473 Tabelle principali gestite

AREA AREAGATE Direzione

Logica generale Gestione taglio lamiere Importazione del consuntivo lavorazione da LVD (gestione piegatrici) Questo programma mantiene la struttura dei programmi SWN per poter usufruire delle logiche di innesco e del controllo di keep-alive (i processi tra 90000 e 99999) saranno assegnati di default all'istanza 91, e che potrà quindi essere debitamente controllata. Essendo un programma in background, aggiungere al programma il "verbale" delle operazioni abbastanza preciso e dettagliato tramite la scrittura con "gesdebug" Configurazioni possibili

Gruppo Parametro Note
abilita attiva-areaapp
areaapp cod-azienda
areaapp db-conn-string
areaapp agg-postgres-online
tagliolm path-lvd-input
tagliolm lav-piegatura

Elaborazione Tipi di segnalazione: Vedi Tipi di segnalazione a 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: ARPSTPRC Se fallita inviare una Segnalazione critica e chiudere. B - Importazione consuntivi Effettuare la scansione della cartella configurata in path-lvd-input, usando i comandi "C$LIST-DIRECTORY". Ciascun file corrisponde ad un consuntivo di lavorazione da acquisire. Att100ualmente non è noto se il nome del file è riconoscibile, quindi diamo per scontato che ciascun file sia da acquisire. B.1 - Acquisizione singolo file Il file può contenere una o più righe di dati. Una singola riga potrebbe essere come segue: "33081;lvd001;3;2;1;21-11-17 11:55:08;21-11-17 11:55:58;00:00:10;00:00:37;00:00:47;Operatore;FINISHED;Commento";

Dato Significato Note
33081 Codice macchina "LVD" Corrisponde al codice "esterno" presente su CLCANAMA.MAC-COD-ESTERNO
Cercare su questa tabella la macchina corrispondente. Se non presente, segnalare un errore critico nel log e non importare il file.
lvd001 Codice lavorazione (chiedere conferma) Cercare la commessa di lavorazione; il codice lavorazione è nel formato "221250_13":






3 N. pezzi richiesti
2 N. pezzi lavorati
1 N. pezzi scartati
21-11-17 11:55:08 Data/ora inizio
21-11-17 11:55:58 Data/ora fine
00:00:10 Tempo di lavorazione
00:00:37 Tempo di setup
00:00:47 laTempo totale di lavorazione
Operatore Operatore assegnato alla macchina
FINISHED Stato del lavoro
Commento Commento inserito manualmente dall'operatore

B.2 - Creazione consuntivo Per ciascuna riga presente nel file creare un record su TGLLCONS:

Dato Contenuto
TLCO-ID Nuovo id progressivo
TLCO-COM-ANN CLA-ANNO
TLCO-COM-NUM CLA-NUMERO
TLCO-MAC MAC-COD (trovato da CLCANAMA come spiegato sopra)
TLCO-LAV lav-piegatura
TLCO-TIP "L"
TLCO-OPE-1 0
TLCO-OPE-2 0
TLCO-STATO "C"
TLCO-DATA-INI Data inizio operazione
TLCO-ORA-INI Ora inizio operazione
TLCO-DATA-FIN Data fine operazione
TLCO-ORA-FIN Ora fine operazione
TLCO-TEMPO Il contenuto del campo "Tempo di lavorazione", convertito in minuti
TLCO-POSTAZIONE " "
TLCO-RIGA-ORDINE Il numero riga ricavato dal codice lavorazione (vedi sopra)

B.3 - Backup file Al termine dell'elaborazione spostare il file nella sottocartella "backup". Segnalare in caso di errore

FORMA0 - Esportazione movimenti a Soprasteria

Nome programma FORMA0 Linkage section UTILAGPRG - Linkage comune Id processo: 90002 Nome processo: FORMA0 Tabelle principali gestite

AREA AREAGATE Direzione
FRMTESBO
FRMDETBO

Logica generale Esportazione Esportazione movimenti fedi di deposito "Pegno rotativo" verso il portale "Soprasteria" Importazione Non prevista Configurazioni possibili

Pacchetto Gruppo Parametro Note
C abilita attiva-areaapp
C areaapp cod-azienda
C areaapp db-conn-string
C areaapp agg-postgres-online
F connect soprasteria-fonte
F connect modo-pegno-rotativo
F connect fors24-invio-interattivo

Elaborazione Attenzione: se la configurazione fors24-invio-interattivo vale "S", e EXT-IS-BATCH-MODE = "S" emettere una segnalazione "warning" sul log e uscire: "Il programma non verrà eseguito perchè è in modalità interattiva" 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: ARPSTPRC Se fallita inviare una Segnalazione critica e chiudere. A.2.2 Data/ora ultima esportazione Sulla tabella APSTATOSYN, leggere il record relativo alla tabella/oggetto da sincronizzare "FORMA0"; se il record non esiste, crearlo impostando

Dato Contenuto
A_SYN_AZIENDA Codice azienda
A_SYN_TABELLA "FORMA0"
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) Leggiamo anche un altro record:

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

Qui leggiamo data/ora ultima esportazione dei movimenti scalera. B - Creazione file di transito Definire all'interno del programma un file di transito che dovremo popolare nell'elaborazione, e servirà da base per l'esportazione. Il file di transito conterrà i seguenti campi:

Dato Formato Descrizione
TRS-CHIA1
TRS-DOCUMENTO
TRS-TESTA








9(02)
9(04)
x(01)
9(06)
9(02)
9(04)
9(02)
x(10)
Identificativo di movimento
TRS-DATI

9(04) Anno/Mese di produzione nel formato AAMM

x(20) Ubicazione della partita nel formato
"Magazzino"."Area"."Scalera".0.0

x(10) Causale del movimento

9(05) Codice cliente depositante

x(16) Codice fiscale del cliente depositante

x(01) Tipo di merce



x(10) Codice matricola (caseificio)

9(06) Numero di forme presenti

9(08)v999 Peso complessivo delle forme

x(20) Id garanzia

9(08) Data evento

B.1 - Ricerca movimenti tramite log Diamo per scontato che sia attivo il log di aggiornamento sulla tabella FRMTESBO. Quindi effettuiamo una scansione su LOGAGREC con LGR-CHIA3, impostando

Dato Contenuto
LGR-FILE "frmtesbo"
LGR-DATA Data e ora ultimo aggiornamento da APSTATOSYN
LGR-ORA

Per ogni record valido cerco la chiave corrispondente su LOGIDREC attraverso la chiave primaria:

Dato Contenuto
LRR-FILE LGR-FILE
LRR-ID LGR-ID-RECORD

Se il record non esiste saltare segnalando un errore critico. Altrimenti LRR-CHIAVE conterrà la testata del documento da considerare, e corrisponde a TES-CHIA1 Cercare la testata documento FRMTESBO

Dato Contenuto
TES-CHIA1 LRR-CHIAVE

Filtro in base a modo-pegno-rotativo> B.F.1 - Modo "F" Considerare solo i movimenti con TES-TIPODOC1: * "F" (vincoli) * "W" (svincoli) B.D.1 - Modo "D" Considerare solo i movimenti con TES-CAUSALE: * Tra 1 e 39 (Entrate) * Tra 60 e 99 (Uscite) NB: il record di aggiornamento può essere inserito solo in caso di inserimento: ora non è possibile modificare un movimento, dopo che è stato esportato, quindi l'eventuale modifica trovata è solo quella che viene effettuata da questo programma per fleggare il record. Invece la cancellazione è possibile solo se non ancora esportato, quindi in questo caso posso proseguire con l'elaborazione. Poi cercare sul file di transito se abbiamo già considerato il documento (quindi se è presente almeno un record a fronte della testata TES-CHIA1. Se esiste: valutare il tipo di log (LOG-OPERAZIONE") * "C" (cancellazione) rimuovere tutti i record collegati alla testata sul file di transito * <> "C": non fare nulla Altrimenti proseguire Cercare la testata aggiuntiva documento FRMTESAP

Dato Contenuto
TAP-CHIA1 TES-CHIA1

B.F.1.1 - Svincolo: ricerca vincolo (solo se modo-pegno-rotativo = "F") Se stiamo elaborando uno svincolo, dobbiamo cercare il vincolo a cui è collegato, da completare B.2 - Movimenti documento Per ciascun documento leggere tutti i movimenti collegati su FRMRIGBO, usando la chiave primaria:

Dato Contenuto
RIG-TESTA TES-CHIA1

Per ciascun movimento valido leggiamo anche FRMDEPOS tramite la chiave primaria

Dato Contenuto
DPS-DEPOSITO RIG-DEPOSITO

B.D.2.1 - Filtro su deposito (solo se modo-pegno-rotativo = "D") Considerare il movimento solo se DPS-ANT-TIP = "P" Proseguire cercando l'anagrafica merci FRMMERCI:

Dato Contenuto
PRO-CHIA1 RIG-MERCE

B.3 - Dettaglio mensile Ora per ciascun movimento leggiamo il dettaglio mensile del movimento, scorrendo FRMDETBO per la chiave primaria

Dato Contenuto
ESP-TESTA RIG-TESTA
(passando campo campo perchè la lunghezza di ESP-PROGR1 non corrisponde)

B.4 - Scalere Ciascun dettaglio mensile potrebbe ulteriormente essere suddiviso in "movimenti scalera"; scorrere quindi la tabella FRMSCLMV usando SCM-CHIA2

Dato Contenuto
SCM-DOC-TESTA RIG-TESTA
SCM-DOC-RIG RIG-RIGA
SCM-DOC-MES ESP-MESE

Attenzione: SCM-FORME corrisponde al dettaglio massimo del movimento che si può trovare. A parità di record dettaglio mensile (FRMDETBO) la sommatoria di FRMSCLMV.SCM-FORME dovrebbe corrispondere a FRMDETBO.ESP-NUMFORME

Nel caso in cui non esistano movimenti, o la sommatoria sia inferiore a ESP-NUMFORME, considerare come se esistesse un record di FRMSCLMV con SCM-SCL = " " Se invece la sommatoria dovesse essere superiore, segnalare con un errore critico indicando documento+riga+mese Per ciascun movimento trovato leggere invece l'anagrafica scalera FRMSCLAN:

Dato Contenuto
SCA-COD SCM-SCL

B.9 - Aggiornamento transito Ora per ciascun movimento scalera trovato andremo a cercare ed inserire/aggiornare il file di transito riepilogativo per fede/mese Ricerca:

Dato Descrizione
TRS-TESTA TES-CHIA1
TRS-RIGA RIG-RIGA1
TRS-MESE ESP-MESE
TRS-SCALERA SCM-SCL

Se non presente inserire il record con:

Dato Descrizione
TRS-LOTTO DPS-MER-ANN (3:2) + ESP-MESE
TRS-UBICAZIONE SCM-DOC-MAG+"."+SCA-UBI+"."+SCM-SCL+".0.0"
TRS-CLI DPS-CLIE
TRS-CF COGGEANA.ANA-COFI
TRS-MATRICOLA DPS-MTR-NUM
TRS-CAUSALE A seconda del tipo di movimento:

Entrata


Uscita

TRS-TIPO PRO-CLASSE
TRS-FORME Numero di forme
TRS-PESO Il numero di forme per il peso medio movimento (RIG-QTA/RIG-NUMFORME)
TRS-ID-GARANZIA DPS-ANT-NUM
TRS-DATA RIG-DATA

B.10 - Movimenti scalera Aggiungiamo al file di transito anche i movimenti scalera effettuati dalla funzione di trasferimento. Questi sono memorizzati su FRMSCLMV senza riferimenti al documento di magazzino.

Per ora effettuiamo la scansione sequenziale della tabella, considerando tutti i record con data/ora aggiornamento superiore all'ultima effettuata. Al momento data/ora aggiornamento non sono indicizzati su FRMSCLMV. Si prenderanno in considerazione quindi tutti i movimenti a partire dall'istante successivo, e solo quelli con SCM-DOC-TESTA non valorizzati. Per ciascun movimento dobbiamo leggere: * FRMDEPOS per il deposito collegato SCM-DEPOSITO * FRMSCLAN per la scalera in esame SCM-SCL * COGGEANA per il cliente collegato al deposito * FRMMERCI per il prodotto collegato al deposito Poi andiamo a memorizzare l'informazione sul file di transito

Dato Descrizione
TRS-TESTA SCM-CHIA1
TRS-RIGA SCM-DOC-RIG
TRS-MESE SCM-DOC-MES
TRS-SCALERA SCM-SCL

Se non presente inserire il record con:

Dato Descrizione
TRS-LOTTO DPS-MER-ANN (3:2) + ESP-MESE
TRS-UBICAZIONE SCM-DOC-MAG+"."+SCA-UBI+"."+SCM-SCL+".0.0"
TRS-CLI DPS-CLIE
TRS-CF COGGEANA.ANA-COFI
TRS-MATRICOLA DPS-MTR-NUM
TRS-CAUSALE A seconda del tipo di movimento:

Entrata


Uscita

TRS-TIPO PRO-CLASSE
TRS-FORME Numero di forme
TRS-PESO Il numero di forme per il peso medio deposito (DPS-CAR-NUM/DPS-SCA-NUM)
TRS-ID-GARANZIA DPS-ANT-NUM
TRS-DATA SCM-DA-DATA

C - Creazione file di testo Durante l'elaborazione alzare dei flag per capire se sono presenti record per le causali interessate: * TRS-CAUSALE = "CARICO" * TRS-CAUSALE = "SCARICO" Per ciascuna causale con almeno 1 record rileggere il file di transito e seguire l'elaborazione Tramite COGPA9 effettuare l'esportazione del file. NB: In ciascun ambiente sarà presente un solo modello di esportazione per ciascuna causale; la ricerca verrà effettuata impostando come filtro la causale stessa in modo che sia possibile la scelta automatica. Il modello conterrà tutte le informazioni previste, nella sequenza qui indicata. Vedi ad esempio COGFA6/COGP78HT C.1 - Ricerca modello Prima chiamata a COGPA9 per recuperare il modello:

Dato Descrizione
COGPA9-OPERAZIONE "SELEZIONE"
COGPA9-MODELLO K-IE-MODELLO-E-FORMA1
COGPA9-FILTRO La causale in elaborazione

All'uscita COGPA9-ID-VERSIONE conterrà il modello da utilizzare C.2 - Creazione file di transito x COGPA9 Definire un nome per il file di transito COGPA9-T-DATI, usando anche data/ora sistema (richiamabile nel programma direttamente da screens), e aprirlo in output Scorrere il file di transito interno al programma. Per ciascun record con TRS-FORME > 0, effettuare l'esportazione di una riga (1 record per ciascun campo), con tutti i campi previsti nel modello "E-FORMA0"

Dato Descrizione
FONTE "Fonte" configurata
FILIERA "FORMAGGIO"
CAUSALE La causale in elaborazione
DATA-EVENTO TRS-DATA
UBICAZIONE TRS-UBICAZIONE
CF-PROPRIETARIO TRS-CF
PRODUTTORE TRS-MATRICOLA
LOTTO TRS-LOTTO
NUM-FORME TRS-FORME
PESO TRS-PESO
ID-GARANZIA TRS-ID-GARANZIA

C.3 - Produzione file Il modello sarà configurato per esportare un file "CSV", il cui nome dovrà essere indicato nel modello stesso. Chiudere COGPA9-T-DATI. Effettuare quindi una chiamata a COGPA9

Dato Descrizione
COGPA9-OPERAZIONE "ESPORTAZIONE"
COGPA9-MODELLO K-IE-MODELLO-E-FORMA1
COGPA9-ID-VERSIONE La versione restituita in precedenza
COGPA9-NOME-T-DATI Il nome del file attribuito al transito COGPA9-T-DATI
COGPA9-FL-BATCH "S"
COGPA9-FL-APRI-OUTPUT "N"
COGPA9-TIPO-PATH "S"
COGPA9-PATH EXT-TMP-DIR+"soprasteria-fonte_causale_YYYYMMDDhhmmss.csv"

All'uscita COGPA9-PATH conterrà il nome del file "csv" generato. D - Passaggio dati a Soprasteria Effettuare una chiamata a FORS24

Dato Contenuto
FORS24-OPE "INVIA"
FORS24-FILE-NAME Il nome del file da inviare
FORS24-FILE-LOCATION Location del file da inviare

All'uscita se l'esito è "S" l'operazione è riuscita. Altrimenti inviare una segnalazione critica contenente FORS24-MSG D.1 - Blocco i documenti Se l'operazione è riuscita con successo, rileggere il file di transito; per ciascuna testata movimento considerata, effettuare l'aggiornamento di FRMTESBO:

Dato Descrizione
TES-FL-BLOCCATO "S"

FORMA1 - Esportazione "balance" a Soprasteria

Nome programma FORMA1 Linkage section UTILAGPRG - Linkage comune Id processo: 90003 Nome processo: FORMA1 Tabelle principali gestite

AREA AREAGATE Direzione
FRMTESBO
FRMDETBO

Logica generale Esportazione Esportazione saldo fedi di deposito verso il portale "Soprasteria" Importazione Non prevista Configurazioni possibili

Pacchetto Gruppo Parametro Note
C abilita attiva-areaapp
C areaapp cod-azienda
C areaapp db-conn-string
C areaapp agg-postgres-online
F connect modo-pegno-rotativo
F connect soprasteria-fonte
F connect fors24-invio-interattivo

Elaborazione Attenzione: se la configurazione fors24-invio-interattivo vale "S", e EXT-IS-BATCH-MODE = "S" emettere una segnalazione "warning" sul log e uscire: "Il programma non verrà eseguito perchè è in modalità interattiva" 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: ARPSTPRC Se fallita inviare una Segnalazione critica e chiudere. B - Creazione file di transito Definire all'interno del programma un file di transito che dovremo popolare nell'elaborazione, e servirà da base per l'esportazione. Il file di transito conterrà i seguenti campi:

Dato Formato Descrizione
TRS-CHIA1

9(04) Anno/Mese di produzione nel formato AAMM

x(20) Ubicazione della partita nel formato
"Magazzino"."Area"."Scalera".0.0
TRS-DATI

9(05) Codice cliente depositante

x(16) Codice fiscale del cliente depositante

x(10) Codice matricola (caseificio)

9(06) Numero di forme presenti

B.0 - Modalità di ricerca A seconda della configurazione modo-pegno-rotativo, eseguire l'elaborazione dedicata: * "F": B.F - Ricerca per fede * "D": B.D - Ricerca per deposito B.F - Ricerca per fede B.F.1 - Ricerca depositi aperti Scansione su FRMDEPOS, per tutti i depositi aperti, usando DPS-CHIA7:

Dato Contenuto
DPS-CHIUSO " "

B.F.2 - Movimenti deposito Per ciascun deposito leggere tutti i movimenti collegati su FRMRIGBO, usando RIG-CHIA2:

Dato Contenuto
RIG-DEPOSITO DPS-DEPOSITO

Dobbiamo considerare solo i movimenti relativi a fedi di deposito: * RIG-TIPODOC1 = "F" (vincoli) -> Entrate * RIG-TIPODOC1 = "W" (svincoli) -> Uscite Per ciascun movimento valido leggiamo anche FRMTESBO e FRMTESAP, usando la parte di testata

Dato Contenuto
TES-CHIA1
TAP-CHIA1
RIG-TESTA

Considerare il documento solo se TES-FL-BLOCCATO = "S" (significa che è già stato "esportato") 21/09/2023 Correzione NO: li consideriamo tutti, perchè ci sono casi in cui i movimenti non sono stati tutti esportati in quanto l'esportazione è iniziata dopo una certa data, quindi il risultato sarebbe incompleto. Perciò diamo per scontato che l'esportazione del balance avvenga solo dopo un'esportazione recente delle entrate/uscite: in pratica dovrà essere effettuato manualmente quando necessario Proseguire con il punto B.3 B.D - Ricerca per deposito B.D.1 - Ricerca depositi aperti Scansione su FRMDEPOS, per tutti i depositi aperti, usando DPS-CHIA7:

Dato Contenuto
DPS-CHIUSO " "

Considerare solo i depositi con DPS-ANT-TIP = 'P' B.D.2 - Movimenti deposito Per ciascun deposito leggere tutti i movimenti collegati su FRMRIGBO, usando RIG-CHIA2:

Dato Contenuto
RIG-DEPOSITO DPS-DEPOSITO

Per ciascun movimento valido leggiamo anche FRMTESBO e FRMTESAP, usando la parte di testata

Dato Contenuto
TES-CHIA1
TAP-CHIA1
RIG-TESTA

Considerare il documento solo se TES-FL-BLOCCATO = "S" (significa che è già stato "esportato") 21/09/2023 Correzione NO: li consideriamo tutti, perchè ci sono casi in cui i movimenti non sono stati tutti esportati in quanto l'esportazione è iniziata dopo una certa data, quindi il risultato sarebbe incompleto. Perciò diamo per scontato che l'esportazione del balance avvenga solo dopo un'esportazione recente delle entrate/uscite: in pratica dovrà essere effettuato manualmente quando necessario Dobbiamo considerare solo i movimenti con TES-CAUSALE: * Tra 1 e 39 (Entrate) * Tra 60 e 99 (Uscite) Proseguire con il punto B.3 Sezione comune B.3 - Dettaglio mensile Ora per ciascun movimento leggiamo il dettaglio mensile del movimento, scorrendo FRMDETBO per la chiave primaria

Dato Contenuto
ESP-TESTA RIG-TESTA
(passando campo campo perchè la lunghezza di ESP-PROGR1 non corrisponde)

B.4 - Scalere Ciascun dettaglio mensile potrebbe ulteriormente essere suddiviso in "movimenti scalera"; scorrere quindi la tabella FRMSCLMV usando SCM-CHIA2

Dato Contenuto
SCM-DOC-TESTA RIG-TESTA
SCM-DOC-RIG RIG-RIGA
SCM-DOC-MES ESP-MESE

Attenzione: SCM-FORME corrisponde al dettaglio massimo del movimento che si può trovare. A parità di record dettaglio mensile (FRMDETBO) la sommatoria di FRMSCLMV.SCM-FORME dovrebbe corrispondere a FRMDETBO.ESP-NUMFORME

Nel caso in cui non esistano movimenti, o la sommatoria sia inferiore a ESP-NUMFORME, considerare come se esistesse un record di FRMSCLMV con SCM-SCL = " " Se invece la sommatoria dovesse essere superiore, segnalare con un errore critico indicando documento+riga+mese Per ciascun movimento trovato leggere invece l'anagrafica scalera FRMSCLAN:

Dato Contenuto
SCA-COD SCM-SCL

B.9 - Aggiornamento transito Ora per ciascun movimento scalera trovato andremo a cercare ed inserire/aggiornare il file di transito riepilogativo per fede/mese Ricerca:

Dato Descrizione
TRS-LOTTO DPS-MER-ANN (3:2) + ESP-MESE
TRS-UBICAZIONE SCM-DOC-MAG+"."+SCA-UBI+"."+SCM-SCL+".0.0"

Se non presente inserire il record con:

Dato Descrizione
TRS-CLI DPS-CLIE
TRS-CF COGGEANA.ANA-COFI
TRS-MATRICOLA DPS-MTR-NUM

Infine aggiornare il record: * Sommando le forme a TRS-FORME, in caso di entrata * Sottraendo le forme da TRS-FORME, in caso di uscita C - Creazione file di testo ed esportazione Se è stato scritto almeno 1 record Ora rileggere il file di transito, e tramite COGPA9 effettuare l'esportazione del file. NB: In ciascun ambiente sarà presente un solo modello di esportazione in modo che sia possibile la scelta automatica. Il modello conterrà tutte le informazioni previste, nella sequenza qui indicata. Vedi ad esempio COGFA6/COGP78HT C.1 - Ricerca modello Prima chiamata a COGPA9 per recuperare il modello:

Dato Descrizione
COGPA9-OPERAZIONE "SELEZIONE"
COGPA9-MODELLO K-IE-MODELLO-E-FORMA1

All'uscita COGPA9-ID-VERSIONE conterrà il modello da utilizzare C.2 - Creazione file di transito x COGPA9 Definire un nome per il file di transito COGPA9-T-DATI, usando anche data/ora sistema (richiamabile nel programma direttamente da screens), e aprirlo in output Scorrere il file di transito interno al programma. Per ciascun record con TRS-FORME > 0, effettuare l'esportazione di una riga (1 record per ciascun campo), con tutti i campi previsti nel modello "E-FORMA1"

Dato Descrizione
FONTE "Fonte" configurata
FILIERA "FORMAGGIO"
CAUSALE "BALANCE"
TIMESTAMP Data/ora nel formato "GG/MM/AAAA hh:mm:ss"
UBICAZIONE TRS-UBICAZIONE
CF-PROPRIETARIO TRS-CF
PRODUTTORE TRS-MATRICOLA
LOTTO TRS-LOTTO
NUM-FORME TRS-FORME

C.3 - Produzione file Il modello sarà configurato per esportare un file "CSV", il cui nome dovrà essere indicato nel modello stesso. Chiudere COGPA9-T-DATI. Effettuare quindi una chiamata a COGPA9

Dato Descrizione
COGPA9-OPERAZIONE "ESPORTAZIONE-ET"
COGPA9-MODELLO K-IE-MODELLO-E-FORMA1
COGPA9-ID-VERSIONE La versione restituita in precedenza
COGPA9-NOME-T-DATI Il nome del file attribuito al transito COGPA9-T-DATI
COGPA9-PATH EXT-TMP-DIR+soprasteria-fonte_BALANCE_YYYYMMDDhhmmss.csv"
COGPA9-TIPO-PATH "S"
COGPA9-FL-APRI-OUTPUT "N"
COGPA9-FL-BATCH "S"

All'uscita COGPA9-PATH conterrà il nome del file "csv" generato. D - Passaggio dati a Soprasteria Effettuare una chiamata a FORS24

Dato Contenuto
FORS24-OPE "INVIA"
FORS24-FILE-NAME Il nome del file da inviare
FORS24-FILE-LOCATION Location del file da inviare

All'uscita se l'esito è "S" l'operazione è riuscita. Altrimenti inviare una segnalazione critica contenente FORS24-MSG

COGZK0 - Acquisizione log Galassia

Nome programma COGZK0 Linkage section UTILAGPRG - Linkage comune Id processo: 90001 Nome processo: COGZK0 Tabelle principali gestite

AREA AREAGATE Direzione

Logica generale Gestione laboratori odontotecnici Importazione del log di lavorazione da stampanti 3d "Galassia" Questo programma mantiene la struttura dei programmi SWN per poter usufruire delle logiche di innesco e del controllo di keep-alive. Essendo un programma in background, aggiungere al programma il "verbale" delle operazioni abbastanza preciso e dettagliato tramite la scrittura con "gesdebug" Configurazioni possibili

Gruppo Parametro Note
abilita attiva-areaapp
areaapp cod-azienda
areaapp db-conn-string
areaapp agg-postgres-online
macchine lav-stampa3d
macchine path-job

Elaborazione Tipi di segnalazione: Vedi Tipi di segnalazione a 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: ARPSTPRC Se fallita inviare una Segnalazione critica e chiudere. B - Importazione file Scorrere CLCMACC2; per ciascun record leggere il corrispondente record su CLCANAMA; considerare solo se: * MAC2-PATH è significativo: vuol dire che la macchina è predisposta per l'invio dei dati * MAC-LAV = lav-stampa3d Per ciascuna macchina predisposta quindi si dovrà ripetere il seguente processo. B.1 - Scansione cartella Tramite C$LISTDIR effettuare la scansione della cartella configurata MAC2-PATH. Per ciascun file trovato effettuare l'elaborazione seguente: B.2 - Acquisizione singolo file Il file ha una struttura piuttosto complessa e poco chiara. Le sessioni di stampa della macchina vengono chiamate "job". All'interno di una sessione di stampa possono essere prodotti più oggetti, appartenenti ad una o più commesse. Riga con "START JOB" Identifica l'inizio di una sessione di stampa. Se all'interno del file ci sono più JOB, identifica anche la fine del job precedente (non ci sono altri modi per ottenerlo) Riga con "Start process build job....." Contiene il nome del job elaborato, ad esempio: [0;37m2023-12-04_10:35:21.320$[0;33m[Worker:I]5[0;0m;[0;37m[2957]H[0m P[1;30mW[0;37mStart process build job "/tmp/.ET/envisiontec/Job/job 05" [0m In rosso il nome del job che verrà utilizzato successivamente Inizio/fine lavorazione Quasi tutte le righe del log hanno come nell'esempio precedente: [0;37m2023-12-04_10:35:21.320 [0;33m[Worker:I]![0;37m[2957].[0m 6[1;30m=[0;37mStart process build job "/tmp/.ET/envisiontec/Job/job 05" [0m In rosso data e ora dell'esecuzione della riga di log. Analizzando tutte le righe fino all'inizio del job successivo possiamo ottenere quindi in modo approssimativo l'inizio e la fine del job, quindi della sessione di stampa. B.3 - Creazione consuntivo Per ciascun "job" esaminato e di cui abbiamo ricavato i dati come spiegato sopra, inseriamo un record su CLCMACLG:

Dato Contenuto
MACL-ID Primo ID disponibile
MACL-COD-MACCHINA Macchina in elaborazione
MACL-INIZIO Data/ora inizio trovata
MACL-FINE Data/ora fine trovata
MACL-TEMPO-MINUTI Differenza tra inizio e fine
MACL-PROGRAMMA Nome Job
MACL-MP-X " "
MACL-MP-MERCE k-merce-null
MACL-FL-MP-SCARICATA "S"
MACL-PN-SCARICO-MP Inizializzato

B.3.1 - Creazione consuntivo per commessa Ora, usando ancora C$LISTDIR effettuare la scansione della cartella "path-job + ext-os-slash-client + nome_job (percorso clienti)

Ciascun file trovato dovrebbe contenere il codice di una commessa, come spiegato in COGZQ0 - Rinomina cartella con commessa; ad esempio: * path-job * Job-21 * MODEL-Mascellare1- 1234567890.stl * MODEL-Mascellare2- 1234567890.stl * MODEL-Mandibolare1- 1234567890.stl * MODEL-Mascellare1- 2142910015.stl * MODEL-Mascellare2- 2142910015.stl * MODEL-Mandibolare1- 2142910015.stl Il codice commessa verrà quindi identificato tra l'ultimo carattere "-" e ".stl" Per ciascun "job" esaminato e di cui abbiamo ricavato i dati come spiegato sopra, inseriamo un record su CLCMACLG:

Dato Contenuto
MACR-ID MACL-ID
MACR-PROG Progressivo di riga
MACR-RAC-TIPO "LC"
MACR-RAC-DOC Codice commessa

B.4 - Backup file Al termine dell'elaborazione spostare il file nella sottocartella "backup". Segnalare in caso di errore


Estratto da documentazione interna ClickUp