Votre modèle de données de maintenance des actifs
Votre modèle de données de maintenance des actifs
- Attributs recommandés pour la collecte
- Activités de maintenance critiques à suivre
- Guide d'extraction technique pour SAP PM
Attributs de maintenance des actifs
| Nom | Description | ||
|---|---|---|---|
| Dernière mise à jour des données LastDataUpdate | Horodatage de la dernière extraction de données. | ||
| Description Indique la dernière date de rafraîchissement des données dans le modèle de données de Process Mining. Cela permet aux analystes de comprendre l'actualité des informations et aide à valider la fraîcheur des données pour les tableaux de bord surveillant l'arriéré en temps réel ou l'adhésion aux SLA. Pourquoi c'est important Critique pour la gouvernance des données et l'établissement de la confiance dans les tableaux de bord. Où obtenir ETL Timestamp Exemples 2023-11-01T12:00:00Z | |||
| Nom de l'activité Activity | La tâche spécifique ou le changement de statut qui s'est produit. | ||
| Description Représente l'étape réalisée dans le processus de maintenance, telle que 'Ordre de Maintenance Créé', 'Sortie de Marchandises Enregistrée' ou 'Opération d'Ordre Confirmée'. Celles-ci sont généralement dérivées des tables de gestion des statuts (JEST) pour les changements de statut, ou des tables de transactions (AFRU pour les confirmations, MKPF pour les mouvements de matériel). Cet attribut détermine les nœuds dans la carte de processus. Pourquoi c'est important Ceci définit le 'quoi' du processus, essentiel pour la découverte du flux de processus et de ses variantes. Où obtenir Dérivé de JEST (Statut), AFRU (Confirmations), QMEL (Notifications) Exemples Ordre de maintenance crééCommande libéréeTechniquement achevé | |||
| Ordre de maintenance MaintenanceWorkOrder | L'identifiant unique de l'ordre de travail de maintenance. | ||
| Description L'ordre de travail de maintenance est le document central dans SAP Plant Maintenance (table AUFK, champ AUFNR). Il relie l'exigence de maintenance (Notification) aux ressources d'exécution, aux matériaux et aux coûts. Dans l'analyse de Process Mining, il sert d'identifiant de cas, permettant la reconstruction du cycle de vie de bout en bout d'un travail de maintenance, de la création à l'achèvement technique et commercial. Pourquoi c'est important C'est la clé unique qui lie toutes les activités, les coûts et les horodatages, permettant la visualisation du flux de processus. Où obtenir Table SAP AUFK, champ AUFNR Exemples 00004001234540012345000040098765 | |||
| Système source SourceSystem | Le système d'où proviennent les données. | ||
| Description Identifie le client ou l'instance SAP spécifique (par exemple, 'SAP_PM_PROD'). Dans un environnement avec plusieurs systèmes ERP, cet attribut aide à distinguer les enregistrements qui pourraient partager des ID identiques mais appartiennent à des entités légales ou environnements système différents. Pourquoi c'est important Assure l'unicité et la lignée des données dans les environnements multi-systèmes. Où obtenir Configuration du système / Journal d'extraction Exemples SAP_ECC_P01SAP_S4H_100 | |||
| Timestamp de l'événement EventTimestamp | La date et l'heure exactes de l'activité. | ||
| Description Enregistre le moment précis où un événement s'est produit. Pour les changements de statut, cela provient de l'heure de mise à jour du statut système ; pour les opérations, c'est l'heure de confirmation. Des horodatages précis sont essentiels pour calculer les temps de cycle, les délais et identifier les goulets d'étranglement entre les étapes de processus comme la 'Planification' et l''Exécution'. Pourquoi c'est important Requis pour séquencer correctement les événements et calculer tous les KPI basés sur la durée. Où obtenir JEST (UDATE/UTIME), AFRU (ISDD/ISDZ), MKPF (CPUDT/CPUTM) Exemples 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| Centre de travail principal MainWorkCenter | Le centre de travail principal ou l'équipe assignée pour exécuter l'ordre. | ||
| Description Le centre de travail principal (VAPLZ) représente le groupe de techniciens ou de machines qui effectueront le travail physique. Cet attribut est mappé à 'Équipe' et est vital pour analyser l'efficacité de l'exécution, comme le 'Temps Moyen de Réparation' par équipe. Il aide à distinguer la main-d'œuvre interne des entrepreneurs externes. Pourquoi c'est important Permet l'analyse des performances au niveau des ressources. Où obtenir Table SAP AFKO, champ VAPLZ (ou AUFK-VAPLZ selon la configuration) Exemples MECH_01ELEC_TEAMEXT_CONT | |||
| Créé par l'utilisateur CreatedByUser | Le nom d'utilisateur de la personne qui a créé l'ordre. | ||
| Description Identifie l'utilisateur (ERNAM) responsable de l'initialisation de l'ordre de travail. Ceci est mappé à 'Utilisateur' dans le modèle Générique. Cela permet l'analyse de la création manuelle vs automatisée et aide à auditer l'activité 'Ordre de maintenance créé'. Pourquoi c'est important Permet l'analyse du comportement des utilisateurs et l'audit. Où obtenir Table SAP AUFK, champ ERNAM Exemples JSMITHBSERVICEDDAVIS | |||
| Date de fin cible TargetFinishDate | La date d'achèvement prévue pour le travail de maintenance. | ||
| Description Cette date (généralement la date de fin de base - GLTRP) représente la date limite pour l'ordre de travail. Elle est comparée à l'horodatage d'achèvement réel pour calculer le KPI du 'Taux de Conformité aux SLA'. Elle est la référence pour déterminer si un ordre de travail est à temps ou en retard. Pourquoi c'est important Le point de référence pour tous les calculs de livraison à temps (OTD). Où obtenir Table SAP AFKO, champ GLTRP Exemples 2023-12-012023-12-15 | |||
| Emplacement fonctionnel FunctionalLocation | L'emplacement hiérarchique où l'actif est installé. | ||
| Description Représente l'emplacement dans la structure technique où la tâche de maintenance est effectuée (TPLNR). Contrairement aux équipements, qui se déplacent, l'emplacement fonctionnel est statique. Cet attribut prend en charge le tableau de bord 'Temps de Cycle d'Inspection Technique' en permettant des comparaisons de performance entre différentes zones de l'usine (par exemple, chaufferie vs. ligne d'emballage). Pourquoi c'est important Permet une analyse spatiale et hiérarchique de la performance de maintenance. Où obtenir Table SAP IFLOT, champ TPLNR (ou via AUFK-TPLNR) Exemples PLANT1-BLD2-LN01US-TX-DAL-01 | |||
| Groupe de planificateurs ResponsiblePlannerGroup | Le groupe de planificateurs responsable du traitement de l'ordre. | ||
| Description Le groupe de planificateurs (INGRP) identifie l'équipe ou le département spécifique responsable de la planification du travail de maintenance. Ceci est mappé à 'Département' et est crucial pour le tableau de bord 'Utilisation des Ressources et Planification' afin d'identifier quelles équipes de planification constituent des goulets d'étranglement dans la phase de préparation. Pourquoi c'est important Identifie l'équipe administrative propriétaire du processus de planification. Où obtenir Table SAP AUFK, champ INGRP Exemples M01ELEMEC | |||
| Numéro d'équipement EquipmentNumber | Identifiant de l'actif physique spécifique en maintenance. | ||
| Description Le numéro d'équipement (EQUNR) identifie la machine individuelle ou l'objet d'actif. En agrégeant les données sur ce champ, les analystes peuvent calculer le tableau de bord 'Coût de Maintenance et Débit des Actifs' pour identifier les équipements 'défaillants' qui nécessitent des réparations fréquentes et coûteuses. Il permet une analyse de maintenance centrée sur la fiabilité. Pourquoi c'est important Connecte la performance du processus à des actifs physiques spécifiques. Où obtenir Table SAP AUFK, champ EQUNR Exemples 10004567PUMP-001HVAC-202 | |||
| Numéro de notification NotificationNumber | La notification de maintenance qui a déclenché cet ordre. | ||
| Description Le numéro de notification (QMNUM) relie l'ordre de travail à la demande initiale (Notification). Ce lien est nécessaire pour calculer le délai total, de la 'Demande de Maintenance Reçue' à l'achèvement. Sans cela, l'analyse manque la phase initiale de détection et de reporting du cycle de vie de la maintenance. Pourquoi c'est important Relie la phase d'exécution à la phase de demande/détection. Où obtenir Table SAP AUFK, champ QMNUM Exemples 1000050010000501 | |||
| Priorité de maintenance MaintenancePriority | Le niveau d'urgence assigné à l'ordre de travail. | ||
| Description Indique la priorité (PRIOK) de la tâche de maintenance, telle que '1-Très Élevée', '2-Élevée' ou '3-Moyenne'. Ce champ est l'entrée directe pour l'ICP 'Ratio d'ordres de travail d'urgence'. L'analyse du flux par priorité aide à identifier si les ordres à haute priorité sont réellement accélérés dans le système par rapport au travail de routine. Pourquoi c'est important Facteur clé pour l'analyse des SLA et l'identification des travaux d'urgence. Où obtenir Table SAP AFKO, champ PRIOK (ou AUFK via vue) Exemples 1-Urgence2-Élevée3-Moyenne4-Faible | |||
| Statut du système SystemStatus | Le statut technique actuel de l'ordre (par exemple, REL, TECO). | ||
| Description Une chaîne de caractères ou une liste concaténée de statuts système actifs (de JEST) actuellement appliqués à l'ordre. Les valeurs courantes incluent CRTD (Créé), REL (Libéré), TECO (Achèvement technique) et CLSD (Fermé). Cela aide à filtrer les cas ouverts par rapport aux cas fermés dans le 'Moniteur d'arriéré et de travail en cours'. Pourquoi c'est important L'indicateur principal de l'étape du cycle de vie de l'ordre. Où obtenir Module de fonction SAP STATUS_TEXT_EDIT ou table JEST Exemples REL CNFTECOCRTD MACM | |||
| Type d'ordre de maintenance MaintenanceOrderType | Catégorise l'ordre de travail (par exemple, Préventif, Correctif). | ||
| Description Le type d'ordre (AUART) dans SAP PM distingue la nature du travail de maintenance. Les types courants incluent PM01 (Correctif), PM02 (Préventif) et PM03 (Rénovation). Cet attribut est essentiel pour le 'Moniteur d'Impact des Ordres de Travail d'Urgence' et pour segmenter les variantes de processus, car les workflows préventifs diffèrent significativement des réactifs. Pourquoi c'est important Fondamental pour segmenter l'analyse entre le travail planifié et imprévu. Où obtenir Table SAP AUFK, champ AUART Exemples PM01PM02PM03 | |||
| Usine de maintenance MaintenancePlant | L'usine logistique responsable de la maintenance. | ||
| Description L'usine (WERKS) est l'unité organisationnelle principale en logistique. Elle sépare les données par installation physique. Cet attribut est essentiel pour comparer les performances entre différents sites et est mappé à 'Unité Commerciale' pour prendre en charge le filtrage organisationnel de haut niveau dans les tableaux de bord. Pourquoi c'est important Filtre organisationnel principal pour la comparaison des installations. Où obtenir Table SAP AUFK, champ WERKS Exemples 100020003000 | |||
| Coût réel total TotalActualCost | Le coût réel total imputé à l'ordre de travail. | ||
| Description Coûts agrégés de la main-d'œuvre, des matériaux et des services (de la table PMCO). Cet attribut soutient le tableau de bord 'Coût et débit de la maintenance des actifs', permettant aux gestionnaires de visualiser l'impact financier des activités de maintenance. Il est essentiel pour déterminer la rentabilité de la réparation par rapport au remplacement des actifs. Pourquoi c'est important Fournit la dimension financière aux données de processus opérationnels. Où obtenir Table SAP PMCO (somme du type de valeur 04 - Réel) Exemples 150.002500.500.00 | |||
| Durée de l'activité ActivityDuration | Temps nécessaire pour accomplir l'activité spécifique. | ||
| Description La durée de l'étape spécifique, particulièrement utile pour les activités 'Opération Confirmée' où les heures de main-d'œuvre sont enregistrées. Ceci est mappé à 'ProcessingTime' dans le modèle générique et est utilisé pour calculer l'efficacité et l'utilisation de la main-d'œuvre. Pourquoi c'est important Mesure l'effort réel consacré aux tâches. Où obtenir Table SAP AFRU, champ ISDD/ISDZ vs IEDD/IEDZ Exemples 2,5 heures45 minutes | |||
| Est un retravail IsRework | Indicateur signalant si l'ordre a impliqué des activités de reprise. | ||
| Description Un booléen calculé qui identifie si une boucle de processus s'est produite, spécifiquement si l'activité 'Tâche de maintenance exécutée' a eu lieu plus d'une fois ou si le statut est revenu de 'Terminé techniquement' à 'En cours'. Cela soutient l'ICP 'Taux de retouches de maintenance' et aide à identifier les problèmes de qualité. Pourquoi c'est important Soutient directement l'analyse du contrôle qualité. Où obtenir Calculé à partir du flux de processus Exemples truefaux | |||
| Est un travail d'urgence IsEmergencyWork | Indicateur signalant si l'ordre de travail est une urgence. | ||
| Description Un attribut booléen calculé en fonction de la priorité de maintenance. Si la priorité est '1' (ou le code spécifique pour Urgence dans la configuration), cet indicateur est vrai. Cela simplifie le filtrage et la construction de l'ICP 'Ratio d'ordres de travail d'urgence' sans logique complexe dans la couche du tableau de bord. Pourquoi c'est important Simplifie le filtrage pour l'analyse critique de la maintenance réactive. Où obtenir Calculé à partir de la priorité de maintenance Exemples truefaux | |||
| Heures de main-d'œuvre planifiées PlannedLaborHours | Les heures de main-d'œuvre estimées pour l'ordre. | ||
| Description Le travail planifié total (ARBEI) des opérations d'ordre. La comparaison de ceci avec la Durée d'Activité réelle aide dans le tableau de bord 'Performance de Planification et d'Estimation' à évaluer la précision de la planification de la maintenance. Pourquoi c'est important Métrique de base pour l'analyse de la précision de la planification. Où obtenir Table SAP AFKO (Somme du travail planifié de l'opération) Exemples 4.08.512.0 | |||
Activités de maintenance des actifs
| Activité | Description | ||
|---|---|---|---|
| Achèvement commercial défini | Marque la clôture administrative finale de l'ordre de travail, empêchant toute nouvelle imputation de coûts. Capturé via le changement de statut vers CLSD (Fermé). | ||
| Pourquoi c'est important Représente la fin absolue du cycle de vie de l'ordre, essentielle pour la précision des données et la conformité des enregistrements. Où obtenir Table JCDS, statut I0046 (CLSD). Capture Enregistré lorsque le statut passe à CLSD dans JCDS Type d'événement explicit | |||
| Achèvement technique défini | Marque le travail de maintenance comme physiquement et techniquement terminé. Capturé via le changement de statut vers TECO (Achèvement technique). | ||
| Pourquoi c'est important Le point final le plus critique pour l'analyse opérationnelle, signifiant que l'actif est restauré et que la maintenance est terminée. Où obtenir Table JCDS, statut I0045 (TECO). Capture Enregistré lorsque le statut passe à TECO dans JCDS Type d'événement explicit | |||
| Opération d'ordre confirmée | Représente l'enregistrement du temps réel passé par un technicien sur une opération spécifique. Ceci capture le travail d'exécution réel sur l'actif. | ||
| Pourquoi c'est important Cette activité est la source de données principale pour le temps moyen de réparation et les calculs de coûts de main-d'œuvre. Où obtenir Table AFRU (Confirmations d'ordre). Capture Enregistré lorsque la transaction IW41 est exécutée Type d'événement explicit | |||
| Ordre de maintenance créé | Marque la génération de l'objet ordre de maintenance dans le système. Capturé explicitement à partir de l'horodatage de création de la table de données de base de l'ordre. | ||
| Pourquoi c'est important C'est l'événement d'ancrage central pour le cas, marquant la transition de la demande à la planification et à l'exécution. Où obtenir Table AUFK, champ ERDAT (Date) et ERFZEIT (Heure). Capture Enregistré lorsque la transaction IW31 est exécutée Type d'événement explicit | |||
| Ordre de maintenance libéré | Indique que la planification est terminée et que l'ordre est libéré pour exécution. Capturé en surveillant le changement de statut vers REL dans les journaux de statut du système. | ||
| Pourquoi c'est important Ce jalon sépare la phase de planification de la phase d'exécution, crucial pour mesurer le délai de planification et d'estimation. Où obtenir Table JCDS (Documents de changement de statut), statut I0002 (REL). Capture Enregistré lorsque le statut passe à REL dans JCDS Type d'événement explicit | |||
| Sortie de marchandises enregistrée | Enregistre la consommation physique de pièces de rechange ou de matériaux par rapport à l'ordre de travail. Capturé à partir des en-têtes de documents matériels liés à l'ordre. | ||
| Pourquoi c'est important Confirme que les pièces sont disponibles et ont été prélevées, impactant directement l'analyse du temps d'attente de disponibilité des pièces. Où obtenir Table MSEG/MKPF, type de mouvement 261 (Sortie de marchandises pour ordre). Capture Enregistré lorsque la transaction MIGO/MB1A est exécutée Type d'événement explicit | |||
| Achèvement technique annulé | Enregistre la révocation du statut d'achèvement technique, indiquant que l'ordre a été rouvert. Ceci crée une boucle de retravail dans le modèle de processus. | ||
| Pourquoi c'est important Indicateur principal pour le KPI du Taux de Retravail en Maintenance, mettant en évidence les clôtures prématurées ou les problèmes de qualité. Où obtenir Table JCDS, statut I0045 (TECO) passage à Inactif. Capture Enregistré lorsque le statut TECO est désactivé Type d'événement explicit | |||
| Composant matériel ajouté | Enregistre l'ajout de pièces de rechange ou de matériaux à la liste des composants de l'ordre de travail. Capturé lors de la création d'un poste de réservation. | ||
| Pourquoi c'est important Identifie le début du cycle d'approvisionnement des pièces requises, soutenant le tableau de bord des délais d'approvisionnement en pièces de rechange. Où obtenir Table RESB, champ BDTER (Date de besoin) ou horodatage de création. Capture Enregistré lorsqu'une ligne est ajoutée à RESB Type d'événement explicit | |||
| Coût de l'ordre réglé | Indique que les coûts collectés sur l'ordre ont été transférés à l'objet de contrôle (par exemple, Centre de coûts). Capturé à partir du document de contrôle. | ||
| Pourquoi c'est important Suit l'aspect de la clôture financière et prend en charge le KPI de durée du règlement financier. Où obtenir Table COBK (Objet CO : En-tête de document), liée à l'ordre. Capture Enregistré lors de l'exécution de la transaction de règlement KO88 Type d'événement explicit | |||
| Demande d'achat créée | Signifie qu'une demande d'approvisionnement ou de services externes a été générée. Ceci relie l'ordre de maintenance interne à la chaîne d'approvisionnement externe. | ||
| Pourquoi c'est important Crucial pour analyser les retards causés par les fournisseurs externes ou l'approvisionnement en matériaux non stockés. Où obtenir Table EBAN, liée via l'imputation à AUFK-AUFNR. Capture Enregistré lors de la création de l'enregistrement EBAN Type d'événement explicit | |||
| Lecture de mesure enregistrée | Enregistre l'entrée d'un document de mesure, tel qu'une lecture de compteur ou une évaluation de condition. Sert souvent d'événement d'inspection technique. | ||
| Pourquoi c'est important Essentiel pour la maintenance conditionnelle et le suivi des temps de cycle d'inspection technique. Où obtenir Table IMRG (Document de mesure), liée à l'équipement ou à l'emplacement fonctionnel. Capture Enregistré lors de la création du document de mesure Type d'événement explicit | |||
| Notification de maintenance créée | Enregistre la création initiale d'une notification de maintenance qui est souvent le déclencheur d'un ordre de travail. Capturée à partir de l'horodatage de création de la table QMEL, cette activité relie la demande en amont à l'ordre d'exécution. | ||
| Pourquoi c'est important Cette activité établit le début du processus de maintenance de bout en bout, permettant le calcul des temps de réaction entre la détection de défaut et la génération d'ordre. Où obtenir Table QMEL, champ ERDAT (Date de création) et MZEIT (Heure). Liée à l'ordre via QMEL-AUFNR. Capture Enregistré lors de la création de l'enregistrement dans la table QMEL Type d'événement explicit | |||
| Ordre de travail planifié | Indique la planification spécifique des opérations à une capacité ou une date. Déduit de l'affectation du statut d'expédition aux opérations. | ||
| Pourquoi c'est important Mesure l'efficacité de l'allocation des ressources et prend en charge le tableau de bord d'utilisation et de planification des ressources. Où obtenir Table JCDS (Documents de changement de statut) pour les opérations (ObjType OV), statut I0009 (DSPT). Capture Comparer le champ de statut avant/après Type d'événement inferred | |||
| Priorité de maintenance modifiée | Enregistre une mise à jour du niveau de priorité de l'ordre de travail, telle que l'escalade vers l'Urgence. Dérivé des documents de modification associés aux données de base de l'ordre. | ||
| Pourquoi c'est important Le suivi des changements de priorité explique les déviations de processus et prend en charge le Moniteur d'Impact des Ordres de Travail d'Urgence en identifiant les escalades réactives. Où obtenir Table CDPOS/CDHDR pour la classe d'objet AUFTRAG, champ PRIOK. Capture Enregistré dans les documents de modification (CDPOS) Type d'événement explicit | |||
Guides d'extraction
Étapes
Identifier l'interface de la source de données: Déterminez comment vous accéderez à l'interface SQL de SAP S/4HANA. Cela se fait généralement via SAP HANA Studio, les outils de développement ABAP (ADT) dans Eclipse, ou une chaîne de connexion DBaaS si la base de données HANA est exposée à votre couche d'analyse.
Vérifier la disponibilité des vues CDS: Assurez-vous que les vues Core Data Services (CDS) standard sont actives dans votre système S/4HANA. Les vues principales requises sont I_MaintenanceOrder, I_MaintenanceOrderOperation, I_MaintenanceNotification, I_MaintOrderConfirmation et I_MeasurementDocument. Vous aurez également besoin d'un accès à la table d'historique des statuts système JCDS et aux tables de documents de modification (CDHDR/CDPOS) pour reconstituer l'historique complet des événements, car les vues CDS standard ne montrent souvent que l'état actuel.
Préparer l'environnement SQL: Ouvrez votre éditeur SQL. Assurez-vous que votre utilisateur dispose des autorisations SELECT sur les vues SQL DDL (généralement le schéma SAPABAP1 ou similaire) pour les artefacts listés ci-dessus.
Exécuter la requête d'extraction: Copiez le script SQL fourni dans votre éditeur. Remplacez l'espace réservé [Your Client Number] par votre ID client SAP spécifique (par exemple, 100). Si vous filtrez par une plage de dates spécifique, mettez à jour les filtres EventTimestamp dans les clauses WHERE.
Transformation des données: La requête gère la plupart des transformations, telles que le transtypage des horodatages et le mappage des codes de statut en texte lisible. Cependant, assurez-vous que la colonne EventTimestamp est formatée selon la norme ISO 8601 (AAAA-MM-JJTHH:MM:SS) lors de l'exportation si votre système cible l'exige.
Exporter le résultat: Exécutez la requête et exportez les résultats vers un fichier CSV ou Parquet. Assurez-vous que l'encodage est défini sur UTF-8 pour gérer les caractères spéciaux dans les noms d'utilisateur ou les descriptions.
Valider le mappage des colonnes: Ouvrez un échantillon de l'exportation et assurez-vous que les colonnes MaintenanceWorkOrder, Activity et EventTimestamp sont entièrement renseignées. Vérifiez que la colonne Activity contient les chaînes spécifiques listées dans les exigences (par exemple, Maintenance Order Created, Goods Issue Posted).
Télécharger vers ProcessMind: Importez le fichier plat validé dans ProcessMind. Mappez la colonne Activity au champ ID d'activité, MaintenanceWorkOrder au champ ID de cas et EventTimestamp au champ Horodatage.
Configuration
- Filtre client: Les systèmes SAP sont multi-clients. Filtrez toujours par
MANDTouClient(par exemple, '100') pour éviter les doublons de données ou les fuites inter-clients. - Plage de dates: Il est recommandé de filtrer la
CreationDatede l'ordre de maintenance pour les 6 à 12 derniers mois. L'interrogation de l'historique complet deJCDS(statut) ouCDPOS(documents de modification) sans filtres de date peut entraîner des délais d'expiration de performance. - Clé de langue: La requête est par défaut en anglais ('E'). Si votre organisation utilise une langue primaire différente pour les descriptions textuelles, ajustez le filtre de langue.
- Accès système: Nécessite un accès au schéma ABAP Core Data Services ou aux tables HANA sous-jacentes. L'accès aux tables brutes JCDS et CDHDR est crucial pour l'analyse historique des statuts, car les vues CDS pures sont souvent basées sur des instantanés.
- Types d'ordre: La requête extrait tous les types d'ordre. Vous pourriez souhaiter filtrer
MaintenanceOrderType(par exemple, seulement PM01, PM02) si vous ne souhaitez analyser que des scénarios de maintenance spécifiques.
a Exemple de requête 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 = ' ' Étapes
Identifier l'interface de la source de données: Déterminez comment vous accéderez à l'interface SQL de SAP S/4HANA. Cela se fait généralement via SAP HANA Studio, les outils de développement ABAP (ADT) dans Eclipse, ou une chaîne de connexion DBaaS si la base de données HANA est exposée à votre couche d'analyse.
Vérifier la disponibilité des vues CDS: Assurez-vous que les vues Core Data Services (CDS) standard sont actives dans votre système S/4HANA. Les vues principales requises sont I_MaintenanceOrder, I_MaintenanceOrderOperation, I_MaintenanceNotification, I_MaintOrderConfirmation et I_MeasurementDocument. Vous aurez également besoin d'un accès à la table d'historique des statuts système JCDS et aux tables de documents de modification (CDHDR/CDPOS) pour reconstituer l'historique complet des événements, car les vues CDS standard ne montrent souvent que l'état actuel.
Préparer l'environnement SQL: Ouvrez votre éditeur SQL. Assurez-vous que votre utilisateur dispose des autorisations SELECT sur les vues SQL DDL (généralement le schéma SAPABAP1 ou similaire) pour les artefacts listés ci-dessus.
Exécuter la requête d'extraction: Copiez le script SQL fourni dans votre éditeur. Remplacez l'espace réservé [Your Client Number] par votre ID client SAP spécifique (par exemple, 100). Si vous filtrez par une plage de dates spécifique, mettez à jour les filtres EventTimestamp dans les clauses WHERE.
Transformation des données: La requête gère la plupart des transformations, telles que le transtypage des horodatages et le mappage des codes de statut en texte lisible. Cependant, assurez-vous que la colonne EventTimestamp est formatée selon la norme ISO 8601 (AAAA-MM-JJTHH:MM:SS) lors de l'exportation si votre système cible l'exige.
Exporter le résultat: Exécutez la requête et exportez les résultats vers un fichier CSV ou Parquet. Assurez-vous que l'encodage est défini sur UTF-8 pour gérer les caractères spéciaux dans les noms d'utilisateur ou les descriptions.
Valider le mappage des colonnes: Ouvrez un échantillon de l'exportation et assurez-vous que les colonnes MaintenanceWorkOrder, Activity et EventTimestamp sont entièrement renseignées. Vérifiez que la colonne Activity contient les chaînes spécifiques listées dans les exigences (par exemple, Maintenance Order Created, Goods Issue Posted).
Télécharger vers ProcessMind: Importez le fichier plat validé dans ProcessMind. Mappez la colonne Activity au champ ID d'activité, MaintenanceWorkOrder au champ ID de cas et EventTimestamp au champ Horodatage.
Configuration
- Filtre client: Les systèmes SAP sont multi-clients. Filtrez toujours par
MANDTouClient(par exemple, '100') pour éviter les doublons de données ou les fuites inter-clients. - Plage de dates: Il est recommandé de filtrer la
CreationDatede l'ordre de maintenance pour les 6 à 12 derniers mois. L'interrogation de l'historique complet deJCDS(statut) ouCDPOS(documents de modification) sans filtres de date peut entraîner des délais d'expiration de performance. - Clé de langue: La requête est par défaut en anglais ('E'). Si votre organisation utilise une langue primaire différente pour les descriptions textuelles, ajustez le filtre de langue.
- Accès système: Nécessite un accès au schéma ABAP Core Data Services ou aux tables HANA sous-jacentes. L'accès aux tables brutes JCDS et CDHDR est crucial pour l'analyse historique des statuts, car les vues CDS pures sont souvent basées sur des instantanés.
- Types d'ordre: La requête extrait tous les types d'ordre. Vous pourriez souhaiter filtrer
MaintenanceOrderType(par exemple, seulement PM01, PM02) si vous ne souhaitez analyser que des scénarios de maintenance spécifiques.
a Exemple de requête 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 = ' '