Il Suo Template dei dati di pianificazione della produzione
Il Suo Template dei dati di 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 | Il nome dell’evento aziendale o di sistema verificatosi in un determinato momento per un ordine di produzione. | ||
| Descrizione Il nome dell’attività descrive una fase specifica o una modifica di stato all’interno del processo di pianificazione della produzione. Questi eventi vengono estratti dai registri delle modifiche, dagli aggiornamenti di stato e dai record 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 base della mappa del processo e consente agli analisti di visualizzare la sequenza degli eventi, individuare le varianti del processo e identificare colli di bottiglia o cicli di rilavorazione. La chiarezza e il livello di dettaglio dei nomi delle attività sono fondamentali per creare un modello di processo accurato e utile, che rifletta la realtà operativa. Perché è importante Definisce le fasi della mappa del processo, rendendo possibile visualizzare, analizzare e comprendere il Workflow produttivo. Dove reperirlo Generato da diverse fonti, tra cui le modifiche di stato nelle tabelle JEST/JSTO, i log delle transazioni e i documenti di modifica in CDHDR/CDPOS. Esempi Ordine di produzione rilasciatoPrelievo dei materiali registratoConferma finale registrataOrdine completato tecnicamente | |||
| Ora dell’evento EventTime | Il timestamp preciso che indica quando si è verificata l’attività. | ||
| Descrizione L’ora dell’evento registra la data e l’ora in cui una specifica attività è stata eseguita o uno stato è stato registrato nel sistema. Questo timestamp è fondamentale per tutte le analisi di processo basate sul tempo, inclusi il calcolo dei tempi di ciclo, dei tempi di attesa e della durata complessiva del processo. Timestamp accurati 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 le prestazioni rispetto ai programmi o agli accordi sui livelli di servizio. Nel contesto della pianificazione della produzione, aiutano a comprendere quanto tempo richiede ogni fase della pianificazione e dell’esecuzione. Perché è importante Questo Attributo fornisce la sequenza cronologica degli eventi, essenziale per calcolare le durate, analizzare le prestazioni e individuare i colli di bottiglia. Dove reperirlo Derivato da diversi campi di data e ora associati alle transazioni e alle modifiche di stato, come BUDAT (Posting Date) dei documenti materiali o i timestamp 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 | L’identificativo univoco di un ordine di produzione, che funge da identificativo principale del caso per il processo di pianificazione ed esecuzione della produzione. | ||
| Descrizione Il numero dell’ordine di produzione è una chiave alfanumerica univoca assegnata a ciascun ordine di produzione in SAP ECC PP. Funge da oggetto centrale che collega tutte le attività correlate, dalla creazione e pianificazione fino all’esecuzione e al regolamento finale. Nel Process Mining, questo Attributo è essenziale per raggruppare tutti gli eventi appartenenti a una singola esecuzione produttiva. Consente di analizzare end-to-end l’intero ciclo di vita di un ordine di produzione, monitorandone l’avanzamento, misurando i tempi di ciclo e individuando eventuali deviazioni dal processo standard. Analizzare i processi per ordine di produzione offre una visione chiara di come vengono evase le singole richieste di produzione. Perché è importante È l’identificativo centrale che collega tutti gli eventi di processo correlati, consentendo di ricostruire e analizzare ogni percorso produttivo dall’inizio alla fine. Dove reperirlo Questo Attributo si trova nella tabella SAP AUFK, campo AUFNR. Esempi 1000345100034610003471000348 | |||
| Sistema di origine SourceSystem | Identifica il sistema specifico dal quale 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 una combinazione di piattaforme legacy e moderne, questo campo è fondamentale per la tracciabilità e il contesto dei dati. Ai fini dell’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 per isolare i dati durante progetti di consolidamento che coinvolgono più sistemi. Perché è importante Fornisce un contesto essenziale sull’origine dei dati, soprattutto negli ambienti con più istanze SAP o sistemi integrati. Dove reperirlo Viene generalmente aggiunto durante il processo di estrazione dei dati, spesso derivandolo dall’ID del sistema SAP (SY-SYSID). Esempi ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Ultimo aggiornamento dei dati LastDataUpdate | Il timestamp che indica quando i dati relativi a questo evento sono stati aggiornati o estratti l’ultima volta. | ||
| Descrizione Questo Attributo registra la data e l’ora in cui i dati sono stati acquisiti dal sistema di origine e trasferiti nello strumento di Process Mining. Non rappresenta un evento aziendale, ma un timestamp tecnico utilizzato per la gestione dei dati. Il suo scopo principale è garantire l’aggiornamento dei dati e aiutare amministratori e analisti a comprenderne la recenza. È fondamentale per verificare che l’analisi del processo si basi su informazioni aggiornate, soprattutto durante il monitoraggio delle attività in corso. Perché è importante Conferma l’aggiornamento dei dati, assicurando che le analisi si basino sulle informazioni più recenti disponibili. Dove reperirlo Questo valore viene generalmente generato e registrato dallo strumento o dallo script di estrazione, trasformazione e caricamento dei dati (ETL) durante l’acquisizione dei dati. Esempi 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Codice prodotto ProductCode | L’identificativo univoco del materiale o del prodotto da fabbricare. | ||
| Descrizione Il codice prodotto, o 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 al calcolo dei costi. Nel Process Mining, filtrare o segmentare i dati per codice prodotto è fondamentale per comprendere i processi produttivi specifici di ciascun prodotto. Consente di rispondere a domande come: «Quali prodotti hanno i tempi di ciclo più lunghi?» oppure «Alcuni prodotti sono più soggetti a problemi di qualità o ritardi nei materiali?». Questa analisi è essenziale per la gestione del portafoglio prodotti e per individuare opportunità di standardizzazione o ottimizzazione del processo per specifici tipi di materiale. Perché è importante Consente di analizzare il processo per prodotto, evidenziando i materiali associati a inefficienze, ritardi o costi elevati. Dove reperirlo Si trova nella tabella SAP AFPO, campo MATNR. Esempi FG-123RM-45AHALB-7890CHEM-22 | |||
| Data di fine effettiva ActualEndDate | Il timestamp dell’ultima attività produttiva, che indica il completamento effettivo dell’ordine. | ||
| Descrizione La data di fine effettiva è il timestamp dell’evento che indica il completamento di tutte le attività produttive di un ordine. In genere viene ricavata dal timestamp dell’evento «Conferma finale registrata» o dell’ultimo evento «Entrata merci registrata». Questo Attributo è essenziale per misurare il tempo totale del ciclo produttivo e analizzare il rispetto del programma. Confrontando la «Data di fine effettiva» con la «Data di fine pianificata» è possibile determinare se l’ordine è stato completato nei tempi previsti. Analizzare la durata compresa tra la «Data di inizio effettiva» e la «Data di fine effettiva» consente di ottenere il tempo reale 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 reperirlo Derivato dall'event log individuando il timestamp massimo delle attività chiave di completamento, come «Conferma finale registrata» o «Entrata merci registrata». Esempi 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| Data di inizio effettiva ActualStartDate | Il timestamp della prima attività produttiva registrata, che indica l’effettivo avvio dell’esecuzione. | ||
| Descrizione La data di inizio effettiva è il timestamp del primo evento che indica l’avvio del lavoro di produzione fisico. In genere viene ricavata dal primo evento di conferma della produzione o dal primo prelievo di materie prime per l’ordine. Questo Attributo derivato è fondamentale per l’analisi del rispetto del programma. Fornisce il punto di inizio effettivo da confrontare con la «Data di inizio pianificata», consentendo di calcolare con precisione gli scostamenti dell’orario di avvio. Comprendere il divario tra la data di inizio pianificata e quella effettiva aiuta a individuare i ritardi pre-produzione legati alla predisposizione dei materiali, alla configurazione delle macchine o alla disponibilità delle risorse. Perché è importante Fornisce il reale punto di avvio dell’esecuzione produttiva, consentendo di calcolare con precisione i ritardi di inizio e il tempo totale di attraversamento della produzione. Dove reperirlo Derivata dall’Event Log individuando, per ciascun ordine di produzione, il timestamp minimo di specifiche attività di esecuzione come «Prima conferma registrata» o «Prelievo dei materiali registrato». Esempi 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Quantità consegnata DeliveredQuantity | La quantità effettiva del prodotto fabbricata e ricevuta a magazzino. | ||
| Descrizione La quantità consegnata, nota anche come quantità di entrata merci, è la quantità totale di prodotto finito confermata come realizzata per un determinato ordine di produzione. Questo valore viene aggiornato quando si verificano eventi di «Entrata merci registrata». Questo Attributo è il corrispettivo della «Quantità pianificata» ed è essenziale per calcolare il KPI «Scostamento tra quantità pianificata ed effettiva». Fornisce una misura definitiva della produzione realizzata, consentendo agli analisti di individuare discrepanze dovute a scarti, perdite di resa o altri problemi produttivi. Il confronto delle quantità consegnate tra stabilimenti, prodotti o periodi evidenzia le aree caratterizzate da problemi di efficienza. Perché è importante Misura la produzione effettiva del processo produttivo, consentendo un confronto diretto con gli obiettivi pianificati per valutarne le prestazioni. Dove reperirlo Si trova nella tabella SAP AFPO, campo WEMNG (quantità di entrata merci). Esempi 984950751255 | |||
| Quantità pianificata PlannedQuantity | La quantità totale del prodotto programmata per essere realizzata nell’ordine. | ||
| Descrizione La quantità pianificata rappresenta la produzione obiettivo di un ordine di produzione, definita durante la fase di pianificazione. Questo valore costituisce il riferimento rispetto al quale viene misurata la produzione effettiva. Questo Attributo è fondamentale per i KPI relativi alle prestazioni produttive 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 sistemici legati alla sovrapproduzione o alla sottoproduzione. Analizzare questo valore è essenziale per comprendere quanto l’esecuzione della produzione sia allineata ai piani iniziali. Perché è importante Questo Attributo costituisce il riferimento per misurare lo scostamento della produzione e valutare l’accuratezza della pianificazione. Dove reperirlo Questo valore è disponibile nella tabella SAP AFKO, campo GAMNG (quantità totale dell’ordine). Esempi 1005000751250 | |||
| Stabilimento di produzione ProductionPlant | Lo stabilimento o la sede produttiva in cui viene eseguito l’ordine di produzione. | ||
| Descrizione Lo stabilimento di produzione è un’unità organizzativa fondamentale in SAP che rappresenta una struttura produttiva. Viene assegnato a ciascun ordine di produzione e determina il luogo fisico in cui si svolgeranno 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 i contesti in cui condividere le migliori pratiche. È una dimensione fondamentale per l’analisi delle cause principali nei Dashboard relativi alla produttività e all’utilizzo delle risorse. Perché è importante Consente di confrontare le prestazioni tra diverse sedi produttive, aiutando a individuare problemi specifici di uno stabilimento o migliori pratiche. Dove reperirlo Questo Attributo è memorizzato nella tabella SAP AUFK, campo WERKS. Esempi 100017102000DE01 | |||
| Data di fine pianificata PlannedEndDate | La data programmata entro la quale dovrebbe essere completata la produzione dell’ordine. | ||
| Descrizione La data di fine pianificata è la data obiettivo di completamento di un ordine di produzione, stabilita durante il processo di programmazione. Definisce l’intervallo temporale previsto per concludere tutte le attività produttive, incluse le conferme finali e l’entrata merci. Questa data è essenziale per calcolare il KPI «Tasso di rispetto del programma». Confrontando la «Data di fine pianificata» con l’ora effettiva di completamento, ad esempio il timestamp dell’attività «Entrata merci registrata» o «Conferma finale registrata», è possibile verificare se gli ordini vengono completati nei tempi previsti. Questa analisi aiuta a valutare l’affidabilità dei programmi di produzione e a individuare le cause principali delle consegne in ritardo. Perché è importante È il riferimento utilizzato per determinare se gli ordini di produzione vengono completati nei tempi previsti, con un impatto diretto sulla soddisfazione dei clienti e sull’affidabilità della pianificazione. Dove reperirlo È 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 | La data programmata per l’inizio della produzione dell’ordine. | ||
| Descrizione La data di inizio pianificata è un parametro fondamentale della programmazione, determinato durante la fase di pianificazione e schedulazione della produzione. Rappresenta la data obiettivo in cui dovrebbero iniziare le attività produttive dell’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 il timestamp 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 Costituisce il riferimento per misurare il rispetto del programma e individuare i ritardi nell’avvio dell’esecuzione produttiva. Dove reperirlo È 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 tutti i componenti necessari per l'ordine di produzione sono disponibili. | ||
| Descrizione Lo Stato di disponibilità dei materiali è un indicatore fondamentale della prontezza alla produzione. Viene determinato dal sistema verificando la disponibilità di tutti i materiali componenti necessari per l'ordine. Lo stato «Disponibile» indica che la produzione può procedere senza ritardi legati ai materiali, mentre «Carenza» segnala la presenza di un problema. Questo attributo è essenziale per la Dashboard «Analisi dell'impatto delle carenze di materiale». Analizzando il tempo durante il quale gli ordini rimangono in attesa a causa di una carenza, le aziende possono quantificare l'impatto dei problemi della supply chain sui programmi di produzione. Ciò aiuta a individuare i fornitori inaffidabili o i componenti problematici che causano frequentemente ritardi. Perché è importante Evidenzia direttamente i ritardi causati dalle carenze di materiale, una causa principale comune e significativa degli scostamenti dal programma di produzione. Dove reperirlo Non si tratta di un singolo campo memorizzato. È il risultato di un controllo di disponibilità, ovvero un controllo ATP. I risultati sono spesso visibili nella transazione CO02 o nel controllo collettivo della disponibilità COHV. Lo stato stesso, ad esempio MACM (Materiale impegnato), potrebbe essere registrato. Consulti la documentazione 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 responsabili della pianificazione e della gestione di uno specifico gruppo di materiali o ordini di produzione. L'assegnazione degli ordini ai gruppi di pianificazione contribuisce 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 il maggior numero di scostamenti dal programma?» oppure «I tempi di ciclo differiscono tra gli ordini gestiti da gruppi diversi?». In questo modo è possibile ottenere indicazioni utili per bilanciare il carico di lavoro e individuare le esigenze formative. 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 reperirlo Si tratta del responsabile MRP, disponibile 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 indicare l'importanza relativa di un ordine di produzione. Consente ai responsabili della programmazione e al personale di reparto di stabilire le priorità, assicurando che gli ordini critici avanzino più rapidamente nel 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 degli ordini a bassa priorità, l'azienda può verificare se gli ordini urgenti vengono effettivamente elaborati più rapidamente. In caso contrario, ciò può indicare problemi di comunicazione, allocazione delle risorse o esecuzione complessiva del processo. Perché è importante Aiuta a valutare l'efficacia del sistema di gestione delle priorità, assicurando che gli ordini più urgenti vengano completati prima di quelli standard. Dove reperirlo Spesso non è un campo standard dell'intestazione dell'ordine di produzione. Potrebbe essere un campo personalizzato, derivato dalla priorità dell'ordine di vendita o parte di un sistema di classificazione. Consulti la documentazione SAP ECC PP o la configurazione del sistema. Esempi AltaMediaBassaUrgente | |||
| Scostamento della quantità QuantityVariance | La differenza tra la quantità di produzione pianificata e la quantità effettivamente consegnata. | ||
| Descrizione Lo Scostamento della quantità è una metrica calcolata che misura la deviazione della produzione effettiva rispetto al piano iniziale. Si calcola come «Quantità consegnata» meno «Quantità pianificata». Uno scostamento positivo indica una sovrapproduzione, mentre uno negativo indica una produzione inferiore al previsto o una perdita di resa. Questo attributo è essenziale per la Dashboard «Produzione pianificata rispetto a quella effettiva» e per il relativo KPI. L'analisi dello scostamento aiuta a individuare problemi legati alla resa produttiva, ai tassi di scarto o a errori di inserimento dei dati. Fornisce una misura diretta dell'affidabilità del processo produttivo nel raggiungere gli obiettivi di output. Perché è importante Quantifica l'accuratezza dell'output produttivo rispetto al piano, evidenziando potenziali problemi di resa, scarti o controllo del processo. Dove reperirlo Campo calcolato: 'DeliveredQuantity' - 'PlannedQuantity'. Esempi -2-5005 | |||
| Stato del rispetto del programma ScheduleAdherenceStatus | Un indicatore che segnala se l'ordine di produzione è stato completato entro la data di fine pianificata. | ||
| Descrizione Lo Stato del rispetto del programma è un attributo booleano o categoriale calcolato, che offre una visione immediata delle prestazioni in termini di puntualità. Deriva dal confronto tra la «Data di fine effettiva» e la «Data di fine pianificata». Se la fine effettiva coincide con la fine pianificata o la precede, lo stato è «Puntuale»; in caso contrario, è «In ritardo». Questo attributo semplifica l'analisi e la visualizzazione nelle Dashboard. Consente di applicare facilmente filtri e aggregazioni per calcolare il KPI «Tasso di rispetto del programma» e individuare i principali fattori alla base degli ordini in ritardo, come prodotti, stabilimenti o carenze di materiale specifici. Perché è importante Semplifica l'analisi delle prestazioni classificando gli ordini come «Puntuali» o «In ritardo», così da misurare e comunicare facilmente l'affidabilità del programma. Dove reperirlo Campo calcolato: IF('ActualEndDate' <= 'PlannedEndDate', 'On-Time', 'Late'). Esempi In orarioIn ritardo | |||
| Stato dell'ordine di produzione ProductionOrderStatus | Lo stato di elaborazione corrente dell'ordine di produzione, ad esempio Creato, Rilasciato o Completato tecnicamente. | ||
| 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 l'avanzamento dell'ordine, ad esempio CRTD (Creato), REL (Rilasciato), CNF (Confermato), DLV (Consegnato) e TECO (Completato tecnicamente). L'analisi del tempo trascorso nei diversi stati è una componente fondamentale del Process Mining applicato alla produzione. Consente di individuare per quanto tempo gli ordini attendono il rilascio dopo la creazione o quanto a lungo rimangono in uno stato di consegna parziale. Il monitoraggio dei cambiamenti di stato come attività offre una visione di alto livello del flusso di processo. Perché è importante Fornisce una fotografia dell'avanzamento dell'ordine e aiuta a individuare i colli di bottiglia nei quali gli ordini rimangono bloccati per periodi prolungati. Dove reperirlo 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 eseguita tramite function module come STATUS_TEXT_EDIT. Esempi CRTD (Creato)REL (Rilasciato)DLV (Consegnato)TECO (Completato tecnicamente) | |||
| Utente responsabile ResponsibleUser | L'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 agli eventi chiave del ciclo di vita dell'ordine di produzione, come la creazione o il rilascio. Fornisce quindi responsabilità e tracciabilità per le azioni eseguite nel sistema. Nel Process Mining, questo attributo viene utilizzato per analizzare le variazioni del processo in base al comportamento degli utenti. Può aiutare a individuare gli utenti che potrebbero necessitare di ulteriore formazione o che seguono procedure non standard. Supporta inoltre l'analisi delle risorse, mostrando come il lavoro viene distribuito tra utenti diversi. Perché è importante Collega le attività di processo a persone specifiche, consentendo l'analisi delle prestazioni a livello di utente e promuovendo la responsabilità. Dove reperirlo 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 la cronologia 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 da una voce di conferma finale per l’ultima operazione. | ||
| Perché è importante Questa tappa segna la fine delle attività di produzione fisica. La durata compresa tra la prima e l’ultima conferma rappresenta il tempo effettivo di esecuzione della produzione. Dove reperirlo Viene acquisito quando lo stato di sistema «CNF» (I0009, Confirmed) viene impostato. In genere ciò avviene in seguito all’inserimento della conferma finale nella tabella AFRU (AFRU-AUERU = «X»). La modifica di stato viene registrata in JCDS. Acquisizione Individuare il timestamp in cui viene impostato lo stato «CNF» oppure trovare l’ultimo record di conferma in AFRU. Tipo di evento explicit | |||
| Entrata merci registrata | Questo evento registra l’entrata del prodotto finito dall’ordine di produzione nelle scorte. Indica che i prodotti fabbricati sono ora disponibili per la spedizione o per ulteriori lavorazioni. | ||
| Perché è importante Si tratta di una tappa fondamentale del completamento, che rappresenta il risultato finale del processo produttivo. Il tempo che intercorre tra il rilascio e l’entrata merci costituisce il tempo totale di attraversamento della produzione. Dove reperirlo Viene registrato come documento materiale nelle tabelle MKPF/MSEG con un tipo di movimento, generalmente «101», che fa riferimento all’ordine di produzione. Sull’ordine viene inoltre impostato lo stato di sistema «DLV» (I0012, Delivered). Acquisizione Acquisire la data di registrazione del documento materiale con tipo di movimento «101» oppure il timestamp della modifica dello stato «DLV». Tipo di evento explicit | |||
| Ordine completato tecnicamente | Si tratta di una fase amministrativa di chiusura che finalizza l’ordine di produzione dal punto di vista logistico. Impedisce ulteriori movimenti di materiali o conferme e consente il regolamento contabile. | ||
| Perché è importante Questo è il punto finale definitivo del ciclo di vita logistico dell’ordine. Analizzare questo evento aiuta a comprendere la durata complessiva del processo, incluse le attività amministrative successive alla produzione. Dove reperirlo Viene acquisito esplicitamente quando lo stato di sistema «TECO» (I0045, Technically Completed) viene assegnato all’ordine. La modifica viene registrata con un timestamp nella tabella JCDS. Acquisizione Individuare il timestamp in cui lo stato «TECO» diventa attivo per l’ordine in JCDS. Tipo di evento explicit | |||
| Ordine di produzione creato | Questo evento indica la creazione di un nuovo ordine di produzione, generalmente avviata da un’esecuzione di pianificazione o da un inserimento manuale. Viene acquisito esplicitamente quando il nuovo record dell’ordine viene salvato nel sistema e riceve lo stato «CRTD» (Created). | ||
| Perché è importante Questo è 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 i ritardi nella pianificazione pre-produzione e nella configurazione amministrativa. Dove reperirlo Questo evento viene acquisito dalla data di creazione (AUFK-ERDAT) e dall’ora (AUFK-ERZET) dell’ordine di produzione. Lo stato di sistema «CRTD» (I0001) viene assegnato e registrato nelle tabelle JEST e JCDS, collegate al numero oggetto dell’ordine (AUFK-OBJNR). Acquisizione 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 l’ordine, le prenotazioni dei materiali diventano attive e possono iniziare attività di produzione come il prelievo dei materiali e le conferme. | ||
| Perché è importante Si tratta di una tappa fondamentale, che rappresenta il passaggio dalla pianificazione all’esecuzione. Il tempo che intercorre tra la creazione e il rilascio è un indicatore importante dell’efficienza della pianificazione. Dove reperirlo Viene acquisito esplicitamente quando lo stato di sistema «REL» (I0002) viene assegnato all’ordine di produzione. La modifica viene registrata con un timestamp nella tabella JCDS, collegata al numero oggetto dell’ordine (AUFK-OBJNR). Acquisizione Individuare il timestamp in cui lo stato «REL» diventa attivo per l’ordine. Tipo di evento explicit | |||
| Prima conferma registrata | Questo evento indica l’inizio del lavoro effettivo di produzione sull’ordine. Viene acquisito quando nel sistema viene inserita la prima conferma temporale relativa a una qualsiasi operazione dell’ordine di produzione. | ||
| Perché è importante Questa attività fornisce 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 reperirlo L’evento viene dedotto individuando la prima data di registrazione (AFRU-BUDAT) tra tutte le conferme registrate per l’ordine nella tabella AFRU. La prima voce indica l’inizio della produzione fisica. Acquisizione Individuare il primo record 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 ciò avviene impostando uno stato specifico o un indicatore di eliminazione, impedendo qualsiasi ulteriore elaborazione. | ||
| Perché è importante Si tratta di 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 reperirlo L’evento può essere dedotto dall’assegnazione dello stato «DLFL» (I0076, Deletion flag) oppure di uno specifico stato «Canceled», se configurato. La modifica viene registrata con un timestamp nella tabella JCDS. Acquisizione Individuare il timestamp in cui viene impostato per l’ordine l’indicatore di eliminazione («DLFL») o uno stato di annullamento. Tipo di evento inferred | |||
| Conferma intermedia registrata | Rappresenta un aggiornamento dell’avanzamento di un ordine di produzione attraverso la conferma parziale di un’operazione. È una modalità comune per gli 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 reperirlo Viene acquisito dai record di conferma nella tabella AFRU che non sono contrassegnati come conferma finale. Ogni voce contiene una data (AFRU-BUDAT) e un’ora di registrazione. Acquisizione Estrarre tutti i record di conferma da AFRU che non sono contrassegnati come conferma finale di un’operazione. Tipo di evento explicit | |||
| Dati dell’ordine modificati | Questo evento acquisisce le modifiche significative apportate a un ordine di produzione dopo la sua creazione iniziale, come variazioni della quantità pianificata, delle date o della distinta base. Il sistema registra tali modifiche a fini di audit. | ||
| Perché è importante Monitorare queste modifiche aiuta a individuare l’instabilità del processo e le frequenti ripianificazioni. Un’elevata frequenza di variazioni può indicare una pianificazione iniziale inadeguata, volatilità della domanda o imprecisioni nei dati. Dove reperirlo Le modifiche ai campi principali di tabelle come AFKO (intestazione dell’ordine) e AFPO (riga dell’ordine) vengono registrate nelle tabelle dei documenti di modifica CDHDR (intestazione) e CDPOS (riga). Ogni modifica rilevante può essere estratta come attività. Acquisizione Estrarre le voci del registro delle modifiche dalle tabelle CDHDR e CDPOS per la classe oggetto dell’ordine di produzione. Tipo di evento explicit | |||
| Disponibilità dei materiali verificata | Rappresenta l’esecuzione di una verifica per determinare se tutti i componenti necessari per l’ordine di produzione sono disponibili. Può trattarsi di un controllo automatico eseguito alla creazione o al rilascio dell’ordine, oppure di un’azione avviata manualmente. | ||
| Perché è importante Questa attività è fondamentale per comprendere i ritardi causati dalla carenza di materiali. Verifiche frequenti o tempi prolungati prima della disponibilità dei materiali possono indicare problemi nella catena di approvvigionamento o nella gestione delle scorte. Dove reperirlo Il sistema imposta uno stato come «MACM» (material committed) o «MSPT» (material shortage). L’esecuzione può essere dedotta dal timestamp della modifica di questo stato nelle tabelle JEST/JCDS. I risultati sono visibili nell’intestazione dell’ordine. Acquisizione Dedurre l’evento dal timestamp delle modifiche di stato relative alla disponibilità dei materiali, come «MACM» o «MSPT». Tipo di evento inferred | |||
| Prelievo dei materiali registrato | Questa attività rappresenta il prelievo dal magazzino dei materiali componenti da utilizzare nell’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 il prelievo dei materiali possono evidenziare problemi nella logistica di magazzino, nella predisposizione dei materiali o nell’accuratezza delle scorte. Dove reperirlo Viene registrato come documento materiale nelle tabelle MKPF (intestazione) e MSEG (riga), con un tipo di movimento, generalmente «261», che fa 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 | |||
| Regolamento dell’ordine eseguito | Rappresenta il regolamento finanziario dell’ordine di produzione, mediante il quale i costi raccolti vengono allocati agli oggetti di costo appropriati. È la fase finale del ciclo di vita dell’ordine dal punto di vista del controlling. | ||
| Perché è importante Sebbene si tratti di un’attività finanziaria, i ritardi nel regolamento possono indicare problemi nella reportistica dei costi o nell’accuratezza dei dati dell’ordine. Segna la vera chiusura finanziaria del processo produttivo. Dove reperirlo L’evento può essere dedotto quando il saldo dell’ordine diventa zero oppure quando lo stato di sistema «SETC» (I0076, Settlement rule created) è seguito dai log dell’esecuzione del regolamento. Il regolamento effettivo viene registrato in tabelle di controlling come COSP e COSS. Acquisizione Dedurre l’evento dai documenti di regolamento collegati all’ordine nelle tabelle CO oppure dall’attivazione dello stato «SETC». Tipo di evento inferred | |||
Guide all'estrazione
Passaggi
- Crei un InfoSet in SAP Query: utilizzi il codice transazione
SQ02. Crei un nuovo InfoSet, ad esempioZPP_EVENTLOG. Selezioni l'opzione relativa alla fonte dati «Join di tabelle tramite tabella di base». UtilizziAUFK(dati anagrafici dell'ordine) come tabella di base iniziale. - Esegua il join delle tabelle necessarie: aggiunga al join dell'InfoSet le tabelle seguenti. Il sistema potrebbe proporre i join, ma ne verifichi la correttezza:
AUFKconAFKO(dati di testata degli ordini PP):AUFK-AUFNR = AFKO-AUFNRAUFKconJEST(stato del singolo oggetto):AUFK-OBJNR = JEST-OBJNRJESTconJCDS(documenti di modifica per gli stati di sistema/utente):JEST-OBJNR = JCDS-OBJNRANDJEST-STAT = JCDS-STAT. Nota: questo join serve a leggere la cronologia 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
- Definisca i gruppi di campi: trascini dai dati di origine nei gruppi di campi i campi necessari. Si assicuri di includere tutti i campi richiesti dalla query finale, come
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATE,MKPF-BUDAT. - Aggiunga campi e codice personalizzati: nell'InfoSet, acceda alla scheda «Extras». Dovrà definire campi personalizzati per
ActivityName,EventTime,SourceSystemeLastDataUpdate, quindi scrivere codice ABAP per compilarli in base alla logica definita nella sezione della query. La logica prevede l'iterazione tra modifiche di stato, conferme e documenti materiali per generare un record distinto per ogni evento aziendale. Questo è il passaggio più complesso, poiché trasforma dati tabellari in un formato event log all'interno delle sezioni di codice dell'InfoSet. - Generi e salvi l'InfoSet: una volta completati join, campi e codice personalizzato, salvi e generi l'InfoSet.
- Crei una SAP Query: utilizzi il codice transazione
SQ01. Crei una nuova query, ad esempioZPP_EVENTS, basata sull'InfoSet creato nei passaggi precedenti. - Progetti il layout della query: nel Query Designer, definisca i campi della schermata di selezione. Le selezioni consigliate includono Ordine di produzione
AUFNR, StabilimentoWERKS, Tipo di ordineAUARTe un intervallo di date per la creazione dell'ordineAUFK-ERDAT. - Definisca l'elenco di output: selezioni i campi da visualizzare nell'output del report. L'elenco deve corrispondere esattamente alle colonne richieste dall'event log, inclusi i campi personalizzati come
ActivityNameeEventTime. - Esegua la query: esegua la query con i criteri di selezione desiderati, ad esempio per gli ordini di produzione degli ultimi 3-6 mesi.
- Esporti i dati: quando la query visualizza i risultati, esporti l'elenco. Il formato più comune e affidabile è «Foglio di calcolo» o «File locale», con formato delimitato da tabulazioni o CSV.
- Formattti 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,EventTimeecc.) 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 come CSV per il caricamento.
Configurazione
- Join dell'InfoSet: il metodo si basa su un join complesso tra le tabelle di testata, stato, conferma e movimento materiali dell'InfoSet. I join principali sono
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUeAUFK->MSEG->MKPF. Join errati o inefficienti possono causare prestazioni scadenti o dati non accurati. - Criteri di selezione: è fondamentale definire un intervallo di selezione gestibile per evitare problemi di prestazioni del sistema. I principali campi di selezione nella schermata iniziale della query dovrebbero includere:
- 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 per identificare 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 questi codici sono standard nei sistemi SAP, ma devono essere verificati.
- Tipi di movimento: eventi come «Uscita merci» ed «Entrata merci» vengono identificati tramite i relativi Tipi di movimento (
MSEG-BWART), in genere «261» e «101». Verifichi che questi valori siano coerenti con la configurazione della Sua organizzazione. - Autorizzazioni: l'utente che esegue la query deve disporre dell'autorizzazione ad 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'; Passaggi
- Stabilisca 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 è essenziale e deve essere coordinato con i team SAP Basis e di amministrazione del database.
- Identifichi lo schema SAP: determini lo schema del database corretto nel quale sono memorizzate le tabelle SAP. Spesso si tratta di
SAPSR3o di un nome analogo specifico del sistema. Dovrà sostituire il segnaposto[Your SAP Schema]nella query con questo valore. - Prepari la query SQL: copi la query SQL completa fornita nella sezione
query. La query è progettata per estrarre tutte le attività specificate in un unico formato event log. - Configuri i parametri della query: prima dell'esecuzione, modifichi i segnaposto presenti nella query. Imposti
[Start Date]e[End Date]per definire l'intervallo temporale dell'estrazione. È inoltre fortemente consigliato filtrare per stabilimento di produzione (WERKS) o tipo di ordine (AUART) per limitare il volume dei dati. - Si connetta ed esegua la query: utilizzi un client SQL standard, come DBeaver, SAP HANA Studio o uno script personalizzato in Python o Java, per connettersi al database SAP con le credenziali del passaggio 1.
- Esegua la query: incolli la query SQL configurata nel client e la esegua. A seconda dell'intervallo di date e delle dimensioni del sistema, il completamento potrebbe richiedere diversi minuti.
- Esamini i risultati preliminari: al termine della query, controlli rapidamente le prime centinaia di righe per verificare che colonne come
ProductionOrder,ActivityNameedEventTimesiano compilate correttamente e presentino valori coerenti. - Esporti 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.
- Completi il CSV per il caricamento: apra il file CSV e verifichi che le intestazioni delle colonne corrispondano agli attributi richiesti (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdateecc.). Si assicuri che la colonnaEventTimeutilizzi un formato coerente, ad esempioYYYY-MM-DD HH:MI:SS. - Carichi il file in ProcessMind: il file CSV preparato è ora pronto per essere caricato nella piattaforma ProcessMind e analizzato.
Configurazione
- Schema del database: deve specificare lo schema SAP nel quale risiedono le tabelle di pianificazione della produzione. Sostituisca il segnaposto
[Your SAP Schema]nella query 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 concentrare l'analisi, filtri la query in base al campo del tipo di ordine di produzione (
AUFK.AUART). In questo modo potrà includere o escludere tipi specifici, come ordini di produzione standard, ordini di processo o 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 autorizzazioni 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 autorizzazioni speciali.
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'; Passaggi
- Confermi che SAP ECC PP, l'elaborazione degli ordini di produzione, la gestione delle scorte e i dati di controlling siano disponibili, quindi verifichi che l'utente incaricato dell'estrazione disponga dell'autorizzazione per leggere le tabelle applicative necessarie ed eseguire report ABAP personalizzati.
- In ABAP Workbench, ad esempio nella transazione SE38 o SE80, crei un report eseguibile dedicato, come [Your custom report name]. Utilizzi una schermata di selezione con parametri data obbligatori, quali [Start date] e [End date], oltre a 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 Suo sistema SAP ECC. Utilizzi JCDS e la relativa configurazione degli stati per identificare le modifiche di stato esplicite, inclusi CRTD, rilasciato, tecnicamente completato e gli stati relativi alla cancellazione. Non presuma che un codice di stato rappresenti un evento se la cronologia degli stati non contiene una modifica con indicazione temporale.
- Legga i risultati del controllo disponibilità dei materiali dai dati del controllo disponibilità degli ordini di produzione configurati nel Suo sistema. Se il controllo non viene salvato in una tabella collegabile in modo affidabile all'ordine e alla marca temporale, implementi l'estensione SAP configurata, il log applicativo o la fonte di audit approvata dal Suo team SAP. Non deduca l'esecuzione del controllo esclusivamente dalla creazione o dal rilascio dell'ordine.
- Legga la cronologia delle modifiche degli ordini dalle configurazioni degli oggetti dei documenti di modifica degli ordini di produzione e dalle relative tabelle. Estragga esclusivamente le modifiche significative, come quantità pianificata, date, distinta base, ciclo di lavorazione o altri campi approvati dal responsabile del processo. Utilizzi la marca temporale del documento di modifica come EventTime.
- Legga le registrazioni di uscita e di entrata merci dai dati dei documenti materiali di magazzino configurati nel Suo sistema. Colleghi le registrazioni all'ordine di produzione utilizzando il riferimento all'ordine disponibile nei dati del documento materiale. Classifichi i prelievi dei componenti come Goods Issue Posted e le entrate dei prodotti finiti come Goods Receipt Posted. Utilizzi la data e l'ora di registrazione, quando disponibili.
- Legga i dati delle conferme dalla fonte delle conferme di produzione configurata nel Suo sistema. Ordini le conferme per ordine di produzione e marca temporale della conferma. Generi First Confirmation Recorded per la prima conferma, Intermediate Confirmation Recorded per le conferme intermedie idonee e Final Confirmation Recorded per una conferma esplicitamente contrassegnata come finale o altrimenti identificata dalla logica configurata di completamento delle conferme. Non deduca la finalità dall'ultima riga restituita da una query arbitraria.
- Legga i dati di esecuzione del settlement dalla fonte di settlement del controlling configurata nel Suo sistema. Generi Order Settlement Ran solo quando un record di esecuzione del settlement, un documento di settlement o una cronologia degli stati di settlement approvata fornisce una marca temporale esplicita collegata 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. Utilizzi una conversione stabile delle marche temporali e conservi il fuso orario del sistema di origine. Imposti ActualStartDate sulla marca temporale della prima conferma e ActualEndDate su quella della conferma finale, quando tali eventi sono presenti.
- Ordini le righe evento per ProductionOrder ed EventTime, applicando un ordinamento secondario deterministico in caso di marche temporali uguali. Rimuova esclusivamente i record di origine duplicati in modo identico, non le ripetizioni di eventi legittime. Verifichi che tutti i dodici nomi di attività obbligatori siano rappresentati nello schema di output e che ogni riga generata contenga un identificativo del caso, il nome dell'attività e la marca temporale dell'evento.
- Scriva il risultato in un file sul server applicativo utilizzando un'interfaccia ABAP approvata e un percorso file 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 formatti le marche temporali in modo coerente, preferibilmente come YYYY-MM-DDThh:mm:ss.
- Scarichi il file utilizzando la procedura di trasferimento file SAP approvata, lo esamini in modo indipendente e lo carichi in ProcessMind come Event Log, con ProductionOrder come identificativo del caso, ActivityName come attività ed EventTime come marca temporale dell'evento. Confermi che ProcessMind sia configurato per leggere le righe così come sono e che non debba dedurre le attività mancanti.
Configurazione
- Intervallo di date: per l'analisi iniziale utilizzi una finestra di estrazione mobile compresa tra tre e sei mesi. Estenda l'intervallo solo dopo aver valutato prestazioni e volume dei dati. Includa un periodo di lookback 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 release e delle personalizzazioni.
- Ambito degli eventi: estragga tutte le dodici attività obbligatorie 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 marche temporali: privilegi la data e l'ora dell'evento di origine. Se è disponibile solo una data, documenti la precisione ridotta e utilizzi un orario configurato coerente, invece di presentare un orario preciso inventato. Converta tutte le marche temporali nel fuso orario previsto da ProcessMind.
- Gestione degli stati: utilizzi la cronologia degli stati con indicazione temporale per le attività basate sullo stato. Configuri la mappatura dai valori degli stati interni alle attività di business sulla base della configurazione degli stati di sistema e dell'approvazione del responsabile del processo.
- Controlli disponibilità: configuri la fonte approvata per l'esecuzione dei controlli disponibilità. Non crei una riga Material Availability Checked a partire dalla creazione dell'ordine, dal rilascio, dalle prenotazioni o da un'uscita merci completata, a meno che la fonte approvata dal business non registri esplicitamente il controllo.
- Gestione delle conferme: configuri le regole che distinguono le conferme iniziali, intermedie e finali. Una conferma può essere considerata finale solo quando la fonte la identifica esplicitamente come tale o quando la logica di conferma SAP configurata stabilisce il completamento.
- Quantità: conservi, ove possibile, l'unità di misura della fonte. Se le quantità vengono aggregate, documenti se l'aggregazione avviene per ordine, materiale, movimento, conferma o evento. DeliveredQuantity deve rappresentare le entrate registrate di prodotti finiti, non semplicemente la resa confermata, salvo approvazione di tale interpretazione da parte del responsabile del processo.
- LastDataUpdate: compili questo campo con la marca temporale dell'esecuzione dell'estrazione o con la marca temporale dell'aggiornamento della fonte, applicando la stessa convenzione documentata a ogni riga dell'esecuzione.
- Prestazioni: limiti l'intervallo di selezione, selezioni solo i campi necessari, elabori i dati in pacchetti, utilizzi filtri lato database, eviti letture annidate del database all'interno di cicli estesi e crei o utilizzi indici approvati esclusivamente tramite il processo di amministrazione del database SAP. Scriva l'output in modo incrementale quando l'utilizzo della memoria rappresenta un problema.
- Output del file: configuri la directory del server applicativo, il nome file logico, il delimitatore, la codifica, il formato decimale, il formato delle marche temporali e la gestione dell'intestazione secondo le specifiche di caricamento di ProcessMind. Non esponga le credenziali nel report o nel file di output.
- Prerequisiti: confermi che SAP ECC PP, la gestione delle scorte, le conferme, la gestione degli stati degli ordini di produzione e i dati di settlement del controlling siano attivi, ove applicabile. Le autorizzazioni necessarie, la governance degli sviluppi personalizzati, l'approvazione dei trasporti, l'accesso ai file sul server applicativo e l'accesso all'acquisizione di ProcessMind devono essere concessi prima dell'esecuzione.
- Configurazione specifica del sistema: i nomi delle tabelle, i campi, i codici di stato, gli oggetti dei documenti di modifica, le fonti delle conferme, le fonti dei controlli disponibilità e le fonti del settlement devono essere verificati nel sistema SAP ECC di destinazione. Utilizzi [Configure based on your system] quando l'implementazione non fornisce una fonte standard e affidabile.
a 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 per iniziare?
Utilizzi questo Template per preparare i Suoi dati e avviare il percorso verso un processo di pianificazione della produzione più ottimizzato. Ottenga informazioni utili e semplifichi le Sue attività operative già oggi.
Ottimizzi subito la pianificazione della produzione per raggiungere la massima efficienza
Individui le inefficienze, riduca il tempo di ciclo del 30% e raggiunga gli obiettivi.
Non è richiesta alcuna carta di credito. Inizi oggi stesso a ottimizzare i Suoi processi.