Articoli Taggati ‘ubicazione’
Quando i lettori di codici a barre o i sistemi di gestione del magazzino non erano diffusi come oggi, ogni anno a dicembre le imprese avevano la necessità di verificare la merce in magazzino tramite un inventario. Teoricamente oggi grazie ai sistemi informativi ed ai lettori di codici a barre possiamo sapere in tempo reale il valore del nostro magazzino e quindi realizzare un inventario del magazzino potrebbe sembrare un’operazione superata, con pochi clic di mouse posso sapere il valore complessivo del mio magazzino e il dettaglio per singolo articolo, possiamo risparmiare ai magazzinieri la fatica di contare tutti gli articoli che abbiamo in magazzino. || Continua a leggere
In questo post vedremo come calcolare l’indice l’accesso attraverso un modello elementare (ovvero un modello che fa delle forti semplificazioni sulla realtà ma rimane semplice realizzazione, in un post successivo complicheremo ulteriormente il modello per renderlo più vicino alla realtà). L’indice d’accesso individua il grado di raggiungibilità di una ubicazione all’interno del magazzino e tale informazione è di grande aiuto per decidere come disporre la merce in magazzino, infatti è opportuno ubicare i materiale a bassa rotazione nelle ubicazione con indice di accesso basso e viceversa. Le semplificazioni adottate nel nostro modello riguardano la tipologia di magazzino costituito da corsie di scaffali, la presenza di un solo ingresso, uno schema del magazzino che rispetta solo la realtà topologica del magazzino (ovvero nello schema la corsia A è vicino alla corsia B ma non viene rispettata in maniera precisa la distanza), la distanza è calcolata in linea d’aria come se non ci fossero ostacoli. La procedura per calcolare l’indice d’accesso si realizza in tre passaggi:
- Realizzazione dello schema grafico del magazzino
- Individuazione delle coordinate di ogni campata
- Calcolo della distanza tra ogni campata e l’ingresso.
Realizzazione dello schema grafico del magazzino: Rappresentiamo graficamente il magazzino su un foglio Excel evidenziando in giallo le celle con le campate ed indicando sulla cella la parte di ubicazione costituita dalla corsia e campata(Ad esempio se una ubicazione è costituita da una lettera che indica l’area del magazzino, una lettera che indica la corsia, due cifre che indicano la campata e due cifre che indicano il ripiano come SA0101, nella cella andremo a scrivere SA01 utilizzando la formula di Excel stringa.estrai([Riferimento cella],1,4) in questo modo otteniamo il dato da inserire nella cella)
Individuazione delle coordinate di ogni campata: Attraverso questa funzione una volta selezionata l’area del magazzino è possibile ottenere in automatico le coordinate di ogni campata. Gli argomenti da passare alla funzione sono l’area del magazzino nel nostro esempio “A1:I23” e la cella di output ovvero la cella in cui la funzione andrà a scrivere le ubicazioni con le coordinate, nel nostro esempio “K1”, l’esempio del codice si riferisce all’intervallo nel foglio1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | Public Function Coordinate(AreaMagazzino, CellaOutput) AM = AreaMagazzino CO = CellaOutput NC = ActiveWorkbook.Worksheets(1).Range(AM).Address DP = InStr(1, NC, ":") UC = Mid(NC, DP + 1, Len(NC)) PC = Mid(NC, 1, DP - 1) rigaINI = ActiveWorkbook.Worksheets(1).Range(PC).Row colonnaINI = ActiveWorkbook.Worksheets(1).Range(PC).Column rigaFIN = ActiveWorkbook.Worksheets(1).Range(UC).Row colonnaFIN = ActiveWorkbook.Worksheets(1).Range(UC).Column righe = rigaFIN - rigaINI colonne = colonnaFIN - colonnaFIN RIO = ActiveWorkbook.Worksheets(1).Range(CO).Row COO = ActiveWorkbook.Worksheets(1).Range(CO).Column R = 0 For x = rigaINI To rigaFIN For y = colonnaINI To colonnaFIN ubicazione = ActiveWorkbook.Worksheets(1).Cells(x, y).Value If ubicazione <> "" Then ActiveWorkbook.Worksheets(1).Cells(RIO + R, COO).Value = ubicazione ActiveWorkbook.Worksheets(1).Cells(RIO + R, COO + 1).Value = x ActiveWorkbook.Worksheets(1).Cells(RIO + R, COO + 2).Value = y R = R + 1 End If Next y Next x End Function |
Calcolo della distanza tra ogni campata e l’ingresso: A questo punto abbiamo una tabella formata dalle seguenti colonne: NOME CAMPATA, COORDINATA_X_CAMPATA, COORDINATA_Y_CAMPATA, COORDINATA_X_INGRESSO, COORDINATA_Y_INGRESSO, andiamo quindi ad inserire una sesta colonna dove calcoliamo la distanza in questo modo: =RADQ(((COORDINATA_X_INGRESSO-COORDINATA_X_CAMPATA)^2)+((COORDINATA_Y_INGRESSO-COORDINATA_Y_CAMPATA)^2)), a questo punto per avere l’indice d’accesso rapportiamo la distanza calcolata con la massima distanza delle ubicazioni del magazzino.
La corretta definizione di una sistema di stoccaggio delle merci nel magazzino è uno degli elementi che consente l’ottimizzazione dei prelievi, infatti obiettivi di un sistema di ubicazione sono:
- Ridurre i tempi per la collocazione ed il prelievo
- Ridurre gli spazi inutilizzati
- Permettere l’accesso a tutti gli articoli
- Permettere una naturale rotazione degli articoli.
Possiamo individuare due tipi di ubicazioni: statica ed una dinamica. Nel caso dell’ubicazione statica le merci sono stoccate secondo la regola ogni un posto per ogni cosa, mentre nel caso dell’ubicazione dinamica ogni articolo può essere ubicato, volta per volta dove si trova spazio disponibile ad accoglierlo. Entrambi i sistemi presentano dei vantaggi e svantaggi infatti l’ubicazione statica richiede uno spazio maggiore ma consente di ridurre i tempi di prelievo e stoccaggio, viceversa l’ubicazione dinamica richiede minore spazio ma aumenta i tempi di prelievo e stoccaggio. In questo post viene suggerita una soluzione intermedia che possiamo definire come ubicazione dinamica a fasce, ovvero per ogni articolo viene definita un’area preferenziale dove collocare l’articolo in base alle sue caratteristiche per consentire una maggiore velocità di prelievo e stoccaggio. Per utilizzare tale sistema è necessario effettuare le seguenti operazioni:
Suddividere gli articoli in tre classi di movimentazione (alta, media e bassa)
Suddividere le ubicazione in tre classi di accessibilità (alta, media, e bassa)
Assegnazione ad ogni articolo di una fascia di magazzino.
Per realizzare la prima operazione è necessario reperire per ogni articolo le seguenti informazioni: CODICE, N PRELIEVI, QT PRELEVATA. Per ognuna delle due variabili effettuiamo una analisi ABC e costruiamo una matrice N prelievi e QT prelevata e suddividiamo gli articoli in tre classi: A( AA,BA,AB); B(CA,BB,AC); C(CB,BC,CC).
Per suddividere le ubicazione in tre classi bisogna calcolare per ogni ubicazione l’indice di accessibilità orizzontale e verticale, con il primo intendiamo la distanza dell’ubicazione dai punti d’ingresso ed uscita del magazzino, mentre per accessibilità verticale intendiamo la distanza dell’ubicazione rispetto al suolo (consideriamo ad esempio una scaffalatura a 6 ripiani, possiamo definire come più accessibili verticalmente i ripiani intermedi, mentre meno accessibili i ripiani a piano terra o quelli più alti). A questo punto procediamo all’analisi ABC delle due distanze e costruiamo la matrice ABC per individuare le tre classi.
Come punto finale associamo ad ogni codice la classe di movimentazione con la relativa classe di accessibilità di ubicazione, in questo caso il sistema gestionale suggerirà di ubicare gli articoli di classe A di movimentazione nelle ubicazioni libere della fascia A.
In un magazzino gestito con ubicazioni dinamiche il codice viene ubicato dove c’è lo spazio disponibile pertanto uno stesso codice potrebbe essere allocato in più punti del magazzino, se sono parecchi i codici con più ubicazioni questo può rallentare le operazioni di prelievo del materiale, un po’ come avviene con un disco di un computer che pertanto periodicamente va deframmentato. Come misurare il grado di frammentazione del magazzino? Lo possiamo misurare attraverso l’indice di Gini che misura il grado di concentrazione in una distribuzione di frequenza. La tabella da cui partire è la seguente:
CODICE, N UBI
A questo punto attraverso tre query in cascata andiamo ad accodare in una tabella dove registriamo lo storico del grado di frammentazione del magazzino:
SELECT [UBICAZIONI].CODICE, [UBICAZIONI].[N UBI], [Totale ubicazioni].TOTUBI, [N UBI]/[TOTUBI] AS FRE, [FRE]^2 AS FREQ FROM [UBI LOGIS], [Totale ubicazioni] ORDER BY [UBI LOGIS].[N UBI] DESC; |
SELECT SUM(Frequenze.FREQ) AS SOMMA, COUNT(Frequenze.CODICE) AS N FROM Frequenze; |
INSERT INTO [Frammentazione magazzino] ( DATA, FRAMMENTAZIONE ) SELECT DATE() AS DATA, 1-((1-[SOMMA])/(([N]-1)/[N])) AS FRAMMENTAZIONE FROM [Somma frequenze]; |
Graficamente possiamo rappresentare la frammentazione del magazzino contando per ogni frequenza di ubicazione quanti codici ci sono.
Una volta individuato che il magazzino è eccessivamente frammentato procediamo all’operazione di refilling, ovvero andiamo a posizionare in una ubicazione i codici che sono in più di tre ubicazioni, per fare questo è necessario elaborare una tabella che indichi per ogni codici le ubicazioni in cui si trova. Per fare questo partiamo da una tabella GIACENZA così formata:
CODICE, UBI, QT ed eseguiamo il seguente codice
Function uge() Dim db As DAO.Database Dim tabella As DAO.Recordset Dim c1 As DAO.Field Dim c2 As DAO.Field Dim c3 As DAO.Field Dim c4 As DAO.Field Dim CODE(50000) Dim AREA(50000) Dim QT(50000) Dim TE(50000) Dim CA(50000) Set db = CurrentDb C = 1 Set tabella = db.OpenRecordset("GIACENZE", dbOpenDynaset) Do Until tabella.EOF CODE(C) = tabella.Fields("CODICE") AREA(C) = Replace(tabella.Fields("UBI"), " ", "") QT(C) = tabella.Fields("QT") C = C + 1 tabella.MoveNext Loop tabella.Close DoCmd.SetWarnings False DoCmd.RunSQL "DELETE [UBICAZIONI.* FROM [UBICAZIONI];" Set tabella = db.OpenRecordset("UBICAZIONI", dbOpenDynaset) Set c1 = tabella.Fields("CODICE") Set c2 = tabella.Fields("UBICAZIONE") Set c3 = tabella.Fields("QT") Set c4 = tabella.Fields("N UBI") For X = 1 To C If CODE(X) <> CODE(X - 1) Then TE(X) = AREA(X) CA(X) = QT(X) N = 1 Else TE(X) = TE(X - 1) + "; " + AREA(X) CA(X) = CA(X - 1) + QT(X) N = N + 1 End If If CODE(X) <> CODE(X + 1) Then tabella.AddNew c1 = CODE(X) c2 = TE(X) c3 = CA(X) c4 = N tabella.Update End If Next X tabella.Close db.Close End Function |
La mappatura del magazzino consiste nella rappresentazione logica di un magazzino fisico attraverso la creazione di ubicazioni. Possiamo definifire le ubicazioni all’interno di un magazzino costituito da scaffalature attraverso le seguenti coordinate:
- Area
- Corsia
- Campata
- Ripiano
Consideriamo un magazzino di un distributore di calzature avremo le seguenti aree:
U: Calzature uomo
D: Calzature donna
B: Calzature bambino
S: Calzature sportive
A: Altre calzature || Continua a leggere




