Il programma spedizioni, effettuato con cadenza settimanale, indica giorno per giorno quali spedizioni effettuare ai vari clienti, costituisce il piano di lavoro per il magazzino spedizioni. La preparazione del programma spedizioni parte dagli ordini clienti e segue il seguente flusso di lavoro:
- Selezione degli ordini evadibili nella settimana (Ordini che hanno data consegna inferiore alla settimana di spedizione e che hanno giacenza sufficiente per evadere la richiesta)
- Raggruppamento delle spedizioni per cliente e giorno di spedizione
- Raggruppamento delle spedizioni per corriere e giorno di spedizione
Consideriamo le seguenti tabelle:
Ordini: NORDINE, CCLIENTE, CODICE, DATAC, QT
Clienti: CCLIENTE, CLIENTE, CORRIERE
Saldi magazzino: CODICE, GIACENZA
Con una prima query individuiamo gli ordini evadibili (consideriamo la prima settimana di settembre quindi data consegna inferiore al 05/09/2009)
SELECT Ordini.NORDINE, Clienti.CLIENTE, Clienti.CORRIERE, Ordini.DATAC, Ordini.QT, [Saldi magazzino].Giacenza, [Giacenza]-[QT] AS [QT EVADIBILE], IIf([DATAC]<#8/31/2009#,#8/31/2009#,[DATAC]) AS [GIORNO CONSEGNA], IIf([QT EVADIBILE]>=0,1,0) AS EVADIBILE FROM (Ordini INNER JOIN Clienti ON Ordini.CCLIENTE = Clienti.CCLIENTE) INNER JOIN [Saldi magazzino] ON Ordini.CODICE = [Saldi magazzino].CODICE WHERE (((Ordini.DATAC)<#9/5/2009#)); |
SELECT Ordini.NORDINE, Clienti.CLIENTE, Clienti.CORRIERE, Ordini.DATAC, Ordini.QT, [Saldi magazzino].Giacenza, [Giacenza]-[QT] AS [QT EVADIBILE], IIf([DATAC]<#8/31/2009#,#8/31/2009#,[DATAC]) AS [GIORNO CONSEGNA], IIf([QT EVADIBILE]>=0,1,0) AS EVADIBILE FROM (Ordini INNER JOIN Clienti ON Ordini.CCLIENTE = Clienti.CCLIENTE) INNER JOIN [Saldi magazzino] ON Ordini.CODICE = [Saldi magazzino].CODICE WHERE (((Ordini.DATAC)<#9/5/2009#));
A questo punto raggruppiamo per cliente giorno di consegna:
TRANSFORM COUNT([Ordini evadibili].NORDINE) AS ConteggioDiNORDINE SELECT [Ordini evadibili].CLIENTE FROM [Ordini evadibili] WHERE ((([Ordini evadibili].EVADIBILE)=1)) GROUP BY [Ordini evadibili].CLIENTE PIVOT [Ordini evadibili].[GIORNO CONSEGNA]; |
TRANSFORM Count([Ordini evadibili].NORDINE) AS ConteggioDiNORDINE SELECT [Ordini evadibili].CLIENTE FROM [Ordini evadibili] WHERE ((([Ordini evadibili].EVADIBILE)=1)) GROUP BY [Ordini evadibili].CLIENTE PIVOT [Ordini evadibili].[GIORNO CONSEGNA];
E poi raggruppiamo per corriere
TRANSFORM COUNT([Ordini evadibili].NORDINE) AS ConteggioDiNORDINE SELECT [Ordini evadibili].CORRIERE FROM [Ordini evadibili] WHERE ((([Ordini evadibili].EVADIBILE)=1)) GROUP BY [Ordini evadibili].CORRIERE PIVOT [Ordini evadibili].[GIORNO CONSEGNA]; |
TRANSFORM Count([Ordini evadibili].NORDINE) AS ConteggioDiNORDINE SELECT [Ordini evadibili].CORRIERE FROM [Ordini evadibili] WHERE ((([Ordini evadibili].EVADIBILE)=1)) GROUP BY [Ordini evadibili].CORRIERE PIVOT [Ordini evadibili].[GIORNO CONSEGNA];