scritto da | on , | Nessun commento

Una confezione ben studiata riduce il prelievo frazionato evitando quindi errori dovuti al conteggio, allora come gestire le confezioni degli articoli per ottimizzare e velocizzare il prelievo dei materiali sia per la vendita che per la produzione? L’analisi da cui partire è quella relativa alle qt prelevate per ogni articolo per cercare di individuare la confezione più adatta. Consideriamo il caso più semplice, un’azienda che acquista e rivende, in questo caso i passaggi da effettuare sono i seguenti:

  1. calcolare il prelievo medio per ogni articolo raggruppato per cliente
  2. eliminare i valori poco significativi
  3. individuare il massimo comune divisore per ogni articolo (ad esempio per l’articolo X il cliente A acquista 10, B 15 e C 20, la confezione da proporre è 5)

Consideriamo la tabella con i movimenti di magazzino filtrando solo quelli in vendita avremo la seguente tabella CODICE,CLIENTE,QT e calcoliamo il valore medio, la deviazione standard ed il coefficiente di variabilità

SELECT MOVIMENTI.CODICE, MOVIMENTI.CLIENTE, Avg(MOVIMENTI.QT) AS MEDIA, StDevP(MOVIMENTI.QT) AS DEVST
FROM MOVIMENTI
GROUP BY MOVIMENTI.CODICE, MOVIMENTI.CLIENTE;

(attenzione utilizziamo la deviazione standard calcolata sulla popolazione e non quella campionaria)

Calcoliamo il coefficiente di variabilità come frazione tra la deviazione standard  ed eliminiamo quei codici che hanno un CV superiore al 40%, avremo quindi una tabella del tipo: CODICE, CLIENTE, QT MEDIA calcoliamo quindi il massimo comune divisore in questo modo ( per meglio calcolare il MCD è preferibile arrotondare i valori)

Function confezioni()
Dim db As DAO.Database
Dim tabella1 As DAO.Recordset
Dim tabella2 As DAO.Recordset
Dim c1 As DAO.Field
Dim c2 As DAO.Field
Dim CODICE(10000)
Dim QR(10000)
Dim QT(100)
Set db = CurrentDb
Set tabella1 = db.OpenRecordset("MOVIMENTI", dbOpenDynaset)
Set tabella2 = db.OpenRecordset("CONFEZIONI", dbOpenDynaset)
Set c1 = tabella2.Fields("CODICE")
Set c2 = tabella2.Fields("CONFEZIONE")
Do Until tabella1.EOF
    c = c + 1
    CODICE(c) = tabella1.Fields("CODICE")
    QR(c) = tabella1.Fields("QT MEDIA")
    tabella1.MoveNext
Loop
tabella1.Close
For j = 1 To c
    If CODICE(j) <> CODICE(j - 1) Then
        T = 1
        For x = 1 To 100
            QT(x) = 0
        Next x
        QT(T) = QR(j)
    Else
        If CODICE(j) = CODICE(j + 1) Then
            T = T + 1
            QT(T) = QR(j)
        Else
            confezione = MCD(QT)
            tabella2.AddNew
                c1 = CODICE(j)
                c2 = confezione
            tabella2.Update
        End If
    End If
Next j
tabella2.Close
db.Close
End Function

Calcoliamo le confezioni tramite questa funzione che va scrivere in una tabella in quanto in access non è possibile definire delle funzioni di aggregazione, la funzione MCD fa uso della funzione excel pertanto bisogna inserire questa libreria tra i riferimenti del progetto.

Function MCD(numeri)
Dim xls As Excel.Application
Set xls = CreateObject("Excel.Application")
MCD = xls.WorksheetFunction.Gcd(numeri)
End Function

Lascia un Commento

News