Posizione nel menu
Programma non a menu
Linkage section
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 |
|
|
dbfront |
|
|
dbfront |
|
|
dbfront |
|
|
dbfront |
|
|
dbfront |
|
|
listvend |
|
Elaborazione
Operazioni:
Operazione |
Descrizione |
" " |
Vedi Sconti (DBF007) |
"SETTIMANALE" |
Vedi Sconti (DBF007) |
Tipi di segnalazione:
Vedi Tipi di segnalazione
A - 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 |
|
- 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 |
|
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 |
|
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 |