Recentemente il sistema di automazione del Fast Excel Development Template è stato migliorato con la possibilità di lanciare altre cartelle di lavoro: ora puoi costruire sistemi modulari senza scrivere codice VBA.
Con il rilascio della serie 4.2 del Fast Excel Development Template abbiamo aggiunto la capacità di avviare e orchestrare cartelle di lavoro esterne senza scrivere una singola riga di codice VBA.
Ciò consente due funzioni principali:
- puoi sviluppare cartelle di lavoro più piccole dedicate a una funzione specifica (ovviamente con codifica ZERO): questo aiuta a mantenere semplice ogni cartella di lavoro
- puoi riutilizzare lo stesso blocco in diversi edifici: ogni modulo è come un componente Lego
Prima di approfondire l’argomento di questo articolo, consiglio vivamente di leggere l’ottimo articolo di Kien Leong Cos’è un sistema modulare basato su Excel? Come costruire il tuo? E, soprattutto, Perché?, in cui spiega i principi alla base della modularità.
C’è un secondo articolo di Kien che dovresti leggere, Fast Excel Development Template v4.2.0 – Now Supporting Modular Systems, in cui descrive le nuove funzionalità della serie FEDT 4.2 e come utilizzare il nuovo template ModuleList .
E infine, Kien come presentatore ed il sottoscritto come ospite abbiamo tenuto un webinar il 1 novembre 2022 in cui Kien ha insegnato con la consueta maestria le caratteristiche della modularità. A proposito, ci siamo anche divertiti.
Sono tutte risorse valide ed interessanti Gabriele, ma allora di cosa parla questo articolo?
In poche parole: questo articolo mostra come ho costruito un sistema che calcola i requisiti di rifornimento di una rete di distribuzione. Prende in prestito alcuni criteri Demand Driven MRP (DDMRP) e riutilizza lo stesso modulo/cartella di lavoro per ogni nodo/punto di stoccaggio nella rete, più volte. E ovviamente ho usato il Fast Excel Development Template: nessun essere umano ha scritto una sola riga di codice VBA.
Quando parliamo di modularità, intendiamo il riutilizzo della stessa cartella di lavoro (come modulo) realizzata per un un sistema in un altro sistema diverso. Questo esempio è la dimostrazione definitiva di questo principio. Stiamo riutilizzando lo stesso modulo molte volte in posizioni diverse nello stesso sistema. Ho scelto un esempio semplice ma potente di distribuzione del prodotto con più punti di stoccaggio o “depositi”.
Downloads
Ti prego di leggere questo articolo prima di provare il sistema. Puoi scaricarlo qui di seguito, ma non avrà molto senso finché non saprai cosa deve fare e come eseguirlo.
Il modello della rete di distribuzione
Ho considerato una rete di distribuzione di rivenditori molto semplice. Seguendo la nostra tradizione di Production-scheduling.com, questa rete di esempio distribuisce biciclette.
C’è un deposito centrale chiamato Central che ordina da fornitori esterni e rifornisce quattro nodi: East, North, South e West.
East e West sono nodi terminali: vendono direttamente al pubblico.
Il nodo North rifornisce due nodi: NorthEast e NorthWest, che sono nodi finali.
In modo simile, il nodo South rifornisce altri due nodi: SouthEast e SouthWest, che sono nodi finali.
In totale abbiamo nove nodi.
Ogni nodo riceve ordini, gestisce il proprio inventario e calcola le proprie esigenze di rifornimento.
Central riceve ordini di rifornimento da East, North, South e West e ordina ai suoi fornitori.
East, NorthEast, NorthWest, SouthEast, SouthWest e West vendono al pubblico e vengono riforniti dal nodo a monte: avranno variazioni sui livelli di inventario a causa degli acquisti giornalieri dei clienti e avranno enormi vendite promozionali pianificate.
South e North stanno nel mezzo come hub: inviano ordini di rifornimento a Central e ricevono ordini di rifornimento dai depositi figli che riforniscono.
La Modularità agisce
Prendiamoci un minuto per pensare alla rete di cui sopra: ogni nodo è molto simile agli altri, non è vero? Vendono a valle e riforniscono da monte.
E se riflettiamo ancora un minuto, arriviamo alla conclusione che sono esattamente uguali dal punto di vista del trattamento dei dati.
In altre parole, sono nove cloni di un unico modello.
Quindi sì, ho creato una cartella di lavoro e l’ho riutilizzata nove volte, una per ogni nodo. Modularità, giusto?
E poiché ogni modulo/cartella di lavoro può eseguire altre cartelle di lavoro grazie al modello FEDT ModuleList, funziona così:
- Central esegue East, North, South e West
- North esegue NorthEast e NorthWest
- South esegue SouthEast e SouthWest
Fondamentalmente è nove volte la stessa cartella di lavoro con dati di input e output diversi.
Le nove cartelle di lavoro si chiamano a vicenda in una cascata predefinita.
La relazione fra i nove depositi può essere descritta da una tabella, molto simile a una distinta base (BOM).
Di seguito è riportata la tabella di descrizione della rete di questo esempio. Si noti che in questo schema di fornitura, il “padre” di Central è rappresentato dai fornitori esterni. Ci sono anche 6 figli che non sono genitori: sono i nodi terminali dove avvengono le vendite.
Non ho avuto bisogno di scrivere una sola riga di VBA, il linguaggio macro di Excel.
Rifornimento Pilotato dalla Domanda
Abbiamo preso visione della rete nel suo complesso, è ora di approfondire il singolo nodo.
Ho utilizzato un algoritmo di rifornimento molto semplice basato sui principi del Demand Driven MRP .
A proposito, nel 2020 abbiamo avuto alcune attività DDMRP su Production-scheduling.com: controlla DDMRP in Excel – From Idea to Execution – Webinar Replay se sei interessato.
I principi alla base del DDMRP sono complessi e sono necessari alcuni ragionamenti strategici prima di procedere con l’implementazione: consiglio di leggere i libri del Demand Driven Institute e/o frequentare i loro corsi per una comprensione più approfondita dell’argomento.
Ho preso in prestito i concetti e le formule relative ai buffer di disaccoppiamento e ai calcoli di riempimento dei buffer, tuttavia li ho mantenuti molto leggeri e alquanto approssimativi per semplicità. Un’implementazione accurata del DDMRP, anche per un caso semplice come questo, richiede un’analisi più approfondita dei numeri e del business.
Buffer di disaccoppiamento
Cosa è un buffer di disaccoppiamento?
È un buffer dinamico basato sulla domanda che attenua le variazioni della domanda, proteggendo e promuovendo il flusso di materiale.
È costituito da tre zone:
- la zona rossa, puoi pensarla come una scorta di sicurezza
- la zona gialla, sopra quella rossa, che è la zona che attiva gli ordini di riapprovvigionamento
- la zona verde, sopra quella gialla, che è il target da raggiungere con gli ordini di riapprovvigionamento: questo determina la frequenza e la dimensione degli ordini di riapprovvigionamento
Ci sono due zone aggiuntive:
- quella rosso scuro, sotto quella rosso, che significa mancanza di materiale
- quella blu, sopra la zona verde, che significa eccesso di scorte
Le zone dei Buffer
Un’informazione fondamentale di cui abbiamo bisogno è l’Utilizzo Giornaliero Medio o ADU (Average Daily Use) per ogni codice articolo: ho considerato gli ultimi due mesi.
Si consiglia vivamente di mantenerlo aggiornato: il ricalcolo giornaliero è l’opzione migliore.
Per ogni articolo abbiamo bisogno del lead time disaccoppiato o LT, nel nostro caso il lead time dal nodo a monte e il lead time cumulato o CLT, nel nostro caso il lead time completo fino al fornitore dell’articolo. Questi parametri sono specifici dell’articolo.
Abbiamo bisogno anche di un fattore di lead time e di un fattore di variabilità, che per semplicità ho impostato rispettivamente all’80% e al 50%.
In breve il fattore lead time tiene conto dell’impatto di una variazione del lead time, quindi più breve è il lead time più alto dovrebbe essere questo fattore, mentre il fattore di variabilità tiene conto del rischio di interruzioni del flusso di materiale dovute a fattori imprevisti. Questi due fattori vengono valutati sulla base dell’esperienza e dell’analisi statistica del business.
Calcoliamo la dimensione delle tre zone dei nostri buffer:
- Zona verde: ADU x LT x fattore LT
- Zona Gialla: ADU x LT
- Zona Rossa: ADU x LT x Fattore LT x (1 + Fattore di variabilità)
TOG (Top of Green) = Zona Rossa + Zona Gialla + Zona Verde
TOY (Top of Yellow) = Zona Rossa + Zona Gialla
TOR (Top Of Red) = Zona Rossa
La copertura di sicurezza espressa in giorni è pari a: TOR / ADU
Il numero di ordini di rifornimento attivi contemporanei è: Zona Gialla / Zona Verde
La Net Flow Position (NFP)
Per attivare gli ordini di rifornimento, dobbiamo confrontare la situazione dei buffer di disaccoppiamento con gli ordini di rifornimento già emessi ma non ancora consegnati, la domanda e l’inventario.
L’indicatore che riassume quello stato si chiama Net Flow Position (NFP): impariamo a calcolarlo.
NFP = disponibile a magazzino + in ordine (non ancora ricevuto) – domanda qualificata
“disponibile” è il livello di inventario corrente per l’articolo, “in ordine” è la somma degli ordini di riapprovvigionamento non ancora ricevuti.
La parte “domanda qualificata” è un po’ più complessa: è la somma delle richieste scadute, della domanda del giorno, delle richieste giornaliere nell’orizzonte di picco (OSH) che superano la soglia di picco (OST) e delle richieste giornaliere nell’orizzonte di picco 2 (OSH2) che superano la soglia di picco 2 (OST2).
Definizioni:
OST = n x ADU, ho scelto n = 3
OSH = oggi + LT
OST2 = N x ADU, ho scelto N = 6
OSH2 = oggi + CLT
I parametri OSH / OST tengono conto di una domanda insolita a breve termine che può rompere il buffer di disaccoppiamento, nel nostro esempio potrebbe essere un piccola squadra ciclistica che effettua un acquisto di gruppo.
I parametri OSH2 / OST2 tengono conto dell’enorme domanda nota che può interrompere l’intera sequenza di buffer di disaccoppiamento a monte, nel nostro esempio potrebbe essere una vendita promozionale.
Importante: conta ogni domanda una volta anche se corrisponde a più di un criterio.
LT e CLT sono memorizzati nella tabella Items.
Emissione Ordini di Rifornimento e Priorità di Rilascio
La regola è molto semplice.
La quantità dell’ordine è:
- =0 (zero) …. se Net Flow Position (NFP) > Top of Yellow (TOY)
- =Top of Green (TOG) – NFP …. se NFP <= TOY
L’indice di priorità di rilascio è NFP/TOG, più basso è l’indice più urgente è l’ordine.
In condizioni ideali, la disponibilità proiettata (OH) sarà compresa tra Rosso e Rosso+Verde, quindi il livello di inventario medio previsto è Rosso + Verde/2.
Rosso <= OH <= Rosso + Verde
OH medio = Rosso + Verde / 2
I colori del NFP
Per cogliere a colpo d’occhio la diversa Net Flow Position rispetto alle Buffer Zone, applichiamo la seguente classificazione visiva:
Blu: NFP > TOG (overstock)
Verde: TOY < NFP <= TOG (bene così, nulla da fare)
Giallo: TOR < NFP <= TOY (ok, agisci ed metti un nuovo ordine di rifornimento)
Red: 0 < NFP <= TOR (siamo nella zona di sicurezza)
Rosso Scuro: NFP <= 0 (possibile mancanza materiale)
Questo è tutto ciò che volevo prendere in prestito da DDMRP: è solo la punta dell’iceberg, tuttavia ecco la panoramica della Net Flow Position di ItemCode e di Depo; è una situazione visiva che può guidare le azioni di gestione del rifornimento.
Distribution Planning modulare in Excel
Il sistema complementare fornito con questo articolo è organizzato in moduli e cartelle.
Scarica il file .ZIP ed estrailo in C:\.
Dovresti avere la cartella C:\P-S_ModularDP e al suo interno dovresti trovare le seguenti cartelle:
- Central
- Data
- East
- North
- NorthEast
- NorthWest
- Report
- South
- SouthEast
- SouthWest
- Suppliers
- West
Central, East, North, NorthEast, NorthWest, South, SouthEast, SouthWest e West contengono una sotto cartella Data ed il modulo specifico di quel depo.
La cartella Data ospita i dati comuni, la cartella Report è utilizzata per isolare il modulo di reporting e i suoi dati, Suppliers è dove Central inserisce gli ordini dei fornitori esterni.
In C:\P-S_ModularDP trovi anche i seguenti file Excel:
- DevTemplate_Professional_v4.2.2.3.xlsm
- MDP_DataInterface.xlsm
- MDP_Master.xlsm
- MDP_RandomDataGen.xlsm
Se desideri utilizzare i tuoi dati, devi:
- inserire i tuoi dati nella cartella C:\P-S_ModularDP\Data
- smarcare la Random Data Generation checkbox in MDP_Master.xlsm foglio Menu
Il modulo Master è quello che esegue tutto: vai al foglio di lavoro Menu e premi il pulsante “Update from local”.
Questo esguirà:
- il modulo RandomDataGen, che tra l’altro può essere escluso deselezionando la casella sopra il pulsante: questo genera un dataset casuale, emula il download di un dataset da un sistema mainframe;
- il modulo DataInterface: prende i dati precedentemente generati, li formatta secondo necessità e li sposta nelle posizioni corrette; questo è un modulo di flessibilità: puoi utilizzare lo stesso sistema con diversi formati di set di dati di input se li standardizzi come output di questo modulo
- il modulo Central: questo è il magazzino (Depo) in cima alla distribuzione ed esegue East, North, South e West; North e South gestiscono rispettivamente i moduli NorthEast, NorthWest e SoutEast, SouthWest; ogni modulo di deposito riceve in input la tabella Items, la descrizione del Network, gli ordini da altri depositi, l’inventario, gli ordini di riapprovvigionamento già emessi e la domanda storica; calcola l’ADU, le buffer zone, la NFP e generano gli ordini di riapprovvigionamento più il report.
- il modulo Report, che mostra una panoramica delle Posizioni Flusso Netto per articolo e per deposito più i dettagli calcoli di ricostituzione di ogni deposito; riceve i dati dai moduli depo e li presenta in modo chiaro.
Ecco un diagramma di flusso che dovrebbe aiutare a comprendere la logica di elaborazione.
Ed ecco il flusso di processo di un nodo/deposito.
Alcuni consigli tecnici
Questa sezione è dedicata agli appassionati delle magie del FEDT.
Durante lo sviluppo ho beneficiato di alcune caratteristiche poco conosciute del FEDT.
Il pulsante denominato “Update Text File location” è utile quando si modifica la posizione dei file di testo: modifica le query nei moduli Query se trova il file nella nuova posizione, non fa nulla se il file non è presente.
Kien Leong sta lavorando a una versione migliorata di questa funzionalità e sarà inclusa nella versione 4.3 del modello di sviluppo.
Ho costruiti alcune delle istruzioni di automazione nella riga 6 come formule: funziona bene, tieni però presente che i valori generati dalla formula vengono interpretati solo quando l’automazione è attivata e successivamente quel valore viene congelato nella macro di automazione.
Ho usato le formule in ModuleList: i valori vengono interpretati ogni volta che il modulo viene eseguito. Splendido. non è vero?
Ancora in ModuleList, se la lunghezza del nome della cartella di lavoro è 0 o è un errore, il modulo passa alla cartella di lavoro successiva senza errori.
Ho usato l’istruzione NEXT, che abilita la ramificazione e la ricorsione: questo è un argomento avanzato, analizza Material-Constrained Production Scheduling Tool – with a New Fast Excel Development Template Feature per un esempio di ricorsione costruito con NEXT.
Poiché le istruzioni di automazione dell’output TXT_Int, TXT_Loc, CSV_Int, CSV_loc possono essere utilizzate più volte negli stessi fogli di lavoro, esistono alcuni fogli di lavoro che generano 2 o più file di testo (fino a 36).
Stacking di file di testo: ho utilizzato i noti modelli Query e Stack di FEDT nei moduli depo, eccetto che nel modulo Report, dove ho utilizzato le funzionalità di Excel Power Query; nello stesso modulo Report c’è anche un’interessante tecnica di filtraggio per ottenere le informazioni su uno specifico depo in ogni foglio di lavoro: si trova nei report specifici per ciascun depo.
Ecco un’immagine di un foglio di lavoro ModuleList.
Prossimi passi.
Iscriviti e scarica l’esempio gratuitamente.
Gioca col sistema, modifica il dataset
Impara da questo esempio come sfruttare la modularità
Esplora il sito P-S: è una miniera di informazioni d’oro.
Qualche riflessione per te
Cosa cambia se invece di una rete di distribuzione avessimo un certo numero di reparti di produzione?
Pensi che il FEDT possa supportare un sistema di pianificazione e programmazione demand-driven per il caso sopra?
Suggerimenti: modularità, automazione senza scrittura di codice
Sommario
Hai imparato come usare la modularità e il FEDT con un esempio pratico.
Hai anche imparato come programmare una rete di distribuzione in ottica Demand Driven.
È tempo di agire e fare pratica: questo è l’unico modo per imparare e beneficiare della nostra metodologia e dei nostri strumenti.
Se hai bisogno di aiuto, sei il benvenuto in Production-Scheduling: siamo un team di consulenti e offriamo dal semplice suggerimento gratuito al progetto di consulenza strutturata, inclusi gli edifici di sistema basati su FEDT.