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 | Descriptionn | ||
|---|---|---|---|
| Dernière mise à jour des données LastDataUpdate | Horodatage de la dernière extraction de données. | ||
| Descriptionn 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 la réactualisation des données pour les dashboards surveillant l'arriéré en temps réel ou l'adhésion aux SLA. Pourquoi est-ce important ? : Critique pour la gouvernance des données et l'établissement de la confiance dans les dashboards. Source des données : ETL Horodatage Exemples 2023-11-01T12:00:00Z | |||
| Horodatage de l'événement EventTimestamp | La date et l'heure exactes de l'activité. | ||
| Descriptionn 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 points de blocage entre les étapes de processus comme la 'Planification' et l''Exécution'. Pourquoi est-ce important ? : Requis pour séquencer correctement les événements et calculer tous les KPI basés sur la durée. Source des données : JEST (UDATE/UTIME), AFRU (ISDD/ISDZ), MKPF (CPUDT/CPUTM) Exemples 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| Nom de l'activité Activity | La tâche spécifique ou le changement de statut qui s'est produit. | ||
| Descriptionn Représente l'étape réalisée dans le processus de maintenance, telle que 'Ordre de Maintenance Créé', 'Sortie de Marchandises Comptabilisé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 est-ce important ? : Ceci définit le 'quoi' du processus, essentiel pour la découverte du flux de processus et de ses variantes. Source des données : Dérivé de JEST (Statut), AFRU (Confirmations), QMEL (Notifications) Exemples Ordre de maintenance crééCommande libéréeTechniquement terminé | |||
| Ordre de travail de maintenance MaintenanceWorkOrder | L'identifiant unique de l'ordre de travail de maintenance. | ||
| Descriptionn 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 complet d'un travail de maintenance, de la création à l'achèvement technique et commercial. Pourquoi est-ce important ? : C'est la clé unique qui lie toutes les activités, les coûts et les horodatages, pour visualiser du flux de processus. Source des données : Table SAP AUFK, champ AUFNR Exemples 00004001234540012345000040098765 | |||
| Système source SourceSystem | Le système d'où proviennent les données. | ||
| Descriptionn 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 est-ce important ? : Assure l'unicité et la traçabilité des données dans les environnements multi-systèmes. Source des données : Configuration du système / Journal d'extraction Exemples SAP_ECC_P01SAP_S4H_100 | |||
| Centre de travail principal MainWorkCenter | Le centre de travail principal ou l'équipe assignée pour exécuter l'ordre. | ||
| Descriptionn Le centre de travail principal (VAPLZ) représente le groupe de techniciens ou de machines qui effectueront le travail physique. Cet attribut est associé à 'Équipe' et est indispensable à 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 est-ce important ? : Permet l'analyse des performances au niveau des ressources. Source des données : 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. | ||
| Descriptionn Identifie l'utilisateur (ERNAM) responsable de l'initialisation de l'ordre de travail. Ceci est associé à '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 est-ce important ? : Permet l'analyse du comportement des utilisateurs et l'audit. Source des données : Table SAP AUFK, champ ERNAM Exemples JSMITHBSERVICEDDAVIS | |||
| Date de fin cible TargetFinishDate | La date d'achèvement prévue pour le travail de maintenance. | ||
| Descriptionn 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 est-ce important ? : Le point de référence pour tous les calculs de paiement à temps (OTD). Source des données : Table SAP AFKO, champ GLTRP Exemples 2023-12-012023-12-15 | |||
| Emplacement fonctionnel FunctionalLocation | L'emplacement hiérarchique où l'actif est installé. | ||
| Descriptionn 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 est-ce important ? : Permet une analyse spatiale et hiérarchique de la performance de maintenance. Source des données : 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. | ||
| Descriptionn Le groupe de planificateurs (INGRP) identifie l'équipe ou le département spécifique responsable de la planification du travail de maintenance. Ceci est associé à 'Département' et est impératif pour le tableau de bord 'Utilisation des Ressources et Planification' afin d'identifier quelles équipes de planification constituent des points de blocage dans la phase de prélèvement.paration. Pourquoi est-ce important ? : Identifie l'équipe administrative propriétaire du processus de planification. Source des données : Table SAP AUFK, champ INGRP Exemples M01ELEMEC | |||
| Numéro d'équipement EquipmentNumber | Identifiant de l'actif physique spécifique en maintenance. | ||
| Descriptionn 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 est-ce important ? : Connecte la performance du processus à des actifs physiques spécifiques. Source des données : Table SAP AUFK, champ EQUNR Exemples 10004567PUMP-001HVAC-202 | |||
| Numéro de notification NotificationNumber | La notification de maintenance qui a déclenché cet ordre. | ||
| Descriptionn 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 est-ce important ? : Relie la phase d'exécution à la phase de demande/détection. Source des données : Table SAP AUFK, champ QMNUM Exemples 1000050010000501 | |||
| Priorité de maintenance MaintenancePriority | Le niveau d'urgence assigné à l'ordre de travail. | ||
| Descriptionn 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 le KPI '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 est-ce important ? : Facteur clé pour l'analyse des SLA et l'identification des travaux d'urgence. Source des données : Table SAP AFKO, champ PRIOK (ou AUFK via vue) Exemples 1-Urgence2-Élevé3-Moyenne4-Faible | |||
| Statut du système SystemStatus | Le statut technique actuel de l'ordre (par exemple, REL, TECO). | ||
| Descriptionn 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 est-ce important ? : L'indicateur principal de l'étape du cycle de vie de l'ordre. Source des données : 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). | ||
| Descriptionn 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 indispensable 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 est-ce important ? : Fondamental pour segmenter l'analyse entre le travail planifié et imprévu. Source des données : Table SAP AUFK, champ AUART Exemples PM01PM02PM03 | |||
| Usine de maintenance MaintenancePlant | L'usine logistique responsable de la maintenance. | ||
| Descriptionn L'usine (WERKS) est l'unité organisationnelle principale en logistique. Elle sépare les données par installation physique. Cet attribut est indispensable pour comparer les performances entre différents sites et est associé à 'Unité Commerciale' pour prendre en charge le filtrage organisationnel de haut niveau dans les dashboards. Pourquoi est-ce important ? : Filtre organisationnel principal pour la comparaison des installations. Source des données : Table SAP AUFK, champ WERKS Exemples 100020003000 | |||
| Coût réel total TotalActualCost | Le coût réel total imputé à l'ordre de travail. | ||
| Descriptionn 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 indispensable pour déterminer la rentabilité de la réparation par rapport au remplacement des actifs. Pourquoi est-ce important ? : Fournit la dimension financière aux données de processus opérationnels. Source des données : Table SAP PMCO (somme du type de valeur 04 - Réel) Exemples 150.002500.500.00 | |||
| Est un reprises IsRework | Indicateur signalant si l'ordre a impliqué des activités de reprise. | ||
| Descriptionn 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 le KPI 'Taux de re-traitements de maintenance' et aide à identifier les problèmes de qualité. Pourquoi est-ce important ? : Facilite l'analyse du contrôle qualité. Source des données : Calculé à partir du flux de processus Exemples truefaux | |||
| Est un travail d'urgence IsEmergencyWork | Indicateur signalant si le bon de travail est une urgence. | ||
| Descriptionn 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 le KPI 'Ratio d'ordres de travail d'urgence' sans logique complexe dans la couche du tableau de bord. Pourquoi est-ce important ? : Simplifie le filtrage pour l'analyse critique de la maintenance réactive. Source des données : 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. | ||
| Descriptionn 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 est-ce important ? : Métrique de base pour l'analyse de la précision de la planification. Source des données : Table SAP AFKO (Somme du travail planifié de l'opération) Exemples 4.08.512.0 | |||
Activités de maintenance des actifs
| Activité | Descriptionn | ||
|---|---|---|---|
| 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 est-ce 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. Source des données : Table JCDS, statut I0046 (CLSD). Capture Comptabilisé 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 est-ce 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. Source des données : Table JCDS, statut I0045 (TECO). Capture Comptabilisé 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 est-ce 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. Source des données : Table AFRU (Confirmations d'ordre). Capture Comptabilisé 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 est-ce important ? : C'est l'événement d'ancrage central pour le cas, marquant la transition de la demande à la planification et à l'exécution. Source des données : Table AUFK, champ ERDAT (Date) et ERFZEIT (Heure). Capture Comptabilisé 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 est-ce important ? : Ce jalon sépare la phase de planification de la phase d'exécution, essentiel pour mesurer le délai de planification et d'estimation. Source des données : Table JCDS (Documents de changement de statut), statut I0002 (REL). Capture Comptabilisé 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 est-ce 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. Source des données : Table MSEG/MKPF, type de mouvement 261 (Sortie de marchandises pour ordre). Capture Comptabilisé 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 reprises dans le modèle de processus. | ||
| Pourquoi est-ce 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é. Source des données : Table JCDS, statut I0045 (TECO) passage à Inactif. Capture Comptabilisé 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 est-ce 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. Source des données : Table RESB, champ BDTER (Date de besoin) ou horodatage de création. Capture Comptabilisé 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 est-ce important ? : Suit l'aspect de la clôture financière et prend en charge le KPI de durée du règlement financier. Source des données : Table COBK (Objet CO : En-tête de document), liée à l'ordre. Capture Comptabilisé 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 est-ce important ? : Primordial pour analyser les retards causés par les fournisseurs externes ou l'approvisionnement en matériaux non stockés. Source des données : Table EBAN, liée via l'imputation à AUFK-AUFNR. Capture Comptabilisé 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 est-ce important ? : Primordial pour la maintenance conditionnelle et le suivi des temps de cycle d'inspection technique. Source des données : Table IMRG (Document de mesure), liée à l'équipement ou à l'emplacement fonctionnel. Capture Comptabilisé 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 est-ce important ? : Cette activité établit le début du processus de maintenance complet, permettant le calcul des temps de réaction entre la détection de défaut et la génération d'ordre. Source des données : Table QMEL, champ ERDAT (Date de création) et MZEIT (Heure). Liée à l'ordre via QMEL-AUFNR. Capture Comptabilisé 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 est-ce important ? : Mesure l'efficacité de l'allocation des ressources et prend en charge le tableau de bord d'utilisation et de planification des ressources. Source des données : 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 est-ce important ? : Le suivi des changements de priorité explique les écarts de processus et prend en charge le Moniteur d'Impact des Ordres de Travail d'Urgence en identifiant les escalades réactives. Source des données : Table CDPOS/CDHDR pour la classe d'objet AUFTRAG, champ PRIOK. Capture Comptabilisé 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 EventHorodatage 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 EventHorodatage 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 correspondance des colonnes: Ouvrez un échantillon de l'exportation et assurez-vous que les colonnes MaintenanceWorkOrder, Activity et EventHorodatage 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 EventHorodatage 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 impératif 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 EventHorodatage 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 EventHorodatage 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 correspondance des colonnes: Ouvrez un échantillon de l'exportation et assurez-vous que les colonnes MaintenanceWorkOrder, Activity et EventHorodatage 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 EventHorodatage 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 impératif 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 = ' '