Vai al contenuto

DFN100 - Import/export documenti di magazzino

Posizione nel menu Programma non a menu Linkage section UTILDBFPRG - Linkage comune Nome processo: CONTATTI Tabella: DFDOCTES - Testata documenti + DFDOCDET - Dettaglio documenti Logica generale Sincronizzazione dei documenti di magazzino tra AREA e il DB frontiera. Questo processo funziona in IMPORT e EXPORT Configurazioni possibili

Gruppo Parametro Note
dbfront sincro-attiva
dbfront email-segnalazioni
dbfront db-tipo
dbfront db-conn-string
dbfront db-log-level
dbfront inverto-segno-sconti
dbfront magazzino-esp-interventi Usato per modificare il magazzino dei documenti la cui sede è il magazzino configurato
dbfront periferica-stampa-ricevimenti
dbfront doc-exp-escludi-causali Causali da escludere nell'esportazione

Elaborazione Tipi di segnalazione: Vedi Tipi di segnalazione A - Controllo di esecuzione Vedi Controllo di esecuzione A.1 - Controllo log COGTESBO Per l'esecuzione di questo programma è necessario aver attivato il log sul file COGTESBO, altrimenti risulta impossibile tracciare le cancellazioni dei documenti. Di conseguenza, il log del file si potrà usare anche per tracciare gli inserimenti e le variazioni. Quindi se il dato TLF-CO-LOG (7) è diverso da "X", inviare una Segnalazione grave e chiudere. B - Apertura B.1 Apertura tabelle Tentare l'apertura della tabella da sincronizzare: DFDOCTES. Se fallita inviare una Segnalazione grave e chiudere. Tentare l'apertura della tabella da sincronizzare: DFDOCDET. 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 DFDOCTES

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

Ripetere l'operazione per la tabella DFDOCDET 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) Se DBFST-FL-ATTIVAZIONE = 'E' (solo esportazione). segnalare Informazione sul log e skippare questa fase. C.1 Selezione documenti da importare Tramite un comando SQL specifico, estrazione di tutte le testate dei documenti aggiornati dall'HOST: SELECT * FROM DFDOCTES WHERE DF_DTES_AGG_HOST = 1 and DF_DTES_CLASSE = 'DM' I documenti trovati in questo modo potrebbero essere: * Documenti inseriti dall'HOST * Documenti inseriti dall'HOST e successivamente variati * Documenti inseriti su AREA che sono stati acquisiti dall'HOST e successivamente variati: potrà essere effettuata una variazione in funzione della presenza del raccordo su COGGENER (vedi sotto) C.2 Controllo record di testata Per ciascun record letto, verificare la correttezza delle informazioni contenute Controllo DF_DTES_VAL Questo campo potrà contenere "C" o " " altrimenti segnalare Errore e skippare: "DF_DTES_KEY con DF_DTES_VAL errato: DF_DTES_VAL". Se un record risulta cancellato skippare tutti i controlli successivi, e passare direttamente alla fase di cancellazione come spiegato sotto. Controllo DF_DTES_KEY_HOST Questa informazione, in fase di importazione deve essere significativa, altrimenti segnalare Errore . Controllo DF_DTES_ORIGINE Questa informazione potrà contenere "A" o "H", altrimenti segnalare Errore e skippare: "DF_DTES_KEY con DF_DTES_ORIGINE errato: DF_DTES_ORIGINE". Se contiene "A" significa che il documento è stato generato da AREA; per il momento ignoriamo le variazioni su questi documenti, quindi Informazione sul log e skippare il record. Controllo DF_DTES_CLASSE La classe documento attualmente potrà essere solo "DM", altrimenti segnalare Errore e skippare: "DF_DTES_KEY con DF_DTES_CLASSE errato: DF_DTES_CLASSE". Controllo DF_DTES_KEY_AREA Se presente, significa che il documento è già stato acquisito da AREA, e siamo in caso di variazione: verificare quindi l'esistenza su COGTESBO del documento: se manca, segnalare Errore: "DF_DTES_KEY; DF_DTES_KEY_AREA non esistente: DF_DTES_KEY_AREA" IMPORTANTE in alcuni casi, il gestionale host in caso di variazione non è in grado di mantenere il raccordo con il nostro documento scritto qui. Per questo motivo, prima di considerare un documento come "Nuovo" si dovrà controllare l'esistenza di un eventuale raccordo su COGGENER, con GNR-TIPO = "DH" Controllo DF_DTES_DATA Data documento: questo campo dovrà essere significativo e contenere una data valida, altrimenti segnalare Errore e skippare. Controllo DF_DTES_MAG_MAIN_HOST Campo obbligatorio. Si dovrà cercare su COGMAGAG se esiste già un magazzino con MAGG-CODICE-HOST = DF_DTES_MAG_MAIN_HOST. Se non esiste, segnalare Errore e skippare: "DF_DTES_KEY con DF_DTES_MAG_MAIN_HOST non esistente: DF_DTES_MAG_MAIN_HOST". Controllo DF_DTES_MAG_TRASF_HOST Campo non obbligatorio. Se presente, si dovrà cercare su COGMAGAG se esiste già un magazzino con MAGG-CODICE-HOST = DF_DTES_MAG_TRASF_HOST. Se non esiste, segnalare Errore e skippare: "DF_DTES_KEY con DF_DTES_MAG_TRASF_HOST non esistente: DF_DTES_MAG_TRASF_HOST". Controllo DF_DTES_CAUSALE Campo obbligatorio. Si dovrà cercare sulla tabella causali se ne esiste una con EUTA-CB-CODICE-HOST = DF_DTES_CAUSALE. Se non esiste, segnalare Errore e skippare: "DF_DTES_KEY con DF_DTES_CAUSALE non esistente: DF_DTES_CAUSALE". Controllo DF_DTES_PAGAMENTO Campo non obbligatorio. Se indicato dovrà corrispondere ad un codice raccordato con i nostri "tipo e codice pagamento, vedi DBF001. Controllo DF_DTES_ANA_FAT_HOST Questa informazione potrebbe non essere significativa (in caso di documento interno tipo "prima nota magazzino". Se significativa, cercare se corrisponde ad un cliente o fornitore, con una ricerca su COGANAPP.AAP2-CHIA2, impostando * AAP2-RACCORDO = DF_DTES_ANA_FAT_HOST Se il raccordo: * Esiste: il documento sarà collegato all'anagrafica trovata; il tipo anagrafico dovrà essere congruente con il tipo anagrafico della causale bolla (vedi COGV14W o COGV50W) * Non esiste: l'anagrafica a cui è collegati il contatto non è stato ancora acquisita: Informazione e skippare: "DF_DTES_KEY collegato ad anagrafica non ancora importata : DF_DTES_ANA_FAT_HOST" Controllo DF_DTES_ANA_DST_HOST Come sopra Controllo DF_DTES_IND_HOST Se indicato dovrà corrispondere ad un indirizzo di spedizione presente in DFINDIR (fare la ricerca su DF_IND_KEY_HOST). Se non presente segnalare Errore e skippare. Se presente questo indirizzo deve essere già stato importato e collegato su AREA: dovrà quindi avere DF_IND_AREA_PROG valorizzato. Altrimenti segnalare Informazione e skippare: "DF_DTES_KEY collegato ad indirizzo non ancora importata : DF_DTES_IND_HOST" Controllo DF_DTES_VAL Questo campo potrà contenere "C" o " " altrimenti segnalare Errore e skippare: "DF_DTES_KEY con DF_DTES_VAL errato: DF_DTES_VAL". Controllo DF_DTES_DIVISA Se vale "EU" diventerà "E" e viceversa C.3 Controlli dettaglio documento Tramite un comando SQL specifico, estrazione di tutte le righe del documento in elaborazione: SELECT * FROM DFDOCDET WHERE DF_DDET_KEY_HOST = DF_DTES_KEY_HOST Per ciascun record letto i controlli sono i seguenti: Controllo DF_DDET_SEGNO Questo campo potrà contenere "E" o "U" altrimenti segnalare Errore e skippare: "Riga: DF_DDET_KEY_HOST : DF_DDET_RIG_HOST con DF_DDET_SEGNO errato: DF_DDET_SEGNO". Controllo DF_DDET_MPR_HOST questa informazione contiene il codice merce avanzato di una merce (che corrisponde al codice articolo HOST).. Quindi, cercare su COGRACMC; se non esiste segnalare Errore ""Riga: DF_DDET_KEY_HOST : DF_DDET_RIG_HOST; merce non esistente: DF_DDET_MPR_HOST" C.4 Importazione record Se tutti i controlli sono superati, proseguire con l'inserimento/aggiornamento del documento. Se DF_DTES_KEY_AREA è vuoto, cercare il raccordo su AREA, su COGGENER, usando GNR-CHIA2, impostando:

Nome campo Contenuto
GNR-TIPO "DH"
GNR-PARTE-2 DF_DTES_KEY_HOST

Se il record * esiste, GNR-PARTE-1 conterrà il riferimento ad un documento di AREA; cercarne quindi l'esistenza su COGTESBO: * se non esiste, cancellare il record, e procedere con l'inserimento * se esiste, siamo in caso di Variazione * non esiste, siamo in Inserimento Riepilogo situazioni possibili

DF_DTES_KEY_HOST Raccordo COGGENER Situazione
Vuoto Esiste, GNR-PARTE-2 esiste Variazione
Vuoto Esiste, GNR-PARTE-2 non esiste Cancellazione raccordo su COGGENER
Inserimento
Vuoto Non esiste Inserimento
Non vuoto / Variazione

C.4.1 Cancellazione Nel caso in cui DF_DTES_VAL = 'C' è necessario cercare e cancellare l'intero documento di magazzino: C.4.1.1 Cancellazione di documento non importato Se DF_DTES_KEY_AREA è vuoto: significa che il documento non era mai stato importato: marcare il record come "elaborato":

Nome campo Contenuto
DF_DTES_AGG_HOST 0
DF_DTES_AGG_AREA 0

segnalare Informazione e skippare: "DF_DTES_KEY documento cancellato ma non ancora importato" C.4.1.2 Cancellazione di documento importato Se DF_DTES_KEY_AREA non è vuoto: significa che il documento era già stato importato; Cercare su COGTESBO, usando DF_DTES_KEY_AREA. Se non esiste segnalare Errore e skippare: "DF_DTES_KEY documento da cancellare non esistente: DF_DTES_KEY_AREA" Altrimenti effettuare la cancellazione usando COGU11 NB: COGU11 è nato per la cancellazione di DDT, in realtà dovrebbe essere possibile usarlo anche per la cancellazione di altri documenti come entrate di magazzino o prime note magazzino. Provare anche con documenti di questi tipi. Dopodichè marcare il record come "elaborato":

Nome campo Contenuto
DF_DTES_AGG_HOST 0
DF_DTES_AGG_AREA 0
DF_DTES_KEY_AREA " "

C.4.2 Inserimento

Come prima cosa dobbiamo determinare quale tipo documento creare, a seconda della causale e della presenza di una anagrafica collegata.

DF_DTES_ANA_FAT_HOST EUTA-CB-FL-EU Tipo documento
Presente (Cliente) "U" DDT tipo "I"
Presente (Cliente) "E" DDT entrata tipo "R"
Presente (Fornitore) "U" DDT tipo "I"
Presente (Fornitore) "E" DDT entrata tipo "C"
Non presente Ininfluente Prima nota "P"

Per l'inserimento del documento useremo COGS26 C.4.2.1 Linkage (dati di testata)

Dato Contenuto
COGS26-OPE "Inserimento"
COGS26-NOTE-1 DF_DTES_NOTE
COGS26-NOTE-2
COGS26-DATA DF_DTES_DATA
COGS26-MAG Il codice magazzino collegato a DF_DTES_MAG_MAIN_HOST
COGS26-FL-LINK "N"
S26-FL-GIA "S"
S26-DOCUMENTO-LINK " "
S26-DOCUMENTO-CANC " "
S26-QTA-PRD 0
S26-FL-PROD "N"
S26-ANA-RIF Dati anagrafici da passare al documento quando necessario

Tipo e codice anagrafico collegato a DF_DTES_ANA_FAT_HOST


Codice anagrafico collegato a DF_DTES_ANA_DST_HOST

0
S26-FL-MATRICOLE " "
S26-PROD-RAPIDA "N"
S26-TRS-ID " "
S26-CAUSALE Causale collegata a DF_DTES_CAUSALE
S26-USA-PREZZI "S"
S26-FL-TRASFERIMENTO Se DF-DTES-MAG-TRASF è:


S26-MAG-ENT DF-DTES-MAG-TRASF se non vuoto
S26-DOC-TIPO Il tipo documento ricavato dalla tabella qui sopra (I/R/C/P)
S26-PAG-TIP Tipo e codice pagamento ricavati da DF_DTES_PAGAMENTO
S26-PAG-COD
S26-DST-IDX Id destinazione ricavato da DF_DTES_IND_HOST
S26-DIVISA DF_DTES_DIVISA

C.4.2.2 TRAN-S26 (movimenti)

Tabella: TRAN-S26
Nome campo
TRS-S26-RIGA
TRS-S26-MERCE
TRS-S26-QTA
TRS-S26-SEGNO
TRS-S26-PREZZO
TRS-S26-SCO-1
TRS-S26-SCO-2
TRS-S26-PREZZO-LORDO
TRS-S26-IMPORTO

Al termine aggiornare il record di testata documento:

Nome campo Contenuto
DF_DTES_AGG_HOST 0
DF_DTES_AGG_AREA 0
DF_DTES_KEY_AREA Chiave del documento creato

C.4.2.3 Raccordo su COGGENER Creare un raccordo su COGENER

Nome campo Contenuto
GNR-TIPO "DH"
GNR-PARTE-1 DF_DTES_KEY_AREA
GNR-PARTE-2 DF_DTES_KEY_HOST
GNR-PROG 0

C.4.3 Aggiornamento Se DF_DTES_KEY_AREA non è vuoto: significa che il documento era già stato importato; quindi si dovrà procedere con un aggiornamento: * Cancellazione: come al punto C.4.1 * Inserimento: come al punto C.4.2, passando però a COGS26 il riferimento al numero documento da creare. C.4.4 Modula In tutti i casi di aggiornamento di un documento (inserimento/variazione/cancellazione), effettuare le chiamate a COGD53 - Invio liste a Modula, seguendo le indicazioni spiegate in "Nuova logica di funzionamento" C.4.5 Stampa documento Se il documento inserito o aggiornato è di entrata (tipo "C" o "R"), e la configurazione periferica-stampa-ricevimenti è significativa, effettuare la stampa dell'entrata usando COGD42. D - Sincronizzazione (esportazione) Se DBFST-FL-ATTIVAZIONE = 'I' (solo importazione). segnalare Informazione sul log e skippare questa fase. D.1 Documenti cancellati In questa fase dovremo controllare i documenti di magazzino che sono stati cancellati, usando il log su COGTESBO. Quindi, si dovrà scorrere LOGAGREC usando LGR-CHIA3, a partire dall'ultimo aggiornamento effettuato.

Nome campo Contenuto
LGR-FILE "cogtesbo"
LGR-DATA DBFST-UA-DATA
LGR-ORA DBFST-UA-ORA

Per ciascun record letto cerchiamo il corrispondente record LOGIDREC:

Nome campo Contenuto
LRR-FILE "cogtesbo"
LGR-ID LGR-ID-RECORD

In LRR-CHIAVE troveremo la chiave del documento, corrispondente a TES-CHIA3. Consideriamo i record con LGR-OPERAZIONE = "C" (cancellazione). Verifichiamo se il documento cancellato è già stato esportato, con una ricerca diretta su DFDOCTES, usando DF_DTES_CHIA3, impostando:

Nome campo Contenuto
DF_DTES_CLASSE "DM"
DF_DTES_KEY_AREA TES-CHIA3

Se il record non esiste, allora il documento non è mai stato esportato, Informazione sul log e skippare. Se il record esiste, allora è già stato esportato: però se è stato generato dall'HOST (DF_DTES_ORIGINE = "H") lo dobbiamo ignorare: Informazione sul log e skippare. Altrimenti dovremo aggiornare DFDOCTES:

Nome campo Contenuto
DF_DTES_VAL "C"
DF_DTES_AGG_AREA 1

D.2 Esportazione Loop su COGTESAP usando TSA-CHIA2, impostando

Nome campo Contenuto
TSA-FL-ESPORTATO " "

Ciascun record letto corrisponde ad un documento da trattare. D.2.1 Controlli sui documenti da esportare In caso di esclusione di un documento, effettuare comunque l'aggiornamento di TSA-FL-ESPORTATO prima di passare al successivo D.2.1.1 Magazzino Se è configurato il magazzino magazzino-esp-interventi, significa che per il gestionale host i magazzini collegati a questo non esistono; sono i magazzino dove MAGZ-SEDE = magazzino-esp-interventi Quindi, non dovranno essere esportati i trasferimenti tra: * Sede <-> magazzino collegato alla sede * Magazzino collegato alla sede <-> Magazzino collegato alla sede Prima di procedere, verificare se il documento è un trasferimento; se si cercare il documento collegato, e se il trasferimento cade in una di queste due casistiche, skippare il record marcando il documento come esportato. D.2.1.2 Causale documento Se è presente almeno una causale configurata in doc-exp-escludi-causali, i documenti con TES-CAUSALE corrispondente ad una di esse devono essere esclusi D.2.2 Esportazione singolo documento Verifichiamo se il documento inserito/aggiornato è già stato esportato, con una ricerca diretta su DFDOCTES, usando DF_DTES_CHIA3, impostando:

Nome campo Contenuto
DF_DTES_CLASSE "DM"
DF_DTES_KEY_AREA TES-CHIA3

Se il record esiste, allora è già stato esportato: però se è stato generato dall'HOST (DF_DTES_ORIGINE = "H") lo dobbiamo ignorare: Informazione sul log e skippare. Altrimenti dovremo aggiornare DFDOCTES, quindi cancellare DFDOCDET per tutti i record usando una query, e quindi reinserire DFDOCDET. Se il record non esiste, allora il documento non è mai stato esportato, quindi dovremo inserire DFDOCTES, e quindi inserire DFDOCDET. Verificare se il documento è: * Un documento di chiusura intervento di assistenza * Se raccordato a ASNINDMG con ACIM-TIP = "D" D.2.2.1 Aggiornamento DFDOCTES

Nome campo Note
DF_DTES_KEY_HOST in inserimento è vuoto, altrimenti lasciare invariato (potrebbe essere stato già importato dall'HOST e quindi collegato)
DT_DTES_ORIGINE "A"
DF_DTES_CLASSE "DM"
DF_DTES_KEY_AREA TES-CHIA3
DF_DTES_DATA TES-DATA
DF_DTES_MAG_MAIN_HOST MAGG-CODICE-HOST, trovato leggendo COGMAGAG con:
Documento di chiusura intervento assistenza

TES-MAG
In tutti gli altri casi
TES-MAG
Applicare lo stesso ragionamento per qualunque documento dove il magazzino:


Se vuoto, inviare una Email informativa e skippare
DF_DTES_MAG_TRASF_HOST " " (per ora)
DF_DTES_CAUSALE EUTA-CB-CODICE-HOST, trovato leggendo il record COGTABEL della causale usando TES-CAUSALE
Se vuoto, inviare una Email informativa e skippare
DF_DTES_PAGAMENTO Usando TES-RB e TES-PAG1, cercare il corrispondente codice di raccordo su COGGENER, vedi COGD12.
Se non trovato, inviare una Email informativa e skippare
DF_DTES_FL_FAT EUTA-CB-CON-FAT (S/N)
DF_DTES_ORIG_CLASSE


DF_DTES_ORIG_KEY A seconda di DF_DTES_ORIG_CLASSE:



DF_DTES_ANA_FAT_HOST se TES-NONNO <> 0 (quindi per tutti i documenti cliente/fornitore), eseguire una ricerca su DFANAGR con una ricerca sulla chiave 3, impostando:


Se non trovato inviare una Email informativa e skippare.
Altrimenti qui si imposta DF_ANA_KEY_HOST
DF_DTES_ANA_DST_HOST Come sopra, usando TES-PADRE
DF_DTES_IND_HOST se TES-DST-ID-IDX <> 0 eseguire una ricerca su DFINDIR con una ricerca sulla chiave 3, impostando:



Se non trovato inviare una Email informativa e skippare.
Altrimenti qui si imposta DF_ind_KEY_HOST
DF_DTES_ALTRO_TRASF " " (per ora)
DF_DTES_NOTE TES-DESCR + TES-DESCR1
DF_DTES_DIVISA TES-CURRENCY
DF_DTES_AGENTE_1 Esportare il codice di raccordo COGANAP2.AAP2-RACCORDO trovato su TES-AGENTE
DF_DTES_AGENTE_2 Esportare il codice di raccordo COGANAP2.AAP2-RACCORDO trovato su TES-AGE2
DF_DTES_VAL " "
DF_DTES_AGG_AREA 1

D.2.2.1 Aggiornamento DFDOCDET In caso di aggiornamento, cancellazione di tutti i record collegati al documento. Poi per ciascuna riga documento (COGMOMAG), inserire una nuova riga:

Nome campo Note
DF_DDET_KEY_HOST DF_DTES_KEY_HOST
DF_DDET_CLASSE DF_DTES_CLASSE
DF_DDET_KEY_AREA DF_DTES_KEY_AREA
DF_DDET_PROG_AREA MAG-PROG
DF_DDET_SEGNO MAG-ENTRUSC
DF_DDET_MPR_HOST Codice merce avanzato della merce
Cercare su DFMERCIPREST se esiste su DF_MPR_KEY_HOST; se non esiste
Se non trovato inviare una Email informativa ma proseguire
DF_DDET_QTA MAG-QTAMAGAZ
DF_DDET_PREZZO_LORDO MAG-PRE-NO-SCO
DF_DDET_SCONTO_1 MAG-SCO1
DF_DDET_SCONTO_2 MAG-SCO2
DF_DDET_SCONTO_3 0
DF_DDET_PREZZO_NETTO MAG-PREZZO
DF_DDET_IMPORTO MAG-VALORE
DF_DDET_NOTE Descrizioni aggiuntive trovate sulla riga
DF_DDET_PROVV_AGENTE_1 MOA2-PROV-AGE1
DF_DDET_PROVV_AGENTE_2 MOA2-PROV-AGE2

D.2.2.3 Aggiornamento flag esportazione Aggiornare COGTESAP per il documento in elaborazione, impostando

Nome campo Note
TSA-FL-ESPORTATO "E"

E - Chiusura E.1 Rilascio semaforo Aggiornare i record semaforo relativi a DFDOCTES e DFDOCDET, impostando

Nome campo Note
DF_SMF_USO_AREA 0

E.2 Chiusura tabelle Chiudere le tabella DFDOCTES, DFDOCDET 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
DBFST-UA-DATA Data/ora dell'ultimo record cancellato trovato
Se non e' stata effettuata alcuna cancellazione, non aggiornare queste informazioni
DBFST-UA-ORA

Estratto da documentazione interna ClickUp