Articoli Taggati ‘refilling’

Refilling

ott
2009
21

scritto da | on , | Nessun commento

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.

frammentazione magazzino 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

News