Vai al contenuto

DBF007 - Sincronizzazione dettaglio sconti

Posizione nel menu Programma non a menu Linkage section UTILDBFPRG - Linkage comune Nome processo: CONTATTI Tabella: DFSCONTI - Sconti su listino Logica generale Sincronizzazione del dettaglio gruppi di sconto/promozioni tra AREA e il DB frontiera. Per il momento funziona solo in IMPORT I dati letti per il momento vengono importati in due diverse tabelle: * COGSCONT: i gruppi sconto veri e propri * COGGRSCD: le promozioni. Il motivo è che le promozioni sono gestite con una serie di informazioni più complessa rispetto ai gruppi sconto, e non era pensabile adeguare COGSCONT: quindi le nuove "promozioni" saranno gestite su COGGRSCD, in attesa di migrare tutto su quest'ultima tabella. 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
listvend classe-raggr-sconti

Elaborazione Operazioni:

Operazione Descrizione
" " Vedi Sconti (DBF007)
"SETTIMANALE" Vedi Sconti (DBF007)

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: DFSCONTI. 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 DFSCONTI

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) (Operazione " ") Prima di iniziare, verificare che la configurazione: classe-raggr-sconti sia valorizzata e contenga una classe di raggruppamenti esisente. Altrimenti inviare una Segnalazione grave e chiudere. C.1 Selezione record da importare Tramite un comando SQL specifico, estrazione di tutti i record aggiornati dall'HOST: SELECT * FROM DFSCONTI WHERE DF_SCO_AGG_HOST = 1 C.2 Controllo record Per ciascun record letto, verificare la correttezza delle informazioni contenute Controllo DF_SCO_GSC_HOST Codice gruppo sconto: deve corrispondere ad un gruppo sconto presente su DFGRUPPISCONTO, e già collegato ad un gruppo sconto acquisito sul gestionale: Cercare l'esistenza su DFGRUPPISCONTO di un record avente DF_GSC_KEY_HOST = DF_SCO_GSC_HOST: se non esiste, segnalare Errore: "DF_SCO_GSC_HOST; DF_SCO_GSC_HOST non esiste su DFGRUPPISCONTO" Gruppo sconto cliente (DF_GSC_TIP = "C") Cercare l'esistenza su COGGRSCT, usando GST-CHIA1, di un record avente:

Dato Contenuto
GST-TIP "C" (contiene la testata dei gruppi sconto per cliente)
GST-COD La chiave del cliente trovata su DF_GSC_AREA_GRUPPO (es. "C01234")

Se trovato, allora GST-COD è il codice gruppo sconto su cui dovremo aggiornare questa condizione; se non trovato segnalare Informazione sul log: DF_SCO_GSC_HOST; DF_SCO_GSC_HOST non ancora importato" Altri gruppi sconto (DF_GSC_TIP <> "C") Cercare l'esistenza su COGGRSCT, usando GST-CHIA2, di un record avente:

Dato Contenuto
GST-CODICE-HOST DF_SCO_GSC_HOST

Se trovato, allora GST-COD è il codice gruppo sconto su cui dovremo aggiornare questa condizione; se non trovato segnalare Informazione sul log: DF_SCO_GSC_HOST; DF_SCO_GSC_HOST non ancora importato" Controllo DF_SCO_FAM_SCONTI Gruppo merceologico su cui applicare lo sconto. Se definito, DF_SCO_MPR_HOST dovrà essere vuoto, altrimenti segnalare Errore: "DF_SCO_KEY; trovata condizione che contiene sia la famiglia che la singola merce" Se non definito, DF_SCO_MPR_HOST dovrà essere significativo, altrimenti segnalare Errore: "DF_SCO_KEY; trovata condizione che non contiene nè la famiglia nè la singola merce" Caso particolare: DF_SCO_MPR_HOST e DF_SCO_FAM_SCONTI possono essere entrambi vuoti, quando il gruppo sconto si riferisce direttamente ad un cliente; in questo caso lo sconto applicato diventa uno sconto generale sul cliente. In questo caso non sarà considerato l'eventuale prezzo indicato. Controllo DF_SCO_MPR_HOST Se significativa, questa informazione contiene il codice merce avanzato di una merce su cui impostare lo sconto. Quindi, cercare su COGRACMC; se non esiste segnalare Errore "DF_SCO_KEY; trovata condizione su merce non esistente: DF_SCO_MPR_HOST" Controllo DF_SCO_PREZZO Controllo DF_SCO_SCONTO1 Controllo DF_SCO_SCONTO2 Su questi campi può essere presente qualunque condizione: * No sconti nè prezzo * Solo sconti * Solo prezzo * Entrambi Controllo DF_SCO_QTA_DA Controllo DF_SCO_QTA_A Questi campi rappresentano la fascia di quantità su cui applicare la condizione. L'unico controllo da fare è che i valori siano corretti: DF_SCO_QTA_A deve essere >= DF_SCO_QTA_DA. Controllo DF_SCO_MPR_OMAGGIO Se significativa, questa informazione contiene il codice merce avanzato di una merce da fornire in omaggio, al raggiungimento di una quantità o di un suo multiplo. Quindi, se significativo, cercare su COGRACMC; se non esiste segnalare Errore "DF_SCO_KEY; trovata merce omaggio non esistente: DF_SCO_MPR_OMAGGIO" Controllo DF_SCO_OM_QTA_SOGLIA Se significativa, questa quantità rappresenta il multiplo di vendita che dà luogo ad un omaggio. Controllo DF_SCO_OM_QTA_OMAGGIO Se significativa, questa quantità rappresenta la quantità di merce fornita in omaggio per ciascun multiplo definito in DF_SCO_OM_QTA_SOGLIA. Se DF_SCO_OM_QTA_OMAGGIO è significativo, deve esserlo anche DF_SCO_OM_QTA_SOGLIA; altrimenti segnalare Errore "DF_SCO_KEY; trovata qta omaggio senza la qta soglia" Controllo DF_SCO_VAL Questo campo potrà contenere "C" o " " altrimenti segnalare Errore e skippare: "DF_SCO_KEY con DF_SCO_VAL errato: DF_SCO_VAL". C.3 Importazione record Se tutti i controlli sono superati, proseguire con l'inserimento/variazione della dettaglio gruppo sconto, a seconda dei controlli precedenti. NB: gli aggiornamenti si riferiscono a due tabelle diverse, a seconda del tipo di gruppo sconto (DF_GSC_TIP): * "P" (promozione): aggiornamento di COGGRSCD * <> "P": aggiornamento di COGSCONT C.3.1 Cancellazione C.3.1.1 Cancellazione promozione (DF_GSC_TIP = "P") Nel caso in cui DF_SCO_VAL = 'C', è necessario cercare e marcare come cancellato un record su COGGRSCD:

Nome campo Contenuto
GSCD-TIP DF_GSC_TIP
GSCD-COD DF_GSC_AREA_GRUPPO
GSCD-PROG Progressivo di riga sul gruppo sconto
GSCD-FL-APPLICO-A Indicare:
- "M": se presente una merce singola
- "R": se presente un raggruppamento
GSCD-MERCE-SCONTO Il codice merce collegato a DF_SCO_MPR_HOST, se presente
GSCD-RAGGRUPPAMENTO Valorizzare se DF_SCO_FAM_SCONTI è significativo; in questo caso:
- GSCD-RGR-CLASSE classe-raggr-sconti
- GSCD-RGR-COD SCC-RGR-COD

Se trovato, aggiornare GSCD-VAL = "C" Nel caso in cui il record non esiste, Informazione sul log.: "richiesta cancellazione di un dettaglio non esistente: 'GSCD-CHIA1'" C.3.1.2 Cancellazione altre condizioni (DF_GSC_TIP <> "P") Nel caso in cui DF_SCO_VAL = 'C', se il record è relativo a: * Sconto generale cliente: azzero lo sconto generale cliente * Sconto generico su cliente o gruppo sconto: è necessario cercare e marcare come cancellato un record su COGSCONT:

Nome campo Contenuto
SCC-TIP DF_GSC_TIP
SCC-GRUPPO-SCONTO DF_SCO_SGC_HOST
Se è significativo DF_SCO_FAM_SCONTI:
SCC-SEL-RAGGR "#"
SCC-RGR-CLASSE classe-raggr-sconti
SCC-RGR-COD DF_SCO_FAM_SCONTI
Se è significativo DF_SCO_MPR_HOST
SCC-MERCE Il codice merce trovato collegato a DF_SCO_MPR_HOST
SCC-CARATTERISTICA Inizializzato

Se trovato, aggiornare SCO-VAL = "C" Nel caso in cui il record non esiste, Informazione sul log.: "richiesta cancellazione di un dettaglio non esistente: 'SCC-CHIA1'" C.3.2 Inserimento/aggiornamento C.3.2.1 Definizione famiglia di sconto Se il dettaglio ha DF_SCO_FAM_SCONTI significativo, cercare l'esistenza del raggruppamento gerarchico corrispondente: Se significativo effettuare quindi una lettura su COGANRAG, impostando:

Nome campo Contenuto
ARAG-CLASSE classe-raggr-sconti
ARAG-TIP "R"
ARAG-ID DF_SCO_FAM_SCONTI

Se il record non esiste crearlo, indicando i dati:

Nome campo Contenuto
ARAG-DES "Famiglia " + DF_SCO_FAM_SCONTI
ARAG-ID-PADRE " "

e scrivere una Informazione sul log.: "DF_MPR_KEY_HOST; creata famiglia di sconto merce: DF_MPR_FAM_SCONTI" C.3.2.2 Aggiornamento riga condizione C.3.2.2.1 Inserimento/aggiornamento di riga promozione (DF_GSC_TIP = 'P') Cercare l'esistenza di un record su COGGRSCD, come descritto sopra per il punto C.3.1.1 In questo caso se il record non esiste, verrà inserito. Poi aggiornare i dati:

Nome campo Contenuto
GSCD-VAL " " Se inverto-segno-sconti vale "S", invertire il segno degli sconti trovati
GSCD-QTA-DA DF-SCO-QTA-DA
GSCD-QTA-A DF-SCO-QTA-A
GSCD-PREZZO DF-SCO-PREZZO
GSCD-SCONTO-1 DF-SCO-SCONTO1
GSCD-SCONTO-2 DF-SCO-SCONTO2
GSCD-SCONTO-3 0
GSCD-MERCE-OMAGGIO La merce corrispondente a DF-SCO-MPR-OMAGGIO, se presente
GSCD-OM-QTA-SOGLIA DF-SCO-OM-QTA-SOGLIA
GSCD-OM-QTA-OMAGGIO DF-SCO-OM-QTA-OMAGGIO

C.3.2.2.2 Inserimento/aggiornamento di altre condizioni (DF_GSC_TIP <> 'P') Cercare l'esistenza di un record su COGSCONT, come descritto sopra per il punto C.3.1.2 In questo caso se il record non esiste, verrà inserito. Poi aggiornare i dati:

Nome campo Contenuto
SCC-SCO-1 DF_SCO_SCONTO1 Se inverto-segno-sconti vale "S", invertire il segno degli sconti trovati
SCC-SCO-2 DF_SCO_SCONTO2
SCC-PRE DF_SCO_PREZZO
SCC-CURRENCY Divisa di conto

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

Nome campo Contenuto
DF_SCO_AGG_HOST 0
DF_SCO_AGG_AREA 0

E - Confronto e cancellazione record non trovati (Operazione "SETTIMANALE") E.1 Blocco semaforo Lettura del record DFSEMAFORO:

Nome campo Note
DF_SMF_TABELLA MASSIVO

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
DF_SMF_VERSIONE Versione attuale: 1

Lo scopo di questa fase è di trovare eventuali sconti non più presenti su DFSCONTI, e marcarli quindi come cancellati; questo serve nel caso in cui il gestionale host esegua un aggiornamento di massa su DFSCONTI. Rispetto alla versione standard, questa operazione potrebbe essere sensibilmente più lenta. E.2 Elaborazione E.2.1 Controllo su COGSCONT Scorrere tutto il contenuto di COGSCONT; escludere i record con SCC-VAL = "C"; per ciascun record trovato effettuare una ricerca diretta su DFSCONTI, a seconda di SCC-TIP: E.2.1.1 SCC-TIP = "A" Sconti particolari per cliente. Cercare la testata su COGGRSCT, impostando:

Nome campo Contenuto
GST-TIP "C"
GST-COD SCC-ANA

Il record dovrebbe esistere, altrimenti emettere una segnalazione di errore e skippare il record. Conterrà il codice "gruppo sconto HOST" assegnato agli sconti del cliente Dopodichè effettuare una ricerca diretta su DFSCONTI usando un comando SQL:

Nome campo Contenuto
DF_SCO_SGC_HOST GST-CODICE-HOST
Se SCC-SEL-RAGGR = "#" il record contiene una condizione su gruppo sconto, quindi
DF_SCO_FAM_SCONTI SCC-RGR-COD
DF_SCO_MPR_HOST " "
DF_SCO_QTA=DA 0
Se SCC-SEL-RAGGR <> "#" il record contiene una condizione su merce, quindi
DF_SCO_MPR_HOST Il codice merce trovato collegato a SCC-MERCE
DF_SCO_FAM_SCONTI " "
DF_SCO_QTA_DA 0

Se il record non viene trovato, aggiornare il record su COGSCONT impostando SCC-VAL = "C". E.2.1.2 SCC-TIP = "G" Dettaglio di un gruppo sconto. Non considerare i record con merce vuota (testata "vecchia" del gruppo sconto - la nuova è su COGGRSCT). Cercare la testata su COGGRSCT, impostando:

Nome campo Contenuto
GST-TIP "G"
GST-COD SCC-GRUPPO-SCONTO

Il record dovrebbe esistere, altrimenti emettere una segnalazione di errore e skippare il record. Conterrà il codice "gruppo sconto HOST" assegnato al gruppo sconto Dopodichè effettuare una ricerca diretta su DFSCONTI usando un comando SQL:

Nome campo Contenuto
DF_SCO_SGC_HOST GST-CODICE-HOST
Se SCC-SEL-RAGGR = "#" il record contiene una condizione su gruppo sconto, quindi
DF_SCO_FAM_SCONTI SCC-RGR-COD
DF_SCO_MPR_HOST " "
DF_SCO_QTA=DA 0
Se SCC-SEL-RAGGR <> "#" il record contiene una condizione su merce, quindi
DF_SCO_MPR_HOST Il codice merce trovato collegato a SCC-MERCE
DF_SCO_FAM_SCONTI " "
DF_SCO_QTA_DA 0

Se il record non viene trovato, aggiornare il record su COGSCONT impostando SCC-VAL = "C". E.2.2 Controllo su COGGRSCD Scorrere tutto il contenuto di COGGRSCD; escludere i record con GSCD-VAL = "C"; per ciascun record trovato effettuare una ricerca diretta su DFSCONTI, a seconda di GSCD-TIP: E.2.2.1 GSCD-TIP = "P" Promozioni. Cercare la testata su COGGRSCT, impostando:

Nome campo Contenuto
GST-TIP GSCD-TIP
GST-COD GSCD-COD

Il record dovrebbe esistere, altrimenti emettere una segnalazione di errore e skippare il record. Conterrà il codice "gruppo sconto HOST" assegnato agli sconti del cliente Dopodichè effettuare una ricerca diretta su DFSCONTI usando un comando SQL:

Nome campo Contenuto
DF_SCO_SGC_HOST GST-CODICE-HOST
DF_SCO_FAM_SCONTI GSCD-RGR-COD
DF_SCO_MPR_HOST GSCD-MERCE-SCONTO
DF_SCO_QTA_DA GSCD-QTA-DA

Se il record non viene trovato, aggiornare il record su COGGRSCD impostando GSCD-VAL = "C". E.2.2.1 GSCD-TIP = "P" Promozioni. Cercare la testata su COGGRSCT, impostando:

Nome campo Contenuto
GST-TIP GSCD-TIP
GST-COD GSCD-COD

Il record dovrebbe esistere, altrimenti emettere una segnalazione di errore e skippare il record. Conterrà il codice "gruppo sconto HOST" assegnato agli sconti del cliente E.3 Rilascio semaforo Lettura del record DFSEMAFORO:

Nome campo Note
DF_SMF_TABELLA MASSIVO

Dopodichè aggiornare il semaforo impostando:

Nome campo Note
DF_SMF_USO_AREA 0

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

Nome campo Note
DF_SMF_USO_AREA 0

F.2 Chiusura tabelle Chiudere le tabella DFSCONTI e DFSEMAFORO F.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

Estratto da documentazione interna ClickUp