Applicando l’analisi ABC sia alla giacenza media che al consumo degli articoli possiamo ottenere una matrice Scorte Consumato costituita da nove aree.
I codici posti sulla diagonale rappresentano la situazione ideale, anche se bisogna prestare attenzione ai codici di classe AA poiché possono verificarsi due situazioni: possibile stock-out o area in cui intervenire per ridurre le scorte. Aree critiche sono le classi CA in quanto l’elevato livello di scorta non è giustificato dal consumo, invece per i codici in classe AC si possono presentare casi di stock out. Le classi rimanenti sono di minore criticità in quanto vi è coerenza tra giacenza e consumo.
Vediamo ora come effettuare questa analisi in access inserendo anche una dimensione temporale
Consideriamo due tabelle di partenza:
consumi CODICE,CONSUMO, MESE
giacenza CODICE, GIACENZA, MESE
La prime due query da realizzare sono due query di selezione:
SELECT Consumi.MESE, SUM(Consumi.CONSUMO) AS TCONSUMO FROM Consumi GROUP BY Consumi.MESE; SELECT Giacenze.MESE, SUM(Giacenze.GIACENZA) AS TGIACENZA FROM Giacenze GROUP BY Giacenze.MESE; |
SELECT Consumi.MESE, Sum(Consumi.CONSUMO) AS TCONSUMO FROM Consumi GROUP BY Consumi.MESE; SELECT Giacenze.MESE, Sum(Giacenze.GIACENZA) AS TGIACENZA FROM Giacenze GROUP BY Giacenze.MESE;
Successivamente si eseguono due query di creazione tabelle
SELECT Consumi.CODICE, Consumi.MESE, Consumi.CONSUMO, TOTCONSUMO.TCONSUMO, [CONSUMO]/[TCONSUMO] AS [%CON], "" AS CLASSECONSUMO INTO PCONSUMI FROM Consumi INNER JOIN TOTCONSUMO ON Consumi.MESE = TOTCONSUMO.MESE ORDER BY Consumi.CONSUMO DESC; SELECT Giacenze.CODICE, Giacenze.MESE, Giacenze.GIACENZA, TOTGIACENZA.TGIACENZA, [GIACENZA]/[TGIACENZA] AS [%CON], "" AS CLASSEGIACENZA INTO PGIACENZA FROM Giacenze INNER JOIN TOTGIACENZA ON Giacenze.MESE = TOTGIACENZA.MESE ORDER BY Giacenze.GIACENZA DESC; |
SELECT Consumi.CODICE, Consumi.MESE, Consumi.CONSUMO, TOTCONSUMO.TCONSUMO, [CONSUMO]/[TCONSUMO] AS [%CON], "" AS CLASSECONSUMO INTO PCONSUMI FROM Consumi INNER JOIN TOTCONSUMO ON Consumi.MESE = TOTCONSUMO.MESE ORDER BY Consumi.CONSUMO DESC; SELECT Giacenze.CODICE, Giacenze.MESE, Giacenze.GIACENZA, TOTGIACENZA.TGIACENZA, [GIACENZA]/[TGIACENZA] AS [%CON], "" AS CLASSEGIACENZA INTO PGIACENZA FROM Giacenze INNER JOIN TOTGIACENZA ON Giacenze.MESE = TOTGIACENZA.MESE ORDER BY Giacenze.GIACENZA DESC;
a questo punto eseguiamo del codice per trovare le classi ABC per entrambe le tabelle
sub() Dim mese(n) If mese(n)<>mese(n-1) then Cumulata=perc_consumo If Cumulata<=0,8 then classe=”A” Else If cumulata<=0,9 then classe=”B” else classe=”C” End if Else Cumulata=Cumulata+perc_consumo If Cumulata<=0,8 then classe=”A” Else If cumulata<=0,9 then classe=”B” else classe=”C” End if End if End sub |
sub() Dim mese(n) If mese(n)<>mese(n-1) then Cumulata=perc_consumo If Cumulata<=0,8 then classe=”A” Else If cumulata<=0,9 then classe=”B” else classe=”C” End if Else Cumulata=Cumulata+perc_consumo If Cumulata<=0,8 then classe=”A” Else If cumulata<=0,9 then classe=”B” else classe=”C” End if End if End sub
ed in infine una query di selezione
SELECT PCONSUMI.CODICE, PCONSUMI.MESE, PCONSUMI.CLASSECONSUMO, PGIACENZA.CLASSEGIACENZA, [CLASSECONSUMO] & [CLASSEGIACENZA] AS [CLASSE_CO/GI] FROM PCONSUMI INNER JOIN PGIACENZA ON (PCONSUMI.MESE=PGIACENZA.MESE) AND (PCONSUMI.CODICE=PGIACENZA.CODICE); |
SELECT PCONSUMI.CODICE, PCONSUMI.MESE, PCONSUMI.CLASSECONSUMO, PGIACENZA.CLASSEGIACENZA, [CLASSECONSUMO] & [CLASSEGIACENZA] AS [CLASSE_CO/GI] FROM PCONSUMI INNER JOIN PGIACENZA ON (PCONSUMI.MESE=PGIACENZA.MESE) AND (PCONSUMI.CODICE=PGIACENZA.CODICE);
In questo modo è possibile valutare come si modificano le varie categorie durante il tempo, ed analizzare gli spostamenti degli articoli individuando i codici che rimangono nella stessa classe o quelli che si spostano da una classe ad un’altra, particolare attenzione va posta agli articoli che durante l’anno passano ripetutamente da una classe ad un’altra per individuare le ragioni di questa “schizofrenia”. Se aggiungiamo anche la categoria merceologica possiamo individuare la composizione delle classi e come essa varia nel tempo.
3 commenti su “Analisi ABC e Matrice Scorte Consumato”
ciao,
ho provato a seguire i passi che hai descritto.
non riesco a far girare la macro.
Mi da degli errori di compilazione:
ad esempio il compilatore si blocca su:
Ciao,
ho provato a seguire i passi che hai descitto sopra, ma mi sono bloccata sulla macro.
il compilatore mi errore su:
Dim mese(n)
dicendomi “constant espession required”
mi sapresti dire come risolvere il problema?
grazie
Ciao, il codice è solo una parte della macro per calcolare la classe ABC, il resto del codice dipende dal modo in cui ci si collega alla tabella, io solitamente utilizzo DAO, ma ognuo può utilizzare il metodo che ritiene più opportuno. Si seguito la funzione per il calcolo della classe ABC su una tabella. I valori da passare alla funzione sono i seguenti (da fornire tra virgolette poichè si tratta di testo) : NomeTabella:Indicare il nome della tabella su cui si vuole calcolare la classe ABC, CampoValore: Indicare il nome del campo della tabella in cui è contenuto il valore espresso in percentuale su cui calcolare la classe ABC, CampoABC: Nome del campo della tabella in cui la funzione andrà a scrivere la classe ABC calcolata, Chiave: Nome del campo della tabella in base al quale calcolare la classe ABC, ad esempio se in una tabella abbiamo più codici per i quali vogliamo calcolare la classe ABC la chiave è costituita dal codice ovvero la funzione ricalcola la classe ABC per ogni codice presente nella tabella.
Spero di esserti stato di aiuto, sono a disposizione per qualsiasi chiarimento.
Gian Paolo