Votre modèle de données pour la planification de la production
Votre modèle de données pour la planification de la production
- Attributs recommandés à collecter
- Activités clés à suivre
- Conseils pratiques pour l’extraction
Attributs de planification de la production
| Nom | Description | ||
|---|---|---|---|
| Heure de l’événement EventTime | Horodatage précis indiquant le moment où l’activité a eu lieu. | ||
| Description L’heure de l’événement indique la date et l’heure auxquelles une activité précise a été exécutée ou un statut consigné dans le système. Cet horodatage est indispensable à toute analyse temporelle du processus, notamment au calcul des temps de cycle, des temps d’attente et de la durée totale du processus. Des horodatages exacts sont essentiels pour remettre les événements dans le bon ordre et analyser les performances. Ils permettent de mesurer le délai entre les activités, de repérer les retards et d’évaluer les résultats par rapport aux calendriers ou aux accords de niveau de service. Pour la planification de la production, ils aident à comprendre la durée de chaque étape de planification et d’exécution. Pourquoi est-ce important ? Cet attribut établit l’ordre chronologique des événements, indispensable au calcul des durées, à l’analyse des performances et au repérage des goulots d’étranglement. Où trouver ces données Cet attribut est calculé à partir des différents champs de date et d’heure associés aux transactions et aux changements de statut, comme BUDAT (date de comptabilisation) dans les documents matériels ou les horodatages de modification dans CDHDR. Exemples 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| Nom de l’activité ActivityName | Nom de l’événement métier ou système survenu à un moment précis pour un ordre de production. | ||
| Description Le nom de l’activité décrit une étape précise ou un changement de statut dans le processus de planification de la production. Ces événements sont extraits des journaux de modifications, des mises à jour de statut et des enregistrements de transactions dans SAP ECC PP. Ils correspondent à des étapes importantes comme « Ordre de production créé », « Disponibilité des matériaux vérifiée » ou « Entrée de marchandises comptabilisée ». Cet attribut constitue la base de la cartographie du processus. Il permet aux analystes de visualiser la séquence des événements, de repérer les variantes du processus et d’identifier les goulots d’étranglement ou les boucles de reprise. Des noms d’activité clairs et suffisamment détaillés sont indispensables pour créer un modèle de processus précis, fidèle à la réalité des opérations. Pourquoi est-ce important ? Il définit les étapes de la cartographie du processus et permet de visualiser, d’analyser et de comprendre le flux de travail de production. Où trouver ces données Cet attribut est généré à partir de diverses sources, notamment les changements de statut dans les tables JEST/JSTO, les journaux de transactions et les documents de modification dans CDHDR/CDPOS. Exemples Ordre de production lancéSortie de marchandises comptabiliséeConfirmation finale enregistréeOrdre techniquement achevé | |||
| Ordre de production ProductionOrder | Identifiant unique d’un ordre de production, qui sert d’identifiant de cas principal pour le processus de planification et d’exécution de la production. | ||
| Description Le numéro d’ordre de production est une clé alphanumérique unique attribuée à chaque ordre de fabrication dans SAP ECC PP. Il constitue l’objet central reliant toutes les activités associées, de la création et de la planification à l’exécution et au règlement final. En Process Mining, cet attribut est essentiel pour regrouper tous les événements associés à une même production. Vous pouvez ainsi analyser de bout en bout le cycle de vie de chaque ordre de production, suivre son avancement, mesurer les temps de cycle et repérer les écarts par rapport au processus standard. L’analyse par ordre de production montre clairement comment les demandes de fabrication sont traitées. Pourquoi est-ce important ? Cet identifiant central relie tous les événements associés au processus et permet de reconstituer et d’analyser chaque parcours de production, du début à la fin. Où trouver ces données Cet attribut se trouve dans la table SAP AUFK, champ AUFNR. Exemples 1000345100034610003471000348 | |||
| Dernière mise à jour des données LastDataUpdate | Horodatage indiquant à quel moment les données de cet événement ont été actualisées ou extraites pour la dernière fois. | ||
| Description Cet attribut enregistre la date et l’heure auxquelles les données ont été transférées du système source vers l’outil de Process Mining. Il ne correspond pas à un événement métier, mais à un horodatage technique utilisé pour la gestion des données. Il sert principalement à vérifier l’actualité des données et à aider les administrateurs et les analystes à déterminer leur ancienneté. Il est essentiel de s’assurer que l’analyse du processus repose sur des informations à jour, en particulier lors du suivi des opérations en cours. Pourquoi est-ce important ? Il confirme que les données sont à jour et que les analyses reposent sur les informations les plus récentes disponibles. Où trouver ces données Cette valeur est généralement générée et horodatée par l’outil ou le script d’extraction, de transformation et de chargement des données (ETL), lors de leur ingestion. Exemples 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Système source SourceSystem | Identifie le système précis dont les données ont été extraites. | ||
| Description Cet attribut indique le système d’origine de l’enregistrement, par exemple le nom ou l’identifiant de l’instance SAP ECC concernée. Dans les organisations qui utilisent plusieurs systèmes ERP ou combinent des plateformes anciennes et récentes, ce champ est essentiel pour retracer l’origine des données et les replacer dans leur contexte. Il permet de filtrer les processus selon leur système d’origine. Vous pouvez ainsi comparer les performances des processus entre différents systèmes ou isoler les données lors de projets de consolidation impliquant plusieurs systèmes. Pourquoi est-ce important ? Il précise l’origine des données, notamment dans les environnements qui comptent plusieurs instances SAP ou des systèmes intégrés. Où trouver ces données Cet attribut est généralement ajouté lors de l’extraction des données, souvent à partir de l’identifiant du système SAP (SY-SYSID). Exemples ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Code produit ProductCode | Identifiant unique du matériau ou du produit fabriqué. | ||
| Description Le code produit, également appelé numéro de matériau, identifie l’article que l’ordre de production doit fabriquer. Cet élément central des données de base relie la planification de la production à la gestion des stocks, aux ventes et au calcul des coûts. En Process Mining, filtrer ou segmenter les données par code produit est essentiel pour comprendre les processus de fabrication propres à chaque produit. Vous pouvez répondre à des questions comme « Quels produits ont les temps de cycle les plus longs ? » ou « Certains produits sont-ils plus exposés aux problèmes de qualité ou aux retards de matériaux ? ». Cette analyse est utile à la gestion du portefeuille de produits et permet de repérer les possibilités de standardisation ou d’optimisation des processus pour certains types de matériaux. Pourquoi est-ce important ? Il permet d’analyser les processus par produit et de repérer les matériaux associés à des inefficacités, des retards ou des coûts élevés. Où trouver ces données Cet attribut se trouve dans la table SAP AFPO, champ MATNR. Exemples FG-123RM-45AHALB-7890CHEM-22 | |||
| Date de début réelle ActualStartDate | Horodatage de la première activité de production enregistrée, qui marque le début réel de l’exécution. | ||
| Description La date de début réelle correspond à l’horodatage du premier événement marquant le début du travail de production physique. Elle est généralement calculée à partir de la première confirmation de production ou de la première sortie de matières premières pour l’ordre. Cet attribut calculé est essentiel à l’analyse du respect du calendrier. Il fournit le point de départ réel à comparer à la « Date de début prévue » et permet de calculer précisément les écarts de démarrage. Comprendre l’écart entre les dates de début prévue et réelle aide à repérer les retards avant la production, liés à la préparation des matériaux, à la configuration des machines ou à la disponibilité des ressources. Pourquoi est-ce important ? Il indique le véritable début de l’exécution de la production et permet de calculer précisément les retards au démarrage ainsi que le délai total de production. Où trouver ces données Cet attribut est calculé à partir du journal d’événements en recherchant, pour chaque ordre de production, l’horodatage le plus ancien parmi les activités d’exécution concernées, comme « Première confirmation enregistrée » ou « Sortie de marchandises comptabilisée ». Exemples 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Date de fin réelle ActualEndDate | Horodatage de la dernière activité de production, qui marque l’achèvement réel de l’ordre. | ||
| Description La date de fin réelle correspond à l’horodatage de l’événement qui marque l’achèvement de toutes les activités de production d’un ordre. Elle est généralement déterminée à partir de l’horodatage de l’événement « Confirmation finale enregistrée » ou du dernier événement « Entrée de marchandises comptabilisée ». Cet attribut est essentiel pour mesurer le temps de cycle total de production et analyser le respect du calendrier. La comparaison entre la date de fin réelle et la date de fin planifiée permet de déterminer si un ordre a été achevé dans les délais. La durée entre la date de début réelle et la date de fin réelle correspond au temps de production effectif. Pourquoi est-ce important ? Elle marque la fin de la production et permet de mesurer avec précision la performance des livraisons dans les délais ainsi que le temps total d’exécution. Où trouver ces données Déterminée à partir du journal d’événements en recherchant l’horodatage le plus récent des principales activités d’achèvement, telles que « Confirmation finale enregistrée » ou « Entrée de marchandises comptabilisée ». Exemples 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| Quantité livrée DeliveredQuantity | Quantité réelle du produit fabriqué et réceptionné en stock. | ||
| Description La quantité livrée, également appelée quantité réceptionnée, correspond à la quantité totale de produits finis dont la fabrication a été confirmée pour un ordre de production donné. Cette valeur est mise à jour lors des événements « Entrée de marchandises comptabilisée ». Cet attribut complète la « Quantité prévue » et est indispensable au calcul de l’indicateur clé de performance « Écart entre les quantités prévues et réelles ». Il mesure précisément la production réalisée et permet aux analystes de repérer les écarts dus aux rebuts, aux pertes de rendement ou à d’autres problèmes de production. La comparaison des quantités livrées entre les usines, les produits ou les périodes met en évidence les problèmes d’efficacité. Pourquoi est-ce important ? Il mesure la production réelle et permet de la comparer directement aux objectifs prévus pour évaluer les résultats. Où trouver ces données Cet attribut se trouve dans la table SAP AFPO, champ WEMNG (quantité réceptionnée). Exemples 984950751255 | |||
| Quantité prévue PlannedQuantity | Quantité totale du produit dont la fabrication est prévue dans l’ordre. | ||
| Description La quantité prévue correspond à la production cible définie lors de la planification de l’ordre. Elle sert de référence pour mesurer la production réelle. Cet attribut est essentiel aux indicateurs clés de performance liés aux résultats de production et au respect du calendrier, comme « Écart entre les quantités prévues et réelles ». Il permet d’évaluer la précision de la planification et de repérer les problèmes récurrents de surproduction ou de sous-production. Son analyse aide à déterminer dans quelle mesure l’exécution de la production respecte les plans initiaux. Pourquoi est-ce important ? Cet attribut sert de référence pour mesurer les écarts de production et évaluer la précision de la planification. Où trouver ces données Cette valeur est disponible dans la table SAP AFKO, champ GAMNG (quantité totale de l’ordre). Exemples 1005000751250 | |||
| Usine de production ProductionPlant | Site de fabrication où l’ordre de production est exécuté. | ||
| Description L’usine de production est une unité organisationnelle clé dans SAP qui représente un site de fabrication. Elle est associée à chaque ordre de production et détermine le lieu où les activités de production se déroulent physiquement. L’analyse du processus par usine de production permet de comparer les performances entre différents sites. Elle aide à repérer les usines les plus efficaces, celles qui connaissent davantage de retards ou de pénuries de matériaux, ainsi que les sites où les bonnes pratiques peuvent être partagées. C’est une dimension essentielle pour analyser les causes profondes dans les Dashboards consacrés au débit et à l’utilisation des ressources. Pourquoi est-ce important ? Il permet de comparer les performances des différents sites de fabrication et de repérer les problèmes ou les bonnes pratiques propres à chaque site. Où trouver ces données Cet attribut est stocké dans la table SAP AUFK, champ WERKS. Exemples 100017102000DE01 | |||
| Date de début prévue PlannedStartDate | Date prévue pour le début de la production de l’ordre. | ||
| Description La date de début prévue est un paramètre clé du calendrier, défini lors de la planification et de l’ordonnancement de la production. Elle correspond à la date cible de démarrage des activités de production pour un ordre. Cet attribut est essentiel pour mesurer le respect du calendrier. En comparant la « Date de début prévue » à l’heure réelle de démarrage de la production, par exemple à l’horodatage de l’activité « Première confirmation enregistrée », les organisations peuvent repérer les retards de démarrage. L’analyse des causes de ces retards est l’un des principaux cas d’usage du Process Mining dans ce domaine. Pourquoi est-ce important ? Il sert de référence pour mesurer le respect du calendrier et repérer les retards au démarrage de la production. Où trouver ces données Il s’agit de la date de début de base, disponible dans la table SAP AFKO, champ GSTRP. Exemples 2023-05-102023-06-222023-07-01 | |||
| Date de fin prévue PlannedEndDate | Date à laquelle la production de l’ordre doit être terminée selon le calendrier prévu. | ||
| Description La date de fin prévue est la date cible d’achèvement d’un ordre de production, définie lors de l’ordonnancement. Elle fixe le délai prévu pour terminer toutes les activités de production, y compris les confirmations finales et l’entrée de marchandises. Cette date est essentielle au calcul de l’indicateur clé de performance « Taux de respect du calendrier ». En comparant la « Date de fin prévue » à l’heure réelle d’achèvement, par exemple à l’horodatage de l’activité « Entrée de marchandises comptabilisée » ou « Confirmation finale enregistrée », vous pouvez vérifier si les ordres sont terminés à temps. Cette analyse permet d’évaluer la fiabilité des calendriers de production et de repérer les causes profondes des retards de livraison. Pourquoi est-ce important ? Elle sert de référence pour déterminer si les ordres de production sont achevés à temps, ce qui influe directement sur la satisfaction des clients et la fiabilité de la planification. Où trouver ces données Il s’agit de la date de fin de base, disponible dans la table SAP AFKO, champ GLTRP. Exemples 2023-05-152023-06-282023-07-05 | |||
| Disponibilité des matières MaterialAvailabilityStatus | Indique si tous les composants nécessaires à l’ordre de production sont disponibles. | ||
| Description Le statut de disponibilité des matières est un indicateur essentiel de l’état de préparation de la production. Le système le détermine en vérifiant la disponibilité de tous les composants nécessaires à l’ordre. Le statut « Disponible » signifie que la production peut commencer sans retard lié aux matières, tandis que le statut « Pénurie » signale un problème. Cet attribut est essentiel au Dashboard « Analyse de l’impact des pénuries de matières ». En analysant le temps d’attente des ordres en situation de pénurie, les entreprises peuvent mesurer l’incidence des problèmes de chaîne d’approvisionnement sur les calendriers de production. Elles peuvent ainsi repérer les fournisseurs peu fiables ou les composants qui provoquent fréquemment des retards. Pourquoi est-ce important ? Il met directement en évidence les retards dus aux pénuries de matières, une cause fréquente et importante des écarts par rapport au calendrier de production. Où trouver ces données Il ne s’agit pas d’un champ unique stocké dans le système, mais du résultat d’une vérification de disponibilité (contrôle ATP). Les résultats sont souvent visibles dans la transaction CO02 ou dans le contrôle collectif de disponibilité COHV. Le statut lui-même (par exemple, MACM, matière affectée) peut être consigné. Consultez la documentation SAP ECC PP. Exemples DisponiblePénuriePartiellement disponibleNon vérifiée | |||
| Écart de quantité QuantityVariance | Différence entre la quantité de production planifiée et la quantité réellement livrée. | ||
| Description L’écart de quantité est une métrique calculée qui mesure la différence entre la production réalisée et le plan initial. Il correspond à la quantité livrée moins la quantité planifiée. Un écart positif indique une surproduction, tandis qu’un écart négatif signale une production insuffisante ou une perte de rendement. Cet attribut est essentiel au Dashboard « Production planifiée et réelle » et à l’indicateur associé. Son analyse permet de repérer les problèmes de rendement, les taux de rebut ou les erreurs de saisie. Il mesure directement la capacité du processus de production à atteindre ses objectifs de volume. Pourquoi est-ce important ? Il mesure la conformité de la production aux quantités prévues et met en évidence les problèmes éventuels de rendement, de rebuts ou de maîtrise du processus. Où trouver ces données Champ calculé : 'DeliveredQuantity' - 'PlannedQuantity'. Exemples -2-5005 | |||
| Groupe de planificateurs PlannerGroup | Groupe de gestionnaires MRP ou de planificateurs de production responsables de l’ordre. | ||
| Description Le groupe de planificateurs est une entité organisationnelle qui regroupe les personnes chargées de planifier et de gérer un ensemble donné de matières ou d’ordres de production. L’affectation des ordres à des groupes de planificateurs permet de répartir la charge de travail et de définir clairement les responsabilités. Dans le cadre du Process Mining, cet attribut permet d’analyser les performances par équipe de planification. Il peut aider à répondre à des questions telles que « Quel groupe de planificateurs connaît le plus d’écarts par rapport au calendrier ? » ou « Les temps de cycle diffèrent-ils selon le groupe qui gère les ordres ? ». Ces analyses contribuent à équilibrer la charge de travail et à repérer les besoins de formation. Pourquoi est-ce important ? Il permet d’analyser les performances par équipe responsable et de repérer les différences d’efficacité de planification et de répartition de la charge de travail. Où trouver ces données Il s’agit du gestionnaire MRP, indiqué dans la table SAP AFKO, champ DISPO. Exemples 001002P01P02 | |||
| Priorité de production ProductionPriority | Classement qui indique le degré d’urgence ou la priorité de l’ordre de production. | ||
| Description La priorité de production indique l’importance relative d’un ordre de production. Les planificateurs de production et le personnel de l’atelier peuvent ainsi hiérarchiser leur travail et traiter en priorité les ordres urgents. L’analyse de cet attribut permet d’évaluer l’efficacité du système de priorités. En comparant les temps de cycle des ordres prioritaires à ceux des ordres moins prioritaires, l’entreprise peut vérifier si les ordres urgents sont effectivement traités plus rapidement. Dans le cas contraire, cela peut révéler des problèmes de communication, d’affectation des ressources ou d’exécution du processus. Pourquoi est-ce important ? Il permet d’évaluer l’efficacité de la gestion des priorités et de vérifier que les ordres les plus urgents sont achevés avant les ordres courants. Où trouver ces données Ce champ ne figure souvent pas en standard dans l’en-tête de l’ordre de production. Il peut s’agir d’un champ personnalisé, d’une valeur dérivée de la priorité de la commande client ou d’un élément d’un système de classification. Consultez la documentation SAP ECC PP ou la configuration du système. Exemples ÉlevéeMoyenneFaibleUrgente | |||
| Statut de l’ordre de production ProductionOrderStatus | Statut actuel de traitement de l’ordre de production, par exemple créé, lancé ou techniquement achevé. | ||
| Description Le statut de l’ordre de production indique l’étape à laquelle se trouve l’ordre dans son cycle de vie. SAP utilise des codes de statut pour gérer sa progression, par exemple CRTD (créé), REL (lancé), CNF (confirmé), DLV (livré) et TECO (techniquement achevé). L’analyse du temps passé dans chaque statut est un aspect essentiel du Process Mining appliqué à la production. Elle permet de déterminer combien de temps les ordres attendent leur lancement après leur création, ou combien de temps ils restent partiellement livrés. Le suivi des changements de statut sous forme d’activités donne une vue d’ensemble du flux du processus. Pourquoi est-ce important ? Il donne un aperçu de l’avancement d’un ordre et aide à repérer les goulots d’étranglement où les ordres restent bloqués pendant de longues périodes. Où trouver ces données Les informations de statut sont stockées dans les tables JEST et JSTO, associées au numéro d’objet de l’ordre (AUFK-OBJNR). Le texte du statut se trouve dans TJ02T. La lecture des statuts s’effectue souvent à l’aide de modules fonction tels que STATUS_TEXT_EDIT. Exemples CRTD (créé)REL (lancé)DLV (livré)TECO (techniquement achevé) | |||
| Statut de respect du calendrier ScheduleAdherenceStatus | Indique si l’ordre de production a été achevé au plus tard à sa date de fin planifiée. | ||
| Description Le statut de respect du calendrier est un attribut booléen ou catégoriel calculé qui donne une vue immédiate des performances en matière de respect des délais. Il est obtenu en comparant la date de fin réelle à la date de fin planifiée. Si la date de fin réelle est antérieure ou égale à la date planifiée, le statut est « Dans les délais » ; sinon, il est « En retard ». Cet attribut simplifie l’analyse et la visualisation dans les Dashboards. Il facilite le filtrage et l’agrégation des données pour calculer l’indicateur de respect du calendrier et repérer les principales causes des retards, comme certains produits ou sites, ou les pénuries de matières. Pourquoi est-ce important ? Il simplifie l’analyse des performances en classant les ordres comme « Dans les délais » ou « En retard », ce qui facilite la mesure et le suivi de la fiabilité du calendrier. Où trouver ces données Champ calculé : IF('ActualEndDate' <= 'PlannedEndDate', 'On-Time', 'Late'). Exemples Dans les délaisEn retard | |||
| Utilisateur responsable ResponsibleUser | Identifiant de l’utilisateur qui a créé ou modifié en dernier l’ordre de production. | ||
| Description L’utilisateur responsable correspond au compte utilisateur SAP associé aux événements clés du cycle de vie de l’ordre de production, comme sa création ou son lancement. Cet attribut assure la traçabilité des actions effectuées dans le système et permet d’en identifier les responsables. Dans le cadre du Process Mining, il sert à analyser les variations du processus en fonction des comportements des utilisateurs. Il peut aider à repérer les personnes qui pourraient avoir besoin d’une formation complémentaire ou qui suivent des procédures non standard. Il permet également d’analyser les ressources en montrant comment le travail est réparti entre les utilisateurs. Pourquoi est-ce important ? Il associe les activités du processus à des personnes précises, ce qui permet d’analyser les performances à l’échelle individuelle et de clarifier les responsabilités. Où trouver ces données L’utilisateur qui a créé l’ordre figure dans AUFK-ERNAM. Celui qui l’a modifié en dernier figure dans AUFK-AENAM. Les documents de modification (CDHDR-USERNAME) fournissent l’historique des utilisateurs ayant effectué des modifications précises. Exemples JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
Activités de planification de la production
| Activité | Description | ||
|---|---|---|---|
| Confirmation finale enregistrée | Cette activité indique que toutes les opérations de l’ordre de production sont terminées du point de vue de l’atelier. Elle est marquée par une confirmation finale pour la dernière opération. | ||
| Pourquoi est-ce important ? Cette étape marque la fin des activités de production physique. Le délai entre la première et la dernière confirmation correspond à la durée réelle d’exécution de la production. Où trouver ces données Cet événement est enregistré lorsque le statut système « CNF » (I0009, confirmé) est défini. Il est généralement déclenché par la confirmation finale dans la table AFRU (AFRU-AUERU = « X »). Le changement de statut est consigné dans JCDS. Données à recueillir Repérez l’horodatage auquel le statut « CNF » est défini ou recherchez la dernière confirmation dans AFRU. Type d’événement explicit | |||
| Entrée de marchandises comptabilisée | Cet événement consigne l’entrée en stock du produit fini issu de l’ordre de production. Il indique que les produits fabriqués sont désormais disponibles pour l’expédition ou une transformation ultérieure. | ||
| Pourquoi est-ce important ? Cette étape importante marque l’achèvement de la production et la sortie finale du processus. Le délai entre le lancement de l’ordre et l’entrée de marchandises correspond au délai total de production. Où trouver ces données L’événement est enregistré sous forme de document matériel dans les tables MKPF/MSEG, avec un type de mouvement, généralement « 101 », et une référence à l’ordre de production. Le statut système « DLV » (I0012, livré) est également défini sur l’ordre. Données à recueillir Relevez la date de comptabilisation du document matériel de type de mouvement « 101 » ou l’horodatage du changement de statut « DLV ». Type d’événement explicit | |||
| Ordre de production créé | Cet événement marque la création d’un nouvel ordre de production, généralement à la suite d’un cycle de planification ou d’une saisie manuelle. Il est enregistré explicitement lorsqu’un nouvel ordre est sauvegardé dans le système et reçoit le statut « CRTD » (créé). | ||
| Pourquoi est-ce important ? C’est le point de départ de chaque cas d’ordre de production. L’analyse du délai entre cet événement et le lancement permet de repérer les retards dans la planification préalable à la production et la préparation administrative. Où trouver ces données Cet événement est extrait de la date de création (AUFK-ERDAT) et de l’heure (AUFK-ERZET) de l’ordre de production. Le statut système « CRTD » (I0001) est attribué et consigné dans les tables JEST et JCDS, liées au numéro d’objet de l’ordre (AUFK-OBJNR). Données à recueillir Suivez l’horodatage de création et l’attribution du statut « CRTD ». Type d’événement explicit | |||
| Ordre de production lancé | Cette activité marque l’approbation officielle et le lancement de l’ordre de production. Une fois l’ordre lancé, les réservations de matériaux deviennent actives et les activités de production, comme la sortie de marchandises et les confirmations, peuvent commencer. | ||
| Pourquoi est-ce important ? Cette étape importante marque le passage de la planification à l’exécution. Le délai entre la création et le lancement est un indicateur clé de l’efficacité de la planification. Où trouver ces données L’événement est enregistré explicitement lorsque le statut système « REL » (I0002) est attribué à l’ordre de production. Le changement est horodaté dans la table JCDS et lié au numéro d’objet de l’ordre (AUFK-OBJNR). Données à recueillir Repérez l’horodatage auquel le statut « REL » devient actif pour l’ordre. Type d’événement explicit | |||
| Ordre techniquement achevé | Cette étape administrative clôt l’ordre de production du point de vue logistique. Elle empêche tout mouvement de matériaux ou toute confirmation supplémentaire et permet le règlement financier. | ||
| Pourquoi est-ce important ? C’est le point final du cycle de vie logistique de l’ordre. L’analyse de cet événement permet de comprendre la durée totale du processus, y compris les tâches administratives après la production. Où trouver ces données L’événement est enregistré explicitement lorsque le statut système « TECO » (I0045, techniquement achevé) est attribué à l’ordre. Le changement est horodaté dans la table JCDS. Données à recueillir Repérez dans JCDS l’horodatage auquel le statut « TECO » devient actif pour l’ordre. Type d’événement explicit | |||
| Première confirmation enregistrée | Cet événement marque le début du travail de production effectif sur l’ordre. Il est enregistré lorsque la première confirmation de temps pour une opération de l’ordre de production est saisie dans le système. | ||
| Pourquoi est-ce important ? Cette activité indique l’heure réelle de début de la production. Elle est essentielle pour mesurer le respect du calendrier et repérer les retards entre l’affectation des ressources et le début du travail. Où trouver ces données Cet événement est déduit de la date de comptabilisation (AFRU-BUDAT) la plus ancienne parmi toutes les confirmations de l’ordre enregistrées dans la table AFRU. La première entrée marque le début de la production physique. Données à recueillir Repérez la première confirmation de l’ordre à partir de la date de comptabilisation dans la table AFRU. Type d’événement inferred | |||
| Annulation de l’ordre enregistrée | Cet événement indique qu’un ordre de production a été annulé avant son achèvement. L’annulation consiste généralement à définir un statut spécifique ou un indicateur de suppression, ce qui empêche tout traitement ultérieur. | ||
| Pourquoi est-ce important ? Il s’agit d’un résultat défavorable qu’il est important de suivre. L’analyse des ordres annulés peut révéler des problèmes de prévision de la demande, de précision de la planification ou de gestion des données de base. Où trouver ces données Cet événement peut être déduit de l’attribution du statut « DLFL » (I0076, indicateur de suppression) ou d’un statut « Annulé » spécifique, s’il est configuré. Le changement est horodaté dans la table JCDS. Données à recueillir Repérez l’horodatage auquel l’indicateur de suppression (« DLFL ») ou un statut d’annulation est défini pour l’ordre. Type d’événement inferred | |||
| Confirmation intermédiaire enregistrée | Cet événement correspond à une mise à jour de l’avancement d’un ordre de production au moyen d’une confirmation partielle d’une opération. Cette pratique est courante pour les ordres de longue durée, lorsqu’il est nécessaire de suivre l’avancement avant l’achèvement final. | ||
| Pourquoi est-ce important ? L’analyse des confirmations intermédiaires permet de suivre l’avancement des longs cycles de production et de repérer les goulots d’étranglement au cours du processus, et pas seulement à son début ou à sa fin. Où trouver ces données Cet événement est extrait des confirmations de la table AFRU qui ne sont pas marquées comme confirmations finales. Chaque entrée comporte une date de comptabilisation (AFRU-BUDAT) et une heure. Données à recueillir Extrayez de la table AFRU toutes les confirmations qui ne sont pas signalées comme finales pour une opération. Type d’événement explicit | |||
| Disponibilité des matériaux vérifiée | Cet événement correspond à un contrôle visant à déterminer si tous les composants nécessaires à l’ordre de production sont disponibles. Le contrôle peut être automatique, lors de la création ou du lancement de l’ordre, ou déclenché manuellement. | ||
| Pourquoi est-ce important ? Cette activité est essentielle pour comprendre les retards dus aux pénuries de matériaux. Des contrôles fréquents ou un délai important avant la disponibilité des matériaux peuvent révéler des problèmes d’approvisionnement ou de gestion des stocks. Où trouver ces données Le système attribue un statut tel que « MACM » (matériaux réservés) ou « MSPT » (pénurie de matériaux). L’exécution du contrôle peut être déduite de l’horodatage du changement de statut dans les tables JEST/JCDS. Les résultats sont visibles dans l’en-tête de l’ordre. Données à recueillir Déduisez cet événement de l’horodatage des changements de statut liés à la disponibilité des matériaux, comme « MACM » ou « MSPT ». Type d’événement inferred | |||
| Données de l’ordre modifiées | Cet événement recense les modifications importantes apportées à un ordre de production après sa création, par exemple aux quantités prévues, aux dates ou à la nomenclature. Le système consigne ces changements à des fins d’audit. | ||
| Pourquoi est-ce important ? Le suivi de ces changements permet de repérer l’instabilité du processus et les replanifications fréquentes. Un nombre élevé de modifications peut révéler une planification initiale insuffisante, une demande volatile ou des données inexactes. Où trouver ces données Les modifications des champs clés des tables AFKO (en-tête de l’ordre) et AFPO (poste de l’ordre), par exemple, sont consignées dans les tables de documents de modification CDHDR (en-tête) et CDPOS (poste). Chaque modification pertinente peut être extraite comme une activité. Données à recueillir Extrayez les entrées du journal des modifications des tables CDHDR et CDPOS pour la classe d’objets des ordres de production. Type d’événement explicit | |||
| Règlement de l’ordre effectué | Cet événement correspond au règlement financier de l’ordre de production, qui consiste à affecter les coûts cumulés aux objets de coûts appropriés. Du point de vue du contrôle de gestion, il s’agit de la dernière étape du cycle de vie de l’ordre. | ||
| Pourquoi est-ce important ? Même s’il s’agit d’une activité financière, un retard de règlement peut révéler des problèmes de déclaration des coûts ou d’exactitude des données de l’ordre. Cet événement marque la clôture financière effective du processus de production. Où trouver ces données Cet événement peut être déduit lorsque le solde de l’ordre devient nul ou lorsque le statut système « SETC » (I0076, règle de règlement créée) est suivi de journaux d’exécution du règlement. Le règlement effectif est consigné dans des tables de contrôle de gestion telles que COSP et COSS. Données à recueillir Déduisez cet événement des documents de règlement liés à l’ordre dans les tables CO ou de l’activation du statut « SETC ». Type d’événement inferred | |||
| Sortie de marchandises comptabilisée | Cette activité correspond au prélèvement dans le stock des matériaux composants destinés à l’ordre de production. Elle confirme que les matières premières ou les produits semi-finis nécessaires ont été préparés pour la production. | ||
| Pourquoi est-ce important ? Cet événement marque le début de la consommation des matériaux. Les retards entre le lancement de l’ordre et la sortie de marchandises peuvent révéler des problèmes de logistique d’entrepôt, de préparation des matériaux ou d’exactitude des stocks. Où trouver ces données L’événement est enregistré sous forme de document matériel dans les tables MKPF (en-tête) et MSEG (poste), avec un type de mouvement, généralement « 261 », et une référence au numéro de l’ordre de production (MSEG-AUFNR). Données à recueillir Relevez la date de comptabilisation (MKPF-BUDAT) des documents matériels associés à l’ordre et portant le type de mouvement « 261 ». Type d’événement explicit | |||
Guides d’extraction
Étapes
- Créez un InfoSet dans SAP Query : utilisez le code de transaction
SQ02. Créez un InfoSet, par exempleZPP_EVENTLOG. Sélectionnez l’option de source de données « Jointure de tables à partir d’une table de base ». UtilisezAUFK(données de base des ordres) comme table de base initiale. - Joignez les tables nécessaires : ajoutez les tables suivantes à la jointure de l’InfoSet. Le système peut proposer des jointures, mais vérifiez qu’elles sont correctes :
AUFKversAFKO(données d’en-tête des ordres PP) :AUFK-AUFNR = AFKO-AUFNRAUFKversJEST(statut d’objet individuel) :AUFK-OBJNR = JEST-OBJNRJESTversJCDS(documents de modification des statuts système/utilisateur) :JEST-OBJNR = JCDS-OBJNRANDJEST-STAT = JCDS-STAT. Remarque : cette jointure permet de consulter l’historique des changements de statut.AUFKversAFRU(confirmations d’achèvement des ordres) :AUFK-AUFNR = AFRU-AUFNRAUFKversMSEG(segment de document : matière) :AUFK-AUFNR = MSEG-AUFNRMSEGversMKPF(en-tête : document matière) :MSEG-MBLNR = MKPF-MBLNRANDMSEG-MJAHR = MKPF-MJAHR
- Définissez les groupes de champs : faites glisser les champs nécessaires des tables sources vers les groupes de champs. Vérifiez que tous les champs requis pour la requête finale sont inclus, notamment
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATEetMKPF-BUDAT. - Ajoutez des champs personnalisés et du code : dans l’InfoSet, ouvrez l’onglet « Extras ». Vous devez définir des champs personnalisés pour
ActivityName,EventTime,SourceSystemetLastDataUpdate, puis écrire du code ABAP pour les renseigner selon la logique décrite dans la section consacrée à la requête. Cette logique consiste à parcourir les changements de statut, les confirmations et les documents matière afin de générer un enregistrement distinct pour chaque événement métier. Il s’agit de l’étape la plus complexe, car elle transforme des données tabulaires en journal d’événements dans les sections de code de l’InfoSet. - Générez et enregistrez l’InfoSet : une fois les jointures, les champs et le code personnalisé configurés, enregistrez et générez l’InfoSet.
- Créez une requête SAP : utilisez le code de transaction
SQ01. Créez une requête, par exempleZPP_EVENTS, à partir de l’InfoSet créé aux étapes précédentes. - Concevez la mise en page de la requête : dans le concepteur de requêtes, définissez les champs de l’écran de sélection. Vous pouvez notamment sélectionner l’ordre de production
AUFNR, le site de productionWERKS, le type d’ordreAUARTet une plage de dates de création de l’ordreAUFK-ERDAT. - Définissez la liste de sortie : sélectionnez les champs à afficher dans le rapport. Cette liste doit correspondre exactement aux colonnes requises pour le journal d’événements, y compris les champs personnalisés tels que
ActivityNameetEventTime. - Exécutez la requête : lancez-la avec les critères de sélection souhaités, par exemple pour les ordres de production des 3 à 6 derniers mois.
- Exportez les données : une fois les résultats affichés, exportez la liste. Les formats les plus courants et les plus fiables sont « Spreadsheet » ou « Local File », avec des valeurs séparées par des tabulations ou au format CSV.
- Préparez les données pour ProcessMind : ouvrez le fichier exporté dans un tableur. Vérifiez que les en-têtes de colonnes correspondent aux attributs requis (
ProductionOrder,ActivityName,EventTime, etc.) et que le format de date et d’heure deEventTimeest cohérent et conforme au format attendu (par exemple, YYYY-MM-DD HH:MI:SS). Enregistrez le fichier au format CSV pour l’importer.
Configuration
- Jointures de l’InfoSet : cette méthode repose sur un InfoSet complexe qui joint les tables d’en-tête, de statut, de confirmation et de mouvements de matières. Les principales jointures sont
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUetAUFK->MSEG->MKPF. Des jointures incorrectes ou inefficaces peuvent ralentir le système ou fausser les données. - Critères de sélection : définissez une plage de sélection raisonnable pour éviter les problèmes de performances du système. L’écran de lancement de la requête doit notamment proposer les champs suivants :
- Site de production (
AUFK-WERKS) - Type d’ordre de production (
AUFK-AUART) - Date de création de l’ordre (
AUFK-ERDAT) : nous recommandons d’extraire les données sur une période glissante de 3 à 6 mois afin de conserver un volume de données gérable.
- Site de production (
- Statuts système : l’identification d’événements tels que « Créé », « Lancé », « Techniquement achevé » et « Annulé » dépend de codes de statut système précis (par exemple, I0001, I0002, I0045, I0047). Ces codes sont généralement standard dans les systèmes SAP, mais il convient de les vérifier.
- Types de mouvements : les événements tels que « Sortie de marchandises » et « Entrée de marchandises » sont identifiés par leurs types de mouvements (
MSEG-BWART), généralement « 261 » et « 101 », respectivement. Vérifiez que ces valeurs correspondent à la configuration de votre organisation. - Autorisations : l’utilisateur qui exécute la requête doit être autorisé à accéder aux transactions
SQ01,SQ02etSQ03, ainsi qu’à afficher les tables sous-jacentes (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF).
Exemple de requête abap
/*
The following ABAP-style SQL script represents the complete logic required to build the event log.
This logic must be implemented within the code sections of the SQ02 InfoSet, as a direct SQL query of this nature is not run.
Each SELECT block corresponds to a specific business activity.
*/
-- 1. Production Order Created
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Created' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0001' AND JCDS.INACT = ''
UNION ALL
-- 2. Material Availability Checked (using 'Material shortage' status as an indicator)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Material Availability Checked' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0033' AND JCDS.INACT = '' -- I0033 is MSPT (Material Shortage)
UNION ALL
-- 3. Production Order Released
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Released' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0002' AND JCDS.INACT = ''
UNION ALL
-- 4. Order Data Changed (using last change date as a proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Data Changed' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime, -- Time is not available in AUFK
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.AEDAT IS NOT NULL AND AUFK.AEDAT > AUFK.ERDAT
UNION ALL
-- 5. Goods Issue Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Issue Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
CONF.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
CONF.EventTime,
CONF.ProductionPlant,
CONF.ProductCode,
CONF.PlannedQuantity,
CONF.DeliveredQuantity,
CONF.ActualStartDate,
CONF.ActualEndDate,
CONF.SourceSystem,
CONF.LastDataUpdate
FROM (
SELECT
AUFK.AUFNR AS ProductionOrder,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
ROW_NUMBER() OVER(PARTITION BY AUFK.AUFNR ORDER BY AFRU.BUDAT, AFRU.ERFZEIT) as rn
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
) AS CONF
WHERE CONF.rn = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'T' -- T = Partial Confirmation
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'E' -- E = Final Confirmation
UNION ALL
-- 9. Goods Receipt Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Technically Completed' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0045' AND JCDS.INACT = ''
UNION ALL
-- 11. Order Settlement Ran (using 'Closed' status as proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Settlement Ran' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0046' AND JCDS.INACT = '' -- I0046 is CLSD (Closed)
UNION ALL
-- 12. Order Cancellation Set
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0047' AND JCDS.INACT = '' -- I0047 is CNF (Confirmed), use I0076 for Canceled. Recorrecting. Use Deletion Flag instead.
-- Corrected Logic for Cancellation:
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.LOEKZ = 'X'; Étapes
- Configurez l’accès à la base de données : obtenez des identifiants en lecture seule pour la base de données SAP ECC sous-jacente. Vous aurez besoin de l’adresse du serveur, du port, du nom de la base de données, du nom d’utilisateur et du mot de passe. Cet accès est indispensable et doit être organisé avec les équipes SAP Basis et d’administration des bases de données.
- Identifiez le schéma SAP : déterminez le schéma de base de données dans lequel se trouvent les tables SAP. Il s’agit souvent de
SAPSR3ou d’un nom propre au système. Vous devrez remplacer le paramètre[Your SAP Schema]dans la requête par cette valeur. - Préparez la requête SQL : copiez la requête SQL complète fournie dans la section
query. Elle permet d’extraire toutes les activités indiquées dans un journal d’événements unique. - Configurez les paramètres de la requête : avant de l’exécuter, modifiez les paramètres de remplacement qu’elle contient. Définissez
[Start Date]et[End Date]pour délimiter la période d’extraction. Il est également vivement recommandé de filtrer par site de production (WERKS) ou par type d’ordre (AUART) afin de limiter le volume de données. - Connectez-vous et exécutez la requête : utilisez un client SQL standard, tel que DBeaver ou SAP HANA Studio, ou un script personnalisé (Python, Java), pour vous connecter à la base de données SAP avec les identifiants de l’étape 1.
- Lancez la requête : collez la requête SQL configurée dans votre client et exécutez-la. Selon la période sélectionnée et la taille du système, l’opération peut prendre plusieurs minutes.
- Vérifiez les premiers résultats : une fois la requête terminée, examinez rapidement les premières centaines de lignes pour vérifier que les colonnes telles que
ProductionOrder,ActivityNameetEventTimesont correctement renseignées et cohérentes. - Exportez au format CSV : exportez l’ensemble des résultats de votre client SQL dans un fichier CSV. Vérifiez que le fichier utilise l’encodage UTF-8 pour éviter les problèmes de caractères.
- Finalisez le fichier CSV pour l’importation : ouvrez le fichier et vérifiez que les en-têtes de colonnes correspondent aux attributs requis (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate, etc.). Vérifiez que la colonneEventTimeutilise un format cohérent, par exempleYYYY-MM-DD HH:MI:SS. - Importez les données dans ProcessMind : le fichier CSV préparé peut maintenant être importé dans la plateforme ProcessMind pour analyse.
Configuration
- Schéma de base de données : indiquez le schéma SAP dans lequel se trouvent les tables de planification de la production. Remplacez le paramètre
[Your SAP Schema]dans la requête par le nom correspondant à votre environnement, par exempleSAPSR3. - Plage de dates : le filtrage par plage de dates est essentiel aux performances. La requête porte sur la date de création de l’ordre (
AUFK.ERDAT). Nous recommandons de commencer par une période récente de 3 à 6 mois afin de conserver un volume de données gérable. - Type d’ordre de production : pour cibler l’analyse, filtrez la requête à l’aide du champ de type d’ordre de production (
AUFK.AUART). Vous pouvez ainsi inclure ou exclure certains types, comme les ordres de production standard, les ordres de processus ou les ordres de reprise. - Site de production : il est vivement recommandé de filtrer par un ou plusieurs sites de production (
AFKO.WERKS). L’extraction simultanée des données de tous les sites peut mobiliser beaucoup de ressources. - Accès à la base de données : cette méthode nécessite un utilisateur de base de données disposant au minimum d’autorisations de lecture sur les tables suivantes :
AUFK,AFKO,JCDS,JEST,AFRU,MSEG,MKPF. L’accès direct à la base de données n’est pas standard pour tous les utilisateurs SAP et nécessite une autorisation spéciale.
Exemple de requête sql
WITH Orders AS (
SELECT
aufk.AUFNR AS ProductionOrder,
afko.WERKS AS ProductionPlant,
afko.PLNBEZ AS ProductCode,
afko.GAMNG AS PlannedQuantity,
afko.GMEIN AS PlannedUnit,
afko.GEMNG AS DeliveredQuantity,
CASE
WHEN afko.GSTRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GSTRI || afko.GSUZI, 'YYYYMMDDHH24MISS')
END AS ActualStartDate,
CASE
WHEN afko.GETRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GETRI || afko.GEUZI, 'YYYYMMDDHH24MISS')
END AS ActualEndDate,
aufk.OBJNR,
aufk.ERDAT AS CreationDate,
aufk.ERFAS AS CreationTime
FROM
"[Your SAP Schema]".AUFK aufk
JOIN
"[Your SAP Schema]".AFKO afko ON aufk.AUFNR = afko.AUFNR
WHERE
aufk.AUTYP = '10' -- Filter for Production Orders
AND aufk.ERDAT BETWEEN '[Start Date]' AND '[End Date]'
-- AND afko.WERKS IN ('[Your Plant]', '[Another Plant]') -- Optional: Filter by Plant
-- AND aufk.AUART IN ('[Your Order Type]') -- Optional: Filter by Order Type
),
Confirmations AS (
SELECT
o.ProductionOrder,
a.RUECK AS ConfirmationNumber,
a.RMZHL AS ConfirmationCounter,
TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
a.AUERU AS IsFinalConfirmation,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') ASC) as rn_asc,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') DESC) as rn_desc
FROM
Orders o
JOIN
"[Your SAP Schema]".AFRU a ON o.ProductionOrder = a.AUFNR
)
-- 1. Production Order Created
SELECT
o.ProductionOrder,
'Production Order Created' AS ActivityName,
TO_TIMESTAMP(o.CreationDate || o.CreationTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
UNION ALL
-- 2. Material Availability Checked (using 'Material Committed' status as proxy)
SELECT
o.ProductionOrder,
'Material Availability Checked' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0006' AND jcds.INACT != 'X'
UNION ALL
-- 3. Production Order Released
SELECT
o.ProductionOrder,
'Production Order Released' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0002' AND jcds.INACT != 'X'
UNION ALL
-- 4. Order Data Changed
SELECT
o.ProductionOrder,
'Order Data Changed' AS ActivityName,
TO_TIMESTAMP(aufk.AEDAT || aufk.AEZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".AUFK aufk ON o.ProductionOrder = aufk.AUFNR
WHERE aufk.AEDAT > o.CreationDate
UNION ALL
-- 5. Goods Issue Posted
SELECT
o.ProductionOrder,
'Goods Issue Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
c.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
c.ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc > 1 AND c.IsFinalConfirmation IS NULL
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
c.ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.IsFinalConfirmation = 'X'
UNION ALL
-- 9. Goods Receipt Posted
SELECT
o.ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
o.ProductionOrder,
'Order Technically Completed' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0045' AND jcds.INACT != 'X'
UNION ALL
-- 11. Order Settlement Ran
SELECT
o.ProductionOrder,
'Order Settlement Ran' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0046' AND jcds.INACT != 'X'
UNION ALL
-- 12. Order Cancellation Set
SELECT
o.ProductionOrder,
'Order Cancellation Set' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0076' AND jcds.INACT != 'X'; Étapes
- Vérifiez que SAP ECC PP, le traitement des ordres de fabrication, les confirmations, la gestion des stocks et les données de contrôle de gestion sont disponibles. Assurez-vous également que l’utilisateur chargé de l’extraction est autorisé à lire les tables applicatives requises et à exécuter des rapports ABAP personnalisés.
- Dans l’ABAP Workbench, par exemple avec la transaction SE38 ou SE80, créez un rapport exécutable dédié, tel que [Your custom report name]. Utilisez un écran de sélection comportant des paramètres de date obligatoires, comme [Start date] et [End date], ainsi que des filtres facultatifs pour [Company Code], [Production Plant], [Order Type], [Material] et [Production Order].
- Lisez les données d’en-tête et les données de base des ordres de fabrication dans AUFK et dans les tables d’ordres de fabrication configurées dans votre système SAP ECC. Utilisez JCDS et la configuration de statut correspondante pour repérer les changements de statut explicites, notamment CRTD, les statuts de libération, de clôture technique et d’annulation. Ne considérez pas un code de statut comme un événement si l’historique des statuts ne contient pas de changement horodaté.
- Lisez les résultats du contrôle de disponibilité des matières dans les données de contrôle de disponibilité des ordres de fabrication configurées dans votre système. Si le résultat du contrôle n’est pas enregistré dans une table pouvant être reliée de manière fiable à l’ordre et à un horodatage, mettez en œuvre l’extension SAP, le journal des applications ou la source d’audit configurés et approuvés par votre équipe SAP. Ne déduisez pas qu’un contrôle a eu lieu à partir de la seule création ou libération de l’ordre.
- Lisez l’historique des modifications des ordres de fabrication dans les objets de documents de modification configurés et dans les tables de documents associées. Extrayez uniquement les changements importants, par exemple ceux portant sur la quantité planifiée, les dates, la nomenclature, la gamme ou d’autres champs approuvés par le responsable du processus. Utilisez l’horodatage du document de modification comme EventTime.
- Lisez les écritures de sortie et d’entrée de marchandises dans les données de documents matières de gestion des stocks configurées dans votre système. Reliez les écritures à l’ordre de fabrication à l’aide de la référence à l’ordre disponible dans les données du document matière. Classez les prélèvements de composants comme Goods Issue Posted et les entrées de produits finis comme Goods Receipt Posted. Utilisez la date et l’heure de comptabilisation lorsqu’elles sont disponibles.
- Lisez les données de confirmation dans la source de confirmations de production configurée dans votre système. Triez les confirmations par ordre de fabrication et par horodatage. Émettez First Confirmation Recorded pour la première confirmation, Intermediate Confirmation Recorded pour les confirmations intermédiaires répondant aux critères, et Final Confirmation Recorded pour une confirmation explicitement marquée comme finale ou identifiée comme telle par la logique de clôture des confirmations configurée. Ne déduisez pas qu’une confirmation est finale parce qu’elle est la dernière ligne renvoyée par une requête quelconque.
- Lisez les données d’exécution du règlement dans la source de règlement du contrôle de gestion configurée dans votre système. Émettez Order Settlement Ran uniquement si un enregistrement d’exécution du règlement, un document de règlement ou un historique de statuts approuvé fournit un horodatage explicite associé à l’ordre de fabrication.
- Créez une ligne d’événement interne pour chaque activité extraite. Renseignez ProductionOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ProductionPlant, ProductCode, PlannedQuantity, DeliveredQuantity, ActualStartDate et ActualEndDate. Appliquez une conversion d’horodatage cohérente et conservez le fuseau horaire du système source. Si ces événements existent, définissez ActualStartDate sur l’horodatage de la première confirmation et ActualEndDate sur celui de la confirmation finale.
- Triez les lignes d’événement par ProductionOrder et EventTime, puis appliquez un tri secondaire déterministe en cas d’horodatages identiques. Supprimez uniquement les doublons exacts des enregistrements source, et non les répétitions d’événements légitimes. Vérifiez que les douze noms d’activité requis figurent dans le schéma de sortie et que chaque ligne émise comporte un identifiant de cas, un nom d’activité et un horodatage d’événement.
- Écrivez le résultat dans un fichier sur le serveur d’applications à l’aide d’une interface de fichiers ABAP approuvée et d’un chemin logique configuré. Utilisez un séparateur et un encodage texte compatibles avec la configuration d’ingestion de ProcessMind. Ajoutez une ligne d’en-tête, placez entre guillemets les valeurs contenant le séparateur et formatez les horodatages de manière uniforme, de préférence au format YYYY-MM-DDThh:mm:ss.
- Téléchargez le fichier selon la procédure de transfert SAP approuvée, vérifiez-le séparément, puis importez-le dans ProcessMind comme journal d’événements. Définissez ProductionOrder comme identifiant de cas, ActivityName comme activité et EventTime comme horodatage de l’événement. Vérifiez que ProcessMind est configuré pour lire les lignes telles quelles et qu’il n’est pas censé déduire les activités manquantes.
Configuration
- Période : pour l’analyse initiale, utilisez une fenêtre d’extraction glissante de trois à six mois. N’élargissez cette période qu’après avoir évalué les performances et le volume de données. Prévoyez une période de rétrospection pour inclure les ordres créés avant la date de début sélectionnée, mais toujours actifs pendant la période d’analyse.
- Filtres de sélection : prenez en charge [Company Code], [Production Plant], [Order Type], [Material], [Production Order], le statut de l’ordre ainsi que les filtres sur les dates de création ou de modification. Configurez les champs exacts en fonction de l’implémentation SAP ECC, car les champs disponibles pour les ordres de fabrication peuvent varier selon la version et les personnalisations.
- Périmètre des événements : extrayez les douze activités requises sous forme de lignes d’événement explicites : Production Order Created, Material Availability Checked, Production Order Released, Order Data Changed, Goods Issue Posted, First Confirmation Recorded, Intermediate Confirmation Recorded, Final Confirmation Recorded, Goods Receipt Posted, Order Technically Completed, Order Settlement Ran et Order Cancellation Set.
- Règles d’horodatage : privilégiez la date et l’heure de l’événement dans le système source. Si seule une date est disponible, indiquez la précision réduite et utilisez une heure configurée de manière uniforme, au lieu de présenter une heure précise inventée. Convertissez tous les horodatages dans le fuseau horaire attendu par ProcessMind.
- Gestion des statuts : utilisez l’historique horodaté des statuts pour les activités liées aux statuts. Définissez la correspondance entre les valeurs de statut internes et les activités métier en fonction de la configuration des statuts système et après approbation du responsable du processus.
- Contrôles de disponibilité : configurez la source approuvée pour l’exécution des contrôles de disponibilité. Ne créez pas de ligne Material Availability Checked à partir de la création ou de la libération de l’ordre, de réservations ou d’une sortie de marchandises réussie, sauf si la source approuvée par l’entreprise consigne explicitement le contrôle.
- Gestion des confirmations : définissez les règles permettant de distinguer les premières confirmations, les confirmations intermédiaires et les confirmations finales. Une confirmation ne peut être considérée comme finale que si la source l’indique explicitement ou si la logique de confirmation SAP configurée établit que l’ordre est terminé.
- Quantités : conservez si possible l’unité de mesure de la source. Si les quantités sont agrégées, indiquez si l’agrégation est effectuée par ordre, matière, mouvement, confirmation ou événement. DeliveredQuantity doit représenter les entrées comptabilisées de produits finis, et non le seul rendement confirmé, sauf si le responsable du processus approuve cette interprétation.
- LastDataUpdate : renseignez ce champ avec l’horodatage de l’exécution de l’extraction ou celui de l’actualisation de la source. Appliquez la même convention documentée à toutes les lignes d’une exécution.
- Performances : limitez la période de sélection, ne sélectionnez que les champs requis, traitez les données par lots, appliquez les filtres côté base de données, évitez les lectures imbriquées dans les grandes boucles et ne créez ou n’utilisez des index approuvés que dans le cadre du processus d’administration des bases de données SAP. Écrivez les résultats progressivement si l’utilisation de la mémoire pose problème.
- Fichier de sortie : configurez le répertoire du serveur d’applications, le nom de fichier logique, le séparateur, l’encodage, le format décimal, le format des horodatages et la présence de l’en-tête conformément aux spécifications d’importation de ProcessMind. N’incluez pas d’identifiants de connexion dans le rapport ni dans le fichier de sortie.
- Prérequis : vérifiez que SAP ECC PP, la gestion des stocks, les confirmations, la gestion des statuts des ordres de fabrication et les données de règlement du contrôle de gestion sont actifs, selon les besoins. Les autorisations requises, la gouvernance des développements personnalisés, l’approbation du transport, l’accès aux fichiers du serveur d’applications et l’accès à l’ingestion ProcessMind doivent être accordés avant l’exécution.
- Configuration propre au système : confirmez les noms de tables, les champs, les codes de statut, les objets de documents de modification, les sources de confirmations, les sources des contrôles de disponibilité et les sources de règlement dans le système SAP ECC cible. Utilisez [Configure based on your system] si l’implémentation ne fournit pas de source standard et fiable.
Exemple de requête abap
REPORT [Your custom report name].
* This executable ABAP report is a complete extraction framework for the twelve required activities.
* Replace only the marked system-specific source sections, selection parameters, and file configuration.
* Confirm every table and field against the target SAP ECC system before activation.
PARAMETERS p_from TYPE sydatum OBLIGATORY.
PARAMETERS p_to TYPE sydatum OBLIGATORY.
PARAMETERS p_file TYPE string OBLIGATORY DEFAULT '[Application server file path]'.
PARAMETERS p_src TYPE string OBLIGATORY DEFAULT '[SAP ECC system identifier]'.
SELECT-OPTIONS s_werks FOR [Production plant field].
SELECT-OPTIONS s_aufnr FOR [Production order field].
SELECT-OPTIONS s_auart FOR [Production order type field].
SELECT-OPTIONS s_bukrs FOR [Company code field].
TYPES: BEGIN OF ty_event,
productionorder TYPE string,
activityname TYPE string,
eventtime TYPE string,
sourcesystem TYPE string,
lastdataupdate TYPE string,
productionplant TYPE string,
productcode TYPE string,
plannedquantity TYPE string,
deliveredquantity TYPE string,
actualstartdate TYPE string,
actualenddate TYPE string,
END OF ty_event.
DATA gt_events TYPE STANDARD TABLE OF ty_event WITH EMPTY KEY.
DATA gs_event TYPE ty_event.
DATA gv_update_timestamp TYPE string.
DATA gv_line TYPE string.
GET TIME STAMP FIELD DATA(gv_update_ts).
gv_update_timestamp = |{ gv_update_ts TIMESTAMP = ISO }|.
* Production Order Created
SELECT [Production order field], [Production plant field], [Product field], [Planned quantity field], [Creation date field], [Creation time field]
FROM [Production order header table]
INTO TABLE @DATA(lt_created)
WHERE [Creation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks
AND [Production order type field] IN @s_auart
AND [Company code field] IN @s_bukrs.
LOOP AT lt_created ASSIGNING FIELD-SYMBOL(<created>).
CLEAR gs_event.
gs_event-productionorder = |{ <created>-[Production order field] }|.
gs_event-activityname = 'Production Order Created'.
gs_event-eventtime = |{ <created>-[Creation date field] } { <created>-[Creation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <created>-[Production plant field] }|.
gs_event-productcode = |{ <created>-[Product field] }|.
gs_event-plannedquantity = |{ <created>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Material Availability Checked
SELECT [Production order field], [Production plant field], [Product field], [Availability check date field], [Availability check time field]
FROM [Availability check source table]
INTO TABLE @DATA(lt_availability)
WHERE [Availability check date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_availability ASSIGNING FIELD-SYMBOL(<availability>).
CLEAR gs_event.
gs_event-productionorder = |{ <availability>-[Production order field] }|.
gs_event-activityname = 'Material Availability Checked'.
gs_event-eventtime = |{ <availability>-[Availability check date field] } { <availability>-[Availability check time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <availability>-[Production plant field] }|.
gs_event-productcode = |{ <availability>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Production Order Released
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field], [Planned quantity field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_released)
WHERE [Status field] = '[Released status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_released ASSIGNING FIELD-SYMBOL(<released>).
CLEAR gs_event.
gs_event-productionorder = |{ <released>-[Production order field] }|.
gs_event-activityname = 'Production Order Released'.
gs_event-eventtime = |{ <released>-[Status change date field] } { <released>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <released>-[Production plant field] }|.
gs_event-productcode = |{ <released>-[Product field] }|.
gs_event-plannedquantity = |{ <released>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Data Changed
SELECT [Production order field], [Change date field], [Change time field], [Production plant field], [Product field], [Changed field name]
FROM [Production order change document source table]
INTO TABLE @DATA(lt_changed)
WHERE [Change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Changed field name] IN ('[Planned quantity field]', '[Basic start date field]', '[Basic finish date field]', '[BOM field]', '[Routing field]').
LOOP AT lt_changed ASSIGNING FIELD-SYMBOL(<changed>).
CLEAR gs_event.
gs_event-productionorder = |{ <changed>-[Production order field] }|.
gs_event-activityname = 'Order Data Changed'.
gs_event-eventtime = |{ <changed>-[Change date field] } { <changed>-[Change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <changed>-[Production plant field] }|.
gs_event-productcode = |{ <changed>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Issue Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gi)
WHERE [Movement type field] IN ('[Goods issue movement type 1]', '[Goods issue movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gi ASSIGNING FIELD-SYMBOL(<gi>).
CLEAR gs_event.
gs_event-productionorder = |{ <gi>-[Production order field] }|.
gs_event-activityname = 'Goods Issue Posted'.
gs_event-eventtime = |{ <gi>-[Posting date field] } { <gi>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gi>-[Production plant field] }|.
gs_event-productcode = |{ <gi>-[Product field] }|.
gs_event-deliveredquantity = |{ <gi>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* First Confirmation Recorded
SELECT [Production order field], [Confirmation date field], [Confirmation time field], [Production plant field], [Product field], [Confirmed quantity field]
FROM [Production confirmation source table]
INTO TABLE @DATA(lt_confirmations)
WHERE [Confirmation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
SORT lt_confirmations BY [Production order field] [Confirmation date field] [Confirmation time field].
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<confirmation>) GROUP BY <confirmation>-[Production order field] ASSIGNING FIELD-SYMBOL(<confirmation_group>).
LOOP AT GROUP <confirmation_group> ASSIGNING FIELD-SYMBOL(<first_confirmation>).
CLEAR gs_event.
gs_event-productionorder = |{ <first_confirmation>-[Production order field] }|.
gs_event-activityname = 'First Confirmation Recorded'.
gs_event-eventtime = |{ <first_confirmation>-[Confirmation date field] } { <first_confirmation>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <first_confirmation>-[Production plant field] }|.
gs_event-productcode = |{ <first_confirmation>-[Product field] }|.
gs_event-actualstartdate = gs_event-eventtime.
APPEND gs_event TO gt_events.
EXIT.
ENDLOOP.
ENDLOOP.
* Intermediate Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<intermediate>) GROUP BY <intermediate>-[Production order field] ASSIGNING FIELD-SYMBOL(<intermediate_group>).
DATA(lv_intermediate_index) = 0.
DATA(lv_intermediate_count) = GROUP SIZE.
LOOP AT GROUP <intermediate_group> ASSIGNING FIELD-SYMBOL(<intermediate_row>).
lv_intermediate_index = lv_intermediate_index + 1.
IF lv_intermediate_index < lv_intermediate_count AND <intermediate_row>-[Final confirmation indicator field] <> '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <intermediate_row>-[Production order field] }|.
gs_event-activityname = 'Intermediate Confirmation Recorded'.
gs_event-eventtime = |{ <intermediate_row>-[Confirmation date field] } { <intermediate_row>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <intermediate_row>-[Production plant field] }|.
gs_event-productcode = |{ <intermediate_row>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDIF.
ENDLOOP.
ENDLOOP.
* Final Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<final>) WHERE [Final confirmation indicator field] = '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <final>-[Production order field] }|.
gs_event-activityname = 'Final Confirmation Recorded'.
gs_event-eventtime = |{ <final>-[Confirmation date field] } { <final>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <final>-[Production plant field] }|.
gs_event-productcode = |{ <final>-[Product field] }|.
gs_event-actualenddate = gs_event-eventtime.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Receipt Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gr)
WHERE [Movement type field] IN ('[Goods receipt movement type 1]', '[Goods receipt movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gr ASSIGNING FIELD-SYMBOL(<gr>).
CLEAR gs_event.
gs_event-productionorder = |{ <gr>-[Production order field] }|.
gs_event-activityname = 'Goods Receipt Posted'.
gs_event-eventtime = |{ <gr>-[Posting date field] } { <gr>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gr>-[Production plant field] }|.
gs_event-productcode = |{ <gr>-[Product field] }|.
gs_event-deliveredquantity = |{ <gr>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Technically Completed
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_teco)
WHERE [Status field] = '[Technically completed status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_teco ASSIGNING FIELD-SYMBOL(<teco>).
CLEAR gs_event.
gs_event-productionorder = |{ <teco>-[Production order field] }|.
gs_event-activityname = 'Order Technically Completed'.
gs_event-eventtime = |{ <teco>-[Status change date field] } { <teco>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <teco>-[Production plant field] }|.
gs_event-productcode = |{ <teco>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Settlement Ran
SELECT [Production order field], [Settlement date field], [Settlement time field], [Production plant field], [Product field]
FROM [Order settlement source table]
INTO TABLE @DATA(lt_settlement)
WHERE [Settlement date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_settlement ASSIGNING FIELD-SYMBOL(<settlement>).
CLEAR gs_event.
gs_event-productionorder = |{ <settlement>-[Production order field] }|.
gs_event-activityname = 'Order Settlement Ran'.
gs_event-eventtime = |{ <settlement>-[Settlement date field] } { <settlement>-[Settlement time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <settlement>-[Production plant field] }|.
gs_event-productcode = |{ <settlement>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Cancellation Set
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_cancelled)
WHERE [Status field] IN ('[Cancellation status code]', '[Deletion status code]')
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_cancelled ASSIGNING FIELD-SYMBOL(<cancelled>).
CLEAR gs_event.
gs_event-productionorder = |{ <cancelled>-[Production order field] }|.
gs_event-activityname = 'Order Cancellation Set'.
gs_event-eventtime = |{ <cancelled>-[Status change date field] } { <cancelled>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <cancelled>-[Production plant field] }|.
gs_event-productcode = |{ <cancelled>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
SORT gt_events BY productionorder eventtime activityname.
DELETE ADJACENT DUPLICATES FROM gt_events COMPARING productionorder activityname eventtime productionplant productcode.
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'The application server output file could not be opened' TYPE 'E'.
ENDIF.
TRANSFER 'ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProductionPlant,ProductCode,PlannedQuantity,DeliveredQuantity,ActualStartDate,ActualEndDate' TO p_file.
LOOP AT gt_events INTO gs_event.
gv_line = |{ gs_event-productionorder },{ gs_event-activityname },{ gs_event-eventtime },{ gs_event-sourcesystem },{ gs_event-lastdataupdate },{ gs_event-productionplant },{ gs_event-productcode },{ gs_event-plannedquantity },{ gs_event-deliveredquantity },{ gs_event-actualstartdate },{ gs_event-actualenddate }|.
TRANSFER gv_line TO p_file.
ENDLOOP.
CLOSE DATASET p_file.
MESSAGE |Event log written to { p_file }| TYPE 'S'. Prêt à commencer ?
Utilisez ce modèle pour préparer vos données et engager l’amélioration de votre processus de planification de la production. Repérez les possibilités d’amélioration et optimisez vos opérations dès aujourd’hui.
Optimisez dès maintenant la planification de la production
Repérez les inefficacités, réduisez le temps de cycle de 30 % et atteignez vos objectifs.
Aucune carte bancaire requise. Commencez à optimiser dès aujourd’hui.