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
- Guide pratique d’extraction
Attributs de Planification de Production
| Nom | Description | ||
|---|---|---|---|
| Heure de l'événement EventTime | L'`horodatage` précis indiquant quand l'`activité` s'est produite. | ||
| Description L'heure de l'événement enregistre la date et l'heure auxquelles une activité spécifique a été exécutée ou un statut a été consigné dans le système. Cet horodatage est fondamental pour toutes les analyses de processus basées sur le temps, y compris le calcul des temps de cycle, des temps d'attente et de la durée globale du processus. Des horodatages précis sont cruciaux pour séquencer correctement les événements et pour l'analyse des performances. Ils permettent aux analystes 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, cela aide à comprendre la durée de chaque étape de planification et d'exécution. Pourquoi c'est important Cet attribut fournit la séquence chronologique des événements, ce qui est essentiel pour calculer les durées, analyser les performances et identifier les goulots d'étranglement (bottlenecks). Où obtenir Dérivé de divers champs de date et d'heure associés aux transactions et aux changements de statut, tels que BUDAT (Date de comptabilisation) des documents matériels ou les horodatages de modification de CDHDR. Exemples 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| Nom de l'activité ActivityName | Le nom de l'événement métier ou système qui s'est produit à un moment précis pour un ordre de production. | ||
| Description Le Nom de l'Activité décrit une étape spécifique ou un changement de statut au sein du processus de planification de production. Ces événements sont extraits des journaux de modifications, des mises à jour de statut et des enregistrements de transactions dans SAP ECC PP, représentant des étapes clés comme 'Ordre de Production Créé', 'Disponibilité des Matériaux Vérifiée' ou 'Réception des Marchandises Enregistrée'. Cet attribut constitue l'épine dorsale de la carte des processus, permettant aux analystes de visualiser la séquence des événements, de découvrir les variantes de processus et d'identifier les goulots d'étranglement (bottlenecks) ou les boucles de retravail. La clarté et la granularité des noms d'activités sont essentielles pour construire 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 carte des processus, ce qui permet de visualiser, d'analyser et de comprendre le workflow de production. Où obtenir Généré à partir de diverses sources, y compris 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 LibéréSortie de marchandises enregistréeConfirmation finale enregistréeCommande Clôturée Techniquement | |||
| Ordre de Production ProductionOrder | L'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 agit comme l'objet central qui relie toutes les activités associées, de la création et planification à l'exécution et au règlement final. En Process Mining, cet attribut est essentiel pour regrouper tous les événements appartenant à une seule exécution de production. Cela permet une analyse de bout en bout de l'ensemble du cycle de vie d'un ordre de production, y compris le suivi de son avancement, la mesure des temps de cycle et l'identification de toute déviation par rapport au processus standard. L'analyse des processus par Ordre de Production offre une vue claire de la manière dont les demandes de fabrication individuelles sont satisfaites. Pourquoi c'est important C'est l'identifiant central qui relie tous les événements de processus associés, permettant la reconstruction et l'analyse de chaque parcours de production du début à la fin. Où obtenir Cet attribut se trouve dans la table SAP AUFK, champ AUFNR. Exemples 1000345100034610003471000348 | |||
| Dernière mise à jour des données LastDataUpdate | Le timestamp indiquant la dernière fois que les données de cet événement ont été rafraîchies ou extraites. | ||
| 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 est un horodatage technique à des fins de gestion des données. Son utilisation principale est de garantir la fraîcheur des données et d'aider les administrateurs et les analystes à comprendre la récence des données qu'ils analysent. Il est essentiel pour valider que l'analyse du processus est basée sur des informations à jour, en particulier lors de la surveillance des opérations en cours. Pourquoi c'est important Il confirme la fraîcheur des données, garantissant que les analyses sont basées sur les informations les plus récentes disponibles. Où 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 des données (ETL) lors du processus d'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 spécifique à partir duquel les données ont été extraites. | ||
| Description Cet attribut spécifie le système d'origine de l'enregistrement, tel que le nom ou l'ID spécifique de l'instance SAP ECC. Dans les organisations dotées de plusieurs systèmes ERP ou d'un mélange de plateformes héritées et modernes, ce champ est crucial pour la lignée des données (data lineage) et le contexte. Pour l'analyse, il permet de filtrer les processus en fonction de leur système d'origine. Cela peut être utile pour comparer les performances des processus entre différents systèmes ou pour isoler les données lors de projets de consolidation de données multi-systèmes. Pourquoi c'est important Il fournit un contexte crucial sur l'origine des données, en particulier dans les environnements avec plusieurs instances SAP ou systèmes intégrés. Où obtenir Généralement ajouté lors du processus d'extraction des données, souvent dérivé de l'ID système SAP (SY-SYSID). Exemples ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Code Produit ProductCode | L'identifiant unique du matériau ou du produit fabriqué. | ||
| Description Le Code Produit, ou Numéro de Matériel, identifie l'article que l'ordre de fabrication est destiné à produire. Il s'agit d'un élément de données de base central qui relie la planification de production à la gestion des stocks, aux ventes et au calcul des coûts. En Process Mining, le filtrage ou la segmentation par Code Produit est essentiel pour comprendre les processus de fabrication spécifiques aux produits. Il aide à répondre à des questions telles que 'Quels produits ont les temps de cycle les plus longs ?' ou 'Certains produits sont-ils plus sujets aux problèmes de qualité ou aux retards de matériaux ?'. Cette analyse est vitale pour la gestion du portefeuille de produits et l'identification des opportunités de standardisation ou d'optimisation des processus pour des types de matériaux spécifiques. Pourquoi c'est important Il permet une analyse de processus spécifique au produit, révélant quels matériaux sont associés à des inefficacités de processus, des retards ou des coûts élevés. Où obtenir Ceci se trouve dans la table SAP AFPO, champ MATNR. Exemples FG-123RM-45AHALB-7890CHEM-22 | |||
| Date de début réelle ActualStartDate | L'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 est 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 marchandises de matières premières pour la commande. Cet attribut dérivé est crucial pour l'analyse du respect des délais. Il fournit le point de départ réel à comparer avec la 'Date de Début Planifiée', permettant le calcul précis des écarts de temps de début. Comprendre l'écart entre les dates de début planifiées et réelles aide à identifier les retards de pré-production liés à la préparation des matériaux, à 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, permettant un calcul précis des retards de démarrage et du délai de production global. Où obtenir Dérivé du journal d'événements en trouvant l'horodatage minimal des activités d'exécution spécifiques telles que 'Première confirmation enregistrée' ou 'Sortie de marchandises enregistrée' pour chaque ordre de fabrication. Exemples 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Date de fin réelle ActualEndDate | L'horodatage de l'activité de production finale, marquant l'achèvement réel de la commande. | ||
| Description La Date de Fin Réelle est l'horodatage de l'événement qui marque l'achèvement de toutes les activités de production pour une commande. Elle est généralement dérivée de l'horodatage de l''Enregistrement de la Confirmation Finale' ou du dernier événement 'Réception des Marchandises Enregistrée'. Cet attribut est essentiel pour mesurer le temps de cycle de production total et pour l'analyse du respect des délais. La comparaison de la 'Date de Fin Réelle' avec la 'Date de Fin Planifiée' détermine si une commande a été achevée à temps. L'analyse de la durée entre la 'Date de Début Réelle' et la 'Date de Fin Réelle' donne le temps de production réel. Pourquoi c'est important Il marque l'achèvement de la production, permettant une mesure précise des performances de livraison à temps et du temps d'exécution total. Où obtenir Dérivé du journal d'événements en trouvant l'horodatage maximal des activités de fin clés telles que 'Confirmation finale enregistrée' ou 'Réception de marchandises enregistrée'. Exemples 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| Quantité livrée DeliveredQuantity | La quantité réelle du produit qui a été produite et réceptionnée en stock. | ||
| Description La quantité livrée, également connue sous le nom de quantité de réception de marchandises, est la quantité totale de produit fini qui a été confirmée comme produite pour un ordre de fabrication donné. Cette valeur est mise à jour lorsque des événements 'Réception de marchandises enregistrée' se produisent. Cet attribut est le complément de la 'Quantité planifiée' et est essentiel pour le calcul de l'ICP 'Écart Quantité planifiée vs. réelle'. Il fournit une mesure définitive de la production, permettant aux analystes d'identifier les écarts qui peuvent être causés par des rebuts, des 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 zones présentant des problèmes d'efficacité. Pourquoi c'est important Il mesure la production réelle du processus de production, permettant une comparaison directe avec les objectifs planifiés pour évaluer les performances. Où obtenir Trouvé dans la table SAP AFPO, champ WEMNG (Quantité de marchandises reçues). Exemples 984950751255 | |||
| Quantité Planifiée PlannedQuantity | La quantité totale du produit prévue pour être produite dans la commande. | ||
| Description La Quantité Planifiée représente la production cible d'un ordre de fabrication, telle que définie pendant 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 à la performance de production et au respect des délais, tels que l''Écart entre Quantité Planifiée et Réelle'. Il aide à évaluer la précision de la planification de production et à identifier les problèmes systémiques liés à la surproduction ou à la sous-production. L'analyse de cette valeur est essentielle pour comprendre dans quelle mesure l'exécution de la production s'aligne sur les plans initiaux. Pourquoi c'est important Cet attribut est la référence pour mesurer l'écart de production et évaluer la précision de la planification. Où obtenir Cette valeur est disponible dans la table SAP AFKO, champ GAMNG (Quantité totale de commande). Exemples 1005000751250 | |||
| Usine de Production ProductionPlant | L'installation de fabrication ou le site où l'ordre de production est exécuté. | ||
| Description L'Usine de Production est une unité organisationnelle clé dans SAP qui représente une installation de fabrication. Elle est attribuée à chaque ordre de production et dicte où les activités de production auront physiquement lieu. L'analyse du processus par Usine de Production permet des comparaisons de performances entre différents sites. Cela aide à identifier quelles usines sont les plus efficaces, lesquelles rencontrent plus de retards ou de pénuries de matériaux, et où les meilleures pratiques peuvent être partagées. C'est une dimension fondamentale pour l'analyse des causes profondes dans les dashboards liés au débit et à l'utilisation des ressources. Pourquoi c'est important Il permet la comparaison des performances entre différents sites de fabrication, aidant à identifier les problèmes spécifiques au site ou les meilleures pratiques. Où obtenir Cet attribut est stocké dans la table SAP AUFK, champ WERKS. Exemples 100017102000DE01 | |||
| Date de Début Prévue PlannedStartDate | La date prévue à laquelle la production de la commande doit commencer. | ||
| Description La Date de Début Planifiée est un paramètre d'ordonnancement clé déterminé pendant la phase de planification et d'ordonnancement de production. Elle représente la date de début cible pour les activités de production d'une commande. Cet attribut est crucial pour mesurer le respect des délais. En comparant la 'Date de Début Planifiée' avec l'heure de début réelle de la production (par exemple, l'horodatage de l'activité 'Première Confirmation Enregistrée'), les organisations peuvent identifier les retards dans le démarrage de la production. L'analyse des raisons de ces retards est un cas d'utilisation principal du Process Mining dans ce domaine. Pourquoi c'est important Il sert de référence pour mesurer le respect des délais et identifier les retards dans le démarrage de l'exécution de la production. Où obtenir C'est la date de début de base, trouvée dans la table SAP AFKO, champ GSTRP. Exemples 2023-05-102023-06-222023-07-01 | |||
| Date de fin prévue PlannedEndDate | La date prévue à laquelle la production de la commande doit être achevée. | ||
| Description La Date de Fin Planifiée est la date d'achèvement cible pour un ordre de production, établie pendant le processus d'ordonnancement. Elle définit le délai prévu pour l'achèvement de toutes les activités de production, y compris les confirmations finales et la réception des marchandises. Cette date est essentielle pour calculer le KPI 'Taux de Respect des Délais'. La comparaison de la 'Date de Fin Planifiée' avec l'heure d'achèvement réelle (par exemple, l'horodatage de l'activité 'Réception des Marchandises Enregistrée' ou 'Confirmation Finale Enregistrée') révèle si les commandes sont terminées à temps. Cette analyse aide à évaluer la fiabilité des plannings de production et à identifier les causes profondes des retards de livraison. Pourquoi c'est important C'est la référence utilisée pour déterminer si les ordres de fabrication sont terminés à temps, impactant directement la satisfaction client et la fiabilité de la planification. Où obtenir C'est la date de fin de base, trouvée dans la table SAP AFKO, champ GLTRP. Exemples 2023-05-152023-06-282023-07-05 | |||
| Disponibilité des matériaux MaterialAvailabilityStatus | Indique si tous les composants requis pour l'ordre de fabrication sont disponibles. | ||
| Description Le statut de disponibilité des matériaux est un indicateur critique de la préparation de la production. Il est déterminé par le système qui vérifie la disponibilité de tous les matériaux composants requis pour la commande. Un statut 'Disponible' signifie que la production peut se poursuivre sans retards liés aux matériaux, tandis que 'Pénurie' indique un problème. Cet attribut est essentiel pour le tableau de bord 'Analyse de l'impact des pénuries de matériaux'. En analysant le temps que les commandes passent en attente en raison d'une pénurie de matériaux, les entreprises peuvent quantifier l'impact des problèmes de chaîne d'approvisionnement sur les calendriers de production. Cela aide à identifier les fournisseurs peu fiables ou les composants problématiques qui causent fréquemment des retards. Pourquoi c'est important Il met directement en évidence les retards causés par les pénuries de matériaux, qui sont une cause profonde courante et significative des écarts de calendrier de production. Où obtenir Ce n'est pas un champ unique stocké. C'est le résultat d'un contrôle de disponibilité (contrôle ATP). Les résultats sont souvent visibles dans la transaction CO02 ou dans le contrôle de disponibilité collectif COHV. Le statut lui-même (par exemple, MACM - Matériel engagé) peut être enregistré. Consultez la documentation SAP ECC PP. Exemples DisponiblePénuriePartiellement DisponibleNon Vérifié | |||
| Écart de quantité QuantityVariance | La différence entre la quantité de production planifiée et la quantité livrée réelle. | ||
| Description L'Écart de Quantité est une métrique calculée qui mesure la déviation de la production par rapport au plan initial. Il est calculé comme 'Quantité Livrée' moins 'Quantité Planifiée'. 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 pour le dashboard 'Production Planifiée vs. Réelle' et le KPI correspondant. L'analyse de l'écart aide à identifier les problèmes liés au rendement de production, aux taux de rebut ou aux erreurs de saisie des données. Il fournit une mesure directe de la fiabilité du processus de production à atteindre ses objectifs de production. Pourquoi c'est important Il quantifie la précision de la production par rapport aux plans, mettant en évidence les problèmes potentiels liés au rendement, aux rebuts ou au contrôle des processus. Où obtenir Champ calculé : 'DeliveredQuantity' - 'PlannedQuantity'. Exemples -2-5005 | |||
| Groupe de planificateurs PlannerGroup | Le groupe de contrôleurs MRP ou de planificateurs de production responsables de la commande. | ||
| Description Le Groupe Planificateur est un élément organisationnel qui représente un groupe d'individus responsables de la planification et de la gestion d'un ensemble spécifique de matériaux ou d'ordres de production. L'affectation des ordres aux groupes planificateurs aide à répartir la charge de travail et à établir une propriété claire. En Process Mining, cet attribut permet une analyse des performances basée sur l'équipe de planification responsable. Il peut aider à répondre à des questions telles que 'Quel groupe planificateur rencontre le plus d'écarts de planification ?' ou 'Y a-t-il une différence dans les temps de cycle pour les commandes gérées par différents groupes ?'. Cela fournit des insights pour l'équilibrage de la charge de travail et l'identification des besoins en formation. Pourquoi c'est important Il permet de segmenter l'analyse des performances par équipe responsable, aidant à identifier les différences d'efficacité de la planification et de charge de travail. Où obtenir C'est le Contrôleur MRP, trouvé dans la table SAP AFKO, champ DISPO. Exemples 001002P01P02 | |||
| Priorité de Production ProductionPriority | Une classification indiquant l'urgence ou la priorité de l'ordre de fabrication. | ||
| Description La Priorité de Production est un champ utilisé pour indiquer l'importance relative d'un ordre de fabrication. Cela permet aux ordonnanceurs de production et au personnel d'atelier de prioriser leur travail, garantissant que les commandes critiques sont traitées plus rapidement. L'analyse de cet attribut aide à évaluer l'efficacité du système de priorité. En comparant les temps de cycle des commandes à haute priorité à ceux des commandes à faible priorité, une entreprise peut déterminer si les commandes urgentes sont effectivement traitées plus rapidement. Si ce n'est pas le cas, cela peut indiquer des problèmes de communication, d'allocation des ressources ou de processus d'exécution global. Pourquoi c'est important Il aide à évaluer si le système de gestion des priorités est efficace, garantissant que les commandes très urgentes sont terminées plus rapidement que les commandes standard. Où obtenir Ce n'est souvent pas un champ standard dans l'en-tête de l'ordre de production. Il peut s'agir d'un champ personnalisé, dérivé de la priorité de la commande client, ou d'une partie d'un système de classification. Consultez la documentation ou la configuration système de SAP ECC PP. Exemples ÉlevéMoyenFaibleUrgent | |||
| Statut de l'Ordre de Production ProductionOrderStatus | Le statut de traitement actuel de l'ordre de production, tel que Créé, Libéré ou Clôturé Techniquement. | ||
| Description Le Statut de l'Ordre de Production indique l'étape actuelle de la commande dans son cycle de vie. SAP utilise un système de codes de statut pour gérer la progression de la commande, par exemple, CRTD (Créé), REL (Libéré), CNF (Confirmé), DLV (Livré) et TECO (Clôturé Techniquement). L'analyse du temps passé dans différents statuts est une partie essentielle du Process Mining pour la production. Elle aide à identifier combien de temps les commandes attendent d'être libérées après leur création ou combien de temps elles restent dans un état partiellement livré. Le suivi des changements de statut en tant qu'activités offre une vue d'ensemble du flux de processus. Pourquoi c'est important Il offre un aperçu de la progression d'une commande et aide à identifier les goulots d'étranglement où les commandes sont bloquées pendant de longues périodes. Où obtenir Les informations de statut sont stockées dans les tables JEST et JSTO, liées au numéro d'objet de la commande (AUFK-OBJNR). Le texte de statut se trouve dans TJ02T. La lecture du statut est souvent effectuée via des modules de fonction comme STATUS_TEXT_EDIT. Exemples CRTD (Créé)REL (Libéré)DLV (Livré)TECO (Clôturé Techniquement) | |||
| Statut de Respect des Délais ScheduleAdherenceStatus | Un indicateur spécifiant si l'ordre de fabrication a été terminé à sa date de fin prévue. | ||
| Description Le Statut de Respect des Délais est un attribut calculé booléen ou catégoriel qui offre une vue simple et rapide de la performance en termes de ponctualité. Il est dérivé en comparant la 'Date de Fin Réelle' à la 'Date de Fin Planifiée'. Si la fin réelle est à la date planifiée ou avant, le statut est 'À Temps'; sinon, il est 'En Retard'. Cet attribut simplifie l'analyse et la visualisation dans les dashboards. Il permet un filtrage et une agrégation faciles pour calculer le KPI 'Taux de Respect des Délais' et pour identifier les principaux facteurs de retards des commandes, tels que des produits spécifiques, des usines ou des pénuries de matériaux. Pourquoi c'est important Il simplifie l'analyse des performances en catégorisant les commandes comme 'À temps' ou 'En retard', facilitant ainsi la mesure et le reporting sur la fiabilité des délais. Où obtenir Champ calculé : SI('ActualEndDate' <= 'PlannedEndDate', 'À temps', 'En retard'). Exemples Dans les tempsEn retard | |||
| Temps de cycle CycleTime | Le temps total écoulé entre la libération de l'ordre de production et son achèvement final. | ||
| Description Le temps de cycle est un indicateur clé de performance qui mesure la durée de la phase d'exécution de la production. Il est calculé comme la différence de temps entre l'événement 'Ordre de fabrication libéré' et un événement de fin comme 'Confirmation finale enregistrée' ou 'Réception de marchandises enregistrée'. Cette métrique calculée est fondamentale pour évaluer l'efficacité de la fabrication. L'analyse des tendances du temps de cycle et leur comparaison entre les produits, les usines ou les périodes aide à identifier les opportunités de réduire les délais, d'améliorer le débit et d'augmenter la capacité de production globale. C'est une métrique essentielle pour de nombreux tableaux de bord et KPI requis. Pourquoi c'est important Il mesure directement l'efficacité et la rapidité du processus d'exécution de la production, soulignant les opportunités de réduction des délais. Où obtenir Champ calculé : Horodatage de 'Clôture de l'ordre de fabrication' moins l'horodatage de 'Ordre de fabrication libéré'. Exemples 3 jours 4 heures10 heures 15 minutes7 jours 0 heures1 jour 12 heures | |||
| Utilisateur responsable ResponsibleUser | L'ID utilisateur de la personne qui a 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, tels que la création ou la libération. Cela assure la responsabilité et la traçabilité des actions effectuées au sein du système. En Process Mining, cet attribut est utilisé pour analyser les variations de processus basées sur le comportement de l'utilisateur. Il peut aider à identifier les utilisateurs qui pourraient nécessiter une formation supplémentaire ou qui suivent des procédures non standard. Il prend également en charge l'analyse des ressources en montrant comment le travail est distribué entre les différents utilisateurs. Pourquoi c'est important Il lie les activités de processus à des individus spécifiques, permettant une analyse des performances au niveau de l'utilisateur et favorisant la responsabilisation. Où obtenir L'utilisateur qui a créé la commande se trouve dans AUFK-ERNAM. L'utilisateur qui l'a modifiée en dernier est dans AUFK-AENAM. Les documents de modification (CDHDR-USERNAME) fournissent un historique des utilisateurs pour des changements spécifiques. Exemples JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
Activités de Planification de Production
| Activité | Description | ||
|---|---|---|---|
| Commande Clôturée Techniquement | C'est une étape de clôture administrative qui finalise un ordre de production d'un point de vue logistique. Elle empêche tout mouvement de matériel ou confirmation ultérieur et permet le règlement financier. | ||
| Pourquoi c'est important C'est le point final définitif du cycle de vie de la commande en logistique. L'analyse de cet événement aide à comprendre la durée totale du processus, y compris les tâches administratives post-production. Où obtenir Capturé explicitement lorsque le statut système 'TECO' (I0045, Clôturé techniquement) est attribué à la commande. La modification est enregistrée avec un horodatage dans la table JCDS. Capture Identifiez l'horodatage lorsque le statut 'TECO' devient actif pour la commande dans JCDS. Type d'événement explicit | |||
| 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 entrée de confirmation finale pour la dernière opération. | ||
| Pourquoi c'est important Ce jalon marque la fin des activités de production physique. La durée de la première à la dernière confirmation représente le temps d'exécution réel de la production. Où obtenir Ceci est capturé lorsque le statut système 'CNF' (I0009, Confirmé) est défini. Cela est généralement déclenché par l'entrée de confirmation finale dans la table AFRU (AFRU-AUERU = 'X'). Le changement de statut est enregistré dans JCDS. Capture Identifiez l'horodatage lorsque le statut 'CNF' est défini, ou trouvez le dernier enregistrement de confirmation dans AFRU. 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 initié à partir d'une exécution de planification ou d'une saisie manuelle. Il est capturé explicitement lorsqu'un nouvel enregistrement de commande est sauvegardé dans le système, recevant le statut 'CRTD' (Créé). | ||
| Pourquoi c'est important C'est le point de départ de chaque cas d'ordre de production. L'analyse du temps entre cet événement et la libération aide à identifier les retards dans la planification de pré-production et la configuration administrative. Où obtenir Cet événement est capturé à 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é, enregistré dans les tables JEST et JCDS liées au numéro d'objet de la commande (AUFK-OBJNR). Capture Suivez l'horodatage de création et l'attribution du statut 'CRTD'. Type d'événement explicit | |||
| Ordre de Production Libéré | Cette activité signifie l'approbation officielle et la libération de l'ordre de production pour exécution. Une fois libérées, 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 c'est important C'est un jalon critique représentant le transfert de la planification à l'exécution. Le temps entre la création et la libération est un indicateur clé de l'efficacité de la planification. Où obtenir Capturé explicitement lorsque le statut système 'REL' (I0002) est attribué à l'ordre de fabrication. La modification est enregistrée avec un horodatage dans la table JCDS, liée au numéro d'objet de l'ordre (AUFK-OBJNR). Capture Identifiez l'horodatage lorsque le statut 'REL' devient actif pour la commande. Type d'événement explicit | |||
| Première confirmation enregistrée | Cet événement signifie le début du travail de production réel sur la commande. Il est capturé lorsque la première confirmation horaire pour une opération de l'ordre de production est saisie dans le système. | ||
| Pourquoi c'est important Cette activité fournit l'heure de début réelle de la production, ce qui est essentiel pour mesurer le respect des délais et identifier les retards entre l'allocation des ressources et le début du travail. Où obtenir Ceci est déduit en trouvant la date de comptabilisation la plus ancienne (AFRU-BUDAT) parmi toutes les confirmations enregistrées pour la commande dans la table AFRU. La première entrée marque le début de la production physique. Capture Identifiez le premier enregistrement de confirmation pour la commande en fonction de la date de comptabilisation dans la table AFRU. Type d'événement inferred | |||
| Réception de marchandises enregistrée | Cet événement enregistre la réception du produit fini de l'ordre de production en stock. Il signifie que les marchandises fabriquées sont maintenant disponibles pour l'expédition ou un traitement ultérieur. | ||
| Pourquoi c'est important C'est un jalon d'achèvement clé, représentant la production finale du processus de production. Le temps entre la libération et la réception des marchandises est le délai total de production. Où obtenir Enregistré comme document article 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, Livré) est également défini sur la commande. Capture Capturez 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 | |||
| Annulation de Commande Définie | Cet événement indique qu'un ordre de production a été annulé avant son achèvement. Cela est généralement effectué en définissant un statut spécifique ou un indicateur de suppression, empêchant tout traitement ultérieur. | ||
| Pourquoi c'est important C'est un résultat négatif qu'il est important de suivre. L'analyse des commandes annulées 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ù obtenir Ceci peut être déduit de l'affectation du statut 'DLFL' (I0076, Drapeau de suppression) ou d'un statut spécifique 'Annulé' si configuré. La modification est enregistrée avec un horodatage dans la table JCDS. Capture Identifiez l'horodatage lorsque le drapeau de suppression ('DLFL') ou un statut d'annulation est défini pour la commande. Type d'événement inferred | |||
| Confirmation intermédiaire enregistrée | Représente une mise à jour de l'avancement d'un ordre de production par une confirmation partielle d'une opération. C'est courant pour les ordres de longue durée où le suivi de l'avancement avant l'achèvement final est nécessaire. | ||
| Pourquoi c'est important L'analyse des confirmations intermédiaires aide à suivre la progression des cycles de production longs et à identifier les goulots d'étranglement au sein même du processus de production, et non pas seulement au début ou à la fin. Où obtenir Capturé à partir des enregistrements de confirmation dans la table AFRU qui ne sont pas marqués comme la confirmation finale. Chaque entrée a une date de comptabilisation (AFRU-BUDAT) et une heure. Capture Extrayez tous les enregistrements de confirmation d'AFRU qui ne sont pas marqués comme la confirmation finale pour une opération. Type d'événement explicit | |||
| Disponibilité des matériaux vérifiée | Représente l'exécution d'un contrôle pour déterminer si tous les composants nécessaires à l'ordre de production sont disponibles. Il peut s'agir d'un contrôle automatisé lors de la création ou de la libération de l'ordre, ou d'une action déclenchée manuellement. | ||
| Pourquoi c'est important Cette activité est cruciale pour comprendre les retards causés par les pénuries de matériaux. Des vérifications fréquentes ou de longues durées jusqu'à la disponibilité des matériaux peuvent indiquer des problèmes de chaîne d'approvisionnement ou de gestion des stocks. Où obtenir Le système définit un statut comme 'MACM' (matériel engagé) ou 'MSPT' (pénurie de matériel). L'exécution peut être déduite de l'horodatage de ce changement de statut dans les tables JEST/JCDS. Les résultats sont visibles dans l'en-tête de la commande. Capture Inférer de l'horodatage des changements de statut liés à la disponibilité des matériaux, tels que 'MACM' ou 'MSPT'. Type d'événement inferred | |||
| Données de Commande Modifiées | Cet événement enregistre les modifications significatives apportées à un ordre de production après sa création initiale, telles que des changements de quantité planifiée, de dates ou de nomenclature (BOM). Ces changements sont enregistrés par le système à des fins d'audit. | ||
| Pourquoi c'est important Le suivi de ces changements permet d'identifier l'instabilité des processus et les replanifications fréquentes. Une fréquence élevée de changements peut révéler une mauvaise planification initiale, une volatilité de la demande ou des inexactitudes de données. Où obtenir Les modifications des champs clés dans des tables comme AFKO (en-tête de commande) et AFPO (poste de commande) sont enregistrées dans les tables de documents de modification CDHDR (en-tête) et CDPOS (poste). Chaque modification pertinente peut être extraite comme une activité. Capture Extrayez les entrées du journal de modifications des tables CDHDR et CDPOS pour la classe d'objets d'ordre de fabrication. Type d'événement explicit | |||
| Règlement de Commande Exécuté | Représente le règlement financier de l'ordre de production, où les coûts collectés sont alloués aux objets de coût appropriés. C'est la dernière étape du cycle de vie de la commande 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 indiquer des problèmes de reporting des coûts ou d'exactitude des données de commande. Cela marque la véritable clôture financière du processus de production. Où obtenir Ceci peut être déduit lorsque le solde de la commande devient nul ou lorsque le statut système 'SETC' (I0076, Règle de règlement créée) est suivi de journaux d'exécution de règlement. Le règlement réel est enregistré dans des tables de contrôle comme COSP et COSS. Capture Inférer des documents de règlement liés à la commande 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 retrait des matériaux composants du stock pour être utilisés dans l'ordre de production. Elle confirme que les matières premières ou 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 de matériaux. Les retards entre la libération de la commande et la sortie de marchandises peuvent mettre en évidence des problèmes de logistique d'entrepôt, de préparation des matériaux ou de précision des stocks. Où obtenir Enregistré comme documents articles 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 d'ordre de production (MSEG-AUFNR). Capture Capturez la date de comptabilisation (MKPF-BUDAT) des documents matériels avec le type de mouvement '261' liés à la commande. 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 exemple,ZPP_EVENTLOG. Sélectionnez l'option de source de données 'Jointure de table à l'aide de la table de base'. UtilisezAUFK(Données de base de la commande) comme table de base initiale. - Joindre les tables requises : Ajoutez les tables suivantes à la jointure InfoSet. Le système peut proposer des jointures, mais vérifiez qu'elles sont correctes :
AUFKàAFKO(Données d'en-tête de commande ordres PP) :AUFK-AUFNR = AFKO-AUFNRAUFKàJEST(Statut d'objet individuel) :AUFK-OBJNR = JEST-OBJNRJESTàJCDS(Documents de modification pour les statuts système/utilisateur) :JEST-OBJNR = JCDS-OBJNRETJEST-STAT = JCDS-STAT. Note : Cette jointure sert à lire l'historique des modifications de statut.AUFKàAFRU(Confirmations de fin de commande) :AUFK-AUFNR = AFRU-AUFNRAUFKàMSEG(Segment de document : Matériel) :AUFK-AUFNR = MSEG-AUFNRMSEGàMKPF(En-tête : Document matériel) :MSEG-MBLNR = MKPF-MBLNRETMSEG-MJAHR = MKPF-MJAHR
- Définir les groupes de champs : Glissez les champs requis des tables source dans les groupes de champs. Assurez-vous que tous les champs nécessaires pour la requête finale, tels que
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATE,MKPF-BUDAT, sont inclus. - Ajouter des champs personnalisés et du code : Dans l'InfoSet, naviguez vers l'onglet 'Extras'. Vous devrez définir des champs personnalisés pour
ActivityName,EventTime,SourceSystemetLastDataUpdateet écrire du code ABAP pour les remplir en fonction de la logique définie dans la section de la requête. La logique impliquera d'itérer à travers les changements de statut, les confirmations et les documents matériels pour générer un enregistrement distinct pour chaque événement métier. C'est l'étape la plus complexe car vous transformez des données tabulaires en un format de journal d'événements au sein des sections de code de l'InfoSet. - Générer et enregistrer l'InfoSet : Une fois toutes les jointures, champs et code personnalisé en place, enregistrez et générez l'InfoSet.
- Créer une requête SAP : Utilisez le code de transaction
SQ01. Créez une nouvelle requête, par exemple,ZPP_EVENTS, basée sur 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. De bonnes sélections incluent l'ordre de fabrication
AUFNR, l'usineWERKS, le type d'ordreAUARTet une plage de dates pour la création de la commandeAUFK-ERDAT. - Définir la liste de sortie : Sélectionnez les champs à afficher dans la sortie du rapport. Cette liste doit correspondre exactement aux colonnes requises pour le journal d'événements, y compris les champs personnalisés comme
ActivityNameetEventTime. - Exécuter la requête : Exécutez la requête avec les critères de sélection souhaités, par exemple, pour les 3 à 6 derniers mois d'ordres de fabrication.
- Exporter les données : Une fois que la requête affiche les résultats, exportez la liste. Le format le plus courant et le plus fiable pour cela est 'Feuille de calcul' ou 'Fichier local' avec un format séparé par des tabulations ou CSV.
- Format pour ProcessMind : Ouvrez le fichier exporté dans un programme de feuille de calcul. Vérifiez que les en-têtes de colonne correspondent aux attributs requis (
ProductionOrder,ActivityName,EventTime, etc.) et assurez-vous que le format de date et d'heure pourEventTimeest cohérent et respecte la norme requise (par exemple, AAAA-MM-JJ HH:MM:SS). Enregistrez le fichier au format CSV pour le téléchargement.
Configuration
- Jointures InfoSet : Le cœur de cette méthode repose sur une jointure InfoSet complexe reliant les tables d'en-tête, de statut, de confirmation et de mouvement de matériel. Les jointures principales sont
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUetAUFK->MSEG->MKPF. Des jointures incorrectes ou inefficaces peuvent entraîner des performances médiocres ou des données inexactes. - Critères de sélection : Il est essentiel de définir une plage de sélection gérable pour éviter les problèmes de performance du système. Les champs de sélection clés sur l'écran de démarrage de la requête doivent inclure :
- Usine de production (
AUFK-WERKS) - Type d'ordre de fabrication (
AUFK-AUART) - Date de création de la commande (
AUFK-ERDAT) : Nous recommandons d'extraire les données pour une période glissante de 3 à 6 mois afin de maintenir la taille du jeu de données gérable.
- Usine de production (
- Statuts système : La logique d'identification des événements tels que 'Créé', 'Libéré', 'Clôturé techniquement' et 'Annulé' dépend de codes de statut système spécifiques (par exemple, I0001, I0002, I0045, I0047). Ceux-ci sont généralement standard dans les systèmes SAP, mais doivent être vérifiés.
- Types de mouvement : Les événements tels que 'Sortie de marchandises' et 'Entrée de marchandises' sont identifiés par leurs Types de mouvement spécifiques (
MSEG-BWART), généralement '261' et '101' respectivement. Confirmez que ces valeurs correspondent à la configuration de votre organisation. - Autorisations : L'utilisateur exécutant la requête a besoin d'une autorisation pour accéder aux transactions
SQ01,SQ02etSQ03, ainsi qu'un accès en affichage à toutes les tables sous-jacentes (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, 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 essentiel et doit être coordonné avec vos équipes SAP Basis et d'administration de bases de données.
- Identifier le schéma SAP : Déterminez le schéma de base de données correct où les tables SAP sont stockées. C'est souvent
SAPSR3ou un nom similaire spécifique au système. Vous devrez remplacer l'espace réservé[Votre schéma SAP]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 spécifiées dans un format de journal d'événements unique. - Configurer les paramètres de la requête : Avant l'exécution, vous devez modifier les espaces réservés dans la requête. Définissez les
[Date de début]et[Date de fin]pour définir la fenêtre temporelle pour l'extraction. Il est également fortement recommandé de filtrer par usine de production (WERKS) ou type d'ordre (AUART) pour limiter le volume de données. - Connecter et exécuter : Utilisez un client SQL standard, tel que DBeaver, SAP HANA Studio, ou un script personnalisé (Python, Java), pour vous connecter à la base de données SAP en utilisant 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, cela peut prendre plusieurs minutes.
- Examiner les résultats préliminaires : Une fois la requête terminée, examinez brièvement les quelques premières centaines de lignes pour vous assurer que les colonnes comme
ProductionOrder,ActivityNameetEventTimesont correctement remplies et ont du sens. - Exporter au format CSV : Exportez l'ensemble des résultats de votre client SQL vers un fichier CSV. Assurez-vous que le fichier utilise l'encodage UTF-8 pour éviter les problèmes de caractères.
- Finaliser le CSV pour le téléchargement : Ouvrez le fichier CSV et vérifiez que les en-têtes de colonne correspondent aux attributs requis (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate, etc.). Assurez-vous que la colonneEventTimeest formatée de manière cohérente, par exempleAAAA-MM-JJ HH:MM:SS. - Télécharger vers ProcessMind : Le fichier CSV préparé est maintenant prêt à être téléchargé sur la plateforme ProcessMind pour analyse.
Configuration
- Schéma de la base de données : Vous devez spécifier le schéma SAP où résident vos tables de planification de la production. Remplacez l'espace réservé
[Votre schéma SAP]dans la requête par le nom correct de votre environnement, par exempleSAPSR3. - Plage de dates : Le filtrage par une plage de dates spécifique est essentiel pour la performance. La requête filtre sur la date de création de la commande (
AUFK.ERDAT). Nous recommandons de commencer par une période récente de 3 à 6 mois pour assurer un volume de données gérable. - Type d'ordre de fabrication : Pour concentrer l'analyse, filtrez la requête sur le champ type d'ordre de fabrication (
AUFK.AUART). Cela vous permet d'inclure ou d'exclure des types spécifiques comme les ordres de fabrication standard, les ordres de process ou les ordres de reprise. - Usine de production : Il est fortement recommandé de filtrer par une ou plusieurs usines de production (
AFKO.WERKS). L'extraction de données pour toutes les usines en une seule fois peut être très gourmande en ressources. - Accès à la base de données : Cette méthode nécessite un utilisateur de base de données avec, au minimum, des permissions 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.
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
- Créer un InfoSet dans SAP Query : Utilisez le code de transaction
SQ02. Créez un nouvel InfoSet, par exemple,ZPP_EVENTLOG. Sélectionnez l'option de source de données 'Jointure de table à l'aide de la table de base'. UtilisezAUFK(Données de base de la commande) comme table de base initiale. - Joindre les tables requises : Ajoutez les tables suivantes à la jointure InfoSet. Le système peut proposer des jointures, mais vérifiez qu'elles sont correctes :
AUFKàAFKO(Données d'en-tête de commande ordres PP) :AUFK-AUFNR = AFKO-AUFNRAUFKàJEST(Statut d'objet individuel) :AUFK-OBJNR = JEST-OBJNRJESTàJCDS(Documents de modification pour les statuts système/utilisateur) :JEST-OBJNR = JCDS-OBJNRETJEST-STAT = JCDS-STAT. Note : Cette jointure sert à lire l'historique des modifications de statut.AUFKàAFRU(Confirmations de fin de commande) :AUFK-AUFNR = AFRU-AUFNRAUFKàMSEG(Segment de document : Matériel) :AUFK-AUFNR = MSEG-AUFNRMSEGàMKPF(En-tête : Document matériel) :MSEG-MBLNR = MKPF-MBLNRETMSEG-MJAHR = MKPF-MJAHR
- Définir les groupes de champs : Glissez les champs requis des tables source dans les groupes de champs. Assurez-vous que tous les champs nécessaires pour la requête finale, tels que
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATE,MKPF-BUDAT, sont inclus. - Ajouter des champs personnalisés et du code : Dans l'InfoSet, naviguez vers l'onglet 'Extras'. Vous devrez définir des champs personnalisés pour
ActivityName,EventTime,SourceSystemetLastDataUpdateet écrire du code ABAP pour les remplir en fonction de la logique définie dans la section de la requête. La logique impliquera d'itérer à travers les changements de statut, les confirmations et les documents matériels pour générer un enregistrement distinct pour chaque événement métier. C'est l'étape la plus complexe car vous transformez des données tabulaires en un format de journal d'événements au sein des sections de code de l'InfoSet. - Générer et enregistrer l'InfoSet : Une fois toutes les jointures, champs et code personnalisé en place, enregistrez et générez l'InfoSet.
- Créer une requête SAP : Utilisez le code de transaction
SQ01. Créez une nouvelle requête, par exemple,ZPP_EVENTS, basée sur 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. De bonnes sélections incluent l'ordre de fabrication
AUFNR, l'usineWERKS, le type d'ordreAUARTet une plage de dates pour la création de la commandeAUFK-ERDAT. - Définir la liste de sortie : Sélectionnez les champs à afficher dans la sortie du rapport. Cette liste doit correspondre exactement aux colonnes requises pour le journal d'événements, y compris les champs personnalisés comme
ActivityNameetEventTime. - Exécuter la requête : Exécutez la requête avec les critères de sélection souhaités, par exemple, pour les 3 à 6 derniers mois d'ordres de fabrication.
- Exporter les données : Une fois que la requête affiche les résultats, exportez la liste. Le format le plus courant et le plus fiable pour cela est 'Feuille de calcul' ou 'Fichier local' avec un format séparé par des tabulations ou CSV.
- Format pour ProcessMind : Ouvrez le fichier exporté dans un programme de feuille de calcul. Vérifiez que les en-têtes de colonne correspondent aux attributs requis (
ProductionOrder,ActivityName,EventTime, etc.) et assurez-vous que le format de date et d'heure pourEventTimeest cohérent et respecte la norme requise (par exemple, AAAA-MM-JJ HH:MM:SS). Enregistrez le fichier au format CSV pour le téléchargement.
Configuration
- Jointures InfoSet : Le cœur de cette méthode repose sur une jointure InfoSet complexe reliant les tables d'en-tête, de statut, de confirmation et de mouvement de matériel. Les jointures principales sont
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUetAUFK->MSEG->MKPF. Des jointures incorrectes ou inefficaces peuvent entraîner des performances médiocres ou des données inexactes. - Critères de sélection : Il est essentiel de définir une plage de sélection gérable pour éviter les problèmes de performance du système. Les champs de sélection clés sur l'écran de démarrage de la requête doivent inclure :
- Usine de production (
AUFK-WERKS) - Type d'ordre de fabrication (
AUFK-AUART) - Date de création de la commande (
AUFK-ERDAT) : Nous recommandons d'extraire les données pour une période glissante de 3 à 6 mois afin de maintenir la taille du jeu de données gérable.
- Usine de production (
- Statuts système : La logique d'identification des événements tels que 'Créé', 'Libéré', 'Clôturé techniquement' et 'Annulé' dépend de codes de statut système spécifiques (par exemple, I0001, I0002, I0045, I0047). Ceux-ci sont généralement standard dans les systèmes SAP, mais doivent être vérifiés.
- Types de mouvement : Les événements tels que 'Sortie de marchandises' et 'Entrée de marchandises' sont identifiés par leurs Types de mouvement spécifiques (
MSEG-BWART), généralement '261' et '101' respectivement. Confirmez que ces valeurs correspondent à la configuration de votre organisation. - Autorisations : L'utilisateur exécutant la requête a besoin d'une autorisation pour accéder aux transactions
SQ01,SQ02etSQ03, ainsi qu'un accès en affichage à toutes les tables sous-jacentes (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, 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';