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 à recueillir
- Activités clés à suivre
- Conseils pratiques pour l'extraction
Attributs de la planification de la production
| Nom | Description | ||
|---|---|---|---|
| Heure de l’événement EventTime | Horodatage précis indiquant le moment où l’activité s’est produite. | ||
| Description L’heure de l’événement enregistre 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 fondamental pour toutes les analyses de processus fondées sur le temps, notamment le calcul des temps de cycle, des temps d’attente et de la durée globale du processus. Des horodatages exacts sont essentiels pour ordonner correctement les événements et analyser les performances. Ils permettent de mesurer la durée entre les activités, d’identifier les retards et d’évaluer les performances par rapport aux plannings ou aux accords de niveau de service. Dans le contexte de la planification de la production, ils permettent de comprendre la durée de chaque étape de la planification et de l’exécution. Pourquoi c’est important Cet attribut fournit la séquence chronologique des événements, indispensable pour calculer les durées, analyser les performances et identifier les goulots d’étranglement. Où les obtenir Dérivé de différents champs de date et d’heure associés aux transactions et aux modifications de statut, tels que BUDAT (Posting Date) dans les documents matières 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 une modification de statut au sein du 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 représentent des étapes clés telles que « Production Order Created », « Material Availability Checked » ou « Goods Receipt Posted ». Cet attribut constitue la base de la cartographie du processus. Il permet aux analystes de visualiser la séquence des événements, de découvrir les variantes du processus et d’identifier les goulots d’étranglement ou les boucles de reprise. La clarté et le niveau de détail des noms d’activité sont essentiels pour créer un modèle de processus précis et pertinent, qui reflète la réalité des opérations. Pourquoi c’est important Il définit les étapes de la cartographie du processus et permet ainsi de visualiser, d’analyser et de comprendre le flux de travail de production. Où les obtenir Généré à partir de différentes sources, notamment des modifications de statut dans les tables JEST/JSTO, des journaux de transactions et des documents de modification dans CDHDR/CDPOS. Exemples Ordre de production libéréSortie de marchandises enregistréeConfirmation finale enregistréeOrdre techniquement achevé | |||
| Ordre de production ProductionOrder | Identifiant unique d’un ordre de production, qui sert d’identifiant principal du cas pour le processus de planification et d’exécution de la production. | ||
| Description Le numéro de l’ordre de production est une clé alphanumérique unique attribuée à chaque ordre de fabrication dans SAP ECC PP. Il constitue l’objet central qui relie toutes les activités associées, de la création et de la planification à l’exécution et au règlement final. Dans le Process Mining, cet attribut est essentiel pour regrouper tous les événements appartenant à une même série de production. Il permet d’analyser de bout en bout l’ensemble du cycle de vie d’un ordre de production, notamment de suivre son avancement, de mesurer les temps de cycle et d’identifier les écarts par rapport au processus standard. L’analyse des processus par ordre de production offre une vision claire de la manière dont les demandes de fabrication individuelles sont traitées. Pourquoi c’est important Il s’agit de l’identifiant central qui relie tous les événements associés du processus et permet de reconstituer et d’analyser chaque parcours de production du début à la fin. Où les obtenir Cet attribut se trouve dans la table SAP AUFK, champ AUFNR. Exemples 1000345100034610003471000348 | |||
| Dernière mise à jour des données LastDataUpdate | Horodatage indiquant la dernière actualisation ou extraction des données associées à cet événement. | ||
| Description Cet attribut enregistre la date et l’heure auxquelles les données ont été extraites du système source vers l’outil de Process Mining. Il ne représente 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 à comprendre leur degré de fraîcheur. Il est essentiel pour confirmer que l’analyse des processus repose sur des informations à jour, notamment lors du suivi d’opérations en cours. Pourquoi c’est important Il confirme l’actualité des données et garantit que les analyses reposent sur les informations les plus récentes disponibles. Où les obtenir 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 (ETL) lors de l’ingestion des données. Exemples 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Système source SourceSystem | Identifie le système précis à partir duquel les données ont été extraites. | ||
| Description Cet attribut précise le système d’origine de l’enregistrement, par exemple le nom ou l’identifiant d’une instance SAP ECC donnée. Dans les organisations qui utilisent plusieurs systèmes ERP ou combinent des plateformes historiques et modernes, ce champ est essentiel pour assurer la traçabilité des données et disposer du contexte nécessaire. Pour l’analyse, 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 multi-systèmes. Pourquoi c’est important Il fournit un contexte important sur l’origine des données, en particulier dans les environnements qui comportent plusieurs instances SAP ou des systèmes intégrés. Où les obtenir 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 de la matière ou du produit fabriqué. | ||
| Description Le code produit, également appelé numéro de matière, identifie l’article que l’ordre de production doit fabriquer. Il s’agit d’un élément central des données de référence qui relie la planification de la production à la gestion des stocks, aux ventes et au calcul des coûts. Dans le Process Mining, le filtrage ou la segmentation par code produit est essentiel pour comprendre les processus de fabrication propres à chaque produit. Il permet de répondre à des questions telles que « Quels produits présentent les temps de cycle les plus longs ? » ou « Certains produits sont-ils davantage sujets aux problèmes de qualité ou aux retards de matières ? ». Cette analyse est essentielle à la gestion du portefeuille produits et à l’identification des possibilités de standardisation ou d’optimisation des processus pour certains types de matières. Pourquoi c’est important Il permet d’analyser les processus par produit et de révéler les matières associées aux inefficacités, aux retards ou aux coûts élevés. Où les obtenir 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, marquant le début réel de l’exécution. | ||
| Description La date de début réelle correspond à l’horodatage du premier événement qui marque le début du travail de production physique. Elle est généralement dérivée du premier événement de confirmation de production ou de la première sortie de matières premières pour l’ordre. Cet attribut dérivé est essentiel à l’analyse du respect du planning. Il fournit le point de départ réel à comparer à la « Date de début planifiée » et permet de calculer précisément les écarts de démarrage. Comprendre l’écart entre les dates de début planifiée et réelle aide à localiser les retards préalables à la production liés à la préparation des matières, à la configuration des machines ou à la disponibilité des ressources. Pourquoi c’est important Il fournit le véritable point de départ de l’exécution de la production et permet de calculer précisément les retards au démarrage ainsi que le délai global de production. Où les obtenir Dérivée du journal d’événements en recherchant, pour chaque ordre de production, l’horodatage minimal d’activités d’exécution précises telles que « Première confirmation enregistrée » ou « Sortie de marchandises enregistré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, marquant 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érivée de l’horodatage de l’événement « Confirmation finale enregistrée » ou du dernier événement « Entrée de marchandises enregistrée ». Cet attribut est essentiel pour mesurer le temps de cycle total de la production et analyser le respect du planning. La comparaison de la « Date de fin réelle » avec la « Date de fin planifiée » permet de déterminer si l’ordre a été achevé dans les délais. L’analyse de la durée entre la « Date de début réelle » et la « Date de fin réelle » fournit le véritable temps de traversée de la production. Pourquoi c’est important Elle marque l’achèvement de la production et permet de mesurer précisément les performances de livraison dans les délais ainsi que le temps total d’exécution. Où les obtenir Dérivé du journal d'événements en recherchant l'horodatage maximal d'activités clés de clôture telles que « Final Confirmation Recorded » ou « Goods Receipt Posted ». 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é d’entrée de marchandises, correspond à la quantité totale de produit fini dont la fabrication a été confirmée pour un ordre de production donné. Cette valeur est mise à jour lors des événements « Goods Receipt Posted ». Cet attribut est le pendant de la « Quantité planifiée » et est essentiel au calcul du KPI « Écart entre les quantités planifiées et réelles ». Il fournit une mesure définitive de la production réalisée et permet aux analystes d’identifier les écarts pouvant être dus aux rebuts, aux pertes de rendement ou à d’autres problèmes de production. La comparaison des quantités livrées entre les sites, les produits ou les périodes met en évidence les domaines où des problèmes d’efficacité se présentent. Pourquoi c’est important Il mesure la production réelle du processus et permet de la comparer directement aux objectifs planifiés afin d’évaluer les performances. Où les obtenir Disponible dans la table SAP AFPO, champ WEMNG (quantité d’entrée de marchandises). Exemples 984950751255 | |||
| Quantité planifiée PlannedQuantity | Quantité totale du produit dont la fabrication est planifiée dans l’ordre. | ||
| Description La quantité planifiée représente la production cible d’un ordre de production, telle qu’elle a été définie lors de la phase de planification. Cette valeur sert de référence pour mesurer la production réelle. Cet attribut est fondamental pour les KPI liés aux performances de production et au respect du planning, tels que « Écart entre les quantités planifiées et réelles ». Il aide à évaluer la précision de la planification de la production et à identifier les problèmes systémiques liés à la surproduction ou à la sous-production. Son analyse est essentielle pour comprendre dans quelle mesure l’exécution de la production correspond aux plans initiaux. Pourquoi c’est important Cet attribut sert de référence pour mesurer l’écart de production et évaluer la précision de la planification. Où les obtenir Cette valeur est disponible dans la table SAP AFKO, champ GAMNG (quantité totale de l’ordre). Exemples 1005000751250 | |||
| Site de production ProductionPlant | Site ou emplacement de fabrication où l’ordre de production est exécuté. | ||
| Description Le site de production est une unité organisationnelle SAP essentielle qui représente une installation de fabrication. Il est associé à chaque ordre de production et détermine le lieu physique où les activités de production seront réalisées. L’analyse du processus par site de production permet de comparer les performances entre différents emplacements. Elle aide à identifier les sites les plus efficaces, ceux qui connaissent davantage de retards ou de pénuries de matières, ainsi que les pratiques qui peuvent être partagées. Il s’agit d’une dimension fondamentale pour l’analyse des causes profondes dans les Dashboards consacrés au débit et à l’utilisation des ressources. Pourquoi c’est important Il permet de comparer les performances entre différents sites de fabrication et d’identifier les problèmes propres à chaque site ou les bonnes pratiques. Où les obtenir Cet attribut est stocké dans la table SAP AUFK, champ WERKS. Exemples 100017102000DE01 | |||
| Date de début planifiée PlannedStartDate | Date prévue pour le début de la production de l’ordre. | ||
| Description La date de début planifiée est un paramètre clé du calendrier, déterminé lors de la planification et de l’ordonnancement de la production. Elle représente la date cible à laquelle les activités de production d’un ordre doivent commencer. Cet attribut est essentiel pour mesurer le respect du planning. En comparant la « Date de début planifiée » avec l’heure réelle de début de la production, par exemple l’horodatage de l’activité « Première confirmation enregistrée », les organisations peuvent identifier les retards au démarrage de la production. L’analyse des causes de ces retards constitue un cas d’usage majeur du Process Mining dans ce domaine. Pourquoi c’est important Il sert de référence pour mesurer le respect du planning et identifier les retards au démarrage de l’exécution de la production. Où les obtenir 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 planifiée PlannedEndDate | Date prévue à laquelle la production de l’ordre doit être achevée. | ||
| Description La date de fin planifiée est la date cible d’achèvement d’un ordre de production, définie lors de l’ordonnancement. Elle détermine la période prévue 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 du KPI « Taux de respect du planning ». La comparaison de la « Date de fin planifiée » avec l’heure réelle d’achèvement, par exemple l’horodatage de l’activité « Entrée de marchandises enregistrée » ou « Confirmation finale enregistrée », indique si les ordres sont terminés dans les délais. Cette analyse aide à évaluer la fiabilité des plannings de production et à identifier les causes profondes des livraisons tardives. Pourquoi c’est important Elle sert de référence pour déterminer si les ordres de production sont achevés dans les délais, ce qui influe directement sur la satisfaction client et la fiabilité de la planification. Où les obtenir 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 la préparation de la production. Il est déterminé par une vérification système de la disponibilité de toutes les matières composant l'ordre. Le statut « Available » signifie que la production peut commencer sans retard lié aux matières, tandis que « Shortage » indique un problème. Cet attribut est indispensable au Dashboard « Material Shortage Impact Analysis ». En analysant le temps d'attente des ordres confrontés à une pénurie de matières, les entreprises peuvent quantifier l'impact 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 problématiques qui provoquent fréquemment des retards. Pourquoi c’est important Il met directement en évidence les retards causés par les pénuries de matières, qui constituent une cause racine fréquente et importante des écarts de calendrier de production. Où les obtenir Il ne s'agit pas d'un champ unique stocké dans le système. Il correspond au résultat d'une vérification de disponibilité (vérification ATP). Les résultats sont souvent visibles dans la transaction CO02 ou dans la vérification collective de disponibilité COHV. Le statut lui-même, par exemple MACM (Material committed), peut être enregistré. Consultez la documentation SAP ECC PP. Exemples DisponiblePénuriePartiellement disponibleNon vérifié | |||
| Écart de quantité QuantityVariance | Différence entre la quantité de production planifiée et la quantité effectivement livrée. | ||
| Description L'écart de quantité est une mesure calculée qui quantifie l'écart entre la production réalisée et le plan initial. Il est calculé comme suit : « Delivered Quantity » moins « Planned Quantity ». Un écart positif indique une surproduction, tandis qu'un écart négatif indique une sous-production ou une perte de rendement. Cet attribut est essentiel au Dashboard « Planned vs. Actual Production Output » et au KPI associé. L'analyse de l'écart aide à repérer les problèmes liés au rendement de production, aux taux de rebut ou aux erreurs de saisie. Elle fournit une mesure directe de la fiabilité du processus de production par rapport à ses objectifs de volume. Pourquoi c’est important Il quantifie la précision de la production par rapport aux plans et met en évidence les problèmes potentiels de rendement, de rebut ou de maîtrise du processus. Où les obtenir Champ calculé : 'DeliveredQuantity' - 'PlannedQuantity'. Exemples -2-5005 | |||
| Groupe de planification PlannerGroup | Groupe de contrôleurs MRP ou de planificateurs de production responsable de l'ordre. | ||
| Description Le groupe de planification est un élément organisationnel qui représente un groupe de 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 planification contribue à répartir la charge de travail et à établir clairement les responsabilités. Dans le Process Mining, cet attribut permet d'analyser les performances en fonction de l'équipe de planification responsable. Il peut aider à répondre à des questions telles que « Quel groupe de planification connaît le plus d'écarts par rapport au calendrier ? » ou « Les délais de cycle diffèrent-ils selon les groupes responsables des ordres ? ». Ces analyses facilitent l'équilibrage de la charge de travail et l'identification des besoins de formation. Pourquoi c’est important Il permet de segmenter l'analyse des performances par équipe responsable afin d'identifier les écarts d'efficacité de la planification et de charge de travail. Où les obtenir Il s'agit du contrôleur MRP, présent dans la table SAP AFKO, champ DISPO. Exemples 001002P01P02 | |||
| Priorité de production ProductionPriority | Classification indiquant le degré d'urgence ou de priorité de l'ordre de production. | ||
| Description La priorité de production est un champ qui indique l'importance relative d'un ordre de production. Elle permet aux planificateurs de production et au personnel de l'atelier de hiérarchiser leur travail, afin que les ordres prioritaires avancent plus rapidement dans le processus. L'analyse de cet attribut aide à évaluer l'efficacité du système de priorisation. En comparant les délais de cycle des ordres hautement prioritaires à ceux des ordres moins prioritaires, l'entreprise peut déterminer 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 globale du processus. Pourquoi c’est important Il aide à évaluer l'efficacité du système de gestion des priorités et à vérifier que les ordres les plus urgents sont terminés plus rapidement que les ordres standard. Où les obtenir Il ne s'agit souvent pas d'un champ standard de l'en-tête de l'ordre de production. Il peut s'agir d'un champ personnalisé, être dérivé de la priorité de l'ordre client ou faire partie d'un système de classification. Consultez la documentation SAP ECC PP ou la configuration du système. Exemples ÉlevéMoyenFaibleUrgent | |||
| Statut de l'ordre de production ProductionOrderStatus | Statut actuel de traitement de l'ordre de production, par exemple Created, Released ou Technically Completed. | ||
| Description Le statut de l'ordre de production indique l'étape actuelle de l'ordre dans son cycle de vie. SAP utilise un système de codes de statut pour gérer la progression de l'ordre, par exemple CRTD (Created), REL (Released), CNF (Confirmed), DLV (Delivered) et TECO (Technically Completed). L'analyse du temps passé dans les différents statuts constitue 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 dans un état de livraison partielle. Le suivi des changements de statut en tant qu'activités fournit une vue d'ensemble du flux du processus. Pourquoi c’est important Il fournit un aperçu de l'avancement d'un ordre et aide à repérer les goulots d'étranglement auxquels les ordres restent bloqués pendant de longues périodes. Où les obtenir 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 du statut s'effectue souvent au moyen de modules fonctionnels tels que STATUS_TEXT_EDIT. Exemples CRTD (Créé)REL (Publié)DLV (Livré)TECO (Terminé techniquement) | |||
| Statut du respect du calendrier ScheduleAdherenceStatus | Indicateur précisant si l'ordre de production a été terminé au plus tard à sa date de fin planifiée. | ||
| Description Le statut du respect du calendrier est un attribut booléen ou catégoriel calculé qui fournit une vue immédiate des performances en matière de respect des délais. Il est obtenu en comparant la « Actual End Date » à la « Planned End Date ». Si la fin réelle intervient à la date planifiée ou avant, le statut est « On-Time » ; sinon, il est « Late ». Cet attribut simplifie l'analyse et la visualisation dans les Dashboards. Il permet de filtrer et d'agréger facilement les données afin de calculer le KPI « Schedule Adherence Rate » et d'identifier les principales causes des retards, comme certains produits, sites ou pénuries de matières. Pourquoi c’est important Il simplifie l'analyse des performances en classant les ordres comme « On-Time » ou « Late », ce qui facilite la mesure et le suivi de la fiabilité du calendrier. Où les obtenir Champ calculé : IF('ActualEndDate' <= 'PlannedEndDate', 'On-Time', 'Late'). Exemples Dans les délaisEn retard | |||
| Utilisateur responsable ResponsibleUser | Identifiant de l'utilisateur ayant créé ou modifié en dernier l'ordre de production. | ||
| Description L'utilisateur responsable identifie le compte utilisateur SAP associé aux événements clés du cycle de vie de l'ordre de production, comme sa création ou sa libération. Il garantit la traçabilité et permet d'attribuer les actions effectuées dans le système. Dans le Process Mining, cet attribut sert à analyser les variations du processus en fonction du comportement des utilisateurs. Il peut aider à repérer les utilisateurs qui auraient besoin d'une formation complémentaire ou qui appliquent des procédures non standard. Il contribue également à l'analyse des ressources en montrant comment le travail est réparti entre les différents utilisateurs. Pourquoi c’est important Il relie les activités du processus à des personnes précises, ce qui permet d'analyser les performances au niveau utilisateur et de renforcer la responsabilité de chacun. Où les obtenir L'utilisateur ayant créé l'ordre figure dans AUFK-ERNAM. L'utilisateur l'ayant modifié en dernier figure dans AUFK-AENAM. Les documents de modification (CDHDR-USERNAME) fournissent l'historique des utilisateurs pour 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 c’est important Cette étape marque la fin des activités de production physique. La durée entre la première et la dernière confirmation représente le temps réel d’exécution de la production. Où les obtenir Cet événement est enregistré lorsque le statut système « CNF » (I0009, Confirmed) est défini. Il est généralement déclenché par la saisie de la confirmation finale dans la table AFRU (AFRU-AUERU = « X »). La modification de statut est consignée dans JCDS. Collecte Identifier l’horodatage auquel le statut « CNF » est défini ou rechercher le dernier enregistrement de confirmation dans AFRU. Type d’événement explicit | |||
| Entrée de marchandises enregistrée | Cet événement enregistre l’entrée du produit fini issu de l’ordre de production dans le stock. Il indique que les produits fabriqués sont désormais disponibles pour expédition ou pour une transformation ultérieure. | ||
| Pourquoi c’est important Il s’agit d’une étape clé de l’achèvement, qui représente la production finale du processus. Le délai entre la libération et l’entrée de marchandises correspond au délai total de production. Où les obtenir Enregistré sous forme de document matière dans les tables MKPF/MSEG, avec un type de mouvement, généralement « 101 », faisant référence à l’ordre de production. Le statut système « DLV » (I0012, Delivered) est également défini sur l’ordre. Collecte Capturer la date de comptabilisation du document matière présentant le type de mouvement « 101 » ou l’horodatage de la modification du 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 déclenchée par une exécution de planification ou une saisie manuelle. Il est enregistré explicitement lorsqu’un nouvel enregistrement d’ordre est sauvegardé dans le système et reçoit le statut « CRTD » (Created). | ||
| Pourquoi c’est important Il s’agit du point de départ de chaque cas d’ordre de production. L’analyse du délai entre cet événement et la libération permet d’identifier les retards liés à la planification préalable à la production et à la configuration administrative. Où les obtenir Cet événement est enregistré à partir 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, associées au numéro d’objet de l’ordre (AUFK-OBJNR). Collecte Suivre l’horodatage de création et l’attribution du statut « CRTD ». Type d’événement explicit | |||
| Ordre de production libéré | Cette activité correspond à l’approbation officielle et à la libération de l’ordre de production pour exécution. Une fois l’ordre libéré, les réservations de matières deviennent actives et les activités de production, telles que la sortie de marchandises et les confirmations, peuvent commencer. | ||
| Pourquoi c’est important Il s’agit d’une étape importante qui marque le passage de la planification à l’exécution. Le délai entre la création et la libération constitue un indicateur clé de l’efficacité de la planification. Où les obtenir Cet événement est enregistré explicitement lorsque le statut système « REL » (I0002) est attribué à l’ordre de production. La modification est horodatée dans la table JCDS, associée au numéro d’objet de l’ordre (AUFK-OBJNR). Collecte Identifier l’horodatage auquel le statut « REL » devient actif pour l’ordre. Type d’événement explicit | |||
| Ordre techniquement achevé | Il s’agit d’une étape de clôture administrative qui finalise l’ordre de production du point de vue logistique. Elle empêche tout nouveau mouvement de matières ou toute nouvelle confirmation et permet le règlement financier. | ||
| Pourquoi c’est important Il s’agit du 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 postérieures à la production. Où les obtenir Cet événement est enregistré explicitement lorsque le statut système « TECO » (I0045, Technically Completed) est attribué à l’ordre. La modification est horodatée dans la table JCDS. Collecte Identifier 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 réel sur l’ordre. Il est enregistré lorsqu’une première confirmation d’opération est saisie dans le système pour l’ordre de production. | ||
| Pourquoi c’est important Cette activité fournit l’heure réelle de début de la production. Elle est essentielle pour mesurer le respect du planning et identifier les retards entre l’affectation des ressources et le début du travail. Où les obtenir Cet événement est déduit en recherchant la date de comptabilisation la plus ancienne (AFRU-BUDAT) parmi toutes les confirmations enregistrées pour l’ordre dans la table AFRU. La première entrée marque le début de la production physique. Collecte Identifier le premier enregistrement de confirmation de l’ordre à partir de la date de comptabilisation dans la table AFRU. Type d’événement inferred | |||
| Annulation de l’ordre définie | Cet événement indique qu’un ordre de production a été annulé avant son achèvement. Cette opération est généralement réalisée en définissant un statut spécifique ou un indicateur de suppression, ce qui empêche tout traitement ultérieur. | ||
| Pourquoi c’est important Il s’agit d’un résultat négatif 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 référence. Où les obtenir Cet événement peut être déduit de l’attribution du statut « DLFL » (I0076, Deletion flag) ou d’un statut spécifique « Canceled » s’il est configuré. La modification est horodatée dans la table JCDS. Collecte Identifier 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 | Représente 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 dont l’avancement doit être suivi avant l’achèvement final. | ||
| Pourquoi c’est important L’analyse des confirmations intermédiaires aide à suivre l’avancement des cycles de production longs et à identifier les goulots d’étranglement au sein même du processus de production, et pas uniquement à son début ou à sa fin. Où les obtenir Enregistré à partir des confirmations de la table AFRU qui ne sont pas marquées comme confirmations finales. Chaque entrée comporte une date et une heure de comptabilisation (AFRU-BUDAT). Collecte Extraire de la table AFRU tous les enregistrements de confirmation qui ne sont pas signalés comme confirmations finales d’une opération. Type d’événement explicit | |||
| Disponibilité des matières vérifiée | Représente l’exécution d’un contrôle visant à déterminer si tous les composants nécessaires à l’ordre de production sont disponibles. Ce contrôle peut être automatisé lors de la création ou de la libération de l’ordre, ou déclenché manuellement. | ||
| Pourquoi c’est important Cette activité est essentielle pour comprendre les retards causés par les pénuries de matières. Des contrôles fréquents ou un délai important avant la disponibilité des matières peuvent révéler des problèmes dans la chaîne d’approvisionnement ou la gestion des stocks. Où les obtenir Le système définit un statut tel que « MACM » (matière engagée) ou « MSPT » (pénurie de matières). L’exécution peut être déduite de l’horodatage de cette modification de statut dans les tables JEST/JCDS. Les résultats sont visibles dans l’en-tête de l’ordre. Collecte Déduire l’événement de l’horodatage des modifications de statut liées à la disponibilité des matières, telles que « MACM » ou « MSPT ». Type d’événement inferred | |||
| Données de l’ordre modifiées | Cet événement enregistre les modifications importantes apportées à un ordre de production après sa création initiale, par exemple les changements de quantité planifiée, de dates ou de nomenclature. Le système consigne ces modifications à des fins d’audit. | ||
| Pourquoi c’est important Le suivi de ces modifications permet d’identifier l’instabilité du processus et les replanifications fréquentes. Une fréquence élevée de changements peut révéler une planification initiale insuffisante, une demande volatile ou des données inexactes. Où les obtenir Les modifications apportées aux champs clés des tables AFKO (en-tête de l’ordre) et AFPO (poste de l’ordre) 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é. Collecte Extraire 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 exécuté | Représente le règlement financier de l’ordre de production, au cours duquel les coûts cumulés sont affectés aux objets de coûts appropriés. Il s’agit de la dernière étape du cycle de vie de l’ordre du point de vue du contrôle de gestion. | ||
| Pourquoi c’est important Bien qu’il s’agisse d’une activité financière, les retards de règlement peuvent révéler des problèmes dans le reporting des coûts ou l’exactitude des données de l’ordre. Cet événement marque la véritable clôture financière du processus de production. Où les obtenir Cet événement peut être déduit lorsque le solde de l’ordre devient nul ou lorsque le statut système « SETC » (I0076, Settlement rule created) est suivi de journaux d’exécution du règlement. Le règlement effectif est enregistré dans des tables de contrôle de gestion telles que COSP et COSS. Collecte Déduire l’événement à partir des documents de règlement associés à l’ordre dans les tables CO ou de l’activation du statut « SETC ». Type d’événement inferred | |||
| Sortie de marchandises enregistrée | Cette activité représente le prélèvement des matières composant l’ordre de production dans le stock. Elle confirme que les matières premières ou les produits semi-finis nécessaires ont été préparés pour la production. | ||
| Pourquoi c’est important Cet événement marque le début de la consommation des matières. Les retards entre la libération de l’ordre et la sortie de marchandises peuvent révéler des problèmes de logistique d’entrepôt, de préparation des matières ou d’exactitude des stocks. Où les obtenir Enregistré sous forme de documents matières dans les tables MKPF (en-tête) et MSEG (poste), avec un type de mouvement, généralement « 261 », faisant référence au numéro de l’ordre de production (MSEG-AUFNR). Collecte Capturer la date de comptabilisation (MKPF-BUDAT) des documents matières associés à l’ordre et présentant le type de mouvement « 261 ». Type d’événement explicit | |||
Guides d'extraction
Étapes
- Créer un InfoSet dans SAP Query : Utilisez le code de transaction
SQ02. Créez un nouvel InfoSet, par exempleZPP_EVENTLOG. Sélectionnez l'option de source de données « Jointure de tables avec table de base ». UtilisezAUFK(données de base de l'ordre) comme table de base initiale. - Joindre les tables requises : 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 de l'objet individuel) :AUFK-OBJNR = JEST-OBJNRJESTversJCDS(documents de modification des statuts système/utilisateur) :JEST-OBJNR = JCDS-OBJNRETJEST-STAT = JCDS-STAT. Remarque : cette jointure sert à lire l'historique des changements de statut.AUFKversAFRU(confirmations d'achèvement de l'ordre) :AUFK-AUFNR = AFRU-AUFNRAUFKversMSEG(segment de document : matière) :AUFK-AUFNR = MSEG-AUFNRMSEGversMKPF(en-tête : document matière) :MSEG-MBLNR = MKPF-MBLNRETMSEG-MJAHR = MKPF-MJAHR
- Définir les groupes de champs : Faites glisser les champs requis des tables sources vers les groupes de champs. Vérifiez que tous les champs nécessaires à la requête finale, tels que
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATEetMKPF-BUDAT, sont inclus. - Ajouter les champs personnalisés et le code : Dans l'InfoSet, accédez à l'onglet « Extras ». Vous devrez définir des champs personnalisés pour
ActivityName,EventTime,SourceSystemetLastDataUpdate, puis écrire du code ABAP pour les renseigner selon la logique définie dans la section consacrée à la requête. Cette logique consistera à parcourir les changements de statut, les confirmations et les documents matières 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 format de journal d'événements dans les sections de code de l'InfoSet. - Générer et enregistrer l'InfoSet : Une fois toutes les jointures, tous les champs et le code personnalisé en place, enregistrez et générez l'InfoSet.
- Créer une SAP Query : Utilisez le code de transaction
SQ01. Créez une nouvelle requête, par exempleZPP_EVENTS, à partir de l'InfoSet créé aux étapes précédentes. - Concevoir la mise en page de la requête : Dans le concepteur de requêtes, définissez les champs de l'écran de sélection. Les sélections pertinentes comprennent l'ordre de production
AUFNR, le siteWERKS, le type d'ordreAUARTet une plage de dates pour la création de l'ordreAUFK-ERDAT. - Définir 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écuter la requête : Exécutez la requête avec les critères de sélection souhaités, par exemple pour les ordres de production des 3 à 6 derniers mois.
- Exporter les données : Une fois les résultats affichés, exportez la liste. Le format le plus courant et le plus fiable est « Spreadsheet » ou « Local File », avec un format séparé par des tabulations ou CSV.
- Mettre en forme les données pour ProcessMind : Ouvrez le fichier exporté dans un tableur. Vérifiez que les en-têtes de colonne correspondent aux attributs requis (
ProductionOrder,ActivityName,EventTime, etc.) et que le format de date et d'heure deEventTimeest cohérent et conforme au standard requis, par exemple YYYY-MM-DD HH:MI:SS. Enregistrez le fichier au format CSV pour le téléverser.
Configuration
- Jointures de l'InfoSet : Cette méthode repose principalement sur une jointure complexe des tables d'en-tête, de statut, de confirmation et de mouvements de matières dans l'InfoSet. Les jointures principales sont
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUetAUFK->MSEG->MKPF. Des jointures incorrectes ou inefficaces peuvent dégrader les performances ou produire des données inexactes. - Critères de sélection : Il est essentiel de définir une plage de sélection raisonnable afin d'éviter les problèmes de performance du système. Les principaux champs de sélection de l'écran initial de la requête doivent inclure :
- 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 maîtrisable.
- Site de production (
- Statuts système : La logique d'identification des événements tels que « Created », « Released », « Technically Completed » et « Cancelled » dépend de codes de statut système précis, par exemple I0001, I0002, I0045 et I0047. Ces codes sont généralement standard dans les systèmes SAP, mais doivent être vérifiés.
- Types de mouvement : Les événements tels que « Goods Issue » et « Goods Receipt » sont identifiés par leurs types de mouvement (
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 toutes les tables sous-jacentes (AUFK, AFKO, JEST, JCDS, AFRU, MSEG et MKPF).
a 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
- Établir 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 coordonné avec les équipes SAP Basis et d'administration de la base de données.
- Identifier le schéma SAP : Déterminez le schéma de base de données approprié dans lequel les tables SAP sont stockées. Il s'agit souvent de
SAPSR3ou d'un nom similaire propre au système. Vous devrez remplacer l'espace réservé[Your SAP Schema]dans la requête par cette valeur. - Préparer la requête SQL : Copiez la requête SQL complète fournie dans la section
query. Cette requête est conçue pour extraire toutes les activités indiquées dans un format unique de journal d'événements. - Configurer les paramètres de la requête : Avant l'exécution, vous devez modifier les espaces réservés présents dans la requête. 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. - Se connecter et exécuter : Utilisez un client SQL standard, tel que DBeaver ou SAP HANA Studio, ou un script personnalisé en Python ou Java, pour vous connecter à la base de données SAP avec les identifiants de l'étape 1.
- Exécuter la requête : Collez la requête SQL configurée dans votre client et exécutez-la. Selon la plage de dates et la taille du système, l'opération peut prendre plusieurs minutes.
- Examiner les premiers résultats : Une fois la requête terminée, examinez brièvement les premières centaines de lignes afin de vérifier que les colonnes telles que
ProductionOrder,ActivityNameetEventTimesont correctement renseignées et cohérentes. - Exporter au format CSV : Exportez l'ensemble des résultats depuis votre client SQL vers un fichier CSV. Vérifiez que le fichier utilise l'encodage UTF-8 afin d'éviter les problèmes de caractères.
- Finaliser le CSV pour le téléversement : Ouvrez le fichier CSV et vérifiez que les en-têtes de colonne 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. - Téléverser vers ProcessMind : Le fichier CSV préparé peut maintenant être téléversé sur la plateforme ProcessMind pour analyse.
Configuration
- Schéma de base de données : Vous devez indiquer le schéma SAP dans lequel se trouvent vos tables de planification de production. Remplacez l'espace réservé
[Your SAP Schema]dans la requête par le nom correct pour votre environnement, par exempleSAPSR3. - Plage de dates : Le filtrage par plage de dates précise est essentiel aux performances. La requête filtre 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 maîtrisable. - Type d'ordre de production : Pour cibler l'analyse, filtrez la requête sur le champ du type d'ordre de production (
AUFK.AUART). Vous pouvez ainsi inclure ou exclure certains types, comme les ordres de production standard, les ordres de process ou les ordres de retouche. - Site de production : Il est vivement conseillé de filtrer sur 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 des droits de lecture sur les tables suivantes :
AUFK,AFKO,JCDS,JEST,AFRU,MSEGetMKPF. 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.
a 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
- Confirmez que SAP ECC PP, le traitement des ordres de fabrication, les confirmations, la gestion des stocks et les données de controlling sont disponibles. Vérifiez é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 via la transaction SE38 ou SE80, créez un rapport exécutable dédié, tel que [Nom de votre rapport personnalisé]. Utilisez un écran de sélection avec des paramètres de date obligatoires, tels que [Date de début] et [Date de fin], ainsi que des filtres facultatifs pour [Code société], [Usine de production], [Type d’ordre], [Article] et [Ordre de fabrication].
- 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 des statuts correspondante pour identifier les changements de statut explicites, notamment CRTD, libéré, techniquement terminé et les statuts liés à l’annulation. Ne supposez pas qu’un code de statut représente un événement si l’historique des statuts ne contient pas de changement horodaté.
- Lisez les résultats du contrôle de disponibilité des articles à partir des données de contrôle de disponibilité des ordres de fabrication configurées dans votre système. Si le contrôle n’est pas conservé dans une table pouvant être reliée de manière fiable à l’ordre et à l’horodatage, mettez en œuvre l’extension SAP configurée, le journal applicatif ou la source d’audit approuvée par votre équipe SAP. Ne déduisez pas l’existence d’un contrôle uniquement à partir de la création ou de la libération de l’ordre.
- Lisez l’historique des modifications des ordres à partir des objets de documents de modification configurés pour les ordres de fabrication et des tables de documents associées. Extrayez uniquement les modifications importantes, telles que la quantité planifiée, les dates, la nomenclature, la gamme ou les 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 à partir des données des documents matières configurées pour la gestion des stocks 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 à partir de la source de confirmations de production configurée dans votre système. Triez les confirmations par ordre de fabrication et par horodatage de confirmation. Émettez First Confirmation Recorded pour la première confirmation, Intermediate Confirmation Recorded pour les confirmations intermédiaires admissibles et Final Confirmation Recorded pour une confirmation explicitement marquée comme finale ou identifiée comme telle par la logique configurée de clôture des confirmations. Ne déduisez pas le caractère final de la dernière ligne renvoyée par une requête arbitraire.
- Lisez les données d’exécution du règlement à partir de la source de règlement du controlling configurée dans votre système. Émettez Order Settlement Ran uniquement lorsqu’un enregistrement d’exécution du règlement, un document de règlement ou un historique de statuts de règlement approuvé fournit un horodatage explicite lié à 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. Utilisez une conversion stable des horodatages et conservez le fuseau horaire du système source. Définissez ActualStartDate sur l’horodatage de la première confirmation et ActualEndDate sur celui de la confirmation finale lorsque ces événements existent.
- Triez les lignes d’événements par ProductionOrder et EventTime, avec un tri secondaire déterministe pour les horodatages identiques. Supprimez uniquement les enregistrements sources strictement dupliqués, et non les répétitions d’événements légitimes. Vérifiez que les douze noms d’activités requis sont représentés 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 du serveur d’applications à l’aide d’une interface de fichiers ABAP approuvée et d’un chemin de fichier logique configuré. Utilisez un séparateur et un encodage convenus avec la configuration d’ingestion de ProcessMind, ajoutez une ligne d’en-tête, placez entre guillemets les valeurs contenant des séparateurs et formatez les horodatages de manière cohérente, de préférence au format YYYY-MM-DDThh:mm:ss.
- Téléchargez le fichier selon la procédure approuvée de transfert de fichiers SAP, contrôlez-le indépendamment, puis importez-le dans ProcessMind comme Event Log, avec 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 : utilisez, pour l’analyse initiale, 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 reprise pour les ordres créés avant la date de début sélectionnée, mais encore actifs pendant la période d’analyse.
- Filtres de sélection : prenez en charge [Code société], [Usine de production], [Type d’ordre], [Article], [Ordre de fabrication], le statut de l’ordre ainsi que les filtres sur la date 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énements 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ègle d’horodatage : privilégiez la date et l’heure de l’événement source. Si seule une date est disponible, documentez la précision réduite et utilisez une heure configurée cohérente, plutôt que de présenter une heure précise inventée. Convertissez tous les horodatages dans le fuseau horaire attendu par ProcessMind.
- Gestion des statuts : utilisez un historique des statuts horodaté pour les activités liées aux statuts. Configurez la correspondance entre les valeurs de statut internes et les activités métier en fonction de la configuration des statuts système et de l’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 de l’ordre, de sa libération, des réservations ou d’une sortie de marchandises réussie, sauf si la source approuvée par l’entreprise enregistre explicitement le contrôle.
- Gestion des confirmations : configurez les règles qui distinguent les confirmations initiales, intermédiaires et finales. Une confirmation ne peut être finale que si la source l’identifie explicitement comme telle ou si la logique de confirmation SAP configurée établit la clôture.
- Quantités : conservez autant que possible l’unité de mesure source. Si les quantités sont agrégées, indiquez si l’agrégation est effectuée par ordre, article, mouvement, confirmation ou événement. DeliveredQuantity doit représenter les entrées comptabilisées de produits finis, et non un simple 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, puis appliquez la même convention documentée à chaque ligne d’une même exécution.
- Performances : limitez la période de sélection, ne sélectionnez que les champs requis, traitez les données par lots, utilisez le filtrage 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 progressivement le résultat lorsque l’utilisation de la mémoire constitue un enjeu.
- Sortie fichier : 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 le comportement de l’en-tête conformément aux spécifications d’importation de ProcessMind. N’exposez pas d’identifiants dans le rapport ni dans le fichier de sortie.
- Prérequis : confirmez 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 controlling sont actifs, selon les besoins. Les autorisations requises, la gouvernance des développements personnalisés, l’approbation des transports, 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 : 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 doivent être confirmés dans le système SAP ECC cible. Utilisez [À configurer selon votre système] lorsque l’implémentation ne fournit pas de source standard et fiable.
a 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 commencer à optimiser votre processus de planification de la production. Obtenez des analyses utiles et optimisez vos opérations dès aujourd’hui.
Optimisez dès maintenant votre planification de production pour une efficacité maximale
Identifiez les inefficacités, réduisez le délai de cycle de 30 % et atteignez vos objectifs.
Aucune carte bancaire requise. Commencez à optimiser dès aujourd'hui.