Sei sulla pagina 1di 11

Variazione Massiva dei Costi

1. Inserisci Nuovi prezzi

Parametri di partenza, ambiente unificazione, listino con dati vecchi :

Premo pulsante “salva” in alto che pero mi porta alla griglia seguente, non salva niente :

Riempimento griglia :
Query iniziale : tira fuori I articoli base corrispondenti al assortimento del o dei fornitori selezionati
con lo stato giusto, insieme ai loro um gestionale e barcode

SELECT DISTINCT

artb.art_base_id AS articoloid,

artb.codice AS codice,

artb.descrizione AS descrizione,

um.descrizione AS unitamisuradescrizione,

um.unita_misura_id AS unitamisuraid,

stringagg(DISTINCT(barcdd.valore)) AS codiciean,

NULL AS dirittomerceologia

FROM

ncl_art_base artb

JOIN ncl_articolo art ON art.art_base_id = artb.art_base_id

JOIN ncl_assortimento_fornitore assort ON assort.articolo_id = art.articolo_id

JOIN ncl_art_base_x_unita_misura ab_um ON artb.art_base_id = ab_um.art_base_id

JOIN ncl_unita_misura um ON ab_um.umg = um.unita_misura_id

LEFT OUTER JOIN ncl_art_base_x_merc_dft abxmerc ON abxmerc.art_base_id =


artb.art_base_id

LEFT OUTER JOIN ncl_merceologia merc ON merc.merceologia_id =


abxmerc.merceologia_id

LEFT OUTER JOIN ncl_merceologia_livello ml ON ml.merceologia_livello_id =


merc.merceologia_livello_id

LEFT OUTER JOIN ncl_merceologia_cl mcl ON mcl.merceologia_cl_id =


ml.merceologia_cl_id

LEFT OUTER JOIN (

SELECT

valore,

articolo_id

FROM

ncl_barcode b

WHERE

b.annullato = 'N'

UNION

SELECT

valore,

articolo_id

FROM
ncl_barcode_x_divisione bxd

WHERE

bxd.annullato = 'N'

UNION

SELECT

valore,

articolo_id

FROM

ncl_barcode_x_pdd bxp

WHERE

bxp.annullato = 'N'

) barcdd ON barcdd.articolo_id = art.articolo_id

WHERE

mcl.uso_merceologia = 'S'

AND mcl.uso_creazione_articoli = 'S'

AND assort.stato_id = 90

AND EXISTS (

SELECT

NULL

FROM

ncl_assortimento_fornitore naf

JOIN listino lis ON naf.fornitore_id = lis.fornitore_id

WHERE

naf.articolo_id = art.articolo_id

AND lis.listino_id = 100881

AND assort.fornitore_id IN (

'512994'

GROUP BY

artb.art_base_id,

artb.codice,

artb.descrizione,

um.descrizione,

um.unita_misura_id

ORDER BY
artb.codice ASC;

Segue un completamento delle righe ottenute, una per una, con

- codici esterni

SELECT DISTINCT
artforn.codice AS codiceesterno
FROM
ncl_art_base artb,
ncl_articolo art,
ncl_assortimento_fornitore assort,
ncl_articolo_x_fornitore artforn
WHERE
artb.art_base_id = art.art_base_id
AND art.articolo_id = assort.articolo_id
AND assort.assortimento_fornitore_id = artforn.assortimento_fornitore_id
AND sysdate BETWEEN nvl(artforn.data_inizio, TO_DATE('01-01-1900', 'DD-MM-YYYY')) AND
nvl(artforn.data_fine, TO_DATE('31-12-9999'
, 'DD-MM-YYYY'))
AND artb.art_base_id = 18072

- linee
SELECT DISTINCT

ls.linea_sconto_id AS id,

ls.codice AS codice,

ls.descrizione AS descrizione

FROM

ncl_linea_sconto ls,

ncl_linea_sconto_dtl lsdtl,

ncl_assortimento_fornitore assort,

ncl_articolo art,

ncl_art_base artb

WHERE

artb.art_base_id = art.art_base_id

AND art.articolo_id = assort.articolo_id

AND assort.assortimento_fornitore_id = lsdtl.assortimento_fornitore_id

AND lsdtl.linea_sconto_id = ls.linea_sconto_id

AND artb.art_base_id = 18072;

- il listino del filtro iniziale


Secondo processamento cerca, per ogni record, eventuali righe sovraposte a livello di art base, per il
listino e le date del filtro iniziale. Se trova sovraposizioni, alora cical sulle righe sovraposte trovate e
distingue 4 casi

Caso 1 sovraposizione a sinistra, la riga sovraposta inizia prima e finisce prima della riga con le date
utente :

Data inizio della riga sovraposta = data inizio prezzo precedente in griglia

Prezzo riga sovraposta = prezzo precedente in griglia

Caso 2 sovraposizione al interiore o uguale, la riga sovraposta e valida dentro l intervallo che sto per
inserire con le date utente, oppure uguale :

Se e precisamente uguale alora prezzo della riga sovraposta = prezzo nel intervallo

Caso 3 sovraposizione a destra , la riga sovraposta inizia dopo la data inizio della riga utente e prima
della data fine, e finisce dopo la data fine della riga utente

Data fine della riga sovraposta = data fine prezzo sucessivo in griglia

Prezzo riga sovraposta = prezzo sucessivo in griglia

Caso 4 sovraposizione su entrambi lati, destra e sinistra, la riga sovraposta inizia prima della data inizio
della riga utente e finisce dopo la data fine della riga utente.

Data inizio della riga sovraposta = data inizio prezzo precedente

Data fine della riga sovraposta = data fine prezzo succesivo

Prezzo riga sovraposta = prezzo precedente, prezzo nel intervallo, prezzo sucessivo in griglia

Se trova piu righe sovraposte su uno dei casi, vince lúltima perche non vedo un break nel loop.

Alla fine tiro fuori e concateno per descrizioni I sconti di una delle righe sovraposte, in ordine di priorita
dei casi : caso 2, caso 4, caso 1, caso 3 ( il primo che esiste, quella e la riga per la quale tiro fuori e faccio
vedere I sconti concatenati nella griglia)

Alla fine dopo che l utente vede la griglia, imposta prezzi nuovi, e salva, vengon salvate righe base
insieme alle righe articolo , senza sconti, con le date utente inziali, e con alcuni defaults ( conversione,
inibisci, annullato, etc)
2. Modifica prezzi

Riempimento griglia :

Query iniziale :
SELECT DISTINCT

lstrg.listino_riga_id AS id,

lstrg.version AS version,

0 AS childrennumber,

artb.art_base_id AS articoloid,
artb.codice AS codice,

artb.descrizione AS descrizione,

artb.multi_variante AS articolobasemultivariante,

lstrg.prezzo AS prezzoprecedente,

lstrg.prezzo AS prezzo,

um.descrizione AS unitamisuradescrizione,

lstrg.data_inizio AS datainizio,

lstrg.data_fine AS datafine,

lstrg.annullato AS annullato,

lstrg.eccezione AS eccezione,

ls.listino_id AS listinoid,

too.tipo_offerta_opp_id,

too.codice AS tipo_offerta_codice,

too.descrizione AS tipo_offerta_descrizione,

stringagg(DISTINCT(sc.descrizione_costruita)) AS sconti,

stringagg(DISTINCT(barcdd.valore)) AS codiciean,

NULL AS dirittomerceologia

FROM

listino_riga lstrg

LEFT JOIN listasconti_x_lstriga lslr ON lslr.listino_riga_id = lstrg.listino_riga_id

LEFT JOIN sconto sc ON sc.sconto_id =


lslr.sconto_id

JOIN listino ls ON lstrg.listino_id = ls.listino_id

JOIN ncl_art_base artb ON lstrg.art_base_id = artb.art_base_id

JOIN ncl_stato_prodotto sp ON artb.stato_id =


sp.stato_id

JOIN ncl_articolo art ON art.art_base_id = lstrg.art_base_id

JOIN ncl_assortimento_fornitore assort ON assort.articolo_id = art.articolo_id

JOIN ncl_unita_misura um ON lstrg.unita_misura_id = um.unita_misura_id

LEFT OUTER JOIN ncl_art_base_x_merc_dft abxm ON abxm.art_base_id = lstrg.art_base_id

LEFT OUTER JOIN tipo_offerta_opp too ON too.tipo_offerta_opp_id =


lstrg.tipo_offerta_opp_id

LEFT OUTER JOIN (

SELECT

valore,

articolo_id

FROM

ncl_barcode b
WHERE

b.annullato = 'N'

UNION

SELECT

valore,

articolo_id

FROM

ncl_barcode_x_divisione bxd

WHERE

bxd.annullato = 'N'

UNION

SELECT

valore,

articolo_id

FROM

ncl_barcode_x_pdd bxp

WHERE

bxp.annullato = 'N'

) barcdd ON barcdd.articolo_id = art.articolo_id

LEFT OUTER JOIN ncl_merceologia


merc ON merc.merceologia_id = abxm.merceologia_id

LEFT OUTER JOIN ncl_merceologia_livello


ml ON ml.merceologia_livello_id = merc.merceologia_livello_id

LEFT OUTER JOIN ncl_merceologia_cl


mcl ON mcl.merceologia_cl_id = ml.merceologia_cl_id

WHERE

nvl(lstrg.data_inizio, TO_DATE('00-00-0-01-01-1900', 'SS-MI-HH24-DD-MM-YYYY')) <=


nvl(to_date('2023-04-30','yyyy-mm-dd'), TO_DATE('00-00-0-01-01-2300', 'SS-MI-HH24-DD-MM-YYYY'

))

AND nvl(lstrg.data_fine, TO_DATE('00-00-0-01-01-2300', 'SS-MI-HH24-DD-MM-YYYY')) >=


nvl(to_date('2023-04-01','yyyy-mm-dd'), TO_DATE('00-00-0-01-01-1900', 'SS-MI-HH24-DD-MM-YYYY'

))

AND lstrg.listino_id = 100881

AND lstrg.annullato = 'N'

AND assort.fornitore_id IN (

'512994'

AND assort.stato_id = 90

GROUP BY
lstrg.listino_riga_id,

lstrg.version,

0,

artb.art_base_id,

artb.codice,

artb.descrizione,

artb.multi_variante,

lstrg.prezzo,

lstrg.prezzo,

um.descrizione,

lstrg.data_inizio,

lstrg.data_fine,

lstrg.annullato,

lstrg.eccezione,

ls.listino_id,

too.tipo_offerta_opp_id,

too.codice,

too.descrizione;

Ogni una delle righe ottenute vienne completata con codici esterni, linee sconto comme nel caso
precedente, e in piu con

- Prezzo corrente = prezzo della riga ottenuta


- Un numero di figli con la query
SELECT

COUNT(DISTINCT lstrgart.listino_riga_id) AS childrennumber

FROM

articolo_com artc,

ncl_articolo art,

ncl_art_base artb,

listino_riga lstrg,

listino_riga lstrgart,

listino lst

WHERE

lstrg.art_base_id = artb.art_base_id

AND artb.art_base_id = art.art_base_id

AND art.articolo_id = artc.articolo_id


AND artc.articolo_id = lstrgart.articolo_id

AND lstrgart.listino_id = lst.listino_id

AND artb.art_base_id = 18072

AND lst.listino_id = 100881

AND lstrgart.annullato = 'N'

E poi con eventuali figli in eccezione ( non si vedono in griglia, ma vedere il dialogo del salvataggio ) :
SELECT DISTINCT

lstrg.listino_riga_id AS id,

lstrg.version AS version,

0 AS childrennumber,

ls.listino_id AS listinoid,

ls.codice AS listinocodice,

ls.descrizione_breve AS listinodescrizionebreve,

art.articolo_id AS articoloid,

art.codice AS codice,

art.descrizione AS descrizione,

lstrg.prezzo AS prezzo,

div.descrizione AS divisadescrizione,

um.descrizione AS unitamisuradescrizione,

lstrg.data_inizio AS datainizio,

lstrg.data_fine AS datafine,

lstrg.annullato AS annullato,

lstrg.eccezione AS eccezione,

too.tipo_offerta_opp_id,

too.codice AS tipo_offerta_codice,

too.descrizione AS tipo_offerta_descrizione

FROM

listino_riga lstrg,

listino ls,

ncl_articolo art,

articolo_com artc,

ncl_art_base artb,

ncl_divisa div,

ncl_unita_misura um,

tipo_offerta_opp too
WHERE

lstrg.listino_id = ls.listino_id

AND lstrg.articolo_id = artc.articolo_id

AND artc.articolo_id = art.articolo_id

AND art.art_base_id = artb.art_base_id

AND ls.divisa_id = div.divisa_id

AND lstrg.unita_misura_id = um.unita_misura_id

AND lstrg.tipo_offerta_opp_id = too.tipo_offerta_opp_id (+)

AND ls.listino_id = 100881

AND artb.art_base_id = 18072

AND lstrg.data_inizio = to_date('2022-05-30','yyyy-mm-dd')

AND lstrg.data_fine IS NULL

AND lstrg.annullato = 'N'

AND lstrg.eccezione = 'S'

ORDER BY

art.codice ASC ;

Modificando un prezzo e salvando, mi da questo dialogo :

Secondo la scelta del utente, la riga vienne modificata , base e articoli , sovrascrivendo o no le eccezioni.

Potrebbero piacerti anche