[button color=”green” width=”large” href=”https://www.infologis.biz/bi-express/”]Scarica i modelli di analisi gratuiti BIExpress[/button]
La giacenza media è la qt di una referenza che mediamente è riposta in magazzino. Dietro questa semplice definizione in realtà si nascondo alcune insidie per quello che all’apparenza può sembrare un semplice calcolo. Analizziamo quindi le diverse modalità di calcolo della giacenza partendo dalla più semplice per arrivare a quella più complessa.
Un primo modo per calcolare la giacenza media consiste nel sommare la QT in giacenza ad inizio periodo con quella a fine periodo e dividere per due. In questo caso ipotizziamo che la giacenza sia stata quella di inizio periodo per metà durata e poi per l’altra metà quella di fine periodo, però non è detto che sia stato realmente così se consideriamo come periodo il mese può darsi che la giacenza iniziale si sia mantenuta tale solo per due giorni e poi sia aumentata o diminuita, in questo modo diamo uguale peso alla giacenza iniziale e finale.
Un modo più preciso, consiste nel ponderare le diverse giacenze che la referenza ha avuto durante il periodo considerato, in questo caso calcoliamo la giacenza media in questo modo:
Un prima decisione riguarda il periodo di tempo da considerare per la variazione di giacenza, ovvero misuriamo la giacenza a fine giorno oppure dopo ogni movimentazione? Questa scelta vale soprattutto per gli articoli che subiscono numerose movimentazioni durante il giorno (soprattutto prelievi). La soluzione migliore è considerare la giacenza a fine giornata perché altrimenti dovremmo ragionare in termini di frazioni di giorni complicando i calcoli senza grandi benefici. Un problema può presentarsi per beni semilavorati che nel corso della stessa giornata vengono caricati dalla produzione e poi scaricati nuovamente in produzione, in questo caso la giacenza media sarà uguale a zero, questo causa un problema nel calcolo dell’indice di rotazione in quanto si presenta sotto la forma indeterminata:
Vediamo ora come calcolare la giacenza media utilizzando access
Supponiamo di avere una tabella dove sono registrati per ogni articolo i movimenti di carico e scarico e di avere su un’altra tabella il saldo di magazzino alla fine del periodo precedente, le operazione da fare sono le seguenti:
- Calcolare per ogni articolo la giacenza a fine giornata (si sommano tutti i movimenti in entrata ed in uscita dello stesso giorno)
- Calcolare per ogni variazione di giacenza il tempo trascorso rispetto alla variazione precedente
- Calcolare per ogni variazione il prodotto tra la giacenza ed il tempo trascorso
- Sommare per ogni articolo il prodotto calcolato nel punto precedente
- Sommare per ogni articolo i giorni trascorsi per ogni variazione
- Calcolare per ogni articolo la frazione tra le due somme precedenti
Il punto 1 si realizza tramite query e codice, i punti 3,4,5,6 si realizzano tramite query mentre il punto 2 tramite codice.
Tabella movimenti CODICE,DATA,SEGNO,QT
Tabella saldi CODICE,QT
Query di creazione tabella
SELECT saldi.CODICE, #1/1/2009# AS DATA, saldi.QT, 0 AS GIACENZA, 0 AS GG INTO Giacenza FROM saldi; |
SELECT saldi.CODICE, #1/1/2009# AS DATA, saldi.QT, 0 AS GIACENZA, 0 AS GG INTO Giacenza FROM saldi;
Query di accodamento
INSERT INTO Giacenza ( CODICE, DATA, QT ) SELECT movimenti.CODICE, movimenti.DATA, SUM(IIf([segno]="+",[QT],-[QT])) AS Q FROM movimenti GROUP BY movimenti.CODICE, movimenti.DATA; |
INSERT INTO Giacenza ( CODICE, DATA, QT ) SELECT movimenti.CODICE, movimenti.DATA, Sum(IIf([segno]="+",[QT],-[QT])) AS Q FROM movimenti GROUP BY movimenti.CODICE, movimenti.DATA;
Ordiniamo la tabella Giacenza per codice e per data e a questo punto calcoliamo la giacenza in questo modo
Dim CODICE(n) Dim QT(n) If CODICE(n) <>CODICE(n-1) then GIACENZA=QT(n) Else GIACENZA=GIACENZA+QT(n) End if |
Dim CODICE(n) Dim QT(n) If CODICE(n) <>CODICE(n-1) then GIACENZA=QT(n) Else GIACENZA=GIACENZA+QT(n) End if
Calcoliamo i giorni trascorsi in questa maniera
If CODICE(n)=CODICE(n+1) then GG=DATA(n+1)-DATA(n) Else GG=#31/12/09#-DATA(n) End if |
If CODICE(n)=CODICE(n+1) then GG=DATA(n+1)-DATA(n) Else GG=#31/12/09#-DATA(n) End if
Calcoliamo il prodotto e la somma dei giorni con una query di selezione
SELECT Giacenza.CODICE, SUM([GIACENZA]*[GG]) AS GIACxGG, SUM(Giacenza.GG) AS GIORNI FROM Giacenza GROUP BY Giacenza.CODICE; |
SELECT Giacenza.CODICE, Sum([GIACENZA]*[GG]) AS GIACxGG, Sum(Giacenza.GG) AS GIORNI FROM Giacenza GROUP BY Giacenza.CODICE;
A questo punto basta dividere GIACxGG/GIORNI ed abbiamo la giacenza media di tutto l’anno, con poche variazioni è possibile ottenere la giacenza per ogni mese.
2 commenti su “Giacenza Media”
Buongiorno, volevo chiedere un chiarimento in merito al calcolo nel caso vi sia un solo movimento nel periodo di tempo considerato. Quali sono le variazioni da apportare nel caso della giacenza media mensile?
Salve, nel caso vi sia un solo movimento l’algoritmo calcola la differenza con una data di fine periodo (nell’esempio ho inserito nel codice la data del 31/12/09 ma è opportuno che questa data sia passata come variabile dalla funzione). Nel caso si voglia calcolare la giacenza media mensile bisogna considerare come chiave per il calcolo della giacenza il codice più il mese e come data di fine periodo la data del mese di cui si sta calcolando la giacenza.