Il Suo Template Data per la Manutenzione degli Asset.
Il Suo Template Data per la Manutenzione degli Asset.
- Attributi consigliati per la raccolta
- Attività di manutenzione critiche da tracciare
- Guida all'estrazione tecnica per SAP PM
Attributi di Manutenzione Asset
| Nome | Descrizione | ||
|---|---|---|---|
| Nome attività Activity | Il compito specifico o il cambiamento di stato che si è verificato. | ||
| Descrizione Rappresenta il passaggio eseguito nel processo di manutenzione, come 'Ordine di Manutenzione Creato', 'Merce in Uscita Registrata' o 'Operazione Ordine Confermata'. Questi sono tipicamente derivati dalle tabelle di gestione dello stato (JEST) per i cambiamenti di stato, o dalle tabelle di transazione (AFRU per le conferme, MKPF per i movimenti materiali). Questo Perché è importante Questo definisce il 'cosa' del processo, essenziale per scoprire il flusso del processo e le varianti. Dove trovare Derivato da JEST (Stato), AFRU (Conferme), QMEL (Notifiche) Esempi Ordine di Manutenzione CreatoOrdine rilasciatoTecnicamente Completato | |||
| Ordine di Lavoro di Manutenzione MaintenanceWorkOrder | L'identificatore unico per l'ordine di lavoro di manutenzione. | ||
| Descrizione L'Ordine di Lavoro di Manutenzione è il documento centrale in SAP Plant Maintenance (tabella AUFK, campo AUFNR). Collega la richiesta di manutenzione (Notifica) alle risorse di esecuzione, ai materiali e ai costi. Nell'analisi di Perché è importante È la chiave unica che lega insieme tutte le attività, i costi e i timestamp, consentendo la visualizzazione del flusso di processo. Dove trovare Tabella SAP AUFK, Campo AUFNR Esempi 00004001234540012345000040098765 | |||
| Sistema di Origine SourceSystem | Il sistema da cui hanno avuto origine i `dati`. | ||
| Descrizione Identifica il client o l'istanza SAP specifica (es. 'SAP_PM_PROD'). In un panorama con più sistemi ERP, questo attributo aiuta a distinguere tra record che potrebbero condividere ID identici ma appartenere a diverse entità legali o ambienti di sistema. Perché è importante Assicura l'unicità e la provenienza dei dati in ambienti multi-sistema. Dove trovare Configurazione del Sistema / Esempi SAP_ECC_P01SAP_S4H_100 | |||
| Timestamp Evento EventTimestamp | La data e l'ora esatte in cui si è verificata l'attività. | ||
| Descrizione Registra il momento specifico in cui si è verificato un Perché è importante Richiesto per sequenziare correttamente gli Dove trovare JEST (UDATE/UTIME), AFRU (ISDD/ISDZ), MKPF (CPUDT/CPUTM) Esempi 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| Ultimo `Data Update` LastDataUpdate | `Timestamp` dell'estrazione `dati` più recente. | ||
| Descrizione Indica quando i dati sono stati aggiornati l'ultima volta nel modello di dati di Process Mining. Ciò consente agli analisti di comprendere l'attualità degli insight e aiuta a convalidare la freschezza dei dati per le dashboard che monitorano il backlog in tempo reale o l'aderenza agli SLA. Perché è importante Critico per la governance dei dati e per stabilire fiducia nelle dashboard. Dove trovare Timestamp ETL Esempi 2023-11-01T12:00:00Z | |||
| Centro di Lavoro Principale MainWorkCenter | Il centro di lavoro primario o la squadra assegnata per eseguire l'ordine. | ||
| Descrizione Il Centro di Lavoro Principale (VAPLZ) rappresenta il gruppo di tecnici o macchine che eseguirà il lavoro fisico. Questo Perché è importante Permette l'analisi delle performance a livello di risorsa. Dove trovare Tabella SAP AFKO, Campo VAPLZ (o AUFK-VAPLZ a seconda della configurazione) Esempi MECH_01ELEC_TEAMEXT_CONT | |||
| Creato da Utente CreatedByUser | Il `username` della persona che ha creato l'ordine. | ||
| Descrizione Identifica l'utente (ERNAM) responsabile dell'avvio dell'ordine di lavoro. Questo è mappato su 'Utente' nel modello generico. Consente l'analisi della creazione manuale vs. automatizzata e aiuta nell'auditing dell'attività 'Ordine di Manutenzione Creato'. Perché è importante Permette l'analisi del comportamento dell'utente e l'auditing. Dove trovare Tabella SAP AUFK, Campo ERNAM Esempi JSMITHBSERVICEDDAVIS | |||
| Data di Fine Obiettivo TargetFinishDate | La data di completamento programmata per il lavoro di manutenzione. | ||
| Descrizione Questa data (tipicamente Data di Fine Base - GLTRP) rappresenta la scadenza per l'ordine di lavoro. Viene confrontata con il Perché è importante Il punto di riferimento per tutti i calcoli di Consegna On-Time (OTD). Dove trovare Tabella SAP AFKO, Campo GLTRP Esempi 2023-12-012023-12-15 | |||
| Gruppo di Pianificazione ResponsiblePlannerGroup | Il gruppo di pianificatori responsabile dell'elaborazione dell'ordine. | ||
| Descrizione Il Gruppo di Pianificazione (INGRP) identifica il team o il reparto specifico responsabile della pianificazione del lavoro di manutenzione. Questo è mappato a 'Dipartimento' ed è cruciale per la Perché è importante Identifica il team amministrativo responsabile del processo di pianificazione. Dove trovare Tabella SAP AUFK, Campo INGRP Esempi M01ELEMEC | |||
| Numero Attrezzatura EquipmentNumber | Identificatore per lo specifico asset fisico in manutenzione. | ||
| Descrizione Il Numero Attrezzatura (EQUNR) identifica la singola macchina o oggetto Perché è importante Collega le performance del processo a specifici asset fisici. Dove trovare Tabella SAP AUFK, Campo EQUNR Esempi 10004567PUMP-001HVAC-202 | |||
| Numero Notifica NotificationNumber | La notifica di manutenzione che ha scatenato questo ordine. | ||
| Descrizione Il Numero Notifica (QMNUM) collega l'Ordine di Lavoro alla richiesta iniziale (Notifica). Questo collegamento è necessario per calcolare il Perché è importante Collega la fase di esecuzione alla fase di richiesta/rilevamento. Dove trovare Tabella SAP AUFK, Campo QMNUM Esempi 1000050010000501 | |||
| Priorità di Manutenzione MaintenancePriority | Il livello di urgenza assegnato all'ordine di lavoro. | ||
| Descrizione Indica la priorità (PRIOK) del compito di manutenzione, come '1-Molto Alta', '2-Alta' o '3-Media'. Questo campo è l'input diretto per il KPI 'Rapporto Ordini di Lavoro di Emergenza'. Analizzare il flusso per priorità aiuta a identificare se gli ordini ad alta priorità sono realmente accelerati attraverso il sistema rispetto al lavoro di routine. Perché è importante Fattore chiave per l'analisi degli SLA e l'identificazione del lavoro di emergenza. Dove trovare Tabella SAP AFKO, Campo PRIOK (o AUFK tramite vista) Esempi 1-Emergenza2-Alta3-Media4-Bassa | |||
| Stabilimento di Manutenzione MaintenancePlant | Lo stabilimento logistico responsabile della manutenzione. | ||
| Descrizione Lo Stabilimento (WERKS) è l'unità organizzativa primaria nella logistica. Separa i Perché è importante Filtro organizzativo primario per il Dove trovare Tabella SAP AUFK, Campo WERKS Esempi 100020003000 | |||
| Stato del Sistema SystemStatus | Lo stato tecnico attuale dell'ordine (es. REL, TECO). | ||
| Descrizione Una stringa concatenata o un elenco di stati di sistema attivi (da JEST) attualmente applicati all'ordine. I valori comuni includono CRTD (Creato), REL (Rilasciato), TECO (Tecnicamente Completato) e CLSD (Chiuso). Questo aiuta a filtrare i casi aperti rispetto a quelli chiusi nel 'Monitor del Backlog e del Lavoro in Corso'. Perché è importante L'indicatore primario della fase del ciclo di vita dell'ordine. Dove trovare Modulo Funzione SAP STATUS_TEXT_EDIT o Tabella JEST Esempi REL CNFTECOCRTD MACM | |||
| Tipo di Ordine di Manutenzione MaintenanceOrderType | Categorizza l'ordine di lavoro (es. Preventiva, Correttiva). | ||
| Descrizione Il Tipo di Ordine (AUART) in SAP PM distingue la natura del lavoro di manutenzione. I tipi comuni includono PM01 (Correttivo), PM02 (Preventivo) e PM03 (Ristrutturazione). Questo Perché è importante Fondamentale per segmentare l'analisi tra lavoro pianificato e non pianificato. Dove trovare Tabella SAP AUFK, Campo AUART Esempi PM01PM02PM03 | |||
| Ubicazione Funzionale FunctionalLocation | La sede gerarchica in cui è installato l'`asset`. | ||
| Descrizione Rappresenta il luogo nella struttura tecnica dove viene eseguita l'attività di manutenzione (TPLNR). A differenza dell'Attrezzatura, che si sposta, la Sede Funzionale è statica. Questo Perché è importante Permette un'analisi spaziale e gerarchica delle performance di manutenzione. Dove trovare Tabella SAP IFLOT, Campo TPLNR (o tramite AUFK-TPLNR) Esempi PLANT1-BLD2-LN01US-TX-DAL-01 | |||
| Costo Totale Effettivo TotalActualCost | Il costo totale effettivo registrato sull'ordine di lavoro. | ||
| Descrizione Costi aggregati da manodopera, materiali e servizi (dalla tabella PMCO). Questo attributo supporta la dashboard 'Costo e Resa della Manutenzione Asset', permettendo ai manager di vedere l'impatto finanziario delle attività di manutenzione. È essenziale per determinare la convenienza economica della riparazione rispetto alla sostituzione degli asset. Perché è importante Fornisce la dimensione finanziaria ai Dove trovare Tabella SAP PMCO (somma del tipo di valore 04 - Effettivo) Esempi 150.002500.500.00 | |||
| Durata attività ActivityDuration | Tempo impiegato per completare l'attività specifica. | ||
| Descrizione La durata del passaggio specifico, particolarmente utile per le attività 'Operazione Confermata' dove vengono registrate le ore di manodopera. Questo si mappa a 'ProcessingTime' nel modello Perché è importante Misura lo sforzo effettivo dedicato ai compiti. Dove trovare Tabella SAP AFRU, Campo ISDD/ISDZ vs IEDD/IEDZ Esempi 2.5 ore45 minuti | |||
| È Lavoro di Emergenza IsEmergencyWork | Flag che indica se l'ordine di lavoro è di emergenza. | ||
| Descrizione Un attributo booleano calcolato in base alla Priorità di Manutenzione. Se la Priorità è '1' (o il codice specifico per Emergenza nella configurazione), questo flag è vero. Ciò semplifica il filtraggio e la costruzione del KPI 'Rapporto Ordini di Lavoro di Emergenza' senza logiche complesse a livello di dashboard. Perché è importante Semplifica il filtraggio per l'analisi critica della manutenzione reattiva. Dove trovare Calcolato dalla Priorità di Manutenzione Esempi truefalse | |||
| È una Rilavorazione IsRework | Flag che indica se l'ordine ha comportato attività di rilavorazione. | ||
| Descrizione Un booleano calcolato che identifica se si è verificato un ciclo di processo, in particolare se l'attività 'Task di Manutenzione Eseguito' si è verificata più di una volta o se lo stato è tornato da 'Tecnicamente Completato' a 'In Corso'. Questo supporta il KPI 'Tasso di Rilavorazione Manutenzione' e aiuta a identificare problemi di qualità. Perché è importante Supporta direttamente l'analisi del controllo qualità. Dove trovare Calcolato dal Flusso di Processo Esempi truefalse | |||
| Ore di Manodopera Pianificate PlannedLaborHours | Le ore di manodopera stimate per l'ordine. | ||
| Descrizione Il lavoro totale pianificato (ARBEI) dalle operazioni dell'ordine. Confrontarlo con la Durata Effettiva dell'Attività aiuta nella Perché è importante Metrica di base per l'analisi dell'accuratezza della pianificazione. Dove trovare Tabella SAP AFKO (Somma del Lavoro Pianificato Operazione) Esempi 4.08.512.0 | |||
Attività di Manutenzione Asset
| Activity | Descrizione | ||
|---|---|---|---|
| Completamento Aziendale Impostato | Contrassegna la chiusura amministrativa finale dell'ordine di lavoro, impedendo ulteriori registrazioni di costi. Catturato tramite il cambio di stato a CLSD (Chiuso). | ||
| Perché è importante Rappresenta la fine assoluta del ciclo di vita dell'ordine, fondamentale per l'accuratezza dei Dove trovare Tabella JCDS, Stato I0046 (CLSD). Acquisisci Registrato quando lo stato si aggiorna a CLSD in JCDS Tipo di evento explicit | |||
| Completamento Tecnico Impostato | Contrassegna il lavoro di manutenzione come fisicamente e tecnicamente terminato. Catturato tramite il cambio di stato a TECO (Tecnicamente Completato). | ||
| Perché è importante Il punto finale più critico per l'analisi operativa, che indica che l' Dove trovare Tabella JCDS, Stato I0045 (TECO). Acquisisci Registrato quando lo stato si aggiorna a TECO in JCDS Tipo di evento explicit | |||
| Operazione Ordine Confermata | Rappresenta la registrazione del tempo effettivo impiegato da un tecnico su una specifica operazione. Questo cattura il lavoro di esecuzione effettivo sull'`asset`. | ||
| Perché è importante Questa attività è la fonte Dove trovare Tabella AFRU (Conferme Ordine). Acquisisci Registrato all'esecuzione della transazione IW41 Tipo di evento explicit | |||
| Ordine di Manutenzione Creato | Contrassegna la generazione dell'oggetto ordine di lavoro di manutenzione nel sistema. Catturato esplicitamente dal timestamp di creazione della tabella Dati Anagrafici Ordine. | ||
| Perché è importante Questo è l' Dove trovare Tabella AUFK, campo ERDAT (Data) e ERFZEIT (Ora). Acquisisci Registrato all'esecuzione della transazione IW31 Tipo di evento explicit | |||
| Ordine di Manutenzione Rilasciato | Indica che la pianificazione è completa e l'ordine è rilasciato per l'esecuzione. Catturato monitorando il cambio di stato a REL nei log di stato del sistema. | ||
| Perché è importante Questa pietra miliare separa la fase di pianificazione dalla fase di esecuzione, cruciale per misurare il Dove trovare Tabella JCDS (Documenti di Cambio Stato), Stato I0002 (REL). Acquisisci Registrato quando lo stato si aggiorna a REL in JCDS Tipo di evento explicit | |||
| Uscita merci contabilizzata | Registra il consumo fisico di ricambi o materiali rispetto all'ordine di lavoro. Acquisito dalle intestazioni dei documenti materiali collegate all'ordine. | ||
| Perché è importante Conferma che le parti sono disponibili e sono state prelevate, influenzando direttamente l'analisi del tempo di attesa per la disponibilità delle parti. Dove trovare Tabella MSEG/MKPF, Tipo Movimento 261 (Scarico Merce per Ordine). Acquisisci Registrato all'esecuzione della transazione MIGO/MB1A Tipo di evento explicit | |||
| Completamento Tecnico Annullato | Registra la revoca dello stato di Completamento Tecnico, indicando che l'ordine è stato riaperto. Questo crea un `loop` di rilavorazione nel modello di processo. | ||
| Perché è importante Indicatore primario per il KPI del tasso di rilavorazione della manutenzione, che evidenzia chiusure premature o problemi di qualità. Dove trovare Tabella JCDS, Stato I0045 (TECO) cambia a Inattivo. Acquisisci Registrato alla disattivazione dello stato TECO Tipo di evento explicit | |||
| Componente Materiale Aggiunto | Registra l'aggiunta di ricambi o materiali all'elenco dei componenti dell'ordine di lavoro. Acquisito dalla creazione di una voce di prenotazione. | ||
| Perché è importante Identifica l'inizio del ciclo di approvvigionamento per le parti richieste, supportando la dashboard dei Tempi di Approvvigionamento dei Pezzi di Ricambio. Dove trovare Tabella RESB, campo BDTER (Data Richiesta) o Acquisisci Registrato all'aggiunta della voce di riga a RESB Tipo di evento explicit | |||
| Costo Ordine Liquidato | Indica che i costi raccolti sull'ordine sono stati trasferiti all'oggetto di controllo (es. Centro di Costo). Catturato dal documento di Controllo. | ||
| Perché è importante Traccia l'aspetto della chiusura finanziaria e supporta il Dove trovare Tabella COBK (Oggetto CO: Intestazione Documento), collegata all'Ordine. Acquisisci Registrato all'esecuzione della transazione di liquidazione KO88 Tipo di evento explicit | |||
| Lettura di Misurazione Registrata | Registra l'inserimento di un documento di misurazione, come una lettura del contatore o una valutazione della condizione. Spesso funge da evento di Ispezione Tecnica. | ||
| Perché è importante Essenziale per la Manutenzione Basata sulla Condizione e per tracciare i Tempi di Ciclo dell'Ispezione Tecnica. Dove trovare Tabella IMRG (Documento di Misura), collegata all'Attrezzatura o alla Sede Funzionale. Acquisisci Registrato alla creazione del documento di misurazione Tipo di evento explicit | |||
| Notifica di Manutenzione Creata | Registra la creazione iniziale di una notifica di manutenzione, che spesso è l'elemento scatenante per un ordine di lavoro. Acquisita dal `timestamp` di creazione della tabella QMEL, questa attività collega la richiesta a monte all'ordine di esecuzione. | ||
| Perché è importante Questa attività stabilisce l'inizio del processo di manutenzione Dove trovare Tabella QMEL, campo ERDAT (Data Creazione) e MZEIT (Ora). Collegato all'ordine tramite QMEL-AUFNR. Acquisisci Registrato alla creazione del record nella tabella QMEL Tipo di evento explicit | |||
| Ordine di Lavoro Pianificato | Indica la programmazione specifica delle operazioni a una capacità o data. Dedotto dall'assegnazione dello stato di Dispatch alle operazioni. | ||
| Perché è importante Misura l'efficienza dell'allocazione delle risorse e supporta la dashboard di Utilizzo e Programmazione delle Risorse. Dove trovare Tabella JCDS (Documenti di Cambio Stato) per Operazioni (ObjType OV), Stato I0009 (DSPT). Acquisisci Confrontare il campo stato prima/dopo Tipo di evento inferred | |||
| Priorità di Manutenzione Modificata | Registra un aggiornamento del livello di priorità dell'ordine di lavoro, come l'escalation a Emergenza. Derivato dai Documenti di Modifica associati ai dati anagrafici dell'ordine. | ||
| Perché è importante Il monitoraggio dei cambiamenti di priorità spiega le deviazioni di processo e supporta il 'Monitor dell'Impatto degli Ordini di Lavoro di Emergenza' identificando le escalation reattive. Dove trovare Tabella CDPOS/CDHDR per Classe Oggetto AUFTRAG, Campo PRIOK. Acquisisci Registrato nei Documenti di Modifica (CDPOS) Tipo di evento explicit | |||
| Richiesta di acquisto creata | Indica che è stata generata una richiesta di approvvigionamento o servizi esterni. Questo collega l'ordine di manutenzione interno alla catena di fornitura esterna. | ||
| Perché è importante Cruciale per analizzare i ritardi causati da fornitori esterni o dall'approvvigionamento di materiale non a magazzino. Dove trovare Tabella EBAN, collegata tramite Assegnazione Contabile ad AUFK-AUFNR. Acquisisci Registrato alla creazione del record EBAN Tipo di evento explicit | |||
Guide all'Estrazione
Fasi
Identificare l'Interfaccia della Sorgente Dati: Determini come accederà all'interfaccia SQL di SAP S/4HANA. Questo viene tipicamente fatto tramite SAP HANA Studio, gli ABAP Development Tools (ADT) in Eclipse, o una stringa di connessione DBaaS se il database HANA è esposto al Suo livello di analisi.
Verificare la Disponibilità delle Viste CDS: Si assicuri che le viste Core Data Services (CDS) standard siano attive nel Suo sistema S/4HANA. Le viste primarie richieste sono I_MaintenanceOrder, I_MaintenanceOrderOperation, I_MaintenanceNotification, I_MaintOrderConfirmation e I_MeasurementDocument. Avrà anche bisogno di accedere alla tabella della cronologia dello stato del sistema JCDS e alle tabelle dei documenti di modifica (CDHDR/CDPOS) per ricostruire la cronologia completa degli eventi, poiché le viste CDS standard spesso mostrano solo lo stato attuale.
Preparare l'Ambiente SQL: Apra il Suo editor SQL. Si assicuri che il Suo utente abbia i permessi SELECT sulle viste SQL DDL (solitamente schema SAPABAP1 o simile) per gli artefatti elencati sopra.
Eseguire la Query di Estrazione: Copi lo script SQL fornito nel Suo editor. Sostituisca il placeholder [Your Client Number] con il Suo ID cliente SAP specifico (es. 100). Se sta filtrando per un intervallo di date specifico, aggiorni i filtri EventTimestamp nelle clausole WHERE.
Trasformazione dei Dati: La query gestisce la maggior parte delle trasformazioni, come il casting dei timestamp e la mappatura dei codici di stato a testo leggibile. Tuttavia, si assicuri che la colonna EventTimestamp sia formattata in ISO 8601 (YYYY-MM-DDTHH:MM:SS) durante l'esportazione se il Suo sistema di destinazione lo richiede.
Esportare il Risultato: Esegua la query ed esporti i risultati in un file CSV o Parquet. Si assicuri che la codifica sia impostata su UTF-8 per gestire i caratteri speciali nei nomi utente o nelle descrizioni.
Convalidare la Mappatura delle Colonne: Apra un campione dell'esportazione e si assicuri che le colonne MaintenanceWorkOrder, Activity e EventTimestamp siano completamente popolate. Verifichi che la colonna Activity contenga le stringhe specifiche elencate nei requisiti (es. Maintenance Order Created, Goods Issue Posted).
Caricare su ProcessMind: Importi il file flat convalidato in ProcessMind. Mappi la colonna Activity al campo Activity ID, MaintenanceWorkOrder al campo Case ID e EventTimestamp al campo Timestamp.
Configurazione
- Filtro Cliente: I sistemi SAP sono multi-client. Filtrare sempre per
MANDToClient(es. '100') per evitare dati duplicati o fughe di dati tra client. - Intervallo di Date: Si raccomanda di filtrare la
CreationDatedell'Ordine di Manutenzione per gli ultimi 6-12 mesi. L'interrogazione della cronologia completa diJCDS(Stato) oCDPOS(Documenti di Modifica) senza filtri di data può causare timeout di performance. - Chiave Lingua: La query predefinita è l'inglese ('E'). Se la Sua organizzazione utilizza una lingua primaria diversa per le descrizioni testuali, regoli il filtro lingua.
- Accesso al Sistema: Richiede l'accesso allo schema ABAP Core Data Services o alle tabelle HANA sottostanti. L'accesso alle tabelle raw JCDS e CDHDR è cruciale per l'analisi dello stato storico, poiché le viste CDS pure sono spesso basate su snapshot.
- Tipi di Ordine: La query estrae tutti i tipi di ordine. Potrebbe voler filtrare
MaintenanceOrderType(es. solo PM01, PM02) se desidera analizzare solo scenari di manutenzione specifici.
a Query di Esempio sql
/* Activity 1: Maintenance Notification Created */
SELECT
CAST(N.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Notification Created' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(N.CreationDate, ' '), N.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
N.MaintenanceOrderType,
N.MaintenancePriority,
N.Equipment AS EquipmentNumber,
N.FunctionalLocation,
N.MaintenancePlant,
N.MaintenancePlannerGroup AS ResponsiblePlannerGroup,
N.MainWorkCenter,
N.MaintenanceNotification AS NotificationNumber,
CAST(NULL AS DATE) AS TargetFinishDate,
N.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceNotification N
JOIN I_MaintenanceOrder O ON N.MaintenanceOrder = O.MaintenanceOrder
WHERE N.MaintenanceOrder IS NOT NULL AND N.MaintenanceOrder <> ''
UNION ALL
/* Activity 2: Maintenance Order Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Created' AS Activity,
O.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrder O
UNION ALL
/* Activity 3: Maintenance Priority Changed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Priority Changed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(H.UDATE, ' '), H.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
H.USERNAME AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM CDHDR H
JOIN CDPOS P ON H.OBJECTCLAS = P.OBJECTCLAS AND H.OBJECTID = P.OBJECTID AND H.CHANGENR = P.CHANGENR
JOIN I_MaintenanceOrder O ON O.MaintenanceOrder = H.OBJECTID
WHERE H.OBJECTCLAS = 'ORDER'
AND P.TABNAME = 'AFKO'
AND P.FNAME = 'PRIOK'
UNION ALL
/* Activity 4: Maintenance Order Released */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Released' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0002' /* REL Status */
AND J.INACT = ' '
UNION ALL
/* Activity 5: Material Component Added */
SELECT
CAST(C.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Material Component Added' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(C.CreationDate, ' '), COALESCE(C.CreationTime, '000000')), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrderComponent C
JOIN I_MaintenanceOrder O ON C.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 6: Purchase Requisition Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Purchase Requisition Created' AS Activity,
PR.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
PR.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_PurchasingDocumentItem PR
JOIN I_MaintenanceOrder O ON PR.ServiceMaintenanceOrder = O.MaintenanceOrder
WHERE PR.PurchasingDocumentCategory = 'B' /* Requisition */
UNION ALL
/* Activity 7: Goods Issue Posted */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Goods Issue Posted' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(MD.CreationDate, ' '), MD.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
MD.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaterialDocumentItem MD
JOIN I_MaintenanceOrder O ON MD.MaintenanceOrder = O.MaintenanceOrder
WHERE MD.GoodsMovementType = '261'
UNION ALL
/* Activity 8: Work Order Scheduled (Operation Dispatched) */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Work Order Scheduled' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrderOperation OP ON J.OBJNR = OP.MaintenanceOrderOperationInternalID
JOIN I_MaintenanceOrder O ON OP.MaintenanceOrder = O.MaintenanceOrder
WHERE J.STAT = 'I0019' /* DSP Dispatched Status */
AND J.INACT = ' '
UNION ALL
/* Activity 9: Order Operation Confirmed */
SELECT
CAST(CNF.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Operation Confirmed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(CNF.CreationDate, ' '), CNF.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
CNF.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintOrderConfirmation CNF
JOIN I_MaintenanceOrder O ON CNF.MaintenanceOrder = O.MaintenanceOrder
WHERE CNF.IsReversed = ' '
UNION ALL
/* Activity 10: Measurement Reading Recorded */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Measurement Reading Recorded' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(M.CreationDate, ' '), M.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
M.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MeasurementDocument M
JOIN I_MaintenanceOrder O ON M.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 11: Technical Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = ' '
UNION ALL
/* Activity 12: Technical Completion Reversed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Reversed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = 'X' /* Inactive indicates it was removed/reversed */
AND J.CHIND = 'U' /* Update indicator */
UNION ALL
/* Activity 13: Order Cost Settled */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Cost Settled' AS Activity,
JE.CreationDateTime AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
JE.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_ActualPlanJrnlEntryItem JE
JOIN I_MaintenanceOrder O ON JE.OrderID = O.MaintenanceOrder
WHERE JE.BusinessTransactionType = 'KOAO' /* Settlement */
UNION ALL
/* Activity 14: Business Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Business Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0046' /* CLSD Status */
AND J.INACT = ' ' Fasi
Identificare l'Interfaccia della Sorgente Dati: Determini come accederà all'interfaccia SQL di SAP S/4HANA. Questo viene tipicamente fatto tramite SAP HANA Studio, gli ABAP Development Tools (ADT) in Eclipse, o una stringa di connessione DBaaS se il database HANA è esposto al Suo livello di analisi.
Verificare la Disponibilità delle Viste CDS: Si assicuri che le viste Core Data Services (CDS) standard siano attive nel Suo sistema S/4HANA. Le viste primarie richieste sono I_MaintenanceOrder, I_MaintenanceOrderOperation, I_MaintenanceNotification, I_MaintOrderConfirmation e I_MeasurementDocument. Avrà anche bisogno di accedere alla tabella della cronologia dello stato del sistema JCDS e alle tabelle dei documenti di modifica (CDHDR/CDPOS) per ricostruire la cronologia completa degli eventi, poiché le viste CDS standard spesso mostrano solo lo stato attuale.
Preparare l'Ambiente SQL: Apra il Suo editor SQL. Si assicuri che il Suo utente abbia i permessi SELECT sulle viste SQL DDL (solitamente schema SAPABAP1 o simile) per gli artefatti elencati sopra.
Eseguire la Query di Estrazione: Copi lo script SQL fornito nel Suo editor. Sostituisca il placeholder [Your Client Number] con il Suo ID cliente SAP specifico (es. 100). Se sta filtrando per un intervallo di date specifico, aggiorni i filtri EventTimestamp nelle clausole WHERE.
Trasformazione dei Dati: La query gestisce la maggior parte delle trasformazioni, come il casting dei timestamp e la mappatura dei codici di stato a testo leggibile. Tuttavia, si assicuri che la colonna EventTimestamp sia formattata in ISO 8601 (YYYY-MM-DDTHH:MM:SS) durante l'esportazione se il Suo sistema di destinazione lo richiede.
Esportare il Risultato: Esegua la query ed esporti i risultati in un file CSV o Parquet. Si assicuri che la codifica sia impostata su UTF-8 per gestire i caratteri speciali nei nomi utente o nelle descrizioni.
Convalidare la Mappatura delle Colonne: Apra un campione dell'esportazione e si assicuri che le colonne MaintenanceWorkOrder, Activity e EventTimestamp siano completamente popolate. Verifichi che la colonna Activity contenga le stringhe specifiche elencate nei requisiti (es. Maintenance Order Created, Goods Issue Posted).
Caricare su ProcessMind: Importi il file flat convalidato in ProcessMind. Mappi la colonna Activity al campo Activity ID, MaintenanceWorkOrder al campo Case ID e EventTimestamp al campo Timestamp.
Configurazione
- Filtro Cliente: I sistemi SAP sono multi-client. Filtrare sempre per
MANDToClient(es. '100') per evitare dati duplicati o fughe di dati tra client. - Intervallo di Date: Si raccomanda di filtrare la
CreationDatedell'Ordine di Manutenzione per gli ultimi 6-12 mesi. L'interrogazione della cronologia completa diJCDS(Stato) oCDPOS(Documenti di Modifica) senza filtri di data può causare timeout di performance. - Chiave Lingua: La query predefinita è l'inglese ('E'). Se la Sua organizzazione utilizza una lingua primaria diversa per le descrizioni testuali, regoli il filtro lingua.
- Accesso al Sistema: Richiede l'accesso allo schema ABAP Core Data Services o alle tabelle HANA sottostanti. L'accesso alle tabelle raw JCDS e CDHDR è cruciale per l'analisi dello stato storico, poiché le viste CDS pure sono spesso basate su snapshot.
- Tipi di Ordine: La query estrae tutti i tipi di ordine. Potrebbe voler filtrare
MaintenanceOrderType(es. solo PM01, PM02) se desidera analizzare solo scenari di manutenzione specifici.
a Query di Esempio sql
/* Activity 1: Maintenance Notification Created */
SELECT
CAST(N.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Notification Created' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(N.CreationDate, ' '), N.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
N.MaintenanceOrderType,
N.MaintenancePriority,
N.Equipment AS EquipmentNumber,
N.FunctionalLocation,
N.MaintenancePlant,
N.MaintenancePlannerGroup AS ResponsiblePlannerGroup,
N.MainWorkCenter,
N.MaintenanceNotification AS NotificationNumber,
CAST(NULL AS DATE) AS TargetFinishDate,
N.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceNotification N
JOIN I_MaintenanceOrder O ON N.MaintenanceOrder = O.MaintenanceOrder
WHERE N.MaintenanceOrder IS NOT NULL AND N.MaintenanceOrder <> ''
UNION ALL
/* Activity 2: Maintenance Order Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Created' AS Activity,
O.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrder O
UNION ALL
/* Activity 3: Maintenance Priority Changed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Priority Changed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(H.UDATE, ' '), H.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
H.USERNAME AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM CDHDR H
JOIN CDPOS P ON H.OBJECTCLAS = P.OBJECTCLAS AND H.OBJECTID = P.OBJECTID AND H.CHANGENR = P.CHANGENR
JOIN I_MaintenanceOrder O ON O.MaintenanceOrder = H.OBJECTID
WHERE H.OBJECTCLAS = 'ORDER'
AND P.TABNAME = 'AFKO'
AND P.FNAME = 'PRIOK'
UNION ALL
/* Activity 4: Maintenance Order Released */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Released' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0002' /* REL Status */
AND J.INACT = ' '
UNION ALL
/* Activity 5: Material Component Added */
SELECT
CAST(C.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Material Component Added' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(C.CreationDate, ' '), COALESCE(C.CreationTime, '000000')), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrderComponent C
JOIN I_MaintenanceOrder O ON C.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 6: Purchase Requisition Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Purchase Requisition Created' AS Activity,
PR.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
PR.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_PurchasingDocumentItem PR
JOIN I_MaintenanceOrder O ON PR.ServiceMaintenanceOrder = O.MaintenanceOrder
WHERE PR.PurchasingDocumentCategory = 'B' /* Requisition */
UNION ALL
/* Activity 7: Goods Issue Posted */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Goods Issue Posted' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(MD.CreationDate, ' '), MD.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
MD.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaterialDocumentItem MD
JOIN I_MaintenanceOrder O ON MD.MaintenanceOrder = O.MaintenanceOrder
WHERE MD.GoodsMovementType = '261'
UNION ALL
/* Activity 8: Work Order Scheduled (Operation Dispatched) */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Work Order Scheduled' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrderOperation OP ON J.OBJNR = OP.MaintenanceOrderOperationInternalID
JOIN I_MaintenanceOrder O ON OP.MaintenanceOrder = O.MaintenanceOrder
WHERE J.STAT = 'I0019' /* DSP Dispatched Status */
AND J.INACT = ' '
UNION ALL
/* Activity 9: Order Operation Confirmed */
SELECT
CAST(CNF.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Operation Confirmed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(CNF.CreationDate, ' '), CNF.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
CNF.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintOrderConfirmation CNF
JOIN I_MaintenanceOrder O ON CNF.MaintenanceOrder = O.MaintenanceOrder
WHERE CNF.IsReversed = ' '
UNION ALL
/* Activity 10: Measurement Reading Recorded */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Measurement Reading Recorded' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(M.CreationDate, ' '), M.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
M.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MeasurementDocument M
JOIN I_MaintenanceOrder O ON M.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 11: Technical Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = ' '
UNION ALL
/* Activity 12: Technical Completion Reversed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Reversed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = 'X' /* Inactive indicates it was removed/reversed */
AND J.CHIND = 'U' /* Update indicator */
UNION ALL
/* Activity 13: Order Cost Settled */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Cost Settled' AS Activity,
JE.CreationDateTime AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
JE.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_ActualPlanJrnlEntryItem JE
JOIN I_MaintenanceOrder O ON JE.OrderID = O.MaintenanceOrder
WHERE JE.BusinessTransactionType = 'KOAO' /* Settlement */
UNION ALL
/* Activity 14: Business Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Business Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0046' /* CLSD Status */
AND J.INACT = ' '