Il Suo Template dei dati per la gestione dell'inventario
Il Suo Template dei dati per la gestione dell'inventario
- Attributi consigliati da raccogliere
- Attività principali da monitorare per la process discovery
- Indicazioni per l'estrazione specifiche per SAP S/4HANA
Attributi della gestione delle scorte
| Nome | Descrizione | ||
|---|---|---|---|
| Lotto di inventario InventoryBatchLot | L'identificativo univoco di una specifica quantità di un prodotto, utilizzato come case ID per tracciarne il ciclo di vita. | ||
| Descrizione Il numero del lotto di inventario è il principale identificativo del case che raggruppa tutte le attività relative a una quantità specifica e distinta di un prodotto. Consente di ricostruire cronologicamente l'intero percorso di una quantità di stock, dal ricevimento iniziale in magazzino, attraverso i diversi movimenti interni e cambiamenti di stato, fino all'uscita per una vendita, la produzione o lo smaltimento. Nell'analisi dei processi, questo attributo è fondamentale. Consente di tracciare il flusso end-to-end di ogni lotto, misurare con precisione i tempi di ciclo, individuare le variazioni del processo e comprendere come vengono gestiti i diversi lotti. L'analisi a livello di lotto è essenziale nei settori in cui tracciabilità, controllo qualità e gestione delle date di scadenza sono determinanti, come quello farmaceutico, alimentare e chimico. Perché è importante È l'identificativo principale che collega tutti gli eventi di inventario correlati in un unico case, rendendo possibile l'analisi end-to-end del processo. Dove reperirlo In genere corrisponde al numero del lotto, presente in tabelle SAP come MCHA, anagrafica dei lotti, o MCH1, lotti, nel campo CHARG. Esempi B001-A452023L202405-XYZ789456123BATCH-05-24 | |||
| Ora dell'evento EventTime | La data e l'ora precise in cui l'attività di inventario è stata registrata nel sistema. | ||
| Descrizione Event Time è il timestamp che registra esattamente quando si è verificata un'attività. Questo dato è essenziale per ordinare cronologicamente gli eventi e ricostruire il flusso del processo per ogni lotto di inventario. Costituisce la base di tutte le analisi di Process Mining basate sul tempo. La precisione di Event Time è fondamentale per calcolare KPI come tempi di ciclo, tempi di attraversamento e durate. Consente di analizzare le prestazioni del processo in periodi diversi, aiuta a individuare quando si verificano i colli di bottiglia e fornisce una base oggettiva per comprendere i ritardi, come il tempo che un lotto trascorre nel controllo qualità prima del rilascio. Perché è importante Questo timestamp ordina cronologicamente gli eventi e costituisce la base per tutti i calcoli di durata e prestazione. Dove reperirlo In genere è costituito dalla combinazione della data di registrazione (MKPF-BUDAT) e dell'ora di inserimento (MKPF-CPUTM) provenienti dalla tabella di testata dei documenti materiali MKPF. Esempi 2023-10-26T09:00:00Z2023-11-15T14:35:10Z2024-01-05T23:15:00Z | |||
| Attività ActivityName | Il nome dell'evento aziendale che si è verificato in uno specifico momento del processo di gestione dell'inventario. | ||
| Descrizione L'attributo Activity descrive un singolo passaggio o evento nel ciclo di vita dell'inventario di un lotto. Questi eventi rappresentano azioni aziendali fondamentali, come ricevere merci, spostare stock, eseguire un'ispezione di qualità o emettere materiali. Ogni attività registra un'azione che ha interessato il lotto di inventario in uno specifico momento. L'analisi delle attività è alla base del Process Mining. Consente di visualizzare il flusso del processo, individuare i percorsi frequenti e rari, rilevare i colli di bottiglia in cui le attività subiscono ritardi e analizzare i cicli di rilavorazione. Comprendendo la sequenza e la frequenza di attività come 'Stock Scrapped' o 'Quality Inspection', le aziende possono individuare le aree in cui migliorare il processo e l'efficienza operativa. Perché è importante Definisce i passaggi del processo, consentendo di visualizzare e analizzare il ciclo di vita dell'inventario. Dove reperirlo È un attributo derivato, spesso mappato dai Movement Type SAP (MSEG-BWART) o dai Transaction Code (MKPF-TCODE2) a nomi comprensibili per gli utenti. Esempi Ricevimento merci registratoTrasferimento di messa a dimora registratoUscita merci per consegna registrataStock rottamato | |||
| Codice causale del movimento dello stock MovementReasonCode | Un codice che specifica il motivo di un movimento dell'inventario. | ||
| Descrizione Il codice Reason for Movement fornisce un contesto aggiuntivo sul motivo per cui è stato eseguito un movimento merci. Viene spesso utilizzato per spiegare movimenti non pianificati, come rettifiche dell'inventario, resi o rottamazioni. Questo attributo è estremamente utile per l'analisi delle cause principali. Nel Dashboard 'Manual Inventory Adjustment Drivers', l'analisi per codice causale può rivelare perché si verificano le discrepanze, ad esempio a causa di danni, furti o errori di inserimento dei dati. Queste informazioni aiutano le aziende ad affrontare i problemi alla radice, invece di limitarsi a correggerne i sintomi. Perché è importante Spiega il motivo alla base dei movimenti di inventario non pianificati, consentendo un'analisi mirata delle cause principali. Dove reperirlo Si trova nella tabella delle posizioni dei documenti materiali MSEG, nel campo GRUND (Reason for Movement). Esempi 00010005102 | |||
| Nome utente UserName | L'ID utente della persona che ha eseguito la transazione in SAP. | ||
| Descrizione Questo attributo acquisisce l'ID utente SAP del dipendente che ha registrato il documento o eseguito l'attività. Fornisce tracciabilità mostrando chi è responsabile delle singole azioni all'interno del processo di gestione dell'inventario. L'analisi per utente è essenziale per comprendere prestazioni, conformità ed esigenze formative. Ad esempio, il Dashboard 'Manual Inventory Adjustment Drivers' utilizza questo attributo per individuare chi esegue il maggior numero di rettifiche. Può aiutare a identificare gli utenti che necessitano di ulteriore formazione, evidenziare attività non autorizzate o riconoscere i migliori performer. Perché è importante Fornisce responsabilità e tracciabilità e aiuta a individuare comportamenti specifici degli utenti, esigenze formative o problemi di conformità. Dove reperirlo Si trova nella tabella di testata dei documenti materiali MKPF, nel campo USNAM (User Name). Esempi JSMITHMBROWNWAREHOUSE_OPS | |||
| Numero materiale MaterialNumber | L'identificativo univoco del prodotto o del materiale gestito. | ||
| Descrizione Il Material Number, spesso indicato come SKU (Stock Keeping Unit), è il codice univoco assegnato a uno specifico prodotto. È un elemento fondamentale dei dati anagrafici nella gestione dell'inventario, utilizzato per monitorare quantità, valori e movimenti delle merci. Nel Process Mining, l'analisi per Material Number consente di adottare una prospettiva sull'inventario incentrata sul prodotto. Aiuta a rispondere a domande come quali prodotti presentano i tempi più lunghi di controllo qualità, quali vengono rottamati più spesso o quali registrano il maggior volume di trasferimenti interni. Questa segmentazione è fondamentale per individuare problemi specifici dei prodotti e ottimizzare le strategie di inventario per le diverse tipologie di merci. Perché è importante Consente di segmentare l'analisi per prodotto, facendo emergere modelli e problemi specifici di determinati articoli. Dove reperirlo Si trova nella tabella delle posizioni dei documenti materiali MSEG, nel campo MATNR. I dati anagrafici sono nella tabella MARA. Esempi RM-1001FG-2050-B100-400-A | |||
| Posizione di stoccaggio StorageLocation | Una posizione specifica all'interno di un Plant in cui lo stock viene fisicamente stoccato. | ||
| Descrizione Una Storage Location è un'unità organizzativa che consente di distinguere le scorte di materiali all'interno di un Plant. Ad esempio, un Plant può avere posizioni di stoccaggio separate per materie prime, prodotti finiti e stock in controllo qualità. Questo attributo offre un livello di dettaglio sulla posizione più granulare rispetto al Plant. Viene utilizzato nell'analisi per comprendere i movimenti tra diverse aree di stock, come il tempo di attraversamento dei trasferimenti dall'area di ricevimento al magazzino principale. L'analisi dell'utilizzo delle posizioni e della frequenza dei movimenti aiuta a ottimizzare la disposizione del magazzino e la logistica interna. Perché è importante Fornisce una visione granulare della posizione dello stock all'interno di un Plant e aiuta ad analizzare i movimenti interni e l'efficienza dello stoccaggio. Dove reperirlo Si trova nella tabella delle posizioni dei documenti materiali MSEG, nel campo LGORT (Storage Location). Esempi 0001RM01FG01QI01 | |||
| Quantità Quantity | La quantità di materiale coinvolta nel movimento di inventario. | ||
| Descrizione Questo attributo rappresenta la quantità di materiale spostata, ricevuta, emessa o rettificata durante una determinata attività. Viene registrato nell'unità di misura di base del materiale. L'analisi della quantità è fondamentale per comprendere la portata e l'impatto dei processi di inventario. Consente di creare Dashboard che visualizzano il volume delle merci gestite, come 'Goods Issue Throughput by SKU'. Viene inoltre utilizzato per calcolare KPI come 'Stock Scrapped/Disposed Ratio', aggiungendo una dimensione quantitativa all'analisi del processo che va oltre il semplice conteggio degli eventi. Perché è importante Quantifica il volume di materiale in ogni attività, consentendo di analizzare il throughput, il volume rottamato e l'impatto delle rettifiche. Dove reperirlo Si trova nella tabella delle posizioni dei documenti materiali MSEG, nel campo MENGE (Quantity). Esempi 10012.55000-10 | |||
| Stabilimento Plant | L'unità organizzativa che rappresenta una struttura in cui si trova l'inventario, come uno stabilimento o un centro di distribuzione. | ||
| Descrizione Un Plant è un'unità organizzativa centrale in SAP e può rappresentare uno stabilimento produttivo, una posizione di stoccaggio centrale o la sede centrale aziendale. Tutto l'inventario è collocato fisicamente o logicamente all'interno di un Plant. L'analisi per Plant è fondamentale per confrontare le prestazioni del processo tra diverse sedi fisiche. Aiuta a rispondere a domande come: quale Plant presenta il tempo di ciclo di put-away più lungo? Il tasso di discrepanze dell'inventario è più elevato nel Plant A rispetto al Plant B? Questa segmentazione geografica o organizzativa è essenziale per individuare problemi specifici delle sedi e condividere le best practice all'interno dell'organizzazione. Perché è importante Consente di confrontare i processi e le prestazioni dell'inventario tra diverse sedi aziendali. Dove reperirlo Si trova nella tabella delle posizioni dei documenti materiali MSEG, nel campo WERKS (Plant). Esempi 10001710DE01US01 | |||
| Tipo di movimento MovementType | Una chiave di tre cifre in SAP che controlla il modo in cui viene registrato un movimento merci. | ||
| Descrizione Il Movement Type è una chiave di controllo fondamentale in SAP Inventory Management, che determina le caratteristiche di un movimento materiale. Specifica quali conti vengono aggiornati, come viene visualizzato il layout della schermata per la transazione e quali campi relativi a quantità o valore vengono aggiornati. Ad esempio, '101' indica il ricevimento merci, '311' un trasferimento e '551' una rottamazione. Questo attributo è spesso la fonte da cui deriva il nome Activity comprensibile per gli utenti. L'analisi dei processi per Movement Type consente una visione tecnica dettagliata del flusso dell'inventario. È essenziale per convalidare l'accuratezza della process map e individuare specifici tipi di transazione che possono causare colli di bottiglia o deviazioni. Perché è importante Fornisce una classificazione tecnica precisa di ogni evento di inventario, fondamentale per derivare le attività e condurre analisi dettagliate. Dove reperirlo Si trova nella tabella delle posizioni dei documenti materiali MSEG, nel campo BWART (Movement Type). Esempi 101311261551601 | |||
| Bin di stoccaggio StorageBin | L'unità di stoccaggio più granulare di un magazzino, in cui i materiali sono fisicamente collocati. | ||
| Descrizione Un Storage Bin rappresenta una coordinata specifica all'interno del magazzino, come la posizione di uno scaffale. Questo livello di dettaglio viene generalmente utilizzato quando sono implementati SAP Warehouse Management (WM) o Extended Warehouse Management (EWM). Per il Dashboard 'Warehouse Storage Utilization', questo attributo è fondamentale. Consente di analizzare l'efficacia con cui viene utilizzato lo spazio del magazzino, individuare potenziali punti di congestione e rilevare percorsi di put-away o picking inefficienti. L'analisi dei movimenti tra i bin di stoccaggio aiuta a ottimizzare la disposizione del magazzino e a ridurre il tempo di percorrenza degli operatori. Perché è importante Fornisce i dati sulla posizione con il massimo livello di dettaglio, consentendo di analizzare l'utilizzo dello spazio del magazzino e l'efficienza operativa. Dove reperirlo Se si utilizza WM, il dato può trovarsi in tabelle dei Transfer Order come LTAK/LTAP. Per i documenti di inventario, potrebbe essere presente in MSEG-LGPBE. Consultare la documentazione di SAP S/4HANA. Esempi A-01-01-AB-05-10-CRCV-AREA-01 | |||
| Data di scadenza ExpirationDate | La data in cui il lotto di materiale scade e non è più utilizzabile. | ||
| Descrizione La Shelf Life Expiration Date (SLED) è un dato anagrafico fondamentale per le merci deperibili o soggette a vincoli temporali. Viene gestita a livello di lotto e stabilisce quando un prodotto non può più essere venduto o consumato. Questo attributo è essenziale per il Dashboard 'Obsolete & Expired Stock Analysis'. Analizzando le attività in relazione alla data di scadenza, le aziende possono individuare i lotti a rischio e adottare misure preventive. Consente di misurare l'efficacia delle politiche di rotazione dell'inventario, come First-Expired-First-Out (FEFO), e di quantificare le perdite dovute alla rottamazione di stock scaduto. Perché è importante Consente di analizzare lo stock obsoleto e scaduto, contribuendo a ridurre gli sprechi e le perdite finanziarie. Dove reperirlo Si trova nella tabella anagrafica dei lotti MCH1 o MCHA, nel campo VFDAT (Shelf Life Expiration Date). 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 merci. | ||
| Descrizione Quando un movimento merci viene registrato in SAP, il sistema genera un documento materiale come prova del movimento. Questo attributo è l'identificativo univoco del documento. Un singolo documento materiale può contenere più posizioni o attività. Nel Process Mining, il Material Document Number è un identificativo transazionale fondamentale, utilizzabile per raggruppare gli eventi correlati registrati insieme. È inoltre essenziale per gli audit e per passare dall'analisi del processo al sistema di origine, così da esaminare transazioni specifiche. Perché è importante Funziona come chiave transazionale per gli audit e consente di raggruppare le attività eseguite insieme. Dove reperirlo Si trova nelle tabelle MKPF, testata, e MSEG, posizione, nel campo MBLNR (Number of Material Document). Esempi 490000123450000056784900002345 | |||
| Sistema di origine SourceSystem | Identifica il sistema di origine dal quale sono stati estratti i dati. | ||
| Descrizione Questo attributo specifica il sistema di riferimento in cui hanno avuto origine i dati di gestione dell'inventario. In questo contesto, si tratterebbe della specifica istanza SAP S/4HANA. L'informazione è fondamentale negli ambienti in cui i dati possono provenire da più ERP, sistemi di gestione del magazzino o piattaforme legacy. Sebbene possa sembrare un dato statico in un'analisi basata su un unico sistema, diventa essenziale quando si uniscono dati provenienti da fonti diverse per creare una visione completa del processo. Supporta la governance dei dati, la risoluzione dei problemi di estrazione e la chiarezza della data lineage. Perché è importante Fornisce il contesto sull'origine dei dati, essenziale per la governance dei dati e per l'analisi di più sistemi. Dove reperirlo In genere è un valore codificato durante il processo di trasformazione dei dati per identificare la specifica istanza SAP S/4HANA. Esempi S4H_PROD_100SAP_S4_FINANCES4HANA_GLOBAL | |||
| Tempo di ciclo dell'evasione dell'ordine OrderFulfillmentCycleTime | La durata end-to-end dall'inizio del picking alla registrazione dell'uscita merci per la consegna. | ||
| Descrizione È una metrica calcolata che misura il tempo totale dall'attività 'Picking Initiated' all'attività 'Goods Issue for Delivery Posted'. Rappresenta il tempo complessivo impiegato dal magazzino per preparare e spedire un ordine cliente dall'avvio del processo. Questo attributo misura direttamente il KPI 'Order Fulfillment Cycle Time'. L'analisi di questa durata aiuta le aziende a comprendere la propria capacità di risposta alla domanda dei clienti. Può essere suddivisa per prodotto, magazzino o cliente per individuare i punti in cui si verificano ritardi nel processo di prelievo, imballaggio e spedizione, con un impatto diretto sulla soddisfazione dei clienti e sull'efficienza logistica. Perché è importante Misura la velocità e l'efficienza del processo di uscita dal magazzino, un fattore determinante per la soddisfazione dei clienti. Dove reperirlo Questo è un attributo calcolato, ottenuto calcolando la differenza di tempo tra gli eventi «Picking Initiated» e «Goods Issue for Delivery Posted» per ogni lotto. Esempi 7200144003600 | |||
| Tipo di stock StockType | Indica lo stato dell'inventario, ad esempio non vincolato, in controllo qualità o bloccato. | ||
| Descrizione Stock Type classifica l'inventario in base alla sua utilizzabilità. I principali tipi sono lo stock a utilizzo non vincolato, liberamente disponibile, lo stock in controllo qualità, in attesa delle verifiche qualitative, e lo stock bloccato, non disponibile per l'uso. I movimenti merci comportano spesso una modifica del tipo di stock. Il monitoraggio delle variazioni del tipo di stock è fondamentale per comprendere il processo di disponibilità dell'inventario. Supporta direttamente attività come 'Stock Posted to Quality Inspection' e 'Stock Status Changed to Blocked'. L'analisi del tempo trascorso in ciascun tipo di stock, in particolare nel 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à dell'inventario, fondamentale per analizzare i ritardi nel controllo qualità e la disponibilità dello stock. Dove reperirlo Si trova nella tabella delle posizioni dei documenti materiali MSEG, nel campo INSMK (Stock Type). Esempi Uso liberoIspezione qualitàScorte bloccate | |||
| Ultimo aggiornamento dei dati LastDataUpdate | Il 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 metadati fondamentali sull'attualità delle informazioni analizzate e aiuta a comprendere se si stanno esaminando dati quasi in tempo reale o una fotografia relativa a un periodo precedente. In qualsiasi analisi, conoscere l'attualità dei dati è essenziale per formulare conclusioni pertinenti e accurate. Questo campo consente ad analisti e utenti aziendali di verificare quanto siano aggiornati i dati e viene spesso visualizzato nei Dashboard per fornire contesto agli insight presentati. Perché è importante Informa gli utenti sull'attualità dei dati, assicurando che le analisi si basino su informazioni aggiornate. Dove reperirlo 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à in cui viene misurata la quantità del materiale, ad esempio pezzi o chilogrammi. | ||
| Descrizione L'Unit of Measure specifica l'unità dell'attributo 'Quantity'. Tra gli esempi più comuni figurano pezzi (PC), chilogrammi (KG), litri (L) o scatole (BOX). Fornisce il contesto essenziale per interpretare il campo della quantità. Sebbene venga spesso utilizzato come semplice descrizione, questo attributo è importante per garantire la qualità dei dati e per le analisi in cui è necessario convertire unità diverse in uno standard comune. Ad esempio, per calcolare con precisione il valore totale dell'inventario rottamato, è necessario comprendere ed eventualmente convertire le quantità espresse in unità differenti. Perché è importante Fornisce il contesto essenziale all'attributo 'Quantity', assicurando un'interpretazione accurata dei volumi di materiale. Dove reperirlo Si trova nella tabella delle posizioni dei documenti materiali MSEG, nel campo MEINS (Base Unit of Measure). Esempi PCKGEAM | |||
Attività di gestione delle scorte
| Attività | Descrizione | ||
|---|---|---|---|
| Rettifica dell'inventario registrata | Registra una variazione della quantità a stock risultante da un conteggio dell'inventario fisico o da un'altra discrepanza. Questo evento rettifica esplicitamente l'inventario contabile affinché corrisponda al conteggio fisico. | ||
| Perché è importante Queste rettifiche sono fondamentali per mantenere accurata la gestione dell'inventario. Un'elevata frequenza di rettifiche indica problemi sottostanti nella movimentazione dello stock, nella sicurezza o nell'inserimento dei dati. Dove reperirlo Viene registrato nella tabella MATDOC. È identificato dai Movement Type (BWART) dell'inventario fisico, come 701, incremento dell'inventario, o 702, diminuzione dell'inventario. Acquisizione Viene acquisito dai documenti materiali nella tabella MATDOC con i Movement Type delle rettifiche dell'inventario fisico, ad esempio 701 e 702. Tipo di evento explicit | |||
| Ricevimento merci registrato | Indica l'ingresso iniziale di un lotto di scorte nel magazzino, generalmente da un fornitore o dalla produzione. Questo evento viene acquisito esplicitamente in SAP S/4HANA, poiché al ricevimento delle merci viene creato un documento materiale. | ||
| Perché è importante È l'evento iniziale principale del ciclo di vita delle scorte. Analizzare il tempo che intercorre tra questa attività e altre, come la messa a dimora, è fondamentale per misurare l'efficienza delle baie di ricevimento. Dove reperirlo Registrato nella tabella MATDOC. Identificato da specifici Movement Types (BWART), come 101 per i ricevimenti relativi a ordini di acquisto o 103 per il ricevimento in stock bloccato. Acquisizione Acquisito dai documenti materiali in MATDOC con i corrispondenti tipi di movimento del ricevimento merci. Tipo di evento explicit | |||
| Scorte del controllo qualità rilasciate | Indica che un lotto ha superato il controllo qualità ed è ora disponibile per l'utilizzo o la messa a dimora. Viene registrato come una registrazione di trasferimento esplicita dallo stock di controllo qualità a un altro tipo di stock, come quello a utilizzo libero. | ||
| Perché è importante Questa milestone segna il completamento del processo qualità e rende disponibili le scorte. I ritardi in questa fase possono causare problemi significativi a valle nella produzione o nell'evasione degli ordini. Dove reperirlo Registrato nella tabella MATDOC come registrazione di trasferimento. Generalmente identificato dal Movement Type (BWART) 321, che trasferisce le scorte da 'Quality Inspection' a 'Unrestricted-use'. Acquisizione Acquisito dai documenti materiali in MATDOC con tipo di movimento 321. Tipo di evento explicit | |||
| Stock rottamato | Indica lo smaltimento definitivo di un lotto di inventario, rimuovendolo permanentemente dai registri dell'inventario. Si verifica generalmente per stock scaduto, danneggiato o obsoleto. | ||
| Perché è importante È un evento finale che rappresenta una perdita finanziaria. L'analisi degli eventi di rottamazione aiuta a individuare problemi legati all'invecchiamento dello stock, alle procedure di movimentazione o alle previsioni della domanda. Dove reperirlo Viene registrato nella tabella MATDOC. È identificato dai Movement Type (BWART) della rottamazione, come 551, da stock non vincolato, 553, dal controllo qualità, o 555, da stock bloccato. Acquisizione Viene acquisito dai documenti materiali nella tabella MATDOC con i Movement Type della rottamazione, ad esempio 551. Tipo di evento explicit | |||
| Trasferimento di messa a dimora registrato | Rappresenta il movimento fisico del lotto da un'area di ricevimento o di staging alla posizione o al bin di stoccaggio finale. In SAP, questo movimento viene registrato come un documento materiale di trasferimento. | ||
| Perché è importante Completa il processo di ricevimento in entrata. Il tempo necessario per completare questa attività, noto come tempo di put-away, è un KPI fondamentale per l'efficienza del magazzino. Dove reperirlo Viene registrato nella tabella MATDOC come trasferimento, spesso tra posizioni di stoccaggio, ad esempio con il Movement Type 311. Il movimento specifico può variare in base alla struttura del magazzino. Acquisizione Viene identificato dai documenti di trasferimento nella tabella MATDOC, che spostano lo stock da una SLoc intermedia o di ricevimento a una SLoc di stoccaggio finale. Tipo di evento explicit | |||
| Uscita merci per consegna registrata | Registra la fase finale del processo in uscita, durante la quale la proprietà del lotto viene trasferita al cliente o al vettore. Si tratta di una transazione esplicita che riduce l'inventario e genera la registrazione contabile. | ||
| Perché è importante È un evento fondamentale per il completamento del processo di evasione dell'ordine. È essenziale per misurare le consegne puntuali e calcolare il tempo complessivo del ciclo di evasione dell'ordine. Dove reperirlo Viene registrato nella tabella MATDOC. È identificato dal Movement Type (BWART) relativo all'uscita merci per una consegna associata a un ordine di vendita, generalmente 601. Acquisizione Viene acquisito dai documenti materiali nella tabella MATDOC con Movement Type 601. Tipo di evento explicit | |||
| Uscita merci per produzione registrata | Rappresenta il consumo di un lotto di inventario da parte di un ordine di produzione o di processo. Questa transazione riduce l'inventario e assegna il costo del materiale all'ordine di produzione. | ||
| Perché è importante È un evento primario di consumo e segna la fine del ciclo di vita dell'inventario per i componenti. È fondamentale per analizzare la disponibilità dei materiali per la produzione e i modelli di consumo. Dove reperirlo Viene registrato nella tabella MATDOC. È identificato dai Movement Type (BWART) relativi all'uscita merci per un ordine, come 261. Acquisizione Viene acquisito dai documenti materiali nella tabella MATDOC con Movement Type 261. Tipo di evento explicit | |||
| Prelievo avviato | Indica l'inizio del processo di evasione dell'ordine, durante il quale viene creato un task di magazzino per prelevare un lotto dal relativo bin di stoccaggio. Spesso viene acquisito al momento della creazione di un Transfer Order o di un Warehouse Task. | ||
| Perché è importante Questa attività attiva il processo di picking. L'analisi del tempo che intercorre tra questo evento e il completamento del picking aiuta a misurare l'efficienza degli operatori di magazzino e a individuare i ritardi. Dove reperirlo In genere non è presente in MATDOC. Nei sistemi con Warehouse Management (WM/EWM), viene dedotto dal timestamp di creazione di un Transfer Order, nella tabella LTAK, o di un Warehouse Task. Acquisizione Viene dedotto dal record di creazione di un Transfer Order, in WM, o di un Warehouse Task, in EWM, collegato al lotto materiale. Tipo di evento inferred | |||
| Reso di vendita ricevuto | Registra il rientro in magazzino di un lotto precedentemente consegnato da parte di un cliente. Si tratta di una transazione esplicita che aumenta l'inventario. | ||
| Perché è importante Il monitoraggio dei resi è essenziale per comprendere i problemi di qualità dei prodotti e l'insoddisfazione dei clienti. Anche la gestione e la destinazione dei resi possono rappresentare una fonte di inefficienza. Dove reperirlo Viene registrato nella tabella MATDOC. È identificato dai Movement Type (BWART) dei resi di vendita, come 651, verso lo stock non vincolato, o 653, verso il controllo qualità. Acquisizione Viene acquisito dai documenti materiali nella tabella MATDOC con i Movement Type dei resi di vendita, ad esempio 651 e 653. Tipo di evento explicit | |||
| Scorte trasferite al controllo qualità | Rappresenta il trasferimento di un lotto ricevuto in uno stato di attesa per il controllo qualità, rendendolo non disponibile fino all'approvazione. Si tratta di una transazione esplicita in SAP, che modifica il tipo di stock del lotto. | ||
| Perché è importante Questa attività avvia il processo di controllo qualità. La durata tra questa attività e il rilascio dal controllo qualità è un indicatore fondamentale per comprendere i ritardi legati alla qualità. Dove reperirlo Registrato nella tabella MATDOC. Può trattarsi di un movimento di ricevimento merci, ad esempio 101, con Stock Type (INSMK) impostato su 'Q' (Quality Inspection), oppure di una registrazione di trasferimento, ad esempio 322. Acquisizione Identificato dai documenti materiali in MATDOC che trasferiscono le scorte nel tipo di stock 'Quality Inspection'. Tipo di evento explicit | |||
| Stato del lotto modificato | Riflette una modifica nel record anagrafico del lotto, ad esempio il passaggio dello stato da 'Unrestricted' a 'Restricted'. Non si tratta di un movimento materiale, bensì di una modifica ai dati anagrafici che viene registrata. | ||
| Perché è importante Le modifiche allo stato del lotto incidono direttamente sulla sua utilizzabilità nelle vendite o nella produzione. L'analisi di queste modifiche può far emergere problemi legati allo stock in scadenza o al controllo qualità che non comportano movimenti fisici. Dove reperirlo Viene dedotto dai log 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 Deriva dai documenti di modifica in CDHDR/CDPOS relativi al campo dello stato nel record anagrafico del lotto (MCH1-ZUSTD). Tipo di evento inferred | |||
| Stato dello stock modificato in bloccato | Rappresenta una modifica dello stato del lotto, che lo rende non disponibile per il prelievo, spesso a causa di danni, richieste di sospensione o altri motivi. In SAP, si tratta di un trasferimento esplicito. | ||
| Perché è importante Evidenzia le interruzioni nella disponibilità dell'inventario. Un'elevata frequenza di eventi di blocco può indicare problemi nella movimentazione, nelle condizioni di stoccaggio o nella qualità dei fornitori. Dove reperirlo Viene registrato nella tabella MATDOC come trasferimento. Utilizza comunemente il Movement Type (BWART) 344 per spostare lo stock da 'Blocked' a 'Unrestricted' e il 343 per spostarlo da 'Unrestricted' a 'Blocked'. Questa attività riguarda il 343. Acquisizione Viene identificato dai documenti materiali nella tabella MATDOC con Movement Type 343. Tipo di evento explicit | |||
| Stato dello stock modificato in non vincolato | Rappresenta una modifica dello stato del lotto, che viene rilasciato da un blocco o da una sospensione per motivi di qualità e reso disponibile all'uso. Viene registrato come un trasferimento esplicito. | ||
| Perché è importante Questa attività indica la risoluzione di un blocco dell'inventario. Il tempo trascorso dallo stock in stato bloccato può essere analizzato per migliorare i processi di risoluzione. Dove reperirlo Viene registrato nella tabella MATDOC come trasferimento. Il Movement Type (BWART) 344 sposta lo stock da 'Blocked' a 'Unrestricted-use'. Acquisizione Viene identificato dai documenti materiali nella tabella MATDOC con Movement Type 344. Tipo di evento explicit | |||
| Trasferimento interno dello stock registrato | Registra lo spostamento di un lotto di inventario tra diverse posizioni o bin di stoccaggio all'interno dello stesso Plant. Si tratta di una transazione esplicita che crea un documento materiale. | ||
| Perché è importante Il monitoraggio dei trasferimenti interni aiuta ad analizzare l'efficienza operativa del magazzino, a individuare gli spostamenti non necessari e a misurare il tempo di attraversamento per il reintegro dello stock tra le diverse posizioni. Dove reperirlo Viene registrato nella tabella MATDOC. È comunemente identificato dal Movement Type (BWART) 311 per i trasferimenti da una posizione di stoccaggio a un'altra. Acquisizione Viene acquisito dai documenti materiali nella tabella MATDOC, con Movement Type per i movimenti interni dello stock, ad esempio 311. Tipo di evento explicit | |||
Guide all'estrazione
Passaggi
- Stabilisca l'accesso al sistema: si assicuri di disporre di un utente con le autorizzazioni necessarie per interrogare le CDS View (Core Data Services) 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: utilizzando il client SQL, crei una nuova connessione al database. Le serviranno il nome host del database HANA, il numero di porta, generalmente 3<instance_number>15, e le credenziali dell'utente del database.
- Prepari la query SQL: copi la query SQL completa fornita nella sezione «query» di questo documento nell'editor del client SQL.
- Imposti i parametri della query: individui i valori segnaposto nella query. Deve sostituire
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'con l'intervallo di date desiderato, ad esempioBETWEEN '20230101' AND '20230630'. Aggiorni inoltre i filtri specifici per società o stabilimento, comeMaterialDocumentItem.Plant IN ('Plant1', 'Plant2'), in modo che corrispondano alla struttura organizzativa della Sua azienda. - Esegua la query: esegua la query SQL modificata sul database S/4HANA. Il tempo di esecuzione varierà in base all'intervallo di date e al volume dei dati di inventario presenti nel sistema.
- Esamini i dati: al termine della query, esamini i risultati nel client SQL per verificare che siano corretti e completi. Controlli la presenza di attività diverse e la valorizzazione degli attributi principali.
- Esporti l'Event Log: esporti l'intero set di risultati dal client SQL in un file CSV. Si assicuri che le impostazioni di esportazione utilizzino la codifica UTF-8 per evitare problemi con i caratteri.
- Prepari il caricamento: assegni alle colonne esattamente gli alias utilizzati 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 CDS View:I_MaterialDocumentItem,I_BatchChangeDocumenteI_WarehouseTask. È inoltre necessario l'accesso allo schema del database sottostante in cui risiedono queste view. - Filtro dell'intervallo di date: è fondamentale applicare un filtro di intervallo di date ai campi
PostingDate,ChangeDocumentCreationDateoWarehouseTaskCreationDate. Un intervallo tipico per l'analisi va da 3 a 12 mesi. Le query su più anni possono causare problemi significativi di prestazioni. - Filtri organizzativi: per migliorare le prestazioni e rendere l'analisi più mirata, aggiunga clausole
WHEREper filtrare in base aPlantoCompanyCode. In questo modo ridurrà il volume dei dati e concentrerà l'estrazione sulle aree aziendali pertinenti. - Volume dei dati: tenga presente che i sistemi di gestione dell'inventario generano un volume elevato 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à «Picking Initiated» si basa sulla CDS View
I_WarehouseTask, valorizzata solo se utilizza SAP Extended Warehouse Management. Se la Sua organizzazione utilizza il modulo precedente Warehouse Management (WM) o soltanto Inventory Management (IM), questa attività specifica non verrà estratta.
a 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 SQL sia approvato e che l'utente incaricato dell'estrazione disponga dell'accesso in lettura a MATDOC e alle tabelle anagrafiche dei lotti richieste dal sistema. Confermi 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 nella release SAP S/4HANA di destinazione. La query seguente utilizza campi MATDOC e MCHA comunemente disponibili, ma la disponibilità e la denominazione dei campi possono variare in base alla release, alla modalità di implementazione e all'ambito attivato. Sostituisca ogni campo contrassegnato con [Configure based on your system] prima dell'esecuzione.
- Definisca il periodo di estrazione sostituendo [Start timestamp] e [End timestamp] con valori di timestamp ISO. Per l'estrazione iniziale utilizzi un periodo da tre a sei mesi, quindi lo estenda dopo aver verificato volume e prestazioni.
- Esegua la query in un client SQL approvato, in SAP HANA Database Explorer o in uno strumento di database equivalente e autorizzato. Limiti il risultato ai codici società, agli stabilimenti, ai tipi di documento o ai tipi di movimento richiesti sostituendo i relativi segnaposto dei filtri.
- Esamini la mappatura dei tipi di movimento nella CTE delle attività. I tipi di movimento dipendono 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, stock bloccato, stock libero, rettifica dell'inventario, prelievo, uscita per consegna, uscita per produzione, reso cliente e rottamazione.
- Convalidi che ogni riga di output contenga InventoryBatchLot, ActivityName ed EventTime. Verifichi che l'identificativo del lotto sia sufficientemente stabile da fungere da identificativo del caso in ProcessMind. Se il caso aziendale richiede di distinguere valori di lotto identici tra unità organizzative, utilizzi l'identificativo composito del caso configurato anziché il solo valore del lotto.
- Convalidi 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, pertanto gli storni e gli annullamenti possono comparire come eventi separati, salvo esclusione o mappatura esplicita.
- Esporti il risultato della query come 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 stoccaggio.
- 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 inventario e dei lotti SAP HANA. La query legge MATDOC e collega i dati anagrafici dei lotti da MCHA. Aggiunga MCH1 o un'altra tabella dei lotti solo dopo aver verificato i campi pertinenti e il livello del lotto nel sistema di destinazione.
- Intervallo di date: inizi con un periodo da tre a sei mesi. Utilizzi EventTime sulla base della data e dell'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 del documento e della posizione.
- Filtri obbligatori: configuri codice società, stabilimento, tipo di documento materiale, tipo di movimento, presenza del lotto e data di registrazione in base all'ambito del processo. I campi relativi al codice società e al tipo di documento devono essere verificati per la release installata prima di essere aggiunti alla query.
- 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 come semantica SAP universale.
- Ambito dei lotti: la query esclude le righe prive di valore del lotto, poiché l'identificativo del caso è InventoryBatchLot. Se è necessaria la derivazione del lotto da un'altra origine, configuri esplicitamente tale origine prima dell'estrazione.
- Granularità degli eventi: ogni posizione MATDOC idonea viene emessa come una riga di evento. La query non deduce il prelievo, le decisioni di qualità, le variazioni dello stato del lotto o altre attività da record successivi.
- Modifiche all'anagrafica dei lotti: le variazioni dello stato del lotto non sono rappresentate in modo affidabile dal solo MATDOC. Configuri una fonte di documenti di modifica o di cronologia dei lotti per l'attività Batch Status Changed. La query include un ramo segnaposto che deve essere collegato a una fonte verificata prima dell'esecuzione.
- Prelievo: l'avvio del prelievo appartiene generalmente ai dati di esecuzione del magazzino, non a una registrazione MATDOC. Configuri una fonte verificata di warehouse task o transfer order e sostituisca il ramo segnaposto prima dell'esecuzione.
- Prestazioni: filtri in base al timestamp o alla data di registrazione, allo stabilimento, al codice società e ai tipi di movimento pertinenti. Selezioni solo le colonne necessarie, eviti scansioni storiche senza restrizioni ed esegua l'estrazione durante una finestra di carico approvata. Per volumi MATDOC elevati si raccomanda un'estrazione partizionata o incrementale.
- Autorizzazioni e prerequisiti: ottenga la connettività al database approvata, l'accesso allo schema, l'autorizzazione di lettura, l'accesso ai dati di inventario SAP S/4HANA e l'accesso a qualsiasi fonte di esecuzione del magazzino o di cronologia delle modifiche utilizzata per le due attività non MATDOC. Verifichi che l'accesso diretto al database sia conforme al modello operativo SAP e alle policy 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 per gli ID utente, i dati dei materiali, i dati relativi ai clienti e le credenziali del database. Non inserisca le credenziali nel testo della query.
a 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, e selezioni il pulsante «Create». Indichi 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 per ciascuna attività di inventario distinta dalle relative tabelle di origine, come
MKPFeMSEGper i movimenti di materiale oppureCDHDReCDPOSper le modifiche ai dati anagrafici. Ogni selezione viene quindi combinata tramiteUNION ALLin un'unica tabella interna che rappresenta l'Event Log. - Configuri l'output del file: la parte finale del codice gestisce la scrittura dei dati consolidati dalla tabella interna in un file. Utilizza l'istruzione
OPEN DATASETper creare un file sul server applicativo SAP. Deve specificare un percorso valido del server in cui l'utente del sistema SAP disponga delle autorizzazioni 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 filtri pertinenti, come Plant o Company Code.
- Esegua il programma come job in background: per volumi elevati di dati, è fondamentale eseguire il programma come job in background per evitare timeout della sessione. Dalla schermata di esecuzione (F8), acceda al menu
Program -> Execute in Background. Pianifichi il job nelle ore di minore attività. - Recuperi il file di output: una volta completato il 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 scaricare il file dal server applicativo al computer locale. - Prepari il caricamento: apra il file scaricato in un editor di testo o in un programma per fogli di calcolo. Si assicuri che sia formattato come file CSV con una riga di intestazione, utilizzando la virgola come delimitatore e le virgolette doppie come qualificatore di testo. Verifichi che i nomi delle colonne corrispondano ai requisiti prima di caricare il file nello strumento di Process Mining.
Configurazione
- Intervallo della data di registrazione: questo è il parametro più importante. Si raccomanda di estrarre i dati in blocchi gestibili, ad esempio da 3 a 6 mesi alla volta, per garantire buone prestazioni ed evitare timeout del sistema.
- Filtro Plant: è fortemente consigliato filtrare uno o più Plant specifici (
WERKS). Eseguire l'estrazione per tutti i Plant contemporaneamente può richiedere una quantità estremamente elevata di risorse. - Filtro Company Code: può aggiungere un filtro facoltativo per Company Code (
BUKRS) per limitare ulteriormente l'ambito dei dati se l'organizzazione opera con più codici società nello stesso sistema. - Percorso del file sul server applicativo: il programma ABAP richiede una directory predefinita e valida sul server applicativo SAP. Si assicuri che l'utente del sistema SAP (
SY-UNAME) disponga delle autorizzazioni a livello di sistema operativo necessarie per scrivere i file in questa directory. - Autorizzazioni: l'utente che esegue l'estrazione necessita delle autorizzazioni per la transazione
SE38(per creare ed eseguire il programma), dell'accesso in visualizzazione alle tabelleMKPF,MSEG,MCH1,CDHDR,CDPOS,LTAKeLTAPe della possibilità di pianificare job in background (SM36/SM37).
a 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 per iniziare?
Utilizzi questo Template per preparare i Suoi dati con sicurezza e ottenere informazioni preziose sulle attività di gestione dell'inventario. Inizi oggi stesso il percorso verso una maggiore efficienza e una riduzione dei costi.
Ottimizzi la gestione del Suo inventario in SAP S/4HANA
Individui le inefficienze, riduca del 30% il tempo di ciclo e risparmi sui costi.
Non è richiesta alcuna carta di credito • Configurazione in pochi minuti