DBF007 - Sincronizzazione dettaglio sconti

Navigation:  »No topics above this level«

DBF007 - Sincronizzazione dettaglio sconti

Return to chapter overview

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