Il template dei dati per la pianificazione della produzione
Il template dei dati per la pianificazione della produzione
- Attributi consigliati da raccogliere
- Attività chiave da monitorare
- Indicazioni pratiche per l’estrazione
Attributi della pianificazione della produzione
| Nome | Descrizione | ||
|---|---|---|---|
| Nome dell’attività ActivityName | Nome dell’evento aziendale o di sistema che si è verificato in un momento specifico per un ordine di produzione. | ||
| Descrizione Il nome dell’attività descrive una fase specifica o una modifica di stato nel processo di pianificazione della produzione. Gli eventi vengono estratti dai registri delle modifiche, dagli aggiornamenti di stato e dalle registrazioni delle transazioni in SAP ECC PP e rappresentano tappe fondamentali come «Ordine di produzione creato», «Disponibilità dei materiali verificata» o «Entrata merci registrata». Questo attributo costituisce la struttura portante della mappa del processo e consente agli analisti di visualizzare la sequenza degli eventi, individuare le varianti del processo e rilevare i colli di bottiglia o i cicli di rilavorazione. Nomi delle attività chiari e sufficientemente dettagliati sono fondamentali per creare un modello di processo accurato e utile, che rispecchi la realtà operativa. Perché è importante Definisce le fasi della mappa del processo e permette di visualizzare, analizzare e comprendere il flusso di lavoro della produzione. Dove reperirli Generato da diverse fonti, tra cui le modifiche di stato nelle tabelle JEST/JSTO, i registri delle transazioni e i documenti di modifica nelle tabelle CDHDR/CDPOS. Esempi Ordine di produzione rilasciatoUscita merci registrataConferma finale registrataOrdine completato tecnicamente | |||
| Ora dell’evento EventTime | Data e ora precise in cui si è verificata l’attività. | ||
| Descrizione L’ora dell’evento registra la data e l’ora in cui una determinata attività è stata eseguita o uno stato è stato registrato nel sistema. Questo dato è fondamentale per tutte le analisi temporali dei processi, compreso il calcolo dei tempi di ciclo, dei tempi di attesa e della durata complessiva del processo. Le date e le ore precise sono essenziali per ordinare correttamente gli eventi e analizzare le prestazioni. Consentono agli analisti di misurare la durata tra le attività, individuare i ritardi e valutare i risultati rispetto ai programmi o agli accordi sul livello di servizio. Nella pianificazione della produzione, aiutano a capire quanto tempo richiede ogni fase di pianificazione ed esecuzione. Perché è importante Questo attributo definisce la sequenza cronologica degli eventi, essenziale per calcolare le durate, analizzare le prestazioni e individuare i colli di bottiglia. Dove reperirli Ricavato da diversi campi di data e ora associati alle transazioni e alle modifiche di stato, come BUDAT (data di registrazione) nei documenti materiali o le date e ore delle modifiche in CDHDR. Esempi 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| Ordine di produzione ProductionOrder | Identificativo univoco di un ordine di produzione, utilizzato come identificativo principale del caso nel processo di pianificazione ed esecuzione della produzione. | ||
| Descrizione Il numero dell’ordine di produzione è una chiave alfanumerica univoca assegnata a ogni ordine di produzione in SAP ECC PP. È l’oggetto centrale che collega tutte le attività correlate, dalla creazione e pianificazione all’esecuzione e alla liquidazione finale. Nel Process Mining, questo attributo è essenziale per raggruppare tutti gli eventi relativi a una singola produzione. Consente di analizzare l’intero ciclo di vita di un ordine di produzione, monitorandone l’avanzamento, misurando i tempi di ciclo e individuando eventuali scostamenti dal processo standard. L’analisi per ordine di produzione offre una visione chiara di come vengono evase le singole richieste di produzione. Perché è importante È l’identificativo principale che collega tutti gli eventi di processo correlati e consente di ricostruire e analizzare ogni percorso produttivo dall’inizio alla fine. Dove reperirli Questo attributo si trova nella tabella SAP AUFK, campo AUFNR. Esempi 1000345100034610003471000348 | |||
| Sistema di origine SourceSystem | Identifica il sistema specifico da cui sono stati estratti i dati. | ||
| Descrizione Questo attributo specifica il sistema di origine del record, ad esempio il nome o l’ID della specifica istanza SAP ECC. Nelle organizzazioni che utilizzano più sistemi ERP o combinano piattaforme legacy e moderne, questo campo è fondamentale per ricostruire la provenienza dei dati e comprenderne il contesto. Nell’analisi, consente di filtrare i processi in base al sistema di origine. Può essere utile per confrontare le prestazioni dei processi tra sistemi diversi o isolare i dati durante progetti di consolidamento che coinvolgono più sistemi. Perché è importante Fornisce informazioni essenziali sull’origine dei dati, soprattutto negli ambienti con più istanze SAP o sistemi integrati. Dove reperirli In genere viene aggiunto durante l’estrazione dei dati, spesso ricavandolo dall’ID del sistema SAP (SY-SYSID). Esempi ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Ultimo aggiornamento dei dati LastDataUpdate | Data e ora dell’ultimo aggiornamento o dell’ultima estrazione dei dati relativi a questo evento. | ||
| Descrizione Questo attributo registra la data e l’ora in cui i dati sono stati trasferiti dal sistema di origine allo strumento di Process Mining. Non rappresenta un evento aziendale, ma un riferimento temporale tecnico utile per la gestione dei dati. Serve principalmente a verificare che i dati siano aggiornati e ad aiutare amministratori e analisti a capire a quando risalgono le informazioni analizzate. È fondamentale per verificare che l’analisi del processo si basi su dati aggiornati, soprattutto quando si monitorano attività in corso. Perché è importante Conferma che i dati siano aggiornati e che le analisi si basino sulle informazioni più recenti disponibili. Dove reperirli Questo valore viene in genere generato e registrato dallo strumento o dallo script di estrazione, trasformazione e caricamento dei dati (ETL) durante l’acquisizione. Esempi 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Codice prodotto ProductCode | Identificativo univoco del materiale o del prodotto da realizzare. | ||
| Descrizione Il codice prodotto, detto anche numero materiale, identifica l’articolo che l’ordine di produzione deve realizzare. È un elemento centrale dei dati anagrafici che collega la pianificazione della produzione alla gestione delle scorte, alle vendite e ai costi. Nel Process Mining, filtrare o segmentare i dati per codice prodotto è fondamentale per comprendere i processi di produzione specifici di ciascun prodotto. Aiuta a rispondere a domande come «Quali prodotti hanno i tempi di ciclo più lunghi?» o «Alcuni prodotti sono più soggetti a problemi di qualità o ritardi nei materiali?». Questa analisi è essenziale per gestire il portafoglio prodotti e individuare opportunità di standardizzazione o ottimizzazione dei processi per specifici tipi di materiale. Perché è importante Consente di analizzare i processi per prodotto e di individuare i materiali associati a inefficienze, ritardi o costi elevati. Dove reperirli Si trova nella tabella SAP AFPO, campo MATNR. Esempi FG-123RM-45AHALB-7890CHEM-22 | |||
| Data di fine effettiva ActualEndDate | Data e ora dell’ultima attività di produzione, che segnano il completamento effettivo dell’ordine. | ||
| Descrizione La data di fine effettiva è la marca temporale dell’evento che indica il completamento di tutte le attività di produzione relative a un ordine. In genere si ricava dalla marca temporale dell’evento «Registrata conferma finale» o dell’ultimo evento «Registrato carico di merci». Questo attributo è essenziale per misurare il tempo totale di ciclo della produzione e analizzare il rispetto della pianificazione. Confrontando la «Data di fine effettiva» con la «Data di fine pianificata» si determina se un ordine è stato completato nei tempi previsti. La durata tra la «Data di inizio effettiva» e la «Data di fine effettiva» indica il tempo effettivo di attraversamento della produzione. Perché è importante Segna il completamento della produzione e consente di misurare con precisione le prestazioni delle consegne puntuali e il tempo totale di esecuzione. Dove reperirli Si ricava dall’event log individuando la marca temporale più recente tra le attività che indicano il completamento, come «Registrata conferma finale» o «Registrato carico di merci». Esempi 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| Data di inizio effettiva ActualStartDate | Data e ora della prima attività di produzione registrata, che segnano l’inizio effettivo dell’esecuzione. | ||
| Descrizione La data di inizio effettiva corrisponde alla data e all’ora del primo evento che segna l’avvio del lavoro di produzione vero e proprio. In genere si ricava dalla prima conferma di produzione o dal primo prelievo di materie prime per l’ordine. Questo attributo derivato è fondamentale per analizzare il rispetto del programma. Fornisce il punto di inizio effettivo da confrontare con la data di inizio pianificata e consente di calcolare con precisione gli scostamenti nell’avvio. Capire la differenza tra le date di inizio pianificata ed effettiva aiuta a individuare i ritardi prima della produzione, legati alla predisposizione dei materiali, alla configurazione dei macchinari o alla disponibilità delle risorse. Perché è importante Indica il momento effettivo di avvio della produzione e consente di calcolare con precisione i ritardi iniziali e il tempo totale di attraversamento della produzione. Dove reperirli Ricavata dall’Event Log individuando, per ogni ordine di produzione, la data e l’ora più precoci tra quelle delle attività di esecuzione specifiche, come «Prima conferma registrata» o «Uscita merci registrata». Esempi 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Quantità consegnata DeliveredQuantity | Quantità effettiva del prodotto realizzato e ricevuto in magazzino. | ||
| Descrizione La quantità consegnata, detta anche quantità di entrata merci, è la quantità totale di prodotto finito di cui è stata confermata la produzione per un determinato ordine. Il valore viene aggiornato quando si verificano eventi di registrazione dell’entrata merci. Questo attributo è il corrispettivo della quantità pianificata ed è essenziale per calcolare l’indicatore chiave di prestazione «Scostamento tra quantità pianificata ed effettiva». Misura in modo preciso i risultati della produzione e consente agli analisti di individuare differenze dovute a scarti, perdite di resa o altri problemi produttivi. Confrontare le quantità consegnate tra stabilimenti, prodotti o periodi permette di individuare le aree con problemi di efficienza. Perché è importante Misura i risultati effettivi del processo produttivo e consente di confrontarli direttamente con gli obiettivi pianificati per valutarne le prestazioni. Dove reperirli Si trova nella tabella SAP AFPO, campo WEMNG (quantità di entrata merci). Esempi 984950751255 | |||
| Quantità pianificata PlannedQuantity | Quantità totale del prodotto che si prevede di realizzare con l’ordine. | ||
| Descrizione La quantità pianificata rappresenta il risultato previsto per un ordine di produzione, definito durante la fase di pianificazione. È il valore di riferimento con cui si confronta la produzione effettiva. Questo attributo è fondamentale per gli indicatori chiave di prestazione relativi ai risultati della produzione e al rispetto del programma, come «Scostamento tra quantità pianificata ed effettiva». Aiuta a valutare l’accuratezza della pianificazione della produzione e a individuare problemi sistematici di sovrapproduzione o sottoproduzione. Analizzarlo è essenziale per capire quanto l’esecuzione della produzione sia in linea con i piani iniziali. Perché è importante Questo attributo è il valore di riferimento per misurare lo scostamento dei risultati della produzione e valutare l’accuratezza della pianificazione. Dove reperirli Questo valore è disponibile nella tabella SAP AFKO, campo GAMNG (quantità totale dell’ordine). Esempi 1005000751250 | |||
| Stabilimento di produzione ProductionPlant | Impianto o sede in cui viene eseguito l’ordine di produzione. | ||
| Descrizione Lo stabilimento di produzione è un’unità organizzativa fondamentale in SAP e rappresenta un impianto produttivo. Viene assegnato a ogni ordine di produzione e determina il luogo in cui si svolgono fisicamente le attività produttive. Analizzare il processo per stabilimento di produzione consente di confrontare le prestazioni tra sedi diverse. Aiuta a individuare gli stabilimenti più efficienti, quelli che registrano più ritardi o carenze di materiali e le sedi in cui è possibile condividere le buone pratiche. È una dimensione fondamentale per analizzare le cause profonde nei Dashboard relativi alla produttività e all’utilizzo delle risorse. Perché è importante Consente di confrontare le prestazioni dei diversi stabilimenti produttivi e di individuare problemi specifici di una sede o buone pratiche. Dove reperirli Questo attributo è memorizzato nella tabella SAP AUFK, campo WERKS. Esempi 100017102000DE01 | |||
| Data di fine pianificata PlannedEndDate | Data entro cui si prevede di completare la produzione dell’ordine. | ||
| Descrizione La data di fine pianificata è la data prevista per il completamento di un ordine di produzione, definita durante la programmazione. Stabilisce i tempi previsti per concludere tutte le attività produttive, comprese le conferme finali e l’entrata merci. Questa data è essenziale per calcolare l’indicatore chiave di prestazione «Tasso di rispetto del programma». Confrontando la data di fine pianificata con l’ora effettiva di completamento, ad esempio quella dell’attività «Entrata merci registrata» o «Conferma finale registrata», si può verificare se gli ordini vengono completati nei tempi previsti. L’analisi aiuta a valutare l’affidabilità dei programmi di produzione e a individuare le cause profonde dei ritardi nelle consegne. Perché è importante È il valore di riferimento per stabilire se gli ordini di produzione vengono completati nei tempi previsti, con effetti diretti sulla soddisfazione dei clienti e sull’affidabilità della pianificazione. Dove reperirli È la data di fine di base, disponibile nella tabella SAP AFKO, campo GLTRP. Esempi 2023-05-152023-06-282023-07-05 | |||
| Data di inizio pianificata PlannedStartDate | Data prevista per l’inizio della produzione dell’ordine. | ||
| Descrizione La data di inizio pianificata è un parametro fondamentale del programma, definito durante la pianificazione e la programmazione della produzione. Indica la data prevista per l’avvio delle attività produttive di un ordine. Questo attributo è essenziale per misurare il rispetto del programma. Confrontando la data di inizio pianificata con l’ora effettiva di avvio della produzione, ad esempio quella dell’attività «Prima conferma registrata», le organizzazioni possono individuare i ritardi nell’avvio della produzione. Analizzare le cause di questi ritardi è uno dei principali casi d’uso del Process Mining in questo ambito. Perché è importante È il valore di riferimento per misurare il rispetto del programma e individuare i ritardi nell’avvio dell’esecuzione della produzione. Dove reperirli È la data di inizio di base, disponibile nella tabella SAP AFKO, campo GSTRP. Esempi 2023-05-102023-06-222023-07-01 | |||
| Disponibilità dei materiali MaterialAvailabilityStatus | Indica se sono disponibili tutti i componenti necessari per l’ordine di produzione. | ||
| Descrizione Lo stato di disponibilità dei materiali è un indicatore fondamentale della preparazione alla produzione. Il sistema lo determina verificando la disponibilità di tutti i componenti necessari per l’ordine. Lo stato «Disponibile» indica che la produzione può procedere senza ritardi dovuti ai materiali, mentre «Carenza» segnala un problema. Questo attributo è essenziale per la Dashboard «Analisi dell’impatto della carenza di materiali». Analizzando il tempo durante il quale gli ordini restano in attesa per mancanza di materiali, è possibile quantificare l’impatto dei problemi della catena di approvvigionamento sulla pianificazione della produzione. Ciò aiuta a individuare fornitori inaffidabili o componenti problematici che causano spesso ritardi. Perché è importante Evidenzia direttamente i ritardi dovuti alla carenza di materiali, una delle cause profonde più comuni e rilevanti degli scostamenti dalla pianificazione della produzione. Dove reperirli Non corrisponde a un singolo campo memorizzato, ma è il risultato di una verifica di disponibilità (verifica ATP). I risultati sono spesso visibili nella transazione CO02 o nella verifica collettiva della disponibilità COHV. È possibile che venga registrato lo stato stesso, ad esempio MACM (Materiale impegnato). Consultare la documentazione di SAP ECC PP. Esempi DisponibileCarenzaParzialmente disponibileNon verificato | |||
| Gruppo di pianificazione PlannerGroup | Il gruppo di responsabili MRP o pianificatori della produzione responsabile dell’ordine. | ||
| Descrizione Il gruppo di pianificazione è un elemento organizzativo che rappresenta un insieme di persone incaricate di pianificare e gestire determinati materiali o ordini di produzione. Assegnare gli ordini ai gruppi di pianificazione aiuta a distribuire il carico di lavoro e a definire responsabilità chiare. Nel Process Mining, questo attributo consente di analizzare le prestazioni in base al team di pianificazione responsabile. Può aiutare a rispondere a domande come «Quale gruppo di pianificazione registra più scostamenti dalla pianificazione?» o «I tempi di ciclo variano tra gli ordini gestiti da gruppi diversi?». Queste informazioni aiutano a bilanciare il carico di lavoro e a individuare le esigenze di formazione. Perché è importante Consente di segmentare l’analisi delle prestazioni in base al team responsabile, aiutando a individuare differenze nell’efficacia della pianificazione e nella distribuzione del carico di lavoro. Dove reperirli È il responsabile MRP, disponibile nella tabella SAP AFKO, campo DISPO. Esempi 001002P01P02 | |||
| Priorità di produzione ProductionPriority | Classificazione che indica l’urgenza o la priorità dell’ordine di produzione. | ||
| Descrizione La priorità di produzione indica l’importanza relativa di un ordine di produzione. Consente ai responsabili della pianificazione e al personale di produzione di stabilire le priorità, così che gli ordini critici possano avanzare più rapidamente nel processo. Analizzare questo attributo aiuta a valutare l’efficacia del sistema di assegnazione delle priorità. Confrontando i tempi di ciclo degli ordini ad alta priorità con quelli degli ordini a bassa priorità, è possibile verificare se gli ordini urgenti vengono effettivamente elaborati più in fretta. In caso contrario, potrebbero esserci problemi di comunicazione, allocazione delle risorse o esecuzione del processo. Perché è importante Aiuta a valutare l’efficacia del sistema di gestione delle priorità e a verificare che gli ordini più urgenti vengano completati prima di quelli standard. Dove reperirli Spesso non è un campo standard nell’intestazione dell’ordine di produzione. Può essere un campo personalizzato, derivato dalla priorità dell’ordine cliente o parte di un sistema di classificazione. Consultare la documentazione di SAP ECC PP o la configurazione del sistema. Esempi AltaMediaBassaUrgente | |||
| Scostamento della quantità QuantityVariance | Differenza tra la quantità di produzione pianificata e quella effettivamente consegnata. | ||
| Descrizione Lo scostamento della quantità è una metrica calcolata che misura la differenza tra la produzione effettiva e il piano iniziale. Si calcola sottraendo la «Quantità pianificata» dalla «Quantità consegnata». Uno scostamento positivo indica una sovrapproduzione, mentre uno negativo segnala una produzione inferiore al previsto o una perdita di resa. Questo attributo è essenziale per la Dashboard «Produzione pianificata ed effettiva» e per il relativo KPI. Analizzare lo scostamento aiuta a individuare problemi di resa produttiva, tassi di scarto o errori di inserimento dei dati. Fornisce una misura diretta dell’affidabilità del processo produttivo nel raggiungere gli obiettivi di produzione. Perché è importante Quantifica la precisione della produzione rispetto ai piani ed evidenzia possibili problemi di resa, scarti o controllo del processo. Dove reperirli Campo calcolato: 'DeliveredQuantity' - 'PlannedQuantity'. Esempi -2-5005 | |||
| Stato dell’ordine di produzione ProductionOrderStatus | Lo stato di avanzamento dell’ordine di produzione, ad esempio Creato, Rilasciato o Completato tecnicamente. | ||
| Descrizione Lo stato dell’ordine di produzione indica la fase corrente del suo ciclo di vita. SAP utilizza codici di stato per gestire l’avanzamento dell’ordine, ad esempio CRTD (Creato), REL (Rilasciato), CNF (Confermato), DLV (Consegnato) e TECO (Completato tecnicamente). Analizzare il tempo trascorso nei diversi stati è fondamentale nel Process Mining della produzione. Consente di capire quanto attendono gli ordini prima del rilascio dopo la creazione o per quanto tempo restano in uno stato di consegna parziale. Rilevare i cambiamenti di stato come attività offre una visione d’insieme del flusso del processo. Perché è importante Fornisce un quadro dello stato di avanzamento dell’ordine e aiuta a individuare i colli di bottiglia in cui gli ordini restano bloccati a lungo. Dove reperirli Le informazioni sullo stato sono memorizzate nelle tabelle JEST e JSTO, collegate al numero oggetto dell’ordine (AUFK-OBJNR). Il testo dello stato si trova in TJ02T. Per leggere lo stato si utilizzano spesso moduli funzione come STATUS_TEXT_EDIT. Esempi CRTD (Creato)REL (Rilasciato)DLV (Consegnato)TECO (Completato tecnicamente) | |||
| Stato di rispetto della pianificazione ScheduleAdherenceStatus | Indicatore che segnala se l’ordine di produzione è stato completato entro la data di fine pianificata. | ||
| Descrizione Lo stato di rispetto della pianificazione è un attributo booleano o categoriale calcolato, che offre una visione immediata delle prestazioni rispetto alle scadenze. Si ottiene confrontando la «Data di fine effettiva» con la «Data di fine pianificata». Se la data effettiva coincide con quella pianificata o la precede, lo stato è «Nei tempi previsti»; altrimenti è «In ritardo». Questo attributo semplifica l’analisi e la visualizzazione nelle Dashboard. Consente di filtrare e aggregare facilmente i dati per calcolare il KPI «Tasso di rispetto della pianificazione» e individuare i principali fattori alla base dei ritardi, come determinati prodotti, stabilimenti o carenze di materiali. Perché è importante Semplifica l’analisi delle prestazioni classificando gli ordini come «Nei tempi previsti» o «In ritardo», così da misurare e comunicare facilmente l’affidabilità della pianificazione. Dove reperirli Campo calcolato: IF('ActualEndDate' <= 'PlannedEndDate', 'Nei tempi previsti', 'In ritardo'). Esempi Nei tempi previstiIn ritardo | |||
| Utente responsabile ResponsibleUser | ID utente della persona che ha creato o modificato per ultima l’ordine di produzione. | ||
| Descrizione L’utente responsabile identifica l’account utente SAP associato a eventi chiave del ciclo di vita dell’ordine di produzione, come la creazione o il rilascio. In questo modo è possibile ricostruire e tracciare le azioni eseguite nel sistema. Nel Process Mining, questo attributo serve ad analizzare le variazioni del processo in base al comportamento degli utenti. Può aiutare a individuare chi potrebbe aver bisogno di ulteriore formazione o chi segue procedure non standard. Supporta inoltre l’analisi delle risorse mostrando come viene distribuito il lavoro tra i diversi utenti. Perché è importante Collega le attività del processo a persone specifiche, consentendo di analizzare le prestazioni a livello di singolo utente e di definire responsabilità chiare. Dove reperirli L’utente che ha creato l’ordine è indicato in AUFK-ERNAM. L’utente che lo ha modificato per ultimo è indicato in AUFK-AENAM. I documenti delle modifiche (CDHDR-USERNAME) forniscono lo storico degli utenti associati a modifiche specifiche. Esempi JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
Attività di pianificazione della produzione
| Attività | Descrizione | ||
|---|---|---|---|
| Conferma finale registrata | Questa attività indica che, dal punto di vista della produzione, tutte le operazioni dell’ordine sono state completate. È contrassegnata dalla registrazione di una conferma finale per l’ultima operazione. | ||
| Perché è importante Questa tappa segna la fine delle attività di produzione effettive. Il tempo che intercorre tra la prima e l’ultima conferma corrisponde alla durata effettiva dell’esecuzione della produzione. Dove reperirli L’evento viene registrato quando viene impostato lo stato di sistema «CNF» (I0009, Confirmed). In genere, l’impostazione è attivata dalla registrazione della conferma finale nella tabella AFRU (AFRU-AUERU = «X»). La modifica dello stato viene registrata in JCDS. Acquisizione Individuare l’ora in cui viene impostato lo stato «CNF» oppure trovare l’ultima registrazione di conferma nella tabella AFRU. Tipo di evento explicit | |||
| Entrata merci registrata | Questo evento registra l’entrata in magazzino del prodotto finito proveniente dall’ordine di produzione. Indica che i prodotti realizzati sono ora disponibili per la spedizione o per ulteriori lavorazioni. | ||
| Perché è importante È una tappa fondamentale per il completamento e rappresenta il risultato finale del processo produttivo. Il tempo che intercorre tra il rilascio e l’entrata merci corrisponde al tempo totale di attraversamento della produzione. Dove reperirli Viene registrato come documento materiale nelle tabelle MKPF/MSEG, con un tipo di movimento, in genere «101», e il riferimento all’ordine di produzione. All’ordine viene inoltre assegnato lo stato di sistema «DLV» (I0012, Delivered). Acquisizione Acquisire la data di registrazione del documento materiale con tipo di movimento «101» oppure l’ora della modifica dello stato «DLV». Tipo di evento explicit | |||
| Ordine completato tecnicamente | È una fase amministrativa di chiusura che conclude l’ordine di produzione dal punto di vista logistico. Impedisce ulteriori movimenti di materiali o conferme e consente la liquidazione finanziaria. | ||
| Perché è importante È il punto finale del ciclo di vita dell’ordine dal punto di vista logistico. Analizzare questo evento aiuta a comprendere la durata complessiva del processo, comprese le attività amministrative successive alla produzione. Dove reperirli L’evento viene registrato esplicitamente quando all’ordine viene assegnato lo stato di sistema «TECO» (I0045, Technically Completed). La modifica, con la relativa ora, viene registrata nella tabella JCDS. Acquisizione Individuare nella tabella JCDS l’ora in cui lo stato «TECO» diventa attivo per l’ordine. Tipo di evento explicit | |||
| Ordine di produzione creato | Questo evento segna la creazione di un nuovo ordine di produzione, in genere avviata da un’esecuzione di pianificazione o da un inserimento manuale. Viene registrato esplicitamente quando il nuovo ordine viene salvato nel sistema e gli viene assegnato lo stato «CRTD» (Created). | ||
| Perché è importante È il punto di partenza di ogni caso relativo a un ordine di produzione. Analizzare il tempo che intercorre tra questo evento e il rilascio aiuta a individuare ritardi nella pianificazione pre-produzione e nella configurazione amministrativa. Dove reperirli L’evento viene ricavato dalla data di creazione (AUFK-ERDAT) e dall’ora (AUFK-ERZET) dell’ordine di produzione. Al sistema viene assegnato lo stato «CRTD» (I0001), registrato nelle tabelle JEST e JCDS e collegato al numero oggetto dell’ordine (AUFK-OBJNR). Acquisizione Registrare la data e l’ora di creazione e l’assegnazione dello stato «CRTD». Tipo di evento explicit | |||
| Ordine di produzione rilasciato | Questa attività indica l’approvazione ufficiale e il rilascio dell’ordine di produzione per l’esecuzione. Dopo il rilascio, le prenotazioni dei materiali diventano attive e possono iniziare le attività di produzione, come il prelievo dei materiali e le conferme. | ||
| Perché è importante È una tappa fondamentale che segna il passaggio dalla pianificazione all’esecuzione. Il tempo che intercorre tra la creazione e il rilascio è un indicatore importante dell’efficienza della pianificazione. Dove reperirli L’evento viene registrato esplicitamente quando all’ordine di produzione viene assegnato lo stato di sistema «REL» (I0002). La modifica, con la relativa ora, viene registrata nella tabella JCDS e collegata al numero oggetto dell’ordine (AUFK-OBJNR). Acquisizione Individuare l’ora in cui lo stato «REL» diventa attivo per l’ordine. Tipo di evento explicit | |||
| Prima conferma registrata | Questo evento segna l’inizio del lavoro effettivo sull’ordine di produzione. Viene registrato quando nel sistema viene inserita la prima conferma dei tempi per una qualsiasi operazione dell’ordine. | ||
| Perché è importante Questa attività indica l’ora effettiva di avvio della produzione, essenziale per misurare il rispetto del programma e individuare i ritardi tra l’assegnazione delle risorse e l’inizio del lavoro. Dove reperirli L’evento si deduce individuando la prima data di registrazione (AFRU-BUDAT) tra tutte le conferme dell’ordine presenti nella tabella AFRU. La prima voce segna l’inizio della produzione effettiva. Acquisizione Individuare la prima registrazione di conferma dell’ordine in base alla data di registrazione nella tabella AFRU. Tipo di evento inferred | |||
| Annullamento dell’ordine impostato | Questo evento indica che un ordine di produzione è stato annullato prima del completamento. In genere, l’annullamento avviene impostando uno stato specifico o un indicatore di cancellazione, che impedisce ulteriori elaborazioni. | ||
| Perché è importante È un esito negativo che è importante monitorare. Analizzare gli ordini annullati può rivelare problemi nelle previsioni della domanda, nell’accuratezza della pianificazione o nella gestione dei dati anagrafici. Dove reperirli L’evento può essere dedotto dall’assegnazione dello stato «DLFL» (I0076, Deletion flag) o, se configurato, di uno stato specifico «Canceled». La modifica, con la relativa ora, viene registrata nella tabella JCDS. Acquisizione Individuare l’ora in cui all’ordine viene impostato l’indicatore di cancellazione («DLFL») o uno stato di annullamento. Tipo di evento inferred | |||
| Conferma intermedia registrata | Indica un aggiornamento sullo stato di avanzamento dell’ordine di produzione tramite una conferma parziale di un’operazione. È una situazione comune negli ordini di lunga durata, per i quali è necessario monitorare l’avanzamento prima del completamento finale. | ||
| Perché è importante Analizzare le conferme intermedie aiuta a monitorare l’avanzamento dei cicli di produzione lunghi e a individuare i colli di bottiglia all’interno del processo produttivo, non soltanto all’inizio o alla fine. Dove reperirli L’evento viene ricavato dalle registrazioni di conferma nella tabella AFRU che non sono contrassegnate come conferme finali. Ogni voce riporta una data (AFRU-BUDAT) e un’ora di registrazione. Acquisizione Estrarre dalla tabella AFRU tutte le registrazioni di conferma non contrassegnate come conferma finale di un’operazione. Tipo di evento explicit | |||
| Dati dell’ordine modificati | Questo evento registra le modifiche rilevanti apportate a un ordine di produzione dopo la creazione iniziale, ad esempio alle quantità pianificate, alle date o alla distinta base. Il sistema registra queste modifiche a fini di audit. | ||
| Perché è importante Tenere traccia di queste modifiche aiuta a individuare l’instabilità del processo e la frequenza delle ripianificazioni. Un numero elevato di modifiche può indicare una pianificazione iniziale inadeguata, una domanda variabile o dati imprecisi. Dove reperirli Le modifiche ai campi principali delle tabelle AFKO (intestazione dell’ordine) e AFPO (posizione dell’ordine), ad esempio, vengono registrate nelle tabelle dei documenti di modifica CDHDR (intestazione) e CDPOS (posizione). Ogni modifica pertinente può essere estratta come attività. Acquisizione Estrarre le voci del registro delle modifiche dalle tabelle CDHDR e CDPOS per la classe di oggetti degli ordini di produzione. Tipo di evento explicit | |||
| Disponibilità dei materiali verificata | Indica l’esecuzione di un controllo per verificare che siano disponibili tutti i componenti necessari per l’ordine di produzione. Può trattarsi di un controllo automatico al momento della creazione o del rilascio dell’ordine, oppure di un’azione avviata manualmente. | ||
| Perché è importante Questa attività è fondamentale per capire i ritardi dovuti alla carenza di materiali. Controlli frequenti o tempi lunghi prima che i materiali siano disponibili possono indicare problemi nella catena di approvvigionamento o nella gestione delle scorte. Dove reperirli Il sistema imposta uno stato come «MACM» (material committed) o «MSPT» (material shortage). L’esecuzione può essere dedotta dall’ora della modifica dello stato nelle tabelle JEST/JCDS. I risultati sono visibili nell’intestazione dell’ordine. Acquisizione Dedurre l’evento dall’ora delle modifiche agli stati relativi alla disponibilità dei materiali, come «MACM» o «MSPT». Tipo di evento inferred | |||
| Liquidazione dell’ordine eseguita | Indica la liquidazione finanziaria dell’ordine di produzione, durante la quale i costi accumulati vengono assegnati agli oggetti di costo appropriati. Dal punto di vista del controllo di gestione, è la fase finale del ciclo di vita dell’ordine. | ||
| Perché è importante Anche se si tratta di un’attività finanziaria, i ritardi nella liquidazione possono indicare problemi nella rendicontazione dei costi o nell’accuratezza dei dati dell’ordine. Segna la chiusura finanziaria effettiva del processo produttivo. Dove reperirli L’evento può essere dedotto quando il saldo dell’ordine diventa zero oppure quando allo stato di sistema «SETC» (I0076, Settlement rule created) seguono i registri dell’esecuzione della liquidazione. La liquidazione effettiva viene registrata nelle tabelle di controllo di gestione, come COSP e COSS. Acquisizione Dedurre l’evento dai documenti di liquidazione collegati all’ordine nelle tabelle CO oppure dall’attivazione dello stato «SETC». Tipo di evento inferred | |||
| Uscita merci registrata | Questa attività rappresenta il prelievo dal magazzino dei materiali componenti destinati all’ordine di produzione. Conferma che le materie prime o i semilavorati necessari sono stati predisposti per la produzione. | ||
| Perché è importante Questo evento segna l’inizio del consumo dei materiali. I ritardi tra il rilascio dell’ordine e la registrazione dell’uscita merci possono evidenziare problemi nella logistica di magazzino, nella predisposizione dei materiali o nell’accuratezza delle scorte. Dove reperirli Viene registrato come documento materiale nelle tabelle MKPF (intestazione) e MSEG (posizione), con un tipo di movimento, in genere «261», e il riferimento al numero dell’ordine di produzione (MSEG-AUFNR). Acquisizione Acquisire la data di registrazione (MKPF-BUDAT) dei documenti materiali con tipo di movimento «261» collegati all’ordine. Tipo di evento explicit | |||
Guide all’estrazione
Passaggi
- Creare un InfoSet in SAP Query: Utilizzi il codice transazione
SQ02. Crei un nuovo InfoSet, ad esempioZPP_EVENTLOG. Selezioni l’opzione di origine dati «Join di tabelle con tabella di base». UtilizziAUFK(dati anagrafici dell’ordine) come tabella di base iniziale. - Unire le tabelle necessarie: Aggiunga le seguenti tabelle al join dell’InfoSet. Il sistema potrebbe proporre i join, ma ne verifichi la correttezza:
AUFKconAFKO(dati di intestazione degli ordini PP):AUFK-AUFNR = AFKO-AUFNRAUFKconJEST(stato dei singoli oggetti):AUFK-OBJNR = JEST-OBJNRJESTconJCDS(documenti delle modifiche per gli stati di sistema e utente):JEST-OBJNR = JCDS-OBJNRANDJEST-STAT = JCDS-STAT. Nota: questo join serve a leggere lo storico delle modifiche di stato.AUFKconAFRU(conferme di completamento dell’ordine):AUFK-AUFNR = AFRU-AUFNRAUFKconMSEG(segmento documento: materiale):AUFK-AUFNR = MSEG-AUFNRMSEGconMKPF(testata: documento materiale):MSEG-MBLNR = MKPF-MBLNRANDMSEG-MJAHR = MKPF-MJAHR
- Definire i gruppi di campi: Trascini i campi necessari dalle tabelle di origine nei gruppi di campi. Si assicuri di includere tutti i campi richiesti dalla query finale, ad esempio
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATE,MKPF-BUDAT. - Aggiungere campi personalizzati e codice: Nell’InfoSet, apra la scheda «Extra». Dovrà definire i campi personalizzati
ActivityName,EventTime,SourceSystemeLastDataUpdatee scrivere codice ABAP per valorizzarli secondo la logica descritta nella sezione della query. La logica prevede di scorrere le modifiche di stato, le conferme e i documenti materiali per generare un record distinto per ogni evento aziendale. È il passaggio più complesso, perché i dati tabellari vengono trasformati nel formato di un event log nelle sezioni di codice dell’InfoSet. - Generare e salvare l’InfoSet: Dopo aver configurato tutti i join, i campi e il codice personalizzato, salvi e generi l’InfoSet.
- Creare una query SAP: Utilizzi il codice transazione
SQ01. Crei una nuova query, ad esempioZPP_EVENTS, basata sull’InfoSet creato nei passaggi precedenti. - Progettare il layout della query: Nel progettista di query, definisca i campi della schermata di selezione. Tra i campi utili figurano l’ordine di produzione
AUFNR, lo stabilimentoWERKS, il tipo di ordineAUARTe un intervallo di date per la creazione dell’ordineAUFK-ERDAT. - Definire l’elenco dei risultati: Selezioni i campi da visualizzare nel report. L’elenco deve corrispondere esattamente alle colonne richieste dall’event log, compresi i campi personalizzati come
ActivityNameeEventTime. - Eseguire la query: Esegua la query con i criteri di selezione desiderati, ad esempio per gli ordini di produzione degli ultimi 3-6 mesi.
- Esportare i dati: Quando la query mostra i risultati, esporti l’elenco. I formati più comuni e affidabili sono «Foglio di calcolo» o «File locale» con valori separati da tabulazioni o in formato CSV.
- Preparare i dati per ProcessMind: Apra il file esportato in un programma per fogli di calcolo. Verifichi che le intestazioni delle colonne corrispondano agli attributi richiesti (
ProductionOrder,ActivityName,EventTimee così via) e che il formato di data e ora diEventTimesia coerente e conforme allo standard richiesto, ad esempio YYYY-MM-DD HH:MI:SS. Salvi il file in formato CSV per caricarlo.
Configurazione
- Join dell’InfoSet: Questo metodo si basa su un InfoSet complesso che unisce le tabelle di intestazione, stato, conferme e movimenti dei materiali. I join principali sono
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUeAUFK->MSEG->MKPF. Join errati o inefficienti possono compromettere le prestazioni o l’accuratezza dei dati. - Criteri di selezione: È fondamentale definire un intervallo di selezione gestibile per evitare problemi di prestazioni del sistema. Nella schermata iniziale della query è opportuno includere questi campi di selezione:
- Stabilimento di produzione (
AUFK-WERKS) - Tipo di ordine di produzione (
AUFK-AUART) - Data di creazione dell’ordine (
AUFK-ERDAT): consigliamo di estrarre i dati relativi a un periodo mobile di 3-6 mesi, così da mantenere gestibili le dimensioni del dataset.
- Stabilimento di produzione (
- Stati di sistema: La logica che identifica eventi come «Creato», «Rilasciato», «Completato tecnicamente» e «Annullato» dipende da specifici codici di stato di sistema, ad esempio I0001, I0002, I0045 e I0047. In genere sono standard nei sistemi SAP, ma è opportuno verificarli.
- Tipi di movimento: Gli eventi come «Uscita merci» e «Carico di merci» sono identificati dai rispettivi tipi di movimento (
MSEG-BWART), in genere «261» e «101». Verifichi che questi valori corrispondano alla configurazione della Sua organizzazione. - Autorizzazioni: L’utente che esegue la query deve essere autorizzato ad accedere alle transazioni
SQ01,SQ02eSQ03, nonché a visualizzare tutte le tabelle sottostanti (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF).
Query di esempio abap
/*
The following ABAP-style SQL script represents the complete logic required to build the event log.
This logic must be implemented within the code sections of the SQ02 InfoSet, as a direct SQL query of this nature is not run.
Each SELECT block corresponds to a specific business activity.
*/
-- 1. Production Order Created
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Created' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0001' AND JCDS.INACT = ''
UNION ALL
-- 2. Material Availability Checked (using 'Material shortage' status as an indicator)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Material Availability Checked' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0033' AND JCDS.INACT = '' -- I0033 is MSPT (Material Shortage)
UNION ALL
-- 3. Production Order Released
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Released' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0002' AND JCDS.INACT = ''
UNION ALL
-- 4. Order Data Changed (using last change date as a proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Data Changed' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime, -- Time is not available in AUFK
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.AEDAT IS NOT NULL AND AUFK.AEDAT > AUFK.ERDAT
UNION ALL
-- 5. Goods Issue Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Issue Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
CONF.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
CONF.EventTime,
CONF.ProductionPlant,
CONF.ProductCode,
CONF.PlannedQuantity,
CONF.DeliveredQuantity,
CONF.ActualStartDate,
CONF.ActualEndDate,
CONF.SourceSystem,
CONF.LastDataUpdate
FROM (
SELECT
AUFK.AUFNR AS ProductionOrder,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
ROW_NUMBER() OVER(PARTITION BY AUFK.AUFNR ORDER BY AFRU.BUDAT, AFRU.ERFZEIT) as rn
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
) AS CONF
WHERE CONF.rn = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'T' -- T = Partial Confirmation
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'E' -- E = Final Confirmation
UNION ALL
-- 9. Goods Receipt Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Technically Completed' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0045' AND JCDS.INACT = ''
UNION ALL
-- 11. Order Settlement Ran (using 'Closed' status as proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Settlement Ran' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0046' AND JCDS.INACT = '' -- I0046 is CLSD (Closed)
UNION ALL
-- 12. Order Cancellation Set
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0047' AND JCDS.INACT = '' -- I0047 is CNF (Confirmed), use I0076 for Canceled. Recorrecting. Use Deletion Flag instead.
-- Corrected Logic for Cancellation:
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.LOEKZ = 'X'; Passaggi
- Configurare l’accesso al database: Ottenga credenziali di sola lettura per il database SAP ECC sottostante. Le serviranno l’indirizzo del server, la porta, il nome del database, il nome utente e la password. Questo accesso è indispensabile e va concordato con i team SAP Basis e di amministrazione del database.
- Individuare lo schema SAP: Determini lo schema del database in cui sono memorizzate le tabelle SAP. Spesso si chiama
SAPSR3o ha un nome specifico del sistema. Dovrà sostituire nella query il segnaposto[Your SAP Schema]con questo valore. - Preparare la query SQL: Copi la query SQL completa fornita nella sezione
query. È progettata per estrarre tutte le attività specificate in un unico formato di event log. - Configurare i parametri della query: Prima di eseguirla, modifichi i segnaposto al suo interno. Imposti
[Start Date]e[End Date]per definire l’intervallo temporale dell’estrazione. È inoltre consigliabile filtrare per stabilimento di produzione (WERKS) o tipo di ordine (AUART) per limitare il volume dei dati. - Connettersi ed eseguire: Utilizzi un client SQL standard, come DBeaver o SAP HANA Studio, oppure uno script personalizzato in Python o Java, per connettersi al database SAP con le credenziali del passaggio 1.
- Eseguire la query: Incolli la query SQL configurata nel client e la esegua. A seconda dell’intervallo di date e delle dimensioni del sistema, l’operazione potrebbe richiedere alcuni minuti.
- Verificare i risultati preliminari: Al termine della query, controlli rapidamente le prime centinaia di righe per verificare che colonne come
ProductionOrder,ActivityNameedEventTimesiano valorizzate correttamente e contengano dati coerenti. - Esportare in CSV: Esporti l’intero set di risultati dal client SQL in un file CSV. Si assicuri che il file utilizzi la codifica UTF-8 per evitare problemi con i caratteri.
- Preparare il CSV per il caricamento: Apra il file CSV e verifichi che le intestazioni delle colonne corrispondano agli attributi richiesti (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdatee così via). Si assicuri che la colonnaEventTimeabbia un formato coerente, ad esempioYYYY-MM-DD HH:MI:SS. - Caricare i dati in ProcessMind: Il file CSV preparato è pronto per essere caricato nella piattaforma ProcessMind e analizzato.
Configurazione
- Schema del database: Deve specificare lo schema SAP in cui si trovano le tabelle di pianificazione della produzione. Sostituisca nella query il segnaposto
[Your SAP Schema]con il nome corretto per il Suo ambiente, ad esempioSAPSR3. - Intervallo di date: Filtrare per un intervallo di date specifico è fondamentale per le prestazioni. La query filtra in base alla data di creazione dell’ordine (
AUFK.ERDAT). Consigliamo di iniziare con un periodo recente di 3-6 mesi, così da mantenere gestibile il volume dei dati. - Tipo di ordine di produzione: Per circoscrivere l’analisi, applichi alla query un filtro sul campo del tipo di ordine di produzione (
AUFK.AUART). In questo modo può includere o escludere tipi specifici, come gli ordini di produzione standard, gli ordini di processo o gli ordini di rilavorazione. - Stabilimento di produzione: È fortemente consigliato filtrare per uno o più stabilimenti di produzione (
AFKO.WERKS). Estrarre contemporaneamente i dati di tutti gli stabilimenti può richiedere molte risorse. - Accesso al database: Questo metodo richiede un utente del database con almeno i permessi di lettura sulle seguenti tabelle:
AUFK,AFKO,JCDS,JEST,AFRU,MSEG,MKPF. L’accesso diretto al database non è previsto per tutti gli utenti SAP e richiede autorizzazioni specifiche.
Query di esempio sql
WITH Orders AS (
SELECT
aufk.AUFNR AS ProductionOrder,
afko.WERKS AS ProductionPlant,
afko.PLNBEZ AS ProductCode,
afko.GAMNG AS PlannedQuantity,
afko.GMEIN AS PlannedUnit,
afko.GEMNG AS DeliveredQuantity,
CASE
WHEN afko.GSTRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GSTRI || afko.GSUZI, 'YYYYMMDDHH24MISS')
END AS ActualStartDate,
CASE
WHEN afko.GETRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GETRI || afko.GEUZI, 'YYYYMMDDHH24MISS')
END AS ActualEndDate,
aufk.OBJNR,
aufk.ERDAT AS CreationDate,
aufk.ERFAS AS CreationTime
FROM
"[Your SAP Schema]".AUFK aufk
JOIN
"[Your SAP Schema]".AFKO afko ON aufk.AUFNR = afko.AUFNR
WHERE
aufk.AUTYP = '10' -- Filter for Production Orders
AND aufk.ERDAT BETWEEN '[Start Date]' AND '[End Date]'
-- AND afko.WERKS IN ('[Your Plant]', '[Another Plant]') -- Optional: Filter by Plant
-- AND aufk.AUART IN ('[Your Order Type]') -- Optional: Filter by Order Type
),
Confirmations AS (
SELECT
o.ProductionOrder,
a.RUECK AS ConfirmationNumber,
a.RMZHL AS ConfirmationCounter,
TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
a.AUERU AS IsFinalConfirmation,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') ASC) as rn_asc,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') DESC) as rn_desc
FROM
Orders o
JOIN
"[Your SAP Schema]".AFRU a ON o.ProductionOrder = a.AUFNR
)
-- 1. Production Order Created
SELECT
o.ProductionOrder,
'Production Order Created' AS ActivityName,
TO_TIMESTAMP(o.CreationDate || o.CreationTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
UNION ALL
-- 2. Material Availability Checked (using 'Material Committed' status as proxy)
SELECT
o.ProductionOrder,
'Material Availability Checked' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0006' AND jcds.INACT != 'X'
UNION ALL
-- 3. Production Order Released
SELECT
o.ProductionOrder,
'Production Order Released' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0002' AND jcds.INACT != 'X'
UNION ALL
-- 4. Order Data Changed
SELECT
o.ProductionOrder,
'Order Data Changed' AS ActivityName,
TO_TIMESTAMP(aufk.AEDAT || aufk.AEZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".AUFK aufk ON o.ProductionOrder = aufk.AUFNR
WHERE aufk.AEDAT > o.CreationDate
UNION ALL
-- 5. Goods Issue Posted
SELECT
o.ProductionOrder,
'Goods Issue Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
c.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
c.ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc > 1 AND c.IsFinalConfirmation IS NULL
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
c.ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.IsFinalConfirmation = 'X'
UNION ALL
-- 9. Goods Receipt Posted
SELECT
o.ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
o.ProductionOrder,
'Order Technically Completed' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0045' AND jcds.INACT != 'X'
UNION ALL
-- 11. Order Settlement Ran
SELECT
o.ProductionOrder,
'Order Settlement Ran' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0046' AND jcds.INACT != 'X'
UNION ALL
-- 12. Order Cancellation Set
SELECT
o.ProductionOrder,
'Order Cancellation Set' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0076' AND jcds.INACT != 'X'; Passaggi
- Verifichi che siano disponibili SAP ECC PP, l’elaborazione degli ordini di produzione, le conferme, la gestione delle scorte e i dati di controlling. Verifichi inoltre che l’utente di estrazione disponga delle autorizzazioni necessarie per leggere le tabelle applicative richieste ed eseguire report ABAP personalizzati.
- In ABAP Workbench, ad esempio tramite la transazione SE38 o SE80, crei un report eseguibile dedicato, come [Your custom report name]. Utilizzi una schermata di selezione con parametri obbligatori per le date, ad esempio [Start date] e [End date], e filtri facoltativi per [Company Code], [Production Plant], [Order Type], [Material] e [Production Order].
- Legga i dati anagrafici e di testata degli ordini di produzione da AUFK e dalle tabelle degli ordini di produzione configurate nel sistema SAP ECC. Utilizzi JCDS e la configurazione degli stati corrispondente per individuare le variazioni di stato esplicite, inclusi CRTD, il rilascio, il completamento tecnico e gli stati relativi all’annullamento. Non consideri un codice di stato come un evento se la cronologia degli stati non contiene una variazione con data e ora.
- Legga i risultati dei controlli di disponibilità dei materiali dai dati del controllo di disponibilità degli ordini di produzione configurati nel sistema. Se il controllo non viene registrato in una tabella che consenta di collegarlo in modo affidabile all’ordine e a un momento preciso, implementi l’estensione SAP configurata, il registro applicativo o la fonte di audit approvata dal team SAP. Non deduca l’esecuzione di un controllo dalla sola creazione o dal rilascio dell’ordine.
- Legga la cronologia delle modifiche degli ordini dalle fonti configurate per i documenti di modifica degli ordini di produzione e dalle relative tabelle dei documenti di modifica. Estragga solo le modifiche rilevanti, ad esempio a quantità pianificate, date, distinta base, ciclo di lavorazione o altri campi approvati dal responsabile del processo. Utilizzi come EventTime la data e l’ora del documento di modifica.
- Legga le registrazioni dei prelievi e dei versamenti di merci dai dati dei documenti di materiale di magazzino configurati nel sistema. Colleghi le registrazioni all’ordine di produzione utilizzando il riferimento all’ordine disponibile nei dati del documento di materiale. Classifichi i prelievi dei componenti come Goods Issue Posted e i versamenti dei prodotti finiti come Goods Receipt Posted. Utilizzi la data e l’ora di registrazione, se disponibili.
- Legga i dati delle conferme dalla fonte configurata nel sistema per le conferme di produzione. Ordini le conferme per ordine di produzione e data e ora della conferma. Generi First Confirmation Recorded per la prima conferma, Intermediate Confirmation Recorded per le conferme intermedie che soddisfano i criteri e Final Confirmation Recorded per una conferma indicata esplicitamente come finale o identificata come tale dalla logica di completamento configurata. Non deduca che una conferma sia finale solo perché è l’ultima riga restituita da una query arbitraria.
- Legga i dati di esecuzione della liquidazione dalla fonte di controlling configurata nel sistema. Generi Order Settlement Ran solo quando un record di esecuzione della liquidazione, un documento di liquidazione o una cronologia degli stati approvata fornisce una data e un’ora esplicite collegate all’ordine di produzione.
- Crei una riga evento interna per ogni attività estratta. Compili ProductionOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ProductionPlant, ProductCode, PlannedQuantity, DeliveredQuantity, ActualStartDate e ActualEndDate. Applichi una conversione coerente delle date e delle ore e mantenga il fuso orario del sistema di origine. Imposti ActualStartDate sulla data e ora della prima conferma e ActualEndDate su quelle della conferma finale, se tali eventi sono presenti.
- Ordini le righe evento per ProductionOrder ed EventTime, applicando un criterio secondario deterministico in caso di date e ore identiche. Rimuova solo i record di origine perfettamente duplicati, non gli eventi ripetuti legittimi. Verifichi che lo schema di output includa tutti i dodici nomi di attività richiesti e che ogni riga generata contenga un identificativo del caso, il nome dell’attività e la data e ora dell’evento.
- Scriva il risultato in un file sul server applicativo utilizzando un’interfaccia ABAP approvata e un percorso logico configurato. Utilizzi un delimitatore e una codifica del testo concordati con la configurazione di acquisizione di ProcessMind, includa una riga di intestazione, racchiuda tra virgolette i valori contenenti delimitatori e adotti un formato coerente per le date e le ore, preferibilmente YYYY-MM-DDThh:mm:ss.
- Scarichi il file secondo la procedura di trasferimento file SAP approvata, lo controlli separatamente e lo carichi in ProcessMind come Event Log, impostando ProductionOrder come identificativo del caso, ActivityName come attività ed EventTime come data e ora dell’evento. Verifichi che ProcessMind sia configurato per leggere le righe così come sono e non debba dedurre le attività mancanti.
Configurazione
- Intervallo di date: per l’analisi iniziale, utilizzi una finestra di estrazione mobile da tre a sei mesi. La estenda solo dopo aver valutato le prestazioni e il volume dei dati. Includa un periodo retrospettivo per gli ordini creati prima della data di inizio selezionata ma ancora attivi durante il periodo di analisi.
- Filtri di selezione: supporti [Company Code], [Production Plant], [Order Type], [Material], [Production Order], lo stato dell’ordine e i filtri per data di creazione o modifica. Configuri i campi esatti in base all’implementazione SAP ECC, poiché la disponibilità dei campi degli ordini di produzione può variare a seconda della versione e delle personalizzazioni.
- Ambito degli eventi: estragga tutte le dodici attività richieste come righe evento esplicite: Production Order Created, Material Availability Checked, Production Order Released, Order Data Changed, Goods Issue Posted, First Confirmation Recorded, Intermediate Confirmation Recorded, Final Confirmation Recorded, Goods Receipt Posted, Order Technically Completed, Order Settlement Ran e Order Cancellation Set.
- Criteri per le date e le ore: privilegi la data e l’ora dell’evento nella fonte. Se è disponibile solo la data, documenti la minore precisione e utilizzi un orario configurato coerente, senza indicare un orario preciso inventato. Converta tutte le date e le ore nel fuso orario previsto da ProcessMind.
- Gestione degli stati: utilizzi la cronologia degli stati con data e ora per le attività relative agli stati. Configuri la corrispondenza tra i valori interni degli stati e le attività aziendali in base alla configurazione degli stati di sistema e all’approvazione del responsabile del processo.
- Controlli di disponibilità: configuri la fonte approvata per l’esecuzione dei controlli di disponibilità. Non crei una riga Material Availability Checked sulla base della creazione dell’ordine, del rilascio, delle prenotazioni o di un prelievo di merci riuscito, a meno che la fonte approvata dall’azienda non registri esplicitamente il controllo.
- Gestione delle conferme: configuri le regole per distinguere le conferme iniziali, intermedie e finali. Una conferma può essere considerata finale solo se la fonte la identifica esplicitamente come tale o se la logica di conferma SAP configurata ne stabilisce il completamento.
- Quantità: mantenga, ove possibile, l’unità di misura della fonte. Se le quantità vengono aggregate, documenti se l’aggregazione è per ordine, materiale, movimento, conferma o evento. DeliveredQuantity deve rappresentare i versamenti registrati di prodotti finiti, non semplicemente la resa confermata, salvo approvazione di questa interpretazione da parte del responsabile del processo.
- LastDataUpdate: compili questo campo con la data e l’ora di esecuzione dell’estrazione o con la data e l’ora di aggiornamento della fonte, applicando la stessa convenzione documentata a tutte le righe di un’esecuzione.
- Prestazioni: limiti l’intervallo di selezione, selezioni solo i campi necessari, elabori i dati in pacchetti, applichi i filtri a livello di database, eviti letture annidate del database all’interno di cicli di grandi dimensioni e crei o utilizzi indici approvati solo tramite la procedura di amministrazione del database SAP. Scriva i dati in modo incrementale se l’utilizzo della memoria è un problema.
- Output del file: configuri la directory del server applicativo, il nome logico del file, il delimitatore, la codifica, il formato decimale, il formato di data e ora e la gestione dell’intestazione secondo le specifiche di caricamento di ProcessMind. Non inserisca credenziali nel report o nel file di output.
- Prerequisiti: verifichi che SAP ECC PP, la gestione delle scorte, le conferme, la gestione degli stati degli ordini di produzione e i dati di controlling per la liquidazione siano attivi, ove applicabile. Prima dell’esecuzione devono essere concesse le autorizzazioni necessarie, approvati lo sviluppo personalizzato e il relativo trasporto, nonché l’accesso ai file sul server applicativo e l’accesso all’acquisizione di ProcessMind.
- Configurazione specifica del sistema: confermi nel sistema SAP ECC di destinazione i nomi delle tabelle, i campi, i codici di stato, gli oggetti dei documenti di modifica, le fonti delle conferme, dei controlli di disponibilità e delle liquidazioni. Utilizzi [Configure based on your system] se l’implementazione non offre una fonte standard e affidabile.
Query di esempio abap
REPORT [Your custom report name].
* This executable ABAP report is a complete extraction framework for the twelve required activities.
* Replace only the marked system-specific source sections, selection parameters, and file configuration.
* Confirm every table and field against the target SAP ECC system before activation.
PARAMETERS p_from TYPE sydatum OBLIGATORY.
PARAMETERS p_to TYPE sydatum OBLIGATORY.
PARAMETERS p_file TYPE string OBLIGATORY DEFAULT '[Application server file path]'.
PARAMETERS p_src TYPE string OBLIGATORY DEFAULT '[SAP ECC system identifier]'.
SELECT-OPTIONS s_werks FOR [Production plant field].
SELECT-OPTIONS s_aufnr FOR [Production order field].
SELECT-OPTIONS s_auart FOR [Production order type field].
SELECT-OPTIONS s_bukrs FOR [Company code field].
TYPES: BEGIN OF ty_event,
productionorder TYPE string,
activityname TYPE string,
eventtime TYPE string,
sourcesystem TYPE string,
lastdataupdate TYPE string,
productionplant TYPE string,
productcode TYPE string,
plannedquantity TYPE string,
deliveredquantity TYPE string,
actualstartdate TYPE string,
actualenddate TYPE string,
END OF ty_event.
DATA gt_events TYPE STANDARD TABLE OF ty_event WITH EMPTY KEY.
DATA gs_event TYPE ty_event.
DATA gv_update_timestamp TYPE string.
DATA gv_line TYPE string.
GET TIME STAMP FIELD DATA(gv_update_ts).
gv_update_timestamp = |{ gv_update_ts TIMESTAMP = ISO }|.
* Production Order Created
SELECT [Production order field], [Production plant field], [Product field], [Planned quantity field], [Creation date field], [Creation time field]
FROM [Production order header table]
INTO TABLE @DATA(lt_created)
WHERE [Creation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks
AND [Production order type field] IN @s_auart
AND [Company code field] IN @s_bukrs.
LOOP AT lt_created ASSIGNING FIELD-SYMBOL(<created>).
CLEAR gs_event.
gs_event-productionorder = |{ <created>-[Production order field] }|.
gs_event-activityname = 'Production Order Created'.
gs_event-eventtime = |{ <created>-[Creation date field] } { <created>-[Creation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <created>-[Production plant field] }|.
gs_event-productcode = |{ <created>-[Product field] }|.
gs_event-plannedquantity = |{ <created>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Material Availability Checked
SELECT [Production order field], [Production plant field], [Product field], [Availability check date field], [Availability check time field]
FROM [Availability check source table]
INTO TABLE @DATA(lt_availability)
WHERE [Availability check date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_availability ASSIGNING FIELD-SYMBOL(<availability>).
CLEAR gs_event.
gs_event-productionorder = |{ <availability>-[Production order field] }|.
gs_event-activityname = 'Material Availability Checked'.
gs_event-eventtime = |{ <availability>-[Availability check date field] } { <availability>-[Availability check time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <availability>-[Production plant field] }|.
gs_event-productcode = |{ <availability>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Production Order Released
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field], [Planned quantity field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_released)
WHERE [Status field] = '[Released status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_released ASSIGNING FIELD-SYMBOL(<released>).
CLEAR gs_event.
gs_event-productionorder = |{ <released>-[Production order field] }|.
gs_event-activityname = 'Production Order Released'.
gs_event-eventtime = |{ <released>-[Status change date field] } { <released>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <released>-[Production plant field] }|.
gs_event-productcode = |{ <released>-[Product field] }|.
gs_event-plannedquantity = |{ <released>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Data Changed
SELECT [Production order field], [Change date field], [Change time field], [Production plant field], [Product field], [Changed field name]
FROM [Production order change document source table]
INTO TABLE @DATA(lt_changed)
WHERE [Change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Changed field name] IN ('[Planned quantity field]', '[Basic start date field]', '[Basic finish date field]', '[BOM field]', '[Routing field]').
LOOP AT lt_changed ASSIGNING FIELD-SYMBOL(<changed>).
CLEAR gs_event.
gs_event-productionorder = |{ <changed>-[Production order field] }|.
gs_event-activityname = 'Order Data Changed'.
gs_event-eventtime = |{ <changed>-[Change date field] } { <changed>-[Change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <changed>-[Production plant field] }|.
gs_event-productcode = |{ <changed>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Issue Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gi)
WHERE [Movement type field] IN ('[Goods issue movement type 1]', '[Goods issue movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gi ASSIGNING FIELD-SYMBOL(<gi>).
CLEAR gs_event.
gs_event-productionorder = |{ <gi>-[Production order field] }|.
gs_event-activityname = 'Goods Issue Posted'.
gs_event-eventtime = |{ <gi>-[Posting date field] } { <gi>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gi>-[Production plant field] }|.
gs_event-productcode = |{ <gi>-[Product field] }|.
gs_event-deliveredquantity = |{ <gi>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* First Confirmation Recorded
SELECT [Production order field], [Confirmation date field], [Confirmation time field], [Production plant field], [Product field], [Confirmed quantity field]
FROM [Production confirmation source table]
INTO TABLE @DATA(lt_confirmations)
WHERE [Confirmation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
SORT lt_confirmations BY [Production order field] [Confirmation date field] [Confirmation time field].
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<confirmation>) GROUP BY <confirmation>-[Production order field] ASSIGNING FIELD-SYMBOL(<confirmation_group>).
LOOP AT GROUP <confirmation_group> ASSIGNING FIELD-SYMBOL(<first_confirmation>).
CLEAR gs_event.
gs_event-productionorder = |{ <first_confirmation>-[Production order field] }|.
gs_event-activityname = 'First Confirmation Recorded'.
gs_event-eventtime = |{ <first_confirmation>-[Confirmation date field] } { <first_confirmation>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <first_confirmation>-[Production plant field] }|.
gs_event-productcode = |{ <first_confirmation>-[Product field] }|.
gs_event-actualstartdate = gs_event-eventtime.
APPEND gs_event TO gt_events.
EXIT.
ENDLOOP.
ENDLOOP.
* Intermediate Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<intermediate>) GROUP BY <intermediate>-[Production order field] ASSIGNING FIELD-SYMBOL(<intermediate_group>).
DATA(lv_intermediate_index) = 0.
DATA(lv_intermediate_count) = GROUP SIZE.
LOOP AT GROUP <intermediate_group> ASSIGNING FIELD-SYMBOL(<intermediate_row>).
lv_intermediate_index = lv_intermediate_index + 1.
IF lv_intermediate_index < lv_intermediate_count AND <intermediate_row>-[Final confirmation indicator field] <> '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <intermediate_row>-[Production order field] }|.
gs_event-activityname = 'Intermediate Confirmation Recorded'.
gs_event-eventtime = |{ <intermediate_row>-[Confirmation date field] } { <intermediate_row>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <intermediate_row>-[Production plant field] }|.
gs_event-productcode = |{ <intermediate_row>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDIF.
ENDLOOP.
ENDLOOP.
* Final Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<final>) WHERE [Final confirmation indicator field] = '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <final>-[Production order field] }|.
gs_event-activityname = 'Final Confirmation Recorded'.
gs_event-eventtime = |{ <final>-[Confirmation date field] } { <final>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <final>-[Production plant field] }|.
gs_event-productcode = |{ <final>-[Product field] }|.
gs_event-actualenddate = gs_event-eventtime.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Receipt Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gr)
WHERE [Movement type field] IN ('[Goods receipt movement type 1]', '[Goods receipt movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gr ASSIGNING FIELD-SYMBOL(<gr>).
CLEAR gs_event.
gs_event-productionorder = |{ <gr>-[Production order field] }|.
gs_event-activityname = 'Goods Receipt Posted'.
gs_event-eventtime = |{ <gr>-[Posting date field] } { <gr>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gr>-[Production plant field] }|.
gs_event-productcode = |{ <gr>-[Product field] }|.
gs_event-deliveredquantity = |{ <gr>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Technically Completed
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_teco)
WHERE [Status field] = '[Technically completed status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_teco ASSIGNING FIELD-SYMBOL(<teco>).
CLEAR gs_event.
gs_event-productionorder = |{ <teco>-[Production order field] }|.
gs_event-activityname = 'Order Technically Completed'.
gs_event-eventtime = |{ <teco>-[Status change date field] } { <teco>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <teco>-[Production plant field] }|.
gs_event-productcode = |{ <teco>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Settlement Ran
SELECT [Production order field], [Settlement date field], [Settlement time field], [Production plant field], [Product field]
FROM [Order settlement source table]
INTO TABLE @DATA(lt_settlement)
WHERE [Settlement date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_settlement ASSIGNING FIELD-SYMBOL(<settlement>).
CLEAR gs_event.
gs_event-productionorder = |{ <settlement>-[Production order field] }|.
gs_event-activityname = 'Order Settlement Ran'.
gs_event-eventtime = |{ <settlement>-[Settlement date field] } { <settlement>-[Settlement time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <settlement>-[Production plant field] }|.
gs_event-productcode = |{ <settlement>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Cancellation Set
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_cancelled)
WHERE [Status field] IN ('[Cancellation status code]', '[Deletion status code]')
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_cancelled ASSIGNING FIELD-SYMBOL(<cancelled>).
CLEAR gs_event.
gs_event-productionorder = |{ <cancelled>-[Production order field] }|.
gs_event-activityname = 'Order Cancellation Set'.
gs_event-eventtime = |{ <cancelled>-[Status change date field] } { <cancelled>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <cancelled>-[Production plant field] }|.
gs_event-productcode = |{ <cancelled>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
SORT gt_events BY productionorder eventtime activityname.
DELETE ADJACENT DUPLICATES FROM gt_events COMPARING productionorder activityname eventtime productionplant productcode.
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'The application server output file could not be opened' TYPE 'E'.
ENDIF.
TRANSFER 'ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProductionPlant,ProductCode,PlannedQuantity,DeliveredQuantity,ActualStartDate,ActualEndDate' TO p_file.
LOOP AT gt_events INTO gs_event.
gv_line = |{ gs_event-productionorder },{ gs_event-activityname },{ gs_event-eventtime },{ gs_event-sourcesystem },{ gs_event-lastdataupdate },{ gs_event-productionplant },{ gs_event-productcode },{ gs_event-plannedquantity },{ gs_event-deliveredquantity },{ gs_event-actualstartdate },{ gs_event-actualenddate }|.
TRANSFER gv_line TO p_file.
ENDLOOP.
CLOSE DATASET p_file.
MESSAGE |Event log written to { p_file }| TYPE 'S'. È pronto a iniziare?
Utilizzi questo template per preparare i dati e avviare il percorso verso una pianificazione della produzione più efficiente. Ottenga informazioni utili e semplifichi le attività fin da oggi.
Ottimizzi subito la pianificazione della produzione per migliorare l’efficienza
Faccia emergere le inefficienze, riduca del 30% il tempo di ciclo e raggiunga gli obiettivi.
Non è richiesta alcuna carta di credito. Inizi a ottimizzare fin da oggi.