Il template dei dati per la gestione delle scorte
Il template dei dati per la gestione delle scorte
- Attributi consigliati da raccogliere
- Attività chiave da monitorare per individuare i processi
- Istruzioni per l’estrazione dei dati da SAP S/4HANA
Attributi per la gestione delle scorte
| Nome | Descrizione | ||
|---|---|---|---|
| Data e ora dell’evento EventTime | Data e ora precise in cui l’attività relativa alle scorte è stata registrata nel sistema. | ||
| Descrizione Data e ora dell’evento è il timestamp che registra il momento esatto in cui si è verificata un’attività. Questo dato è essenziale per ordinare cronologicamente gli eventi e ricostruire il flusso del processo per ogni lotto di scorte. Costituisce la base di tutte le analisi dei processi basate sul tempo. La precisione di questo dato è fondamentale per calcolare indicatori chiave come i tempi di ciclo, i tempi di attraversamento e le durate. Consente di analizzare l’andamento dei processi in periodi diversi, aiuta a individuare quando si verificano i colli di bottiglia e fornisce dati concreti per comprendere i ritardi, ad esempio il tempo che un lotto trascorre in controllo qualità prima del rilascio. Perché è importante Ordina gli eventi cronologicamente e costituisce la base per tutti i calcoli di durata e prestazioni. Dove reperirli In genere è composto dalla data di registrazione (MKPF-BUDAT) e dall’ora di inserimento (MKPF-CPUTM), ricavate dalla tabella di intestazione dei documenti materiale MKPF. Esempi 2023-10-26T09:00:00Z2023-11-15T14:35:10Z2024-01-05T23:15:00Z | |||
| Lotto di magazzino InventoryBatchLot | Identificativo univoco di una specifica quantità di prodotto, utilizzato come ID del caso per tracciarne il ciclo di vita. | ||
| Descrizione Il numero del lotto di magazzino è l’identificativo principale del caso e raggruppa tutte le attività relative a una specifica quantità di prodotto. Consente di ricostruire in ordine cronologico il percorso delle scorte, dal ricevimento iniziale in magazzino, attraverso i vari movimenti interni e le modifiche di stato, fino al prelievo per la vendita o la produzione oppure allo smaltimento. Nell’analisi dei processi, questo attributo è fondamentale: permette di tracciare il flusso completo di ogni lotto, misurare con precisione i tempi di ciclo, individuare le variazioni del processo e capire come vengono gestiti i diversi lotti. L’analisi a livello di lotto è essenziale nei settori in cui la tracciabilità, il controllo qualità e la gestione delle date di scadenza sono cruciali, come quello farmaceutico, alimentare e chimico. Perché è importante È l’identificativo principale che collega tutti gli eventi relativi alle scorte in un unico caso e rende possibile l’analisi completa del processo. Dove reperirli In genere è il numero di lotto, presente in tabelle SAP come MCHA (anagrafica lotti) o MCH1 (lotti), nel campo CHARG. Esempi B001-A452023L202405-XYZ789456123BATCH-05-24 | |||
| Attività ActivityName | Nome dell’evento aziendale che si è verificato in un determinato momento del processo di gestione delle scorte. | ||
| Descrizione L’attributo Attività descrive un singolo passaggio o evento nel ciclo di vita di un lotto di scorte. Gli eventi rappresentano azioni aziendali importanti, come ricevere la merce, spostare le scorte, effettuare un controllo qualità o prelevare materiali. Ogni attività registra un’operazione avvenuta sul lotto in un momento preciso. L’analisi delle attività è alla base del Process Mining: permette di visualizzare il flusso del processo, individuare i percorsi frequenti e quelli rari, rilevare i colli di bottiglia che causano ritardi e analizzare i cicli di rilavorazione. Comprendendo la sequenza e la frequenza di attività come 'Scorte rottamate' o 'Controllo qualità', le aziende possono individuare le aree in cui intervenire per migliorare i processi e l’efficienza operativa. Perché è importante Definisce i passaggi del processo e consente di visualizzare e analizzare il ciclo di vita delle scorte. Dove reperirli È un attributo derivato, spesso ricavato dai tipi di movimento SAP (MSEG-BWART) o dai codici transazione (MKPF-TCODE2) e associato a nomi più comprensibili. Esempi Entrata merci registrataTrasferimento di stoccaggio registratoUscita merci per consegna registrataScorte rottamate | |||
| Codice causale del movimento MovementReasonCode | Un codice che specifica la causa di un movimento di magazzino. | ||
| Descrizione Il codice causale del movimento fornisce ulteriori informazioni sul motivo per cui è stato effettuato un movimento di merci. Spesso viene utilizzato per spiegare movimenti non pianificati, come rettifiche delle scorte, resi o rottamazioni. Questo attributo è particolarmente utile per l’analisi delle cause profonde. Nella Dashboard «Cause delle rettifiche manuali delle scorte», l’analisi per codice causale può rivelare i motivi delle discrepanze, come danni, furti o errori di inserimento dei dati. Queste informazioni aiutano le aziende a intervenire sui problemi sottostanti, anziché limitarsi a correggerne gli effetti. Perché è importante Spiega perché si verificano movimenti di magazzino non pianificati e consente di analizzarne le cause profonde in modo mirato. Dove reperirli Si trova nella tabella delle righe dei documenti materiale MSEG, campo GRUND (causale del movimento). Esempi 00010005102 | |||
| Nome utente UserName | ID utente della persona che ha eseguito la transazione in SAP. | ||
| Descrizione Questo attributo registra l’ID utente SAP del dipendente che ha registrato il documento o eseguito l’attività. Consente di tracciare le operazioni indicando chi è responsabile delle singole azioni nel processo di gestione delle scorte. L’analisi per utente è essenziale per comprendere le prestazioni, la conformità e le esigenze di formazione. Ad esempio, la Dashboard 'Fattori alla base delle rettifiche manuali delle scorte' utilizza questo attributo per individuare chi effettua il maggior numero di rettifiche. Può aiutare a identificare gli utenti che necessitano di ulteriore formazione, mettere in evidenza attività non autorizzate o riconoscere chi ottiene i risultati migliori. Perché è importante Permette di attribuire le responsabilità e di individuare comportamenti specifici degli utenti, esigenze di formazione o problemi di conformità. Dove reperirli Si trova nella tabella di intestazione dei documenti materiale MKPF, nel campo USNAM (nome utente). Esempi JSMITHMBROWNWAREHOUSE_OPS | |||
| Numero materiale MaterialNumber | Identificativo univoco del prodotto o materiale gestito. | ||
| Descrizione Il numero materiale, spesso indicato come SKU (Stock Keeping Unit), è il codice univoco assegnato a un prodotto specifico. È un elemento fondamentale dei dati anagrafici per la gestione delle scorte e serve a monitorare quantità, valori e movimenti delle merci. Nel Process Mining, l’analisi per numero materiale offre una visione delle scorte incentrata sul prodotto. Aiuta a capire quali prodotti hanno i tempi più lunghi di controllo qualità, quali vengono rottamati più spesso o quali registrano il maggior numero di trasferimenti interni. Questa segmentazione è fondamentale per individuare problemi specifici dei prodotti e ottimizzare le strategie di gestione delle scorte in base alle diverse tipologie di merce. Perché è importante Consente di segmentare l’analisi per prodotto e di individuare schemi ricorrenti e problemi specifici di determinati articoli. Dove reperirli Si trova nella tabella delle posizioni dei documenti materiale MSEG, nel campo MATNR. I dati anagrafici sono nella tabella MARA. Esempi RM-1001FG-2050-B100-400-A | |||
| Quantità Quantity | La quantità di materiale interessata dal movimento di magazzino. | ||
| Descrizione Questo attributo indica la quantità di materiale movimentata, ricevuta, prelevata o rettificata durante una determinata attività. Il valore è registrato nell’unità di misura di base del materiale. Analizzare le quantità è fondamentale per comprendere la portata e l’impatto dei processi di gestione delle scorte. Consente di creare Dashboard che visualizzano i volumi di merci movimentati, ad esempio «Volume dei prelievi per codice prodotto». Serve inoltre a calcolare KPI come il «Rapporto tra scorte rottamate e smaltite», aggiungendo una dimensione quantitativa all’analisi dei processi, che va oltre il semplice conteggio degli eventi. Perché è importante Quantifica il volume di materiale movimentato in ogni attività e permette di analizzare i flussi, le quantità rottamate e l’impatto delle rettifiche. Dove reperirli Si trova nella tabella delle righe dei documenti materiale MSEG, campo MENGE (quantità). Esempi 10012.55000-10 | |||
| Stabilimento Plant | Unità organizzativa che rappresenta una struttura in cui si trovano le scorte, ad esempio una fabbrica o un centro di distribuzione. | ||
| Descrizione Uno stabilimento è un’unità organizzativa centrale in SAP e può rappresentare un impianto di produzione, un magazzino centrale o la sede centrale di un’azienda. Tutte le scorte si trovano fisicamente o logicamente all’interno di uno stabilimento. L’analisi per stabilimento è fondamentale per confrontare le prestazioni dei processi tra diverse sedi fisiche. Aiuta a rispondere a domande come: «In quale stabilimento il tempo di stoccaggio è più lungo?» oppure «Il tasso di discrepanze nelle scorte è più alto nello stabilimento A che nello stabilimento B?». Questa segmentazione geografica o organizzativa è essenziale per individuare i problemi specifici di una sede e condividere le buone pratiche in tutta l’organizzazione. Perché è importante Consente di confrontare i processi di gestione delle scorte e le relative prestazioni tra le diverse sedi aziendali. Dove reperirli Si trova nella tabella delle righe dei documenti materiale MSEG, campo WERKS (stabilimento). Esempi 10001710DE01US01 | |||
| Tipo di movimento MovementType | Codice SAP a tre cifre che determina la modalità di registrazione di un movimento merci. | ||
| Descrizione Il tipo di movimento è un codice di controllo fondamentale in SAP Inventory Management e determina le caratteristiche di un movimento di materiale. Specifica quali conti vengono aggiornati, come viene visualizzata la schermata della transazione e quali campi relativi a quantità o valori vengono aggiornati. Ad esempio, '101' indica un’entrata merci, '311' un trasferimento e '551' una rottamazione. Questo attributo è spesso utilizzato per ricavare il nome dell’Attività più comprensibile. Analizzare i processi per tipo di movimento offre una visione tecnica dettagliata dei flussi delle scorte. È essenziale per verificare la correttezza della mappa del processo e individuare i tipi di transazione specifici che possono causare colli di bottiglia o scostamenti. Perché è importante Fornisce una classificazione tecnica precisa di ogni evento relativo alle scorte, fondamentale per ricavare le attività e svolgere analisi dettagliate. Dove reperirli Si trova nella tabella delle posizioni dei documenti materiale MSEG, nel campo BWART (tipo di movimento). Esempi 101311261551601 | |||
| Ubicazione di magazzino StorageLocation | Un’area specifica all’interno di uno stabilimento in cui vengono stoccate fisicamente le scorte. | ||
| Descrizione Un’ubicazione di magazzino è un’unità organizzativa che consente di distinguere le scorte di materiali all’interno di uno stabilimento. Per esempio, uno stabilimento può avere ubicazioni separate per le materie prime, i prodotti finiti e le scorte in attesa di controllo qualità. Questo attributo offre informazioni sulla posizione più dettagliate rispetto allo stabilimento. Nell’analisi viene utilizzato per comprendere i trasferimenti tra diverse aree di stoccaggio, ad esempio il tempo di attraversamento dei trasferimenti dall’area di ricevimento al magazzino principale. Analizzare l’utilizzo delle ubicazioni e la frequenza dei movimenti aiuta a ottimizzare la disposizione del magazzino e la logistica interna. Perché è importante Fornisce una visione dettagliata dell’ubicazione delle scorte all’interno di uno stabilimento, utile per analizzare i movimenti interni e l’efficienza dello stoccaggio. Dove reperirli Si trova nella tabella delle righe dei documenti materiale MSEG, campo LGORT (ubicazione di magazzino). Esempi 0001RM01FG01QI01 | |||
| Data di scadenza ExpirationDate | La data in cui il lotto di materiale scade e non è più utilizzabile. | ||
| Descrizione La data di scadenza della durata di conservazione (SLED) è un dato anagrafico fondamentale per i prodotti deperibili o soggetti a limiti temporali. Viene gestita a livello di lotto e determina quando un prodotto non può più essere venduto o utilizzato. Questo attributo è essenziale per la Dashboard «Analisi delle scorte obsolete e scadute». Analizzando le attività in relazione alla data di scadenza, le aziende possono individuare i lotti a rischio e intervenire in anticipo. Il dato aiuta a misurare l’efficacia delle politiche di rotazione delle scorte, come il criterio FEFO (prima scadenza, primo a uscire), e a quantificare le perdite dovute alle scorte scadute e rottamate. Perché è importante Consente di analizzare le scorte obsolete e scadute, contribuendo a ridurre gli sprechi e le perdite economiche. Dove reperirli Si trova nella tabella anagrafica dei lotti MCH1 o MCHA, campo VFDAT (data di scadenza della durata di conservazione). Esempi 2024-12-312025-06-302024-09-01 | |||
| Numero del documento materiale MaterialDocumentNumber | Il numero univoco che identifica il documento materiale in cui è registrato il movimento delle merci. | ||
| Descrizione Quando in SAP viene registrato un movimento di merci, il sistema genera un documento materiale che ne attesta l’avvenuta registrazione. Questo attributo identifica in modo univoco il documento, che può contenere più righe o attività. Nel Process Mining, il numero del documento materiale è un identificativo transazionale fondamentale, utile per raggruppare gli eventi registrati insieme. È inoltre essenziale per gli audit e per passare dall’analisi del processo al sistema di origine, così da approfondire le singole transazioni. Perché è importante Funge da chiave transazionale per gli audit e consente di raggruppare le attività eseguite insieme. Dove reperirli Si trova nelle tabelle MKPF (testata) e MSEG (riga), campo MBLNR (numero del documento materiale). Esempi 490000123450000056784900002345 | |||
| Sistema di origine SourceSystem | Identifica il sistema di origine da cui sono stati estratti i dati. | ||
| Descrizione Questo attributo indica il sistema di registrazione da cui provengono i dati sulla gestione delle scorte. In questo caso, si tratta della specifica istanza di SAP S/4HANA. L’informazione è fondamentale negli ambienti in cui i dati possono provenire da più sistemi ERP, sistemi di gestione del magazzino o piattaforme legacy. Anche se in un’analisi basata su un solo sistema può sembrare un dato statico, diventa essenziale quando si uniscono dati provenienti da fonti diverse per ottenere una visione completa del processo. Aiuta nella governance dei dati, nella risoluzione dei problemi di estrazione e nella tracciabilità della provenienza dei dati. Perché è importante Fornisce informazioni sull’origine dei dati, essenziali per la governance dei dati e l’analisi di più sistemi. Dove reperirli In genere è un valore codificato, impostato durante la trasformazione dei dati per identificare la specifica istanza di SAP S/4HANA. Esempi S4H_PROD_100SAP_S4_FINANCES4HANA_GLOBAL | |||
| Tempo di ciclo dell’evasione degli ordini OrderFulfillmentCycleTime | Il tempo complessivo che intercorre dall’inizio del prelievo alla registrazione dell’uscita delle merci per la consegna. | ||
| Descrizione Questa metrica calcolata misura il tempo totale che intercorre tra l’attività «Prelievo avviato» e l’attività «Uscita merci per consegna registrata». Indica il tempo impiegato dal magazzino per preparare e spedire un ordine cliente dall’avvio del processo. Questo attributo misura direttamente il KPI «Tempo di ciclo dell’evasione degli ordini». Analizzare questa durata aiuta le aziende a comprendere la propria capacità di rispondere alla domanda dei clienti. Il dato può essere suddiviso per prodotto, magazzino o cliente per individuare i ritardi nelle fasi di prelievo, imballaggio e spedizione, che incidono direttamente sulla soddisfazione dei clienti e sull’efficienza logistica. Perché è importante Misura la rapidità e l’efficienza del flusso in uscita dal magazzino, un fattore determinante per la soddisfazione dei clienti. Dove reperirli È un attributo calcolato, ottenuto misurando per ogni lotto il tempo che intercorre tra gli eventi «Prelievo avviato» e «Uscita merci per consegna registrata». Esempi 7200144003600 | |||
| Tipo di scorta StockType | Indica lo stato delle scorte, ad esempio a utilizzo libero, in controllo qualità o bloccate. | ||
| Descrizione Il tipo di scorta classifica le scorte in base alla loro utilizzabilità. Le categorie principali sono scorte a utilizzo libero (disponibili senza restrizioni), scorte in controllo qualità (in attesa di verifica) e scorte bloccate (non utilizzabili). I movimenti di merci comportano spesso una modifica del tipo di scorta. Monitorare le variazioni del tipo di scorta è fondamentale per comprendere il processo di disponibilità delle scorte. Questo dato supporta direttamente attività come «Scorte trasferite al controllo qualità» e «Stato delle scorte modificato in bloccato». Analizzare il tempo trascorso in ciascun tipo di scorta, soprattutto in controllo qualità, è essenziale per individuare i ritardi che incidono sulla disponibilità delle merci per la vendita o la produzione. Perché è importante Monitora lo stato di utilizzabilità delle scorte, un dato essenziale per analizzare i ritardi nei controlli di qualità e la disponibilità dei prodotti. Dove reperirli Si trova nella tabella delle righe dei documenti materiale MSEG, campo INSMK (tipo di scorta). Esempi A utilizzo liberoControllo qualitàScorte bloccate | |||
| Ubicazione di stoccaggio StorageBin | L’unità di stoccaggio più dettagliata di un magazzino, in cui si trovano fisicamente i materiali. | ||
| Descrizione Un’ubicazione di stoccaggio identifica una posizione specifica all’interno del magazzino, ad esempio un posto su uno scaffale. Questo livello di dettaglio viene generalmente utilizzato quando è implementato SAP Warehouse Management (WM) o Extended Warehouse Management (EWM). Questo attributo è fondamentale per la Dashboard «Utilizzo dello spazio di magazzino». Consente di analizzare l’efficienza con cui viene utilizzato lo spazio, individuare possibili punti di congestione e rilevare percorsi di stoccaggio o prelievo inefficienti. Analizzare i movimenti tra le ubicazioni aiuta a ottimizzare la disposizione del magazzino e a ridurre gli spostamenti degli operatori. Perché è importante Fornisce i dati di localizzazione più dettagliati, consentendo di analizzare l’utilizzo dello spazio di magazzino e l’efficienza operativa. Dove reperirli Se si utilizza WM, il dato può trovarsi in tabelle degli ordini di trasferimento come LTAK/LTAP. Per i documenti di magazzino, potrebbe trovarsi in MSEG-LGPBE. Consultare la documentazione di SAP S/4HANA. Esempi A-01-01-AB-05-10-CAREA-RIC-01 | |||
| Ultimo aggiornamento dei dati LastDataUpdate | Timestamp che indica quando i dati di questo record sono stati aggiornati l’ultima volta dal sistema di origine. | ||
| Descrizione Questo attributo registra la data e l’ora dell’estrazione o dell’aggiornamento più recente dei dati dal sistema di origine. Fornisce informazioni essenziali sull’attualità dei dati analizzati e aiuta a capire se si tratta di dati quasi in tempo reale o di un’istantanea relativa a un periodo precedente. Per formulare conclusioni pertinenti e accurate è fondamentale sapere quanto sono aggiornati i dati. Questo campo permette ad analisti e utenti aziendali di verificarne l’attualità e viene spesso visualizzato nelle Dashboard per contestualizzare le informazioni presentate. Perché è importante Indica quanto sono aggiornati i dati e permette di basare le analisi su informazioni recenti. Dove reperirli Questo timestamp viene generato e aggiunto durante il processo di estrazione, trasformazione e caricamento dei dati (ETL). Esempi 2024-05-21T08:00:00Z2024-05-20T08:00:00Z | |||
| Unità di misura UnitOfMeasure | L’unità utilizzata per misurare la quantità di materiale, ad esempio pezzi o chilogrammi. | ||
| Descrizione L’unità di misura specifica l’unità associata all’attributo «Quantità». Tra le unità più comuni figurano pezzi (PC), chilogrammi (KG), litri (L) e scatole (BOX). Fornisce quindi un contesto essenziale per interpretare il campo della quantità. Anche se spesso viene usato come semplice descrizione, questo attributo è importante per garantire la qualità dei dati e per le analisi che richiedono la conversione di unità diverse in un’unità comune. Per esempio, per calcolare con precisione il valore totale delle scorte rottamate, occorre interpretare e, se necessario, convertire le quantità espresse in unità diverse. Perché è importante Fornisce il contesto essenziale per interpretare correttamente l’attributo «Quantità» e i volumi di materiale. Dove reperirli Si trova nella tabella delle righe dei documenti materiale MSEG, campo MEINS (unità di misura di base). Esempi PezziChilogrammiUnitàMetri | |||
Attività di gestione delle scorte
| Attività | Descrizione | ||
|---|---|---|---|
| Entrata merci registrata | Indica il primo ingresso di un lotto di scorte in magazzino, in genere da un fornitore o dalla produzione. In SAP S/4HANA l’evento viene registrato esplicitamente con la creazione di un documento materiale al ricevimento della merce. | ||
| Perché è importante È l’evento di inizio principale del ciclo di vita delle scorte. Analizzare il tempo che intercorre tra questa attività e le successive, come lo stoccaggio, è fondamentale per misurare l’efficienza della zona di ricevimento. Dove reperirli Registrato nella tabella MATDOC. Si identifica tramite specifici tipi di movimento (BWART), ad esempio 101 per i ricevimenti da ordine di acquisto o 103 per l’entrata merci in stock bloccato. Acquisizione Rilevato dai documenti materiale in MATDOC con i corrispondenti tipi di movimento per l’entrata merci. Tipo di evento explicit | |||
| Rettifica delle scorte registrata | Registra una variazione della quantità in stock dovuta a un inventario fisico o a un’altra discrepanza. L’evento rettifica esplicitamente le giacenze contabili per allinearle alle quantità rilevate. | ||
| Perché è importante Queste rettifiche sono fondamentali per mantenere precise le giacenze. Una frequenza elevata può indicare problemi alla base nella movimentazione delle scorte, nella sicurezza o nell’inserimento dei dati. Dove reperirli Registrato nella tabella MATDOC. Si identifica tramite i tipi di movimento (BWART) dell’inventario fisico, ad esempio 701 (eccedenza) o 702 (ammanco). Acquisizione Rilevato dai documenti materiale in MATDOC con i tipi di movimento per le rettifiche dell’inventario fisico, ad esempio 701 e 702. Tipo di evento explicit | |||
| Scorte in controllo qualità rilasciate | Indica che un lotto ha superato il controllo qualità ed è ora disponibile per l’uso o lo stoccaggio. L’operazione viene registrata esplicitamente come trasferimento dallo stock in controllo qualità a un altro tipo di stock, ad esempio quello a utilizzo libero. | ||
| Perché è importante Questa tappa segna la conclusione del processo di controllo qualità e rende disponibili le scorte. Eventuali ritardi possono causare problemi significativi nelle fasi successive della produzione o dell’evasione degli ordini. Dove reperirli Registrato nella tabella MATDOC come trasferimento. In genere si identifica con il tipo di movimento (BWART) 321, che trasferisce le scorte da 'Quality Inspection' a 'Unrestricted-use'. Acquisizione Rilevato dai documenti materiale in MATDOC con tipo di movimento 321. Tipo di evento explicit | |||
| Scorte rottamate | Segna lo smaltimento definitivo di un lotto, rimuovendolo in modo permanente dai registri di magazzino. In genere riguarda scorte scadute, danneggiate o obsolete. | ||
| Perché è importante È un evento finale che rappresenta una perdita finanziaria. Analizzare le rottamazioni aiuta a individuare problemi legati all’invecchiamento delle scorte, alle procedure di movimentazione o alle previsioni della domanda. Dove reperirli Registrato nella tabella MATDOC. Si identifica tramite i tipi di movimento (BWART) per la rottamazione, ad esempio 551 (da utilizzo libero), 553 (dal controllo qualità) o 555 (da stock bloccato). Acquisizione Rilevato dai documenti materiale in MATDOC con i tipi di movimento per la rottamazione, ad esempio 551. Tipo di evento explicit | |||
| Trasferimento di stoccaggio registrato | Indica lo spostamento fisico del lotto dalla zona di ricevimento o di attesa alla posizione o al contenitore di stoccaggio definitivo. In SAP viene registrato come documento materiale di trasferimento. | ||
| Perché è importante Completa il processo di ricevimento. Il tempo necessario per questa attività, detto tempo di stoccaggio, è un KPI fondamentale per misurare l’efficienza del magazzino. Dove reperirli Registrato nella tabella MATDOC come trasferimento, spesso tra ubicazioni di magazzino, ad esempio con il tipo di movimento 311. Il movimento specifico può variare in base alla struttura del magazzino. Acquisizione Individuato nei documenti di trasferimento in MATDOC che spostano le scorte da un’ubicazione temporanea o di ricevimento a quella definitiva. Tipo di evento explicit | |||
| Uscita merci per consegna registrata | Registra la fase finale del processo in uscita, in cui la proprietà del lotto viene trasferita al cliente o al vettore. È una transazione esplicita che riduce le scorte e aggiorna la contabilità. | ||
| Perché è importante È un evento di completamento fondamentale per l’evasione dell’ordine. È essenziale per misurare il rispetto dei tempi di consegna e calcolare il tempo di ciclo complessivo dell’evasione degli ordini. Dove reperirli Registrato nella tabella MATDOC. Si identifica tramite il tipo di movimento (BWART) per l’uscita merci relativa a una consegna di vendita, in genere 601. Acquisizione Rilevato dai documenti materiale in MATDOC con tipo di movimento 601. Tipo di evento explicit | |||
| Uscita merci per produzione registrata | Indica il consumo di un lotto di scorte da parte di un ordine di produzione o di processo. Questa transazione riduce le scorte e addebita il costo del materiale all’ordine di produzione. | ||
| Perché è importante È un evento di consumo primario che segna la fine del ciclo di vita delle scorte per i componenti. È fondamentale per analizzare la disponibilità dei materiali per la produzione e i relativi modelli di consumo. Dove reperirli Registrato nella tabella MATDOC. Si identifica tramite i tipi di movimento (BWART) per l’uscita merci verso un ordine, ad esempio 261. Acquisizione Rilevato dai documenti materiale in MATDOC con tipo di movimento 261. Tipo di evento explicit | |||
| Prelievo avviato | Segna l’inizio dell’evasione dell’ordine, quando viene creato un task di magazzino per prelevare un lotto dal relativo contenitore. Spesso l’evento viene rilevato alla creazione di un ordine di trasferimento o di un task di magazzino. | ||
| Perché è importante Questa attività avvia il processo di prelievo. Analizzare il tempo che intercorre tra questo evento e il completamento del prelievo aiuta a misurare l’efficienza degli operatori di magazzino e a individuare i ritardi. Dove reperirli In genere non è registrato in MATDOC. Nei sistemi con Warehouse Management (WM/EWM), si deduce dalla data e ora di creazione di un ordine di trasferimento (tabella LTAK) o di un task di magazzino. Acquisizione Deducibile dal record di creazione di un ordine di trasferimento (in WM) o di un task di magazzino (in EWM) collegato al lotto di materiale. Tipo di evento inferred | |||
| Reso cliente ricevuto | Registra il rientro in magazzino di un lotto precedentemente consegnato a un cliente. È una transazione esplicita che aumenta le scorte. | ||
| Perché è importante Monitorare i resi è essenziale per comprendere i problemi di qualità dei prodotti e l’insoddisfazione dei clienti. Anche la gestione e la destinazione dei resi possono essere fonte di inefficienze. Dove reperirli Registrato nella tabella MATDOC. Si identifica tramite i tipi di movimento (BWART) per i resi di vendita, ad esempio 651 (verso l’utilizzo libero) o 653 (verso il controllo qualità). Acquisizione Rilevato dai documenti materiale in MATDOC con i tipi di movimento per i resi di vendita, ad esempio 651 e 653. Tipo di evento explicit | |||
| Scorte trasferite al controllo qualità | Indica il trasferimento di un lotto ricevuto allo stato di scorte in attesa del controllo qualità, che ne impedisce l’utilizzo fino al rilascio. In SAP si tratta di una transazione esplicita che modifica il tipo di stock del lotto. | ||
| Perché è importante Questa attività avvia il controllo qualità. Il tempo che intercorre fino al rilascio dal controllo qualità è un indicatore importante per comprendere i ritardi legati alla qualità. Dove reperirli Registrato nella tabella MATDOC. Può trattarsi di un movimento di entrata merci, ad esempio 101, con il tipo di stock (INSMK) impostato su 'Q' (controllo qualità), oppure di un trasferimento, ad esempio 322. Acquisizione Individuato nei documenti materiale di MATDOC che assegnano le scorte al tipo di stock 'Quality Inspection'. Tipo di evento explicit | |||
| Stato del lotto modificato | Indica una modifica nella scheda anagrafica del lotto, ad esempio il passaggio dallo stato 'Unrestricted' a 'Restricted'. Non si tratta di un movimento di materiale, ma di una modifica dei dati anagrafici che viene registrata. | ||
| Perché è importante Le modifiche allo stato del lotto incidono direttamente sulla sua disponibilità per la vendita o la produzione. Analizzarle può far emergere problemi legati alle scorte in scadenza o al controllo qualità, anche in assenza di movimenti fisici. Dove reperirli Deducibile dai registri delle modifiche delle tabelle anagrafiche dei lotti (MCH1, MCHA). Le tabelle CDHDR e CDPOS registrano le modifiche al campo dello stato del lotto (MCH1-ZUSTD). Acquisizione Ricavato dai documenti di modifica in CDHDR/CDPOS relativi al campo dello stato nella scheda anagrafica del lotto (MCH1-ZUSTD). Tipo di evento inferred | |||
| Stato delle scorte modificato in bloccato | Indica una modifica dello stato del lotto che ne impedisce il prelievo, spesso a causa di danni, richieste di sospensione o altri motivi. In SAP viene registrata come trasferimento esplicito. | ||
| Perché è importante Evidenzia le interruzioni nella disponibilità delle scorte. Una frequenza elevata di blocchi può indicare problemi nella movimentazione, nelle condizioni di stoccaggio o nella qualità dei fornitori. Dove reperirli Registrato nella tabella MATDOC come trasferimento. Il tipo di movimento (BWART) 344 viene comunemente usato per trasferire le scorte da 'Blocked' a 'Unrestricted', mentre il 343 le trasferisce da 'Unrestricted' a 'Blocked'. Questa attività corrisponde al tipo 343. Acquisizione Individuato nei documenti materiale di MATDOC con tipo di movimento 343. Tipo di evento explicit | |||
| Stato delle scorte modificato in utilizzo libero | Indica una modifica dello stato del lotto, che viene liberato da un blocco o da una sospensione per il controllo qualità e reso disponibile all’uso. L’operazione viene registrata esplicitamente come trasferimento. | ||
| Perché è importante Questa attività segna la risoluzione di un blocco delle scorte. È possibile analizzare il tempo trascorso dalle scorte in stato bloccato per migliorare i processi di risoluzione. Dove reperirli Registrato nella tabella MATDOC come trasferimento. Il tipo di movimento (BWART) 344 trasferisce le scorte da 'Blocked' a 'Unrestricted-use'. Acquisizione Individuato nei documenti materiale di MATDOC con tipo di movimento 344. Tipo di evento explicit | |||
| Trasferimento interno delle scorte registrato | Registra lo spostamento di un lotto tra diverse ubicazioni o contenitori dello stesso stabilimento. È una transazione esplicita che crea un documento materiale. | ||
| Perché è importante Monitorare i trasferimenti interni aiuta ad analizzare l’efficienza operativa del magazzino, individuare gli spostamenti non necessari e misurare il tempo di attraversamento del rifornimento delle scorte tra le ubicazioni. Dove reperirli Registrato nella tabella MATDOC. Per i trasferimenti tra ubicazioni di magazzino si identifica comunemente con il tipo di movimento (BWART) 311. Acquisizione Rilevato dai documenti materiale in MATDOC con i tipi di movimento per gli spostamenti interni delle scorte, ad esempio 311. Tipo di evento explicit | |||
Guide all’estrazione
Passaggi
- Verifichi l’accesso al sistema: si assicuri di disporre di un utente con le autorizzazioni necessarie per interrogare le viste Core Data Services (CDS) nel sistema SAP S/4HANA. In genere, l’accesso deve essere concesso da un amministratore di sistema.
- Scelga un client SQL: selezioni uno strumento client SQL in grado di connettersi al database SAP HANA. Tra le opzioni più comuni figurano SAP HANA Studio, SAP HANA Database Explorer e strumenti di terze parti come DBeaver.
- Configuri la connessione al database: crei una nuova connessione al database dal client SQL. Le serviranno il nome host del database HANA, il numero di porta (in genere 3<instance_number>15) e le credenziali dell’utente del database.
- Prepari la query SQL: copi la query SQL completa riportata nella sezione «query» di questo documento nell’editor del client SQL.
- Imposti i parametri della query: individui i valori segnaposto nella query. Sostituisca
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'con l’intervallo di date desiderato, ad esempioBETWEEN '20230101' AND '20230630'. Aggiorni inoltre gli eventuali filtri specifici per azienda o stabilimento, comeMaterialDocumentItem.Plant IN ('Plant1', 'Plant2'), in base alla struttura organizzativa. - Esegua la query: esegua la query SQL modificata sul database S/4HANA. Il tempo di esecuzione varia in base all’intervallo di date e al volume dei dati di magazzino presenti nel sistema.
- Riveda i dati: al termine della query, controlli i risultati nel client SQL per verificare che siano corretti e completi. Verifichi la presenza delle diverse attività e che gli attributi chiave siano valorizzati.
- Esporti l’Event Log: esporti l’intero risultato dal client SQL in un file CSV. Si assicuri che le impostazioni di esportazione prevedano la codifica UTF-8, per evitare problemi con i caratteri.
- Prepari il file per il caricamento: assegni alle colonne del file CSV esattamente i nomi definiti come alias nella query, ad esempio
InventoryBatchLot,ActivityName,EventTimee così via. Il file è ora pronto per essere caricato in uno strumento di Process Mining.
Configurazione
- Autorizzazioni: l’utente che esegue la query deve disporre delle autorizzazioni
SELECTsulle seguenti viste CDS:I_MaterialDocumentItem,I_BatchChangeDocumenteI_WarehouseTask. È necessario anche l’accesso allo schema del database in cui risiedono queste viste. - Filtro per intervallo di date: è fondamentale applicare un filtro per intervallo di date ai campi
PostingDate,ChangeDocumentCreationDateoWarehouseTaskCreationDate. Per l’analisi si utilizza in genere un intervallo da 3 a 12 mesi. Interrogare più anni di dati può causare notevoli problemi di prestazioni. - Filtri organizzativi: per migliorare le prestazioni e concentrare l’analisi, aggiunga clausole
WHEREper filtrare i dati in base aPlantoCompanyCode. In questo modo si riduce il volume dei dati e si limita l’estrazione alle aree aziendali pertinenti. - Volume dei dati: tenga presente che i sistemi di gestione delle scorte generano grandi quantità di dati. Un intervallo di date ampio può produrre milioni di righe, con possibili ripercussioni sia sul sistema di origine durante l’estrazione sia sulle prestazioni del client.
- Extended Warehouse Management (EWM): l’attività «Prelievo avviato» si basa sulla vista CDS
I_WarehouseTask, popolata solo se si utilizza SAP Extended Warehouse Management. Se l’organizzazione utilizza il precedente modulo Warehouse Management (WM) o solo Inventory Management (IM), questa attività specifica non verrà estratta.
Query di esempio sql
SELECT
mat_doc.Batch AS "InventoryBatchLot",
CASE
WHEN mat_doc.MovementType = '101' AND mat_doc.InventoryStockType = '2' THEN 'Stock Posted to Quality Inspection'
WHEN mat_doc.MovementType = '101' THEN 'Goods Receipt Posted'
WHEN mat_doc.MovementType = '321' THEN 'Quality Inspection Stock Released'
WHEN mat_doc.MovementType = '311' THEN 'Internal Stock Transfer Posted'
WHEN mat_doc.MovementType = '344' THEN 'Stock Status Changed to Blocked'
WHEN mat_doc.MovementType IN ('343', '322') THEN 'Stock Status Changed to Unrestricted'
WHEN mat_doc.MovementType IN ('701', '702') THEN 'Inventory Adjustment Posted'
WHEN mat_doc.MovementType = '601' THEN 'Goods Issue for Delivery Posted'
WHEN mat_doc.MovementType = '261' THEN 'Goods Issue for Production Posted'
WHEN mat_doc.MovementType IN ('651', '653') THEN 'Sales Return Received'
WHEN mat_doc.MovementType = '551' THEN 'Stock Scrapped'
WHEN mat_doc.MovementType = '313' THEN 'Put-Away Transfer Posted' -- Example for two-step transfers
ELSE 'Unknown Material Movement'
END AS "ActivityName",
TO_TIMESTAMP(mat_doc.PostingDate || LPAD(mat_doc.CreationTime, 6, '0'), 'YYYYMMDDHH24MISS') AS "EventTime",
mat_doc.Material AS "MaterialNumber",
mat_doc.CreatedByUser AS "UserName",
mat_doc.MovementType AS "MovementType",
mat_doc.Plant AS "Plant",
mat_doc.StorageLocation AS "StorageLocation",
mat_doc.QuantityInEntryUnit AS "Quantity",
mat_doc.ReasonForMovement AS "MovementReasonCode"
FROM
I_MaterialDocumentItem AS mat_doc
WHERE
mat_doc.Batch IS NOT NULL AND mat_doc.Batch <> ''
AND mat_doc.PostingDate BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
-- AND mat_doc.Plant IN ('Plant1', 'Plant2') -- Placeholder: Add filters for relevant plants
UNION ALL
SELECT
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 3) AS "InventoryBatchLot",
'Batch Status Changed' AS "ActivityName",
change_doc.ChangeDocumentCreationDateTime AS "EventTime",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 1) AS "MaterialNumber",
change_doc.ChangedByUser AS "UserName",
NULL AS "MovementType",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 2) AS "Plant",
NULL AS "StorageLocation",
NULL AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_BatchChangeDocument AS change_doc
WHERE
change_doc.ChangeDocumentTable = 'MCHA' AND change_doc.ChangeDocumentTableFieldName = 'ZUSTD'
AND TO_VARCHAR(change_doc.ChangeDocumentCreationDate) BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
UNION ALL
SELECT
wh_task.Batch AS "InventoryBatchLot",
'Picking Initiated' AS "ActivityName",
wh_task.WarehouseTaskCreationDateTime AS "EventTime",
wh_task.Product AS "MaterialNumber",
wh_task.CreatedByUser AS "UserName",
NULL AS "MovementType",
wh_task.Plant AS "Plant",
wh_task.SourceStorageLocation AS "StorageLocation",
wh_task.TargetQuantity AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_WarehouseTask AS wh_task
WHERE
wh_task.Batch IS NOT NULL AND wh_task.Batch <> ''
AND wh_task.WarehouseProcessType IN ('P210', 'P220') -- Placeholder: Adjust process types based on your picking configuration
AND TO_VARCHAR(wh_task.WarehouseTaskCreationDate) BETWEEN '20230101' AND '20231231'; -- Placeholder: Set your date range Passaggi
- Verifichi che l’accesso diretto a SAP HANA tramite SQL sia autorizzato e che l’utente di estrazione disponga dell’accesso in lettura a MATDOC e alle tabelle anagrafiche dei lotti richieste dal sistema. Verifichi il proprietario dello schema fisico e sostituisca [Your SAP HANA schema] con il nome dello schema approvato.
- Verifichi i campi disponibili nelle tabelle MATDOC e dei lotti per la versione di SAP S/4HANA di destinazione. La query seguente utilizza campi comunemente disponibili in MATDOC e MCHA, ma la disponibilità e la denominazione dei campi possono variare in base alla versione, alla distribuzione e all’ambito attivato. Prima dell’esecuzione, sostituisca ogni campo contrassegnato con [Configure based on your system].
- Definisca il periodo di estrazione sostituendo [Start timestamp] e [End timestamp] con valori temporali in formato ISO. Per l’estrazione iniziale utilizzi un periodo da tre a sei mesi, quindi lo estenda dopo aver verificato il volume dei dati e le prestazioni.
- Esegua la query in un client SQL approvato, in SAP HANA Database Explorer o in uno strumento equivalente autorizzato per l’accesso al database. Limiti i risultati ai codici azienda, agli stabilimenti, ai tipi di documento o ai tipi di movimento richiesti, sostituendo i segnaposto dei filtri corrispondenti.
- Riveda la mappatura dei tipi di movimento nella CTE delle attività. Il significato dei tipi di movimento dipende dalla configurazione del sistema e dell’azienda. Sostituisca gli elenchi di esempio con i tipi di movimento configurati nel sistema di destinazione per entrata merci, controllo qualità, rilascio, stoccaggio, trasferimento interno, scorte bloccate, scorte a utilizzo libero, rettifica delle scorte, prelievo, uscita per consegna, prelievo per produzione, reso cliente e rottamazione.
- Verifichi che ogni riga di output contenga InventoryBatchLot, ActivityName ed EventTime. Confermi che l’identificativo del lotto sia sufficientemente stabile da fungere da identificativo del caso in ProcessMind. Se, per distinguere valori di lotto identici tra unità organizzative, il caso aziendale richiede materiale, stabilimento o ubicazione di magazzino, utilizzi l’identificativo composito del caso configurato invece del solo valore del lotto.
- Verifichi l’ordine degli eventi, le righe duplicate, i documenti di storno, i documenti annullati e la gestione dei fusi orari. MATDOC registra le registrazioni dei documenti, quindi gli storni e gli annullamenti possono comparire come eventi separati, a meno che non vengano esclusi o mappati esplicitamente.
- Esporti il risultato della query in un file semplice, con una riga per evento e le colonne InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity e MovementReasonCode. Mantenga i timestamp in un formato ISO 8601 coerente e conservi gli zeri iniziali nei valori di materiale, lotto, stabilimento e ubicazione di magazzino.
- Carichi l’Event Log risultante in ProcessMind e mappi InventoryBatchLot come identificativo del caso, ActivityName come attività ed EventTime come timestamp dell’evento. Non faccia affidamento su ProcessMind per dedurre le attività, combinare i record o ricavare gli eventi mancanti.
Configurazione
- Metodo di estrazione: query SQL diretta sui dati di magazzino e dei lotti in SAP HANA. La query legge MATDOC e unisce i dati anagrafici dei lotti di MCHA. Aggiunga MCH1 o un’altra tabella dei lotti solo dopo aver verificato i campi pertinenti e il livello di gestione dei lotti nel sistema di destinazione.
- Intervallo di date: inizi con un periodo da tre a sei mesi. Utilizzi EventTime basato sulla data e sull’ora di registrazione del documento materiale disponibili in MATDOC. Per i caricamenti incrementali, utilizzi una finestra di sovrapposizione controllata per acquisire le registrazioni tardive, quindi elimini i duplicati usando gli identificativi configurati per documento e riga.
- Filtri obbligatori: configuri il codice azienda, lo stabilimento, il tipo di documento materiale, il tipo di movimento, la presenza del lotto e la data di registrazione in base all’ambito del processo. Prima di aggiungere alla query i campi relativi al codice azienda e al tipo di documento, ne verifichi la disponibilità nella versione installata.
- Mappatura delle attività: il significato dei tipi di movimento dipende dalla configurazione. Mantenga una tabella di mappatura approvata oppure sostituisca gli elenchi dei tipi di movimento nella query con i valori utilizzati dall’azienda. Non consideri gli elenchi di esempio validi per tutti i sistemi SAP.
- Ambito dei lotti: la query esclude le righe senza valore del lotto, poiché l’identificativo del caso è InventoryBatchLot. Se il lotto deve essere ricavato da un’altra origine, configuri esplicitamente tale origine prima dell’estrazione.
- Granularità degli eventi: ogni riga MATDOC che soddisfa i criteri viene restituita come singolo evento. La query non deduce dai record successivi le attività di prelievo, le decisioni di qualità, le variazioni dello stato del lotto o altre attività.
- Modifiche ai dati anagrafici dei lotti: le variazioni dello stato dei lotti non sono rappresentate in modo affidabile dalla sola MATDOC. Per l’attività «Stato del lotto modificato», configuri una fonte di documenti di modifica o di cronologia dei lotti. La query include un ramo segnaposto che deve essere collegato a una fonte verificata prima dell’esecuzione.
- Prelievo: l’avvio del prelievo è generalmente registrato nei dati di esecuzione del magazzino, non nelle registrazioni MATDOC. Configuri una fonte verificata di attività di magazzino o ordini di trasferimento e sostituisca il ramo segnaposto prima dell’esecuzione.
- Prestazioni: applichi filtri per timestamp o data di registrazione, stabilimento, codice azienda e tipi di movimento pertinenti. Selezioni solo le colonne necessarie, eviti scansioni storiche senza restrizioni ed esegua l’estrazione in una finestra di carico approvata. Per grandi volumi MATDOC si consiglia un’estrazione partizionata o incrementale.
- Autorizzazioni e prerequisiti: ottenga la connettività al database approvata, l’accesso allo schema, le autorizzazioni di lettura e l’accesso ai dati di magazzino SAP S/4HANA, oltre all’accesso a eventuali fonti di esecuzione del magazzino o di cronologia delle modifiche utilizzate per le due attività non basate su MATDOC. Verifichi che l’accesso diretto al database sia conforme al modello operativo SAP e alle politiche di supporto dell’organizzazione.
- Fusi orari: verifichi i fusi orari del database e dell’applicazione. Converta EventTime in modo coerente prima del caricamento in ProcessMind.
- Protezione dei dati: applichi i controlli dell’organizzazione agli ID utente, ai dati dei materiali, ai dati relativi ai clienti e alle credenziali del database. Non inserisca le credenziali nel testo della query.
Query di esempio sql
WITH
params AS (
SELECT
TO_TIMESTAMP('[Start timestamp]') AS start_ts,
TO_TIMESTAMP('[End timestamp]') AS end_ts
FROM DUMMY
),
movement_map AS (
SELECT '101' AS movement_type, 'Goods Receipt Posted' AS activity_name FROM DUMMY
UNION ALL SELECT '105', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '107', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '109', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '321', 'Stock Posted to Quality Inspection' FROM DUMMY
UNION ALL SELECT '322', 'Quality Inspection Stock Released' FROM DUMMY
UNION ALL SELECT '343', 'Stock Status Changed to Unrestricted' FROM DUMMY
UNION ALL SELECT '344', 'Stock Status Changed to Blocked' FROM DUMMY
UNION ALL SELECT '311', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '301', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '311', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '701', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '702', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '703', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '704', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '705', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '706', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '601', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '602', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '261', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '262', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '651', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '653', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '654', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '551', 'Stock Scrapped' FROM DUMMY
UNION ALL SELECT '552', 'Stock Scrapped' FROM DUMMY
),
matdoc_events AS (
SELECT
m.MATNR AS MaterialNumber,
m.CHARG AS InventoryBatchLot,
COALESCE(m.BUDAT_MKPF, m.BUDAT) AS EventTime,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(m.BWART AS NVARCHAR(3)) AS MovementType,
m.WERKS AS Plant,
m.LGORT AS StorageLocation,
m.MENGE AS Quantity,
m.GRUND AS MovementReasonCode,
mm.activity_name AS ActivityName,
m.MBLNR AS MaterialDocumentNumber,
m.MJAHR AS MaterialDocumentYear,
m.ZEILE AS MaterialDocumentItem
FROM [Your SAP HANA schema].MATDOC m
INNER JOIN movement_map mm
ON CAST(m.BWART AS NVARCHAR(3)) = mm.movement_type
CROSS JOIN params p
WHERE m.CHARG IS NOT NULL
AND TRIM(m.CHARG) <> ''
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) >= p.start_ts
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) < p.end_ts
AND m.WERKS IN ([Configure based on your system])
),
batch_enriched_events AS (
SELECT
e.InventoryBatchLot,
e.ActivityName,
e.EventTime,
e.MaterialNumber,
e.UserName,
e.MovementType,
e.Plant,
e.StorageLocation,
e.Quantity,
e.MovementReasonCode,
e.MaterialDocumentNumber,
e.MaterialDocumentYear,
e.MaterialDocumentItem,
c.CUOBJ_BM AS BatchObjectNumber
FROM matdoc_events e
LEFT JOIN [Your SAP HANA schema].MCHA c
ON c.MATNR = e.MaterialNumber
AND c.CHARG = e.InventoryBatchLot
AND c.WERKS = e.Plant
),
verified_batch_status_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Batch Status Changed' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
verified_picking_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
all_events AS (
SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM batch_enriched_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_batch_status_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_picking_events
)
SELECT
InventoryBatchLot,
ActivityName,
EventTime,
MaterialNumber,
UserName,
MovementType,
Plant,
StorageLocation,
Quantity,
MovementReasonCode
FROM all_events
WHERE InventoryBatchLot IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY InventoryBatchLot, EventTime, MaterialDocumentYear, MaterialDocumentNumber, MaterialDocumentItem, ActivityName; Passaggi
- Acceda all’editor ABAP: acceda al sistema SAP S/4HANA. Apra l’editor ABAP utilizzando il codice transazione
SE38. - Crei un nuovo programma: inserisca un nome per il nuovo programma nel campo 'Program', ad esempio
Z_PM_INVENTORY_EXTRACT, quindi faccia clic sul pulsante 'Create'. Inserisca un titolo descrittivo, imposti 'Type' su 'Executable Program' e salvi il programma in un package. - Definisca i parametri del programma: nell’editor del programma, definisca la schermata di selezione che fungerà da interfaccia utente per l’estrazione. In questo modo gli utenti potranno specificare parametri quali l’intervallo di date e lo stabilimento per l’estrazione dei dati.
- Implementi la logica di estrazione: copi il codice ABAP completo fornito nella sezione 'Query' e lo incolli nell’editor ABAP. Il codice è progettato per selezionare i dati relativi a tutte le 14 attività di inventario richieste da diverse tabelle SAP.
- Comprenda la logica principale: il programma seleziona i dati di ciascuna attività di inventario dalle tabelle di origine, ad esempio
MKPFeMSEGper i movimenti dei materiali oppureCDHDReCDPOSper le modifiche ai dati anagrafici. I risultati delle selezioni vengono quindi combinati conUNION ALLin un’unica tabella interna che rappresenta l’event log. - Configuri l’output su file: la parte finale del codice scrive i dati consolidati della tabella interna in un file. Utilizza l’istruzione
OPEN DATASETper creare un file sul server applicativo SAP. È necessario specificare un percorso valido sul server, per il quale l’utente del sistema SAP disponga dei permessi di scrittura. - Esegua il programma: salvi e attivi il programma ABAP (Ctrl+F3). Lo esegua premendo F8. Nella schermata di selezione, inserisca l’intervallo di date desiderato e gli eventuali altri filtri pertinenti, come lo stabilimento o il codice società.
- Esegua il programma come job in background: per volumi di dati elevati, è fondamentale eseguire il programma come job in background, così da evitare timeout della sessione. Dalla schermata di esecuzione (F8), selezioni il menu
Program -> Execute in Background. Pianifichi l’esecuzione nelle fasce orarie di minore attività. - Recuperi il file di output: al termine del job, individui il file di output sul server applicativo SAP. Utilizzi il codice transazione
AL11per esplorare le directory del server e trovare il file. Utilizzi la transazioneCG3Yper scaricarlo dal server applicativo sul computer locale. - Prepari il file per il caricamento: apra il file scaricato con un editor di testo o un foglio di calcolo. Verifichi che sia formattato come file CSV con una riga di intestazione, la virgola come delimitatore e le virgolette doppie come qualificatore di testo. Prima di caricarlo nello strumento di process mining, controlli che i nomi delle colonne corrispondano ai requisiti.
Configurazione
- Intervallo delle date di registrazione: è il parametro più importante. Si consiglia di estrarre i dati in intervalli gestibili, ad esempio da 3 a 6 mesi per volta, per garantire buone prestazioni ed evitare timeout del sistema.
- Filtro per stabilimento: è fortemente consigliato filtrare uno o più stabilimenti specifici (
WERKS). Eseguire l’estrazione per tutti gli stabilimenti contemporaneamente può richiedere risorse considerevoli. - Filtro per codice società: se l’organizzazione utilizza più codici società nello stesso sistema, è possibile aggiungere un filtro facoltativo per il codice società (
BUKRS) e restringere ulteriormente l’ambito dei dati. - Percorso del file sul server applicativo: il programma ABAP richiede un percorso di directory valido e predefinito sul server applicativo SAP. Verifichi che l’utente del sistema SAP (
SY-UNAME) disponga delle autorizzazioni a livello di sistema operativo necessarie per scrivere file in questa directory. - Autorizzazioni: l’utente che esegue l’estrazione deve disporre delle autorizzazioni per la transazione
SE38(per creare ed eseguire il programma), dell’accesso in visualizzazione alle tabelleMKPF,MSEG,MCH1,CDHDR,CDPOS,LTAKeLTAP, nonché della possibilità di pianificare job in background (SM36/SM37).
Query di esempio abap
REPORT Z_PM_INVENTORY_EXTRACT.
" ====================================================================
" SELECTION SCREEN
" ====================================================================
SELECT-OPTIONS: s_budat FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: s_werks FOR mseg-werks.
PARAMETERS: p_fpath TYPE string DEFAULT '/usr/sap/trans/tmp/inventory_log.csv' OBLIGATORY.
" ====================================================================
" DATA STRUCTURES
" ====================================================================
TYPES: BEGIN OF ty_event_log,
InventoryBatchLot TYPE charg,
ActivityName TYPE string,
EventTime TYPE string,
MaterialNumber TYPE matnr,
UserName TYPE xubname,
MovementType TYPE bwart,
Plant TYPE werks_d,
StorageLocation TYPE lgort_d,
Quantity TYPE menge_d,
MovementReasonCode TYPE grund,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log.
" ====================================================================
" DATA SELECTION
" ====================================================================
START-OF-SELECTION.
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Receipt Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('101', '103', '105', '501', '521', '561')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~shkzg
WHEN 'H' THEN 'Stock Posted to Quality Inspection'
WHEN 'S' THEN 'Quality Inspection Stock Released'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '321' " For QI to Unrestricted
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Put-Away Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '311' AND mseg~shkzg = 'H' " Assume put-away is the credit side
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Internal Stock Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('301', '311', '313', '315')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~bwart
WHEN '343' THEN 'Stock Status Changed to Blocked'
WHEN '344' THEN 'Stock Status Changed to Unrestricted'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('343', '344')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Inventory Adjustment Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('701', '702', '711', '712')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Delivery Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '601'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Production Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '261'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Sales Return Received' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('651', '653')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Stock Scrapped' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '551'
UNION ALL
SELECT
ltap~charg AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CONCAT( ltak~bdatu, ltak~bzeit ) AS EventTime,
ltap~matnr AS MaterialNumber,
ltak~bname AS UserName,
ltak~bwart AS MovementType,
ltap~werks AS Plant,
ltap~lgort AS StorageLocation,
ltap~nista AS Quantity,
'' AS MovementReasonCode
FROM ltap
JOIN ltak ON ltak~tanum = ltap~tanum
WHERE ltak~bdatu IN s_budat
AND ltap~werks IN s_werks
AND ltap~charg IS NOT NULL AND ltap~charg <> ''
UNION ALL
SELECT
SUBSTRING( cdhdr~objectid, 5, 18 ) AS InventoryBatchLot, " Object ID for BATCH is MATNR+WERKS+CHARG
'Batch Status Changed' AS ActivityName,
CONCAT( cdhdr~udate, cdhdr~utime ) AS EventTime,
SUBSTRING( cdhdr~objectid, 1, 4 ) AS MaterialNumber,
cdhdr~username AS UserName,
'' AS MovementType,
'' AS Plant,
'' AS StorageLocation,
0 AS Quantity,
'' AS MovementReasonCode
FROM cdhdr
JOIN cdpos ON cdpos~objectclas = cdhdr~objectclas
AND cdpos~objectid = cdhdr~objectid
AND cdpos~changenr = cdhdr~changenr
WHERE cdhdr~udate IN s_budat
AND cdhdr~objectclas = 'BATCH'
AND cdpos~tabname = 'MCH1'
AND cdpos~fname = 'ZUSTD'
INTO TABLE @lt_event_log.
" ====================================================================
" WRITE OUTPUT FILE
" ====================================================================
DATA: lv_string TYPE string.
DATA: lo_conv TYPE REF TO cl_abap_conv_out_ce.
lo_conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
OPEN DATASET p_fpath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
RETURN.
ENDIF.
" Write Header
lv_string = 'InventoryBatchLot,ActivityName,EventTime,MaterialNumber,UserName,MovementType,Plant,StorageLocation,Quantity,MovementReasonCode'.
TRANSFER lv_string TO p_fpath.
" Write Data
LOOP AT lt_event_log ASSIGNING FIELD-SYMBOL(<fs_log>).
CONCATENATE
<fs_log>-InventoryBatchLot
<fs_log>-ActivityName
<fs_log>-EventTime
<fs_log>-MaterialNumber
<fs_log>-UserName
<fs_log>-MovementType
<fs_log>-Plant
<fs_log>-StorageLocation
<fs_log>-Quantity
<fs_log>-MovementReasonCode
INTO lv_string
SEPARATED BY ','.
TRANSFER lv_string TO p_fpath.
ENDLOOP.
CLOSE DATASET p_fpath.
WRITE: 'Extraction complete. File written to:', p_fpath. È pronto a iniziare?
Utilizzi questo template per preparare i dati con sicurezza e ottenere informazioni utili sulle operazioni di gestione delle scorte. Inizi oggi a migliorare l’efficienza e ridurre i costi.
Ottimizzi la gestione delle scorte in SAP S/4HANA
Individui le inefficienze, riduca del 30% il tempo di ciclo e risparmi sui costi.
Non è richiesta la carta di credito • Configurazione in pochi minuti