Il Suo Template di Dati per la Pianificazione della Produzione
Il Suo Template di Dati per la Pianificazione della Produzione
- Attributi consigliati da raccogliere
- Attività chiave da tracciare
- Guida pratica all'estrazione
Attributi della Pianificazione della Produzione
| Nome | Descrizione | ||
|---|---|---|---|
| Nome attività ActivityName | Il nome dell'evento aziendale o di sistema che si è verificato in un momento specifico per un ordine di produzione. | ||
| Descrizione Il Nome Attività descrive un passaggio specifico o un cambiamento di stato all'interno del processo di pianificazione della produzione. Questi eventi vengono estratti dai log delle modifiche, dagli aggiornamenti di stato e dai record delle transazioni all'interno di SAP ECC PP, rappresentando milestone chiave come 'Ordine di Produzione Creato', 'Disponibilità Materiali Verificata' o 'Ricevimento Merci Registrato'. Questo attributo costituisce la spina dorsale della mappa di processo, consentendo agli analisti di visualizzare la sequenza degli eventi, scoprire varianti di processo e identificare colli di bottiglia o cicli di rilavorazione. La chiarezza e la granularità dei nomi delle attività sono fondamentali per costruire un modello di processo accurato e perspicace che rifletta la realtà delle operazioni. Perché è importante Definisce i passaggi nella Dove trovare Generato da varie fonti, inclusi cambiamenti di stato nelle tabelle JEST/JSTO, Esempi Ordine di Produzione RilasciatoUscita merci contabilizzataConferma Finale RegistrataOrdine Tecnicamente Completato | |||
| Ordine di Produzione ProductionOrder | L'identificatore univoco per un ordine di produzione, che funge da identificatore di caso primario per il processo di pianificazione ed esecuzione della produzione. | ||
| Descrizione Il numero dell'Ordine di Produzione è una chiave alfanumerica unica assegnata a ciascun ordine di fabbricazione in SAP ECC PP. Agisce come 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 appartenenti a una singola produzione. Ciò consente un'analisi end-to-end dell'intero ciclo di vita di un ordine di produzione, incluso il monitoraggio del suo progresso, la misurazione dei tempi di ciclo e l'identificazione di eventuali deviazioni dal processo standard. L'analisi dei processi per Ordine di Produzione fornisce una chiara visione di how individual manufacturing requests are fulfilled. Perché è importante Questo è l'identificatore centrale che collega tutti gli eventi di processo correlati, consentendo la ricostruzione e l'analisi di ogni percorso di produzione dall'inizio alla fine. Dove trovare Questo attributo può essere trovato nella tabella SAP AUFK, campo AUFNR. Esempi 1000345100034610003471000348 | |||
| Timestamp Evento EventTime | Il timestamp preciso che indica quando si è verificata l'attività. | ||
| Descrizione
Perché è importante Questo attributo fornisce la sequenza cronologica degli eventi, essenziale per calcolare le durate, analizzare le prestazioni e identificare i colli di bottiglia. Dove trovare Derivato da vari campi di data e ora associati a transazioni e modifiche di stato, come BUDAT (Data di Registrazione) dai documenti materiali o Esempi 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| 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, come il nome o l'ID della specifica istanza SAP ECC. Nelle organizzazioni con più sistemi ERP o un mix di piattaforme legacy e moderne, questo campo è cruciale per la data lineage e il contesto. Per l'analisi, consente di filtrare i processi in base al loro sistema di origine. Questo può essere utile per confrontare le prestazioni dei processi tra diversi sistemi o per isolare i dati durante progetti di consolidamento dati multi-sistema. Perché è importante Fornisce un contesto cruciale sull'origine dei Dove trovare Tipicamente aggiunto durante il processo di estrazione dei dati, spesso derivato dall'ID del sistema SAP (SY-SYSID). Esempi ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Ultimo `Data Update` LastDataUpdate | Il `timestamp` che indica l'ultima volta che i `dati` per questo `event` sono stati aggiornati o estratti. | ||
| Descrizione Questo attributo registra la data e l'ora in cui i dati sono stati estratti dal sistema di origine nello strumento di Process Mining. Non rappresenta un evento aziendale, ma è un timestamp tecnico per scopi di gestione dei dati. Il suo utilizzo principale è garantire la freschezza dei dati e aiutare amministratori e analisti a comprendere la recentezza dei dati che stanno analizzando. È fondamentale per convalidare che l'analisi di processo sia basata su informazioni aggiornate, specialmente quando si monitorano operazioni in corso. Perché è importante Conferma la freschezza dei Dove trovare Questo valore viene tipicamente generato e timestampato dallo strumento o script di estrazione, trasformazione e caricamento dati (ETL) durante il processo di acquisizione dei dati. Esempi 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Codice Prodotto ProductCode | L'identificatore univoco per il materiale o il prodotto in fase di fabbricazione. | ||
| Descrizione Il Codice Prodotto, o Numero Materiale, identifica l'articolo che l'ordine di produzione intende produrre. Questo è un elemento centrale dei dati anagrafici che collega la pianificazione della produzione alla gestione dell'inventario, alle vendite e alla contabilità dei costi. Nel Process Mining, filtrare o segmentare per Codice Prodotto è fondamentale per comprendere i processi di produzione specifici del prodotto. Aiuta a rispondere a domande come 'Quali prodotti hanno i tempi di ciclo più lunghi?' o 'Certi prodotti sono più inclini a problemi di qualità o ritardi dei materiali?'. Questa analisi è vitale per la gestione del portafoglio prodotti e per identificare opportunità di standardizzazione o ottimizzazione dei processi per tipi di materiale specifici. Perché è importante Permette un'analisi di processo specifica per prodotto, rivelando quali materiali sono associati a inefficienze di processo, ritardi o costi elevati. Dove trovare Questo può essere trovato nella tabella SAP AFPO, campo MATNR. Esempi FG-123RM-45AHALB-7890CHEM-22 | |||
| Data Fine Effettiva ActualEndDate | Il timestamp dell'attività di produzione finale, che segna il completamento effettivo dell'ordine. | ||
| Descrizione La Data di Fine Effettiva è il timestamp dell'evento che indica il completamento di tutte le attività di produzione per un ordine. Questa è comunemente derivata dal timestamp della 'Conferma Finale Registrata' o dell'ultimo evento di 'Ricevimento Merci Registrato'. Questo attributo è essenziale per misurare il tempo totale del ciclo di produzione e per l'analisi del rispetto delle scadenze. Confrontare la 'Data di Fine Effettiva' con la 'Data di Fine Pianificata' determina se un ordine è stato completato in tempo. L'analisi della durata tra la 'Data di Inizio Effettiva' e la 'Data di Fine Effettiva' fornisce il tempo di throughput di produzione reale. Perché è importante Segna il completamento della produzione, consentendo una misurazione accurata delle prestazioni di consegna puntuale e del tempo totale di esecuzione. Dove trovare Derivato dall' Esempi 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| Data Inizio Effettiva ActualStartDate | Il timestamp della prima attività di produzione registrata, che segna l'effettivo inizio dell'esecuzione. | ||
| Descrizione La Data di Inizio Effettiva è il timestamp del primo evento che indica l'inizio del lavoro di produzione fisica. Questo è tipicamente derivato dal primo evento di conferma di produzione o dalla prima emissione merci di materie prime all'ordine. Questo attributo derivato è cruciale per l'analisi del rispetto delle scadenze. Fornisce il punto di inizio effettivo da confrontare con la 'Data di Inizio Pianificata', consentendo il calcolo preciso delle varianze di tempo di inizio. Comprendere il divario tra le date di inizio pianificate ed effettive aiuta a individuare i ritardi pre-produzione legati all'allestimento dei materiali, alla configurazione della macchina o alla disponibilità delle risorse. Perché è importante Fornisce il vero punto di partenza dell'esecuzione della produzione, consentendo un calcolo accurato dei ritardi di avvio e del Dove trovare Derivato dall' Esempi 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Quantità Consegnata DeliveredQuantity | La quantità effettiva del prodotto che è stata prodotta e ricevuta a magazzino. | ||
| Descrizione La Quantità Consegnata, nota anche come Quantità Ricevuta Merci, è la quantità totale di prodotto finito che è stata confermata come prodotta per un dato ordine di produzione. Questo valore viene aggiornato quando si verificano gli Questo Perché è importante Misura l'output effettivo del processo di produzione, consentendo un confronto diretto con gli obiettivi pianificati per valutare le prestazioni. Dove trovare Trovato nella tabella SAP AFPO, campo WEMNG (Quantità di Merci Ricevute). Esempi 984950751255 | |||
| Quantità Pianificata PlannedQuantity | La quantità totale del prodotto la cui produzione è pianificata nell'ordine. | ||
| Descrizione La Quantità Pianificata rappresenta l'output obiettivo di un ordine di produzione, definito durante la fase di pianificazione. Questo valore serve come base di riferimento rispetto alla quale viene misurato l'output di produzione effettivo. Questo attributo è fondamentale per i KPI legati alla performance produttiva e al rispetto delle scadenze, come la 'Varianza Quantità Pianificata vs Reale'. Aiuta a valutare l'accuratezza della pianificazione della produzione e a identificare problemi sistemici legati alla sovrapproduzione o sottoproduzione. L'analisi di questo valore è cruciale per comprendere quanto l'esecuzione della produzione sia allineata ai piani iniziali. Perché è importante Questo attributo è la linea di base per misurare la varianza dell'output di produzione e valutare l'accuratezza della pianificazione. Dove trovare Questo valore è disponibile nella tabella SAP AFKO, campo GAMNG (Quantità Totale Ordine). Esempi 1005000751250 | |||
| Stabilimento di Produzione ProductionPlant | L'impianto di produzione o la località in cui viene eseguito l'ordine di produzione. | ||
| Descrizione Lo Stabilimento di Produzione è un'unità organizzativa chiave in SAP che rappresenta un impianto di produzione. Viene assegnato a ogni ordine di produzione e determina dove si svolgeranno fisicamente le attività di produzione. L'analisi del processo per Stabilimento di Produzione consente confronti di performance tra diverse località. Questo aiuta a identificare quali stabilimenti sono più efficienti, quali affrontano più ritardi o carenze di materiale e dove le best practice possono essere condivise. È una dimensione fondamentale per l'analisi delle cause profonde nelle dashboard relative alla produttività e all'utilizzo delle risorse. Perché è importante Consente il confronto delle prestazioni tra diverse sedi produttive, aiutando a identificare problemi specifici del sito o le migliori pratiche. Dove trovare Questo attributo è memorizzato nella tabella SAP AUFK, campo WERKS. Esempi 100017102000DE01 | |||
| Data di Fine Pianificata PlannedEndDate | La data pianificata entro la quale è previsto il completamento della produzione per l'ordine. | ||
| Descrizione La Data di Fine Pianificata è la data di completamento obiettivo per un ordine di produzione, stabilita durante il processo di schedulazione. Definisce il lasso di tempo previsto per il completamento di tutte le attività di produzione, incluse le conferme finali e il ricevimento merci. Questa data è essenziale per il calcolo del KPI 'Tasso di Rispetto delle Scadenze'. Il confronto della 'Data di Fine Pianificata' con il tempo di completamento effettivo (ad esempio, il timestamp dell'attività 'Ricevimento Merci Registrato' o 'Conferma Finale Registrata') rivela se gli ordini vengono completati in tempo. Questa analisi aiuta a valutare l'affidabilità dei programmi di produzione e a identificare le cause profonde delle consegne in ritardo. Perché è importante È il benchmark utilizzato per determinare se gli ordini di produzione vengono completati in tempo, influenzando direttamente la soddisfazione del cliente e l'affidabilità della pianificazione. Dove trovare Questa è la data di fine di base, che si trova nella tabella SAP AFKO, campo GLTRP. Esempi 2023-05-152023-06-282023-07-05 | |||
| Data di Inizio Pianificata PlannedStartDate | La data pianificata in cui è previsto l'inizio della produzione per l'ordine. | ||
| Descrizione La Data di Inizio Pianificata è un parametro chiave di schedulazione determinato durante la fase di pianificazione e schedulazione della produzione. Rappresenta la data di inizio obiettivo per l'avvio delle attività di produzione per un ordine. Questo attributo è cruciale per misurare il rispetto delle scadenze. Confrontando la 'Data di Inizio Pianificata' con l'ora di inizio effettiva della produzione (ad esempio, il timestamp dell'attività 'Prima Conferma Registrata'), le organizzazioni possono identificare i ritardi nell'avvio della produzione. L'analisi delle ragioni di questi ritardi è un caso d'uso primario per il Process Mining in quest'area. Perché è importante Serve come linea di base per misurare l'aderenza alla pianificazione e identificare i ritardi nell'avvio dell'esecuzione della produzione. Dove trovare Questa è la data di inizio di base, che si trova nella tabella SAP AFKO, campo GSTRP. Esempi 2023-05-102023-06-222023-07-01 | |||
| Disponibilità Materiali MaterialAvailabilityStatus | Indica se tutti i componenti richiesti per l'ordine di produzione sono disponibili. | ||
| Descrizione Lo Stato di Disponibilità dei Materiali è un indicatore critico della prontezza alla produzione. Viene determinato dal sistema che verifica la disponibilità di tutti i materiali componenti richiesti per l'ordine. Uno stato di 'Disponibile' significa che la produzione può procedere senza ritardi legati ai materiali, mentre 'Carenza' indica un problema. Questo Perché è importante Evidenzia direttamente i ritardi causati da carenze di materiali, che è una causa radice comune e significativa delle deviazioni del programma di produzione. Dove trovare Questo non è un singolo campo memorizzato. È il risultato di un controllo di disponibilità (controllo ATP). I risultati sono spesso visibili nella transazione CO02 o nel controllo di disponibilità collettivo COHV. Lo stato stesso (ad esempio, MACM - Materiale impegnato) potrebbe essere registrato. Consultare la documentazione SAP ECC PP. Esempi DisponibileCarenzaParzialmente DisponibileNon Verificato | |||
| Gruppo di Pianificazione PlannerGroup | Il gruppo di responsabili MRP o pianificatori di produzione responsabili dell'ordine. | ||
| Descrizione Il Gruppo Pianificatore è un elemento organizzativo che rappresenta un gruppo di individui responsabili della pianificazione e gestione di un set specifico di materiali o ordini di produzione. L'assegnazione degli ordini ai gruppi pianificatori aiuta a distribuire il carico di lavoro e a stabilire una chiara responsabilità. Nel Process Mining, questo attributo consente l'analisi delle prestazioni basata sul team di pianificazione responsabile. Può aiutare a rispondere a domande come 'Quale gruppo pianificatore riscontra il maggior numero di deviazioni di programma?' o 'C'è una differenza nei tempi di ciclo per gli ordini gestiti da gruppi diversi?'. Ciò fornisce insight per il bilanciamento del carico di lavoro e l'identificazione delle esigenze di formazione. Perché è importante Consente di segmentare l'analisi delle prestazioni per team responsabile, aiutando a identificare le differenze nell'efficacia della pianificazione e nel carico di lavoro. Dove trovare Questo è il Controllore MRP, che si trova nella tabella SAP AFKO, campo DISPO. Esempi 001002P01P02 | |||
| Priorità di Produzione ProductionPriority | Una classificazione che indica l'urgenza o la priorità dell'ordine di produzione. | ||
| Descrizione La Priorità di Produzione è un campo utilizzato per segnalare l'importanza relativa di un ordine di produzione. Questo consente ai pianificatori della produzione e al personale di reparto di dare priorità al proprio lavoro, garantendo che gli ordini critici siano gestiti con urgenza attraverso il processo. L'analisi di questo attributo aiuta a valutare l'efficacia del sistema di priorità. Confrontando i tempi di ciclo degli ordini ad alta priorità con quelli a bassa priorità, un'azienda può determinare se gli ordini urgenti vengono effettivamente elaborati più velocemente. In caso contrario, potrebbe indicare problemi di comunicazione, allocazione delle risorse o il processo di esecuzione complessivo. Perché è importante Aiuta a valutare se il sistema di gestione delle priorità è efficace, assicurando che gli ordini ad alta urgenza siano completati più velocemente di quelli standard. Dove trovare Questo spesso non è un campo standard nell'intestazione dell'ordine di produzione. Potrebbe essere un campo personalizzato, derivato dalla priorità dell'ordine di vendita, o parte di un sistema di classificazione. Consultare la documentazione SAP ECC PP o la configurazione del sistema. Esempi ElevatoMedioBassoUrgenza | |||
| Stato di Rispetto delle Scadenze ScheduleAdherenceStatus | Un indicatore che segnala se l'ordine di produzione è stato completato entro la sua data di fine pianificata. | ||
| Descrizione Lo Stato di Rispetto delle Scadenze è un attributo calcolato, booleano o categorico, che offre una visione semplice e immediata delle prestazioni di puntualità. È derivato confrontando la 'Data di Fine Effettiva' con la 'Data di Fine Pianificata'. Se la fine effettiva è uguale o antecedente alla fine pianificata, lo stato è 'Puntuale'; altrimenti, è 'In Ritardo'. Questo attributo semplifica l'analisi e la visualizzazione nelle dashboard. Consente un facile filtraggio e aggregazione per calcolare il KPI 'Tasso di Rispetto delle Scadenze' e per identificare i principali fattori di ordini in ritardo, come prodotti specifici, stabilimenti o carenze di materiale. Perché è importante Semplifica l'analisi delle prestazioni categorizzando gli ordini come 'In Tempo' o 'In Ritardo', rendendo facile misurare e riportare sull'affidabilità della pianificazione. Dove trovare Campo calcolato: SE('ActualEndDate' <= 'PlannedEndDate', 'In Tempo', 'In Ritardo'). Esempi PuntualeIn Ritardo | |||
| Stato Ordine di Produzione ProductionOrderStatus | Lo stato di elaborazione corrente dell'ordine di produzione, come Creato, Rilasciato o Tecnicamente Completato. | ||
| Descrizione Lo Stato dell'Ordine di Produzione indica la fase corrente dell'ordine nel suo ciclo di vita. SAP utilizza un sistema di codici di stato per gestire la progressione dell'ordine, ad esempio, CRTD (Creato), REL (Rilasciato), CNF (Confermato), DLV (Consegnato) e TECO (Tecnicamente Completato). L'analisi del tempo trascorso nei diversi stati è una parte fondamentale del Process Mining per la produzione. Aiuta a identificare quanto tempo gli ordini attendono il rilascio dopo la creazione o quanto tempo rimangono in uno stato parzialmente consegnato. Il monitoraggio dei cambiamenti di stato come attività fornisce una visione di alto livello del flusso di processo. Perché è importante Fornisce un'istantanea dell'avanzamento di un ordine e aiuta a identificare i colli di bottiglia in cui gli ordini rimangono bloccati per periodi prolungati. Dove trovare 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. La lettura dello stato viene spesso effettuata tramite moduli funzione come STATUS_TEXT_EDIT. Esempi CRTD (Creato)REL (Rilasciato)DLV (Consegnato)TECO (Tecnicamente Completato) | |||
| Tempo di Ciclo CycleTime | Il tempo totale trascorso dal rilascio dell'ordine di produzione al suo completamento finale. | ||
| Descrizione Il Tempo di Ciclo è un indicatore chiave di performance che misura la durata della fase di esecuzione della produzione. Viene calcolato come la differenza di tempo tra l' Questa metrica calcolata è fondamentale per valutare l'efficienza produttiva. Analizzare le tendenze del tempo di ciclo e confrontarle tra prodotti, stabilimenti o periodi di tempo aiuta a identificare opportunità per ridurre i Perché è importante Misura direttamente l'efficienza e la velocità del processo di esecuzione della produzione, evidenziando le opportunità per la riduzione del Dove trovare Campo calcolato: Esempi 3 giorni e 4 ore10 ore 15 minuti7 giorni 0 ore1 giorno 12 ore | |||
| Utente Responsabile ResponsibleUser | L'ID utente della persona che ha creato o modificato per ultimo l'ordine di produzione. | ||
| Descrizione L'Utente Responsabile identifica l'account utente SAP associato agli eventi chiave nel ciclo di vita dell'ordine di produzione, come la creazione o il rilascio. Questo fornisce responsabilità e tracciabilità per le azioni intraprese all'interno del sistema. Nel Process Mining, questo attributo viene utilizzato per analizzare le variazioni di processo basate sul comportamento dell'utente. Può aiutare a identificare gli utenti che potrebbero richiedere formazione aggiuntiva o che seguono procedure non standard. Supporta anche l'analisi delle risorse mostrando come il lavoro è distribuito tra i diversi utenti. Perché è importante Collega le attività di processo a individui specifici, consentendo l'analisi delle prestazioni a livello utente e promuovendo la responsabilità. Dove trovare L'utente che ha creato l'ordine si trova in AUFK-ERNAM. L'utente che lo ha modificato per ultimo si trova in AUFK-AENAM. I documenti di modifica (CDHDR-USERNAME) forniscono una cronologia degli utenti per modifiche specifiche. Esempi JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
| Varianza di Quantità QuantityVariance | La differenza tra la quantità di produzione pianificata e la quantità consegnata effettiva. | ||
| Descrizione La Varianza Quantità è una metrica calcolata che misura la deviazione della produzione effettiva dal piano iniziale. È calcolata come 'Quantità Consegnata' meno 'Quantità Pianificata'. Una varianza positiva indica sovrapproduzione, mentre una varianza negativa indica sottoproduzione o perdita di resa. Questo attributo è essenziale per la dashboard 'Output di Produzione Pianificato vs Reale' e il KPI corrispondente. L'analisi della varianza aiuta a identificare problemi legati alla resa di produzione, ai tassi di scarto o agli errori di immissione dati. Fornisce una misura diretta dell'affidabilità del processo di produzione nel raggiungimento dei suoi obiettivi di output. Perché è importante Quantifica l'accuratezza dell'output di produzione rispetto ai piani, evidenziando potenziali problemi di resa, scarto o controllo del processo. Dove trovare Campo calcolato: 'DeliveredQuantity' - 'PlannedQuantity'. Esempi -2-5005 | |||
Attività di Pianificazione della Produzione
| Activity | Descrizione | ||
|---|---|---|---|
| Conferma Finale Registrata | Questa attività indica che tutte le operazioni per l'ordine di produzione sono completate da una prospettiva di reparto. È contrassegnata da una conferma finale per l'ultima operazione. | ||
| Perché è importante Questa milestone segna la fine delle attività di produzione fisica. La durata dalla prima all'ultima conferma rappresenta il tempo effettivo di esecuzione della produzione. Dove trovare Questo viene catturato quando lo stato di sistema 'CNF' (I0009, Confermato) è impostato. Questo è tipicamente attivato dall'inserimento della conferma finale nella tabella AFRU (AFRU-AUERU = 'X'). Il cambiamento di stato viene registrato in JCDS. Acquisisci Identifichi il Tipo di evento explicit | |||
| Ordine di Produzione Creato | Questo evento segna la creazione di un nuovo ordine di produzione, tipicamente avviato da un'esecuzione di pianificazione o un inserimento manuale. È catturato esplicitamente quando un nuovo record d'ordine viene salvato nel sistema, ricevendo lo stato 'CRTD' (Creato). | ||
| Perché è importante Questo è il punto di partenza per ogni caso di ordine di produzione. L'analisi del tempo da questo evento al rilascio aiuta a identificare i ritardi nella pianificazione pre-produzione e nella configurazione amministrativa. Dove trovare Questo evento è catturato dalla data (AUFK-ERDAT) e ora (AUFK-ERZET) di creazione dell'ordine di produzione. Lo stato di sistema 'CRTD' (I0001) viene assegnato, registrato nelle tabelle JEST e JCDS collegate al numero oggetto dell'ordine (AUFK-OBJNR). Acquisisci Monitorare il timestamp 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. Una volta rilasciato, le prenotazioni di materiale diventano attive e le attività di produzione come l'emissione merci e le conferme possono iniziare. | ||
| Perché è importante Questa è una milestone critica che rappresenta il passaggio dalla pianificazione all'esecuzione. Il tempo tra la creazione e il rilascio è un indicatore chiave dell'efficienza della pianificazione. Dove trovare Catturato esplicitamente quando lo stato di sistema 'REL' (I0002) viene assegnato all'ordine di produzione. La modifica viene registrata con un Acquisisci Identifichi il Tipo di evento explicit | |||
| Ordine Tecnicamente Completato | Questo è un passaggio di chiusura amministrativa che finalizza un ordine di produzione da un punto di vista logistico. Previene ulteriori movimenti di materiale o conferme e consente la liquidazione finanziaria. | ||
| Perché è importante Questo è il punto finale definitivo per il ciclo di vita dell'ordine nella logistica. L'analisi di questo evento aiuta a comprendere la durata totale del processo, inclusi i compiti amministrativi post-produzione. Dove trovare Catturato esplicitamente quando lo stato di sistema 'TECO' (I0045, Tecnicamente Completato) viene assegnato all'ordine. La modifica viene registrata con un Acquisisci Identifichi il Tipo di evento explicit | |||
| Prima Conferma Registrata | Questo evento indica l'inizio del lavoro di produzione effettivo sull'ordine. È catturato quando la prima conferma di tempo per qualsiasi operazione nell'ordine di produzione viene inserita nel sistema. | ||
| Perché è importante Questa attività fornisce l'ora di inizio effettiva della produzione, essenziale per misurare il rispetto delle scadenze e identificare i ritardi tra l'allocazione delle risorse e l'inizio del lavoro. Dove trovare Questo viene inferito trovando la data di contabilizzazione più vecchia (AFRU-BUDAT) tra tutte le conferme registrate per l'ordine nella tabella AFRU. La prima voce segna l'inizio della produzione fisica. Acquisisci Identifichi il primo record di conferma per l'ordine basato sulla data di registrazione nella tabella AFRU. Tipo di evento inferred | |||
| Ricevimento merce registrato | Questo evento registra il ricevimento del prodotto finito dall'ordine di produzione in magazzino. Significa che i beni fabbricati sono ora disponibili per la spedizione o per ulteriori lavorazioni. | ||
| Perché è importante Questa è una milestone di completamento chiave, che rappresenta l'output finale del processo di produzione. Il tempo dal rilascio al ricevimento merci è il lead time totale di produzione. Dove trovare Registrato come documento materiale nelle tabelle MKPF/MSEG con un tipo di movimento, tipicamente '101', che fa riferimento all'ordine di produzione. Lo stato di sistema 'DLV' (I0012, Consegnato) viene inoltre impostato sull'ordine. Acquisisci Catturi la data di registrazione dal documento materiale di tipo di movimento '101' o il Tipo di evento explicit | |||
| Compensazione Ordine Eseguita | Rappresenta la liquidazione finanziaria dell'ordine di produzione, dove i costi raccolti vengono allocati agli oggetti di costo appropriati. Questo è il passaggio finale nel ciclo di vita dell'ordine da una prospettiva di controllo. | ||
| Perché è importante Sebbene sia un'attività finanziaria, i ritardi nella liquidazione possono indicare problemi con la rendicontazione dei costi o l'accuratezza dei dati degli ordini. Segna la vera chiusura finanziaria del processo di produzione. Dove trovare Questo può essere inferito quando il saldo dell'ordine diventa zero o quando lo stato di sistema 'SETC' (I0076, Regola di liquidazione creata) è seguito da log di esecuzione della liquidazione. La liquidazione effettiva viene registrata nelle tabelle di controllo come COSP e COSS. Acquisisci Inferire dai documenti di liquidazione collegati all'ordine nelle tabelle CO o dall'attivazione dello stato 'SETC'. Tipo di evento inferred | |||
| Conferma Intermedia Registrata | Rappresenta un aggiornamento dell'avanzamento di un ordine di produzione tramite una conferma parziale di un'operazione. Questo è comune per ordini di lunga durata dove è necessario tracciare l'avanzamento prima del completamento finale. | ||
| Perché è importante L'analisi delle conferme intermedie aiuta a monitorare l'avanzamento dei cicli di produzione lunghi e a identificare i colli di bottiglia all'interno del processo produttivo stesso, non solo all'inizio o alla fine. Dove trovare Catturato dai record di conferma nella tabella AFRU che non sono contrassegnati come conferma finale. Ogni voce ha una data di registrazione (AFRU-BUDAT) e un'ora. Acquisisci Estragga tutti i record di conferma da AFRU che non sono contrassegnati come conferma finale per un'operazione. Tipo di evento explicit | |||
| Dati Ordine Modificati | Questo evento cattura modifiche significative apportate a un ordine di produzione dopo la sua creazione iniziale, come cambiamenti alla quantità pianificata, alle date o alla distinta base (BOM). Queste modifiche sono registrate dal sistema per scopi di audit. | ||
| Perché è importante Il monitoraggio di questi cambiamenti aiuta a identificare l'instabilità del processo e le frequenti ri-pianificazioni. Un'alta frequenza di modifiche può indicare una pianificazione iniziale inadeguata, volatilità della domanda o imprecisioni nei dati. Dove trovare Le modifiche ai campi chiave in tabelle come AFKO (intestazione ordine) e AFPO (voce d'ordine) vengono registrate nelle tabelle dei documenti di modifica CDHDR (header) e CDPOS (item). Ogni modifica rilevante può essere estratta come attività. Acquisisci Estragga le voci del Tipo di evento explicit | |||
| Disponibilità Materiali Verificata | Rappresenta l'esecuzione di un controllo per determinare se tutti i componenti richiesti per l'ordine di produzione sono disponibili. Questo può essere un controllo automatico alla creazione o al rilascio dell'ordine, o un'azione attivata manualmente. | ||
| Perché è importante Questa attività è cruciale per comprendere i ritardi causati da carenze di materiale. Controlli frequenti o lunghe durate fino alla disponibilità del materiale possono indicare problemi di supply chain o di gestione dell'inventario. Dove trovare Il sistema imposta uno stato come 'MACM' (materiale impegnato) o 'MSPT' (carenza materiale). L'esecuzione può essere inferita dal timestamp di questo cambiamento di stato nelle tabelle JEST/JCDS. I risultati sono visibili nell'intestazione dell'ordine. Acquisisci Inferire dal Tipo di evento inferred | |||
| Ordine Annullato | Questo evento indica che un ordine di produzione è stato annullato prima del completamento. Questo viene tipicamente fatto impostando uno stato specifico o un flag di cancellazione, impedendo qualsiasi ulteriore elaborazione. | ||
| Perché è importante Questo è un esito negativo che è importante tracciare. L'analisi degli ordini annullati può rivelare problemi con la previsione della domanda, l'accuratezza della pianificazione o la gestione dei dati anagrafici. Dove trovare Questo può essere inferito dall'assegnazione dello stato 'DLFL' (I0076, Flag di cancellazione) o di uno stato 'Annullato' specifico se configurato. La modifica viene registrata con un timestamp nella tabella JCDS. Acquisisci Identifichi il Tipo di evento inferred | |||
| Uscita merci contabilizzata | Questa attività rappresenta il prelievo di materiali componenti dall'inventario per essere utilizzati nell'ordine di produzione. Conferma che le materie prime o i semilavorati necessari sono stati preparati per la produzione. | ||
| Perché è importante Questo evento segna l'inizio del consumo di materiale. Ritardi tra il rilascio dell'ordine e l'emissione merci possono evidenziare problemi nella logistica di magazzino, nell'allestimento dei materiali o nell'accuratezza dell'inventario. Dove trovare Registrato come documenti materiale nelle tabelle MKPF (header) e MSEG (item) con un tipo di movimento, tipicamente '261', che fa riferimento al numero dell'ordine di produzione (MSEG-AUFNR). Acquisisci Catturi la data di registrazione (MKPF-BUDAT) dei documenti materiali con tipo di movimento '261' collegati all'ordine. Tipo di evento explicit | |||
Guide all'Estrazione
Fasi
- Creare un InfoSet in SAP Query: Utilizzi il codice di transazione
SQ02. Crei un nuovo InfoSet, ad esempio,ZPP_EVENTLOG. Selezioni l'opzione sorgentedati'Join di tabelle usando tabella di base'. UtilizziAUFK(Dati anagrafici ordine) come tabella di base iniziale. - Unire le Tabelle Richieste: Aggiunga le seguenti tabelle al join dell'InfoSet. Il sistema potrebbe proporre dei join, ma verifichi che siano corretti:
AUFKaAFKO(Dati di intestazione ordini PP):AUFK-AUFNR = AFKO-AUFNRAUFKaJEST(Stato oggetto individuale):AUFK-OBJNR = JEST-OBJNRJESTaJCDS(Documenti di modifica per stati di sistema/utente):JEST-OBJNR = JCDS-OBJNREJEST-STAT = JCDS-STAT. Nota: Questo join serve per leggere la cronologia delle modifiche di stato.AUFKaAFRU(Conferme di completamento ordine):AUFK-AUFNR = AFRU-AUFNRAUFKaMSEG(Segmento documento: Materiale):AUFK-AUFNR = MSEG-AUFNRMSEGaMKPF(Intestazione: Documento materiale):MSEG-MBLNR = MKPF-MBLNREMSEG-MJAHR = MKPF-MJAHR
- Definire Gruppi di Campi: Trascini i campi richiesti dalle tabelle sorgente nei gruppi di campi. Si assicuri che tutti i campi necessari per la query finale, come
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATE,MKPF-BUDAT, siano inclusi. - Aggiungere Campi Personalizzati e Codice: Nell'InfoSet, navighi alla scheda 'Extra'. Dovrà definire campi personalizzati per
ActivityName,EventTime,SourceSystemeLastDataUpdatee scrivere codice ABAP per popolarli in base alla logica definita nella sezione della query. La logica implicherà l'iterazione attraverso modifiche di stato, conferme e documenti materiali per generare un record distinto per ognieventdi business. Questo è il passo più complesso poiché sta trasformandodatitabellari in un formato dievent logall'interno delle sezioni di codice dell'InfoSet. - Generare e Salvare l'InfoSet: Una volta che tutti i join, i campi e il codice personalizzato sono a posto, salvi e generi l'InfoSet.
- Creare una Query SAP: Utilizzi il codice di transazione
SQ01. Crei una nuova query, ad esempio,ZPP_EVENTS, basata sull'InfoSet creato nei passi precedenti. - Progettare il Layout della Query: Nel designer della query, definisca i campi della schermata di selezione. Le buone selezioni includono Ordine di Produzione
AUFNR, StabilimentoWERKS, Tipo di OrdineAUARTe un intervallo di date per la creazione dell'ordineAUFK-ERDAT. - Definire l'Elenco di Output: Selezioni i campi da visualizzare nell'output del report. Questo elenco dovrebbe corrispondere esattamente alle colonne richieste per l'
event log, inclusi i campi personalizzati comeActivityNameeEventTime. - Eseguire la Query: Esegua la query con i criteri di selezione desiderati, ad esempio, per gli ultimi 3-6 mesi di ordini di produzione.
- Esportare i Dati: Una volta che la query visualizza i risultati, esporti l'elenco. Il formato più comune e affidabile per questo è 'Foglio di calcolo' o 'File locale' con formato tab-separated o CSV.
- Formattare per ProcessMind: Apra il file esportato in un programma di foglio di calcolo. Verifichi che le intestazioni delle colonne corrispondano agli
attributirichiesti (ProductionOrder,ActivityName,EventTime, ecc.) e si assicuri che il formato di data e ora perEventTimesia consistente e soddisfi lo standard richiesto (ad es. YYYY-MM-DD HH:MI:SS). Salvi il file come CSV per il caricamento.
Configurazione
- Join di InfoSet: Il cuore di questo metodo si basa su un complesso InfoSet che unisce tabelle di intestazione, stato, conferma e movimentazione materiali. I join principali sono
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUeAUFK->MSEG->MKPF. Join errati o inefficienti possono portare a prestazioni scarse o a dati inaccurati. - Criteri di Selezione: È fondamentale definire un intervallo di selezione gestibile per evitare problemi di prestazioni del sistema. I campi di selezione chiave nella schermata di avvio della query dovrebbero includere:
- Stabilimento di Produzione (
AUFK-WERKS) - Tipo di Ordine di Produzione (
AUFK-AUART) - Data di Creazione Ordine (
AUFK-ERDAT): Si consiglia di estrarre dati per un periodo mobile di 3-6 mesi per mantenere la dimensione del dataset gestibile.
- Stabilimento di Produzione (
- Stati del Sistema: La logica per identificare
eventicome 'Creato', 'Rilasciato', 'Tecnicamente Completato' e 'Annullato' dipende da codici di stato di sistema specifici (ad es. I0001, I0002, I0045, I0047). Questi sono generalmente standard tra i sistemi SAP ma dovrebbero essere verificati. - Tipi di Movimento:
Eventicome 'Uscita Merci' e 'Entrata Merci' sono identificati dai loro specifici Tipi di Movimento (MSEG-BWART), tipicamente '261' e '101' rispettivamente. Confermare che questi valori siano allineati alla configurazione della sua organizzazione. - Autorizzazioni: L'utente che esegue la query necessita dell'autorizzazione per accedere alle transazioni
SQ01,SQ02eSQ03, nonché dell'accesso in visualizzazione a tutte le tabelle sottostanti (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF).
a 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'; Fasi
- Stabilire l'Accesso al Database: Ottenga le credenziali di sola lettura per il database SAP ECC sottostante. Avrà bisogno dell'indirizzo del server, della porta, del nome del database, del nome utente e della password. Questo accesso è essenziale e deve essere coordinato con i suoi team SAP Basis e di amministrazione del database.
- Identificare lo Schema SAP: Determini lo schema del database corretto in cui sono archiviate le tabelle SAP. Questo è spesso
SAPSR3o un nome simile specifico del sistema. Dovrà sostituire il placeholder[Your SAP Schema]nella query con questo valore. - Preparare la Query SQL: Copi la query SQL completa fornita nella sezione
query. Questa query è progettata per estrarre tutte le attività specificate in un singolo formato dievent log. - Configurare i Parametri della Query: Prima dell'esecuzione, deve modificare i placeholder all'interno della query. Imposti
[Start Date]e[End Date]per definire l'intervallo di tempo per l'estrazione. È anche altamente consigliabile filtrare per stabilimento di produzione (WERKS) o tipo di ordine (AUART) per limitare il volume deidati. - Connettersi ed Eseguire: Utilizzi un client SQL standard, come DBeaver, SAP HANA Studio o uno script personalizzato (Python, Java), per connettersi al database SAP utilizzando le credenziali del passo 1.
- Eseguire la Query: Incolli la query SQL configurata nel suo client e la esegua. A seconda dell'intervallo di date e della dimensione del sistema, questo potrebbe richiedere diversi minuti per essere completato.
- Rivedere i Risultati Preliminari: Una volta completata la query, ispezioni brevemente le prime centinaia di righe per assicurarsi che colonne come
ProductionOrder,ActivityNameeEventTimesiano popolate correttamente e abbiano senso. - Esportare in CSV: Esporti l'intero set di risultati dal suo client SQL in un file CSV. Si assicuri che il file utilizzi la codifica UTF-8 per prevenire problemi di caratteri.
- Finalizzare il CSV per il Caricamento: Apra il file CSV e verifichi che le intestazioni delle colonne corrispondano agli
attributirichiesti (ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate, ecc.). Si assicuri che la colonnaEventTimesia formattata in modo consistente, ad esempioYYYY-MM-DD HH:MI:SS. - Caricare su ProcessMind: Il file CSV preparato è ora pronto per essere caricato sulla piattaforma ProcessMind per l'analisi.
Configurazione
- Schema del Database: Deve specificare lo schema SAP in cui risiedono le sue tabelle di pianificazione della produzione. Sostituisca il placeholder
[Your SAP Schema]nella query con il nome corretto per il suo ambiente, ad esempioSAPSR3. - Intervallo di Date: Il filtro per un intervallo di date specifico è fondamentale per le prestazioni. La query filtra in base alla data di creazione dell'ordine (
AUFK.ERDAT). Si consiglia di iniziare con un periodo recente di 3-6 mesi per garantire un volume di dati gestibile. - Tipo di Ordine di Produzione: Per focalizzare l'analisi, filtri la query sul campo del tipo di ordine di produzione (
AUFK.AUART). Ciò le consente di includere o escludere tipi specifici come ordini di produzione standard, ordini di processo o ordini di rilavorazione. - Stabilimento di Produzione: È fortemente consigliabile filtrare per uno o più stabilimenti di produzione (
AFKO.WERKS). L'estrazione di dati per tutti gli stabilimenti contemporaneamente può essere molto intensiva in termini di risorse. - Accesso al Database: Questo metodo richiede un utente del database con, al minimo, permessi di lettura sulle seguenti tabelle:
AUFK,AFKO,JCDS,JEST,AFRU,MSEG,MKPF. L'accesso diretto al database non è standard per tutti gli utenti SAP e richiede un'autorizzazione speciale.
a 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'; Fasi
- Creare un InfoSet in SAP Query: Utilizzi il codice di transazione
SQ02. Crei un nuovo InfoSet, ad esempio,ZPP_EVENTLOG. Selezioni l'opzione sorgentedati'Join di tabelle usando tabella di base'. UtilizziAUFK(Dati anagrafici ordine) come tabella di base iniziale. - Unire le Tabelle Richieste: Aggiunga le seguenti tabelle al join dell'InfoSet. Il sistema potrebbe proporre dei join, ma verifichi che siano corretti:
AUFKaAFKO(Dati di intestazione ordini PP):AUFK-AUFNR = AFKO-AUFNRAUFKaJEST(Stato oggetto individuale):AUFK-OBJNR = JEST-OBJNRJESTaJCDS(Documenti di modifica per stati di sistema/utente):JEST-OBJNR = JCDS-OBJNREJEST-STAT = JCDS-STAT. Nota: Questo join serve per leggere la cronologia delle modifiche di stato.AUFKaAFRU(Conferme di completamento ordine):AUFK-AUFNR = AFRU-AUFNRAUFKaMSEG(Segmento documento: Materiale):AUFK-AUFNR = MSEG-AUFNRMSEGaMKPF(Intestazione: Documento materiale):MSEG-MBLNR = MKPF-MBLNREMSEG-MJAHR = MKPF-MJAHR
- Definire Gruppi di Campi: Trascini i campi richiesti dalle tabelle sorgente nei gruppi di campi. Si assicuri che tutti i campi necessari per la query finale, come
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATE,MKPF-BUDAT, siano inclusi. - Aggiungere Campi Personalizzati e Codice: Nell'InfoSet, navighi alla scheda 'Extra'. Dovrà definire campi personalizzati per
ActivityName,EventTime,SourceSystemeLastDataUpdatee scrivere codice ABAP per popolarli in base alla logica definita nella sezione della query. La logica implicherà l'iterazione attraverso modifiche di stato, conferme e documenti materiali per generare un record distinto per ognieventdi business. Questo è il passo più complesso poiché sta trasformandodatitabellari in un formato dievent logall'interno delle sezioni di codice dell'InfoSet. - Generare e Salvare l'InfoSet: Una volta che tutti i join, i campi e il codice personalizzato sono a posto, salvi e generi l'InfoSet.
- Creare una Query SAP: Utilizzi il codice di transazione
SQ01. Crei una nuova query, ad esempio,ZPP_EVENTS, basata sull'InfoSet creato nei passi precedenti. - Progettare il Layout della Query: Nel designer della query, definisca i campi della schermata di selezione. Le buone selezioni includono Ordine di Produzione
AUFNR, StabilimentoWERKS, Tipo di OrdineAUARTe un intervallo di date per la creazione dell'ordineAUFK-ERDAT. - Definire l'Elenco di Output: Selezioni i campi da visualizzare nell'output del report. Questo elenco dovrebbe corrispondere esattamente alle colonne richieste per l'
event log, inclusi i campi personalizzati comeActivityNameeEventTime. - Eseguire la Query: Esegua la query con i criteri di selezione desiderati, ad esempio, per gli ultimi 3-6 mesi di ordini di produzione.
- Esportare i Dati: Una volta che la query visualizza i risultati, esporti l'elenco. Il formato più comune e affidabile per questo è 'Foglio di calcolo' o 'File locale' con formato tab-separated o CSV.
- Formattare per ProcessMind: Apra il file esportato in un programma di foglio di calcolo. Verifichi che le intestazioni delle colonne corrispondano agli
attributirichiesti (ProductionOrder,ActivityName,EventTime, ecc.) e si assicuri che il formato di data e ora perEventTimesia consistente e soddisfi lo standard richiesto (ad es. YYYY-MM-DD HH:MI:SS). Salvi il file come CSV per il caricamento.
Configurazione
- Join di InfoSet: Il cuore di questo metodo si basa su un complesso InfoSet che unisce tabelle di intestazione, stato, conferma e movimentazione materiali. I join principali sono
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUeAUFK->MSEG->MKPF. Join errati o inefficienti possono portare a prestazioni scarse o a dati inaccurati. - Criteri di Selezione: È fondamentale definire un intervallo di selezione gestibile per evitare problemi di prestazioni del sistema. I campi di selezione chiave nella schermata di avvio della query dovrebbero includere:
- Stabilimento di Produzione (
AUFK-WERKS) - Tipo di Ordine di Produzione (
AUFK-AUART) - Data di Creazione Ordine (
AUFK-ERDAT): Si consiglia di estrarre dati per un periodo mobile di 3-6 mesi per mantenere la dimensione del dataset gestibile.
- Stabilimento di Produzione (
- Stati del Sistema: La logica per identificare
eventicome 'Creato', 'Rilasciato', 'Tecnicamente Completato' e 'Annullato' dipende da codici di stato di sistema specifici (ad es. I0001, I0002, I0045, I0047). Questi sono generalmente standard tra i sistemi SAP ma dovrebbero essere verificati. - Tipi di Movimento:
Eventicome 'Uscita Merci' e 'Entrata Merci' sono identificati dai loro specifici Tipi di Movimento (MSEG-BWART), tipicamente '261' e '101' rispettivamente. Confermare che questi valori siano allineati alla configurazione della sua organizzazione. - Autorizzazioni: L'utente che esegue la query necessita dell'autorizzazione per accedere alle transazioni
SQ01,SQ02eSQ03, nonché dell'accesso in visualizzazione a tutte le tabelle sottostanti (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF).
a 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';