Ihr Template für Produktionsplanungsdaten
Ihr Template für Produktionsplanungsdaten
- Empfohlene Attribute für die Datenerfassung
- Wichtige Aktivitäten für die Nachverfolgung
- Praktische Hinweise zum Datenexport
Attribute der Produktionsplanung
| Name | Beschreibung | ||
|---|---|---|---|
| Aktivitätsname ActivityName | Der Name des Geschäfts- oder Systemereignisses, das zu einem bestimmten Zeitpunkt für einen Fertigungsauftrag eingetreten ist. | ||
| Beschreibung Der Aktivitätsname bezeichnet einen bestimmten Schritt oder eine Statusänderung im Prozess der Produktionsplanung. Die Ereignisse werden aus Änderungsprotokollen, Statusaktualisierungen und Transaktionsdatensätzen in SAP ECC PP extrahiert. Sie bilden wichtige Meilensteine ab, etwa 'Fertigungsauftrag angelegt', 'Materialverfügbarkeit geprüft' oder 'Wareneingang gebucht'. Dieses Attribut bildet die Grundlage der Prozesslandkarte. Es ermöglicht Analysten, die Ereignisabfolge darzustellen, Prozessvarianten zu entdecken und Engpässe oder Nacharbeitsschleifen zu erkennen. Klare und ausreichend detaillierte Aktivitätsnamen sind entscheidend für ein genaues und aussagekräftiges Prozessmodell, das die tatsächlichen Abläufe abbildet. Warum das wichtig ist Das Attribut legt die Schritte in der Prozesslandkarte fest und ermöglicht es, den Produktionsablauf darzustellen, zu analysieren und zu verstehen. Woher beziehen Die Daten stammen aus verschiedenen Quellen, darunter Statusänderungen in den Tabellen JEST/JSTO, Transaktionsprotokolle und Änderungsbelege in CDHDR/CDPOS. Beispiele Fertigungsauftrag freigegebenWarenausgang gebuchtEndrückmeldung erfasstAuftrag technisch abgeschlossen | |||
| Ereigniszeit EventTime | Der genaue Timestamp, der angibt, wann die Aktivität stattgefunden hat. | ||
| Beschreibung Die Ereigniszeit erfasst Datum und Uhrzeit, zu denen eine bestimmte Aktivität ausgeführt oder ein Status im System protokolliert wurde. Dieser Timestamp ist die Grundlage für alle zeitbezogenen Prozessanalysen, etwa für die Berechnung von Zyklus- und Wartezeiten sowie der gesamten Prozessdauer. Genaue Timestamps sind entscheidend, um Ereignisse korrekt anzuordnen und die Leistung zu analysieren. Sie ermöglichen es Analysten, die Dauer zwischen Aktivitäten zu messen, Verzögerungen zu erkennen und die Leistung mit Zeitplänen oder Service-Level-Vereinbarungen abzugleichen. In der Produktionsplanung lässt sich so nachvollziehen, wie viel Zeit die einzelnen Planungs- und Ausführungsphasen beanspruchen. Warum das wichtig ist Dieses Attribut gibt die chronologische Reihenfolge der Ereignisse an. Das ist entscheidend, um Zeitspannen zu berechnen, die Leistung zu analysieren und Engpässe zu erkennen. Woher beziehen Abgeleitet aus verschiedenen Datums- und Zeitfeldern zu Transaktionen und Statusänderungen, etwa BUDAT (Buchungsdatum) aus Materialbelegen oder Änderungs-Timestamps aus CDHDR. Beispiele 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| Fertigungsauftrag ProductionOrder | Die eindeutige Kennung eines Fertigungsauftrags. Sie dient als primäre Case-ID für den Prozess der Produktionsplanung und -ausführung. | ||
| Beschreibung Die Fertigungsauftragsnummer ist ein eindeutiger alphanumerischer Schlüssel, der jedem Fertigungsauftrag in SAP ECC PP zugewiesen wird. Sie dient als zentrales Objekt, das alle zugehörigen Aktivitäten verknüpft, von der Anlage und Planung bis zur Ausführung und abschließenden Abrechnung. Im Process Mining ist dieses Attribut entscheidend, um alle Ereignisse eines einzelnen Produktionslaufs zusammenzufassen. So lässt sich der gesamte Lebenszyklus eines Fertigungsauftrags durchgängig analysieren, sein Fortschritt verfolgen, die Zykluszeit messen und Abweichungen vom Standardprozess erkennen. Die Analyse nach Fertigungsauftrag zeigt klar, wie einzelne Fertigungsaufträge ausgeführt werden. Warum das wichtig ist Diese zentrale Kennung verknüpft alle zugehörigen Prozessereignisse. So lässt sich jeder Produktionsablauf von Anfang bis Ende rekonstruieren und analysieren. Woher beziehen Dieses Attribut steht in der SAP-Tabelle AUFK im Feld AUFNR. Beispiele 1000345100034610003471000348 | |||
| Letzte Datenaktualisierung LastDataUpdate | Der Timestamp, der angibt, wann die Daten zu diesem Ereignis zuletzt aktualisiert oder extrahiert wurden. | ||
| Beschreibung Dieses Attribut erfasst Datum und Uhrzeit, zu denen die Daten aus dem Quellsystem in das Process-Mining-Tool übernommen wurden. Es bildet kein Geschäftsereignis ab, sondern dient der technischen Datenverwaltung. Es wird vor allem verwendet, um die Aktualität der Daten sicherzustellen und Administratoren sowie Analysten anzuzeigen, wie aktuell die analysierten Daten sind. Das ist besonders wichtig, wenn laufende Abläufe überwacht werden und die Analyse auf aktuellen Informationen beruhen soll. Warum das wichtig ist Das Attribut bestätigt die Aktualität der Daten und stellt sicher, dass Analysen auf den neuesten verfügbaren Informationen beruhen. Woher beziehen Dieser Wert wird üblicherweise während der Datenübernahme vom ETL-Tool oder -Skript für Extraktion, Transformation und Laden erzeugt und mit einem Timestamp versehen. Beispiele 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Quellsystem SourceSystem | Gibt an, aus welchem System die Daten extrahiert wurden. | ||
| Beschreibung Dieses Attribut gibt das Ursprungssystem des Datensatzes an, zum Beispiel den Namen oder die ID der jeweiligen SAP-ECC-Instanz. In Unternehmen mit mehreren ERP-Systemen oder einer Mischung aus älteren und modernen Plattformen ist dieses Feld wichtig, um die Datenherkunft und den Kontext nachzuvollziehen. Bei der Analyse können Prozesse nach ihrem Ursprungssystem gefiltert werden. So lässt sich die Prozessleistung verschiedener Systeme vergleichen oder die Datenherkunft bei der Zusammenführung von Daten aus mehreren Systemen nachvollziehen. Warum das wichtig ist Dieses Attribut liefert wichtige Informationen zur Datenherkunft, insbesondere in Umgebungen mit mehreren SAP-Instanzen oder integrierten Systemen. Woher beziehen Wird üblicherweise bei der Datenextraktion hinzugefügt, häufig abgeleitet aus der SAP-System-ID (SY-SYSID). Beispiele ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Gelieferte Menge DeliveredQuantity | Die tatsächliche Menge des Produkts, die hergestellt und in den Bestand übernommen wurde. | ||
| Beschreibung Die gelieferte Menge, auch Wareneingangsmenge genannt, ist die Gesamtmenge des Fertigprodukts, deren Herstellung für einen Fertigungsauftrag bestätigt wurde. Der Wert wird bei Ereignissen vom Typ 'Wareneingang gebucht' aktualisiert. Dieses Attribut ergänzt die geplante Menge und ist für die Berechnung der KPI zur Abweichung zwischen geplanter und tatsächlicher Menge erforderlich. Es misst die Produktionsmenge und hilft Analysten, Abweichungen durch Ausschuss, Ertragsverluste oder andere Produktionsprobleme zu erkennen. Der Vergleich gelieferter Mengen nach Werk, Produkt oder Zeitraum zeigt, wo Effizienzprobleme auftreten. Warum das wichtig ist Das Attribut misst die tatsächliche Produktionsmenge. So lässt sie sich direkt mit den geplanten Zielen vergleichen und die Leistung bewerten. Woher beziehen Zu finden in der SAP-Tabelle AFPO im Feld WEMNG (Wareneingangsmenge). Beispiele 984950751255 | |||
| Geplante Menge PlannedQuantity | Die Gesamtmenge des Produkts, die laut Auftrag hergestellt werden soll. | ||
| Beschreibung Die geplante Menge bezeichnet die Zielmenge eines Fertigungsauftrags, die in der Planungsphase festgelegt wird. Sie dient als Vergleichswert für die tatsächlich produzierte Menge. Dieses Attribut ist eine wichtige Grundlage für KPIs zur Produktionsleistung und Termintreue, etwa für die Abweichung zwischen geplanter und tatsächlicher Menge. Es hilft, die Genauigkeit der Produktionsplanung zu bewerten und systematische Probleme durch Über- oder Unterproduktion zu erkennen. Die Analyse zeigt, wie gut die Produktionsausführung mit den ursprünglichen Plänen übereinstimmt. Warum das wichtig ist Dieses Attribut dient als Vergleichswert, um Mengenabweichungen in der Produktion zu messen und die Planungsgenauigkeit zu bewerten. Woher beziehen Dieser Wert steht in der SAP-Tabelle AFKO im Feld GAMNG (Gesamtauftragsmenge). Beispiele 1005000751250 | |||
| Produktcode ProductCode | Die eindeutige Kennung des herzustellenden Materials oder Produkts. | ||
| Beschreibung Der Produktcode, auch Materialnummer genannt, bezeichnet den Artikel, der mit dem Fertigungsauftrag hergestellt werden soll. Als zentrales Stammdatenmerkmal verknüpft er die Produktionsplanung mit der Bestandsverwaltung, dem Vertrieb und der Kostenrechnung. Im Process Mining ist die Filterung oder Segmentierung nach Produktcode entscheidend, um produktspezifische Fertigungsabläufe zu verstehen. Damit lässt sich beispielsweise ermitteln, welche Produkte die längsten Zykluszeiten haben oder bei welchen Produkten häufiger Qualitätsprobleme oder Materialverzögerungen auftreten. Diese Analyse ist wichtig für das Produktportfoliomanagement und zeigt, wo sich Prozesse für bestimmte Materialarten standardisieren oder optimieren lassen. Warum das wichtig ist Das Attribut ermöglicht produktspezifische Prozessanalysen und zeigt, welche Materialien mit Ineffizienzen, Verzögerungen oder hohen Kosten verbunden sind. Woher beziehen Dieses Attribut steht in der SAP-Tabelle AFPO im Feld MATNR. Beispiele FG-123RM-45AHALB-7890CHEM-22 | |||
| Produktionswerk ProductionPlant | Der Fertigungsstandort, an dem der Fertigungsauftrag ausgeführt wird. | ||
| Beschreibung Das Produktionswerk ist eine wichtige Organisationseinheit in SAP und bezeichnet einen Fertigungsstandort. Es wird jedem Fertigungsauftrag zugeordnet und legt fest, wo die Produktionsaktivitäten tatsächlich stattfinden. Die Analyse nach Produktionswerk ermöglicht den Leistungsvergleich verschiedener Standorte. So lässt sich erkennen, welche Werke effizienter arbeiten, wo es häufiger zu Verzögerungen oder Materialengpässen kommt und an welchen Standorten sich bewährte Vorgehensweisen übertragen lassen. Diese Dimension ist eine wichtige Grundlage für die Ursachenanalyse in Dashboards zu Durchsatz und Ressourcenauslastung. Warum das wichtig ist Das Attribut ermöglicht den Leistungsvergleich verschiedener Fertigungsstandorte und hilft, standortspezifische Probleme oder bewährte Vorgehensweisen zu erkennen. Woher beziehen Dieses Attribut ist in der SAP-Tabelle AUFK im Feld WERKS gespeichert. Beispiele 100017102000DE01 | |||
| Tatsächlicher Endtermin ActualEndDate | Der Timestamp der letzten Produktionsaktivität, der den tatsächlichen Abschluss des Auftrags kennzeichnet. | ||
| Beschreibung Das tatsächliche Enddatum ist der Timestamp des Ereignisses, das den Abschluss aller Produktionsaktivitäten für einen Auftrag kennzeichnet. Es wird üblicherweise anhand des Timestamps von „Endrückmeldung erfasst“ oder des letzten Ereignisses „Wareneingang gebucht“ ermittelt. Dieses Attribut ist entscheidend, um die gesamte Produktionsdurchlaufzeit zu messen und die Termineinhaltung zu analysieren. Ein Vergleich des tatsächlichen Enddatums mit dem geplanten Enddatum zeigt, ob ein Auftrag termingerecht abgeschlossen wurde. Die Zeitspanne zwischen dem tatsächlichen Startdatum und dem tatsächlichen Enddatum entspricht der tatsächlichen Produktionsdurchlaufzeit. Warum das wichtig ist Es kennzeichnet den Abschluss der Produktion und ermöglicht eine genaue Messung der Leistung bei termingerechter Lieferung sowie der gesamten Ausführungszeit. Woher beziehen Wird aus dem Event Log ermittelt, indem der späteste Timestamp wichtiger Abschlussaktivitäten wie „Endrückmeldung erfasst“ oder „Wareneingang gebucht“ bestimmt wird. Beispiele 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| Tatsächlicher Starttermin ActualStartDate | Der Timestamp der ersten erfassten Produktionsaktivität, der den tatsächlichen Beginn der Ausführung kennzeichnet. | ||
| Beschreibung Der tatsächliche Starttermin ist der Timestamp des ersten Ereignisses, das den Beginn der physischen Produktionsarbeit kennzeichnet. Er wird üblicherweise aus der ersten Produktionsrückmeldung oder dem ersten Warenausgang von Rohstoffen für den Auftrag abgeleitet. Dieses abgeleitete Attribut ist entscheidend für die Analyse der Termintreue. Es gibt den tatsächlichen Startpunkt an, der mit dem geplanten Starttermin verglichen wird, um Abweichungen beim Produktionsbeginn genau zu berechnen. Die Differenz zwischen geplantem und tatsächlichem Starttermin hilft, Verzögerungen vor Produktionsbeginn zu erkennen, etwa bei der Materialbereitstellung, dem Einrichten der Maschinen oder der Verfügbarkeit von Ressourcen. Warum das wichtig ist Das Attribut gibt den tatsächlichen Beginn der Produktionsausführung an. So lassen sich Startverzögerungen und die gesamte Produktionsdurchlaufzeit genau berechnen. Woher beziehen Aus dem Event Log abgeleitet, indem für jeden Fertigungsauftrag der früheste Timestamp bestimmter Ausführungsaktivitäten ermittelt wird, etwa 'Erste Rückmeldung erfasst' oder 'Warenausgang gebucht'. Beispiele 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Disponentengruppe PlannerGroup | Gruppe der MRP-Disponenten oder Produktionsplaner, die für den Auftrag verantwortlich sind. | ||
| Beschreibung Die Disponentengruppe ist ein Organisationselement für eine Gruppe von Personen, die für die Planung und Verwaltung bestimmter Materialien oder Produktionsaufträge zuständig sind. Durch die Zuordnung von Aufträgen zu Disponentengruppen lässt sich die Arbeitslast verteilen und die Zuständigkeit klar festlegen. Im Process Mining ermöglicht dieses Attribut die Leistungsanalyse nach zuständigem Planungsteam. Damit lässt sich beispielsweise untersuchen, welche Disponentengruppe die meisten Terminabweichungen verzeichnet oder ob sich die Durchlaufzeiten von Aufträgen zwischen den Gruppen unterscheiden. Die Ergebnisse helfen, die Arbeitslast auszugleichen und Schulungsbedarf zu erkennen. Warum das wichtig ist Damit lässt sich die Leistung nach zuständigem Team aufschlüsseln. So werden Unterschiede bei der Planungseffektivität und der Arbeitslast sichtbar. Woher beziehen Dies ist der MRP-Disponent in der SAP-Tabelle AFKO, Feld DISPO. Beispiele 001002P01P02 | |||
| Geplanter Endtermin PlannedEndDate | Der geplante Termin, bis zu dem die Produktion für den Auftrag abgeschlossen sein soll. | ||
| Beschreibung Der geplante Endtermin ist der Zieltermin für den Abschluss eines Fertigungsauftrags und wird bei der Terminplanung festgelegt. Er gibt den erwarteten Zeitraum für den Abschluss aller Produktionsaktivitäten vor, einschließlich der letzten Rückmeldungen und des Wareneingangs. Dieser Termin ist für die Berechnung der KPI zur Termintreue wichtig. Der Vergleich des geplanten Endtermins mit dem tatsächlichen Abschluss, etwa dem Timestamp der Aktivität 'Wareneingang gebucht' oder 'Endrückmeldung erfasst', zeigt, ob Aufträge termingerecht fertiggestellt werden. Die Analyse hilft, die Verlässlichkeit der Produktionsplanung zu bewerten und die Ursachen verspäteter Lieferungen zu erkennen. Warum das wichtig ist Der geplante Endtermin ist der Maßstab dafür, ob Fertigungsaufträge termingerecht abgeschlossen werden. Das wirkt sich unmittelbar auf die Kundenzufriedenheit und die Verlässlichkeit der Planung aus. Woher beziehen Dies ist der Basisendtermin in der SAP-Tabelle AFKO, Feld GLTRP. Beispiele 2023-05-152023-06-282023-07-05 | |||
| Geplanter Starttermin PlannedStartDate | Der geplante Termin, an dem die Produktion für den Auftrag beginnen soll. | ||
| Beschreibung Der geplante Starttermin ist ein wichtiger Planungsparameter, der während der Produktionsplanung und -terminierung festgelegt wird. Er gibt an, wann die Produktionsaktivitäten für einen Auftrag beginnen sollen. Dieses Attribut ist entscheidend für die Messung der Termintreue. Durch den Vergleich des geplanten Starttermins mit dem tatsächlichen Produktionsbeginn, beispielsweise dem Timestamp der Aktivität 'Erste Rückmeldung erfasst', können Unternehmen Verzögerungen beim Produktionsstart erkennen. Die Ursachen dafür zu analysieren, ist ein wichtiger Anwendungsfall für Process Mining in diesem Bereich. Warum das wichtig ist Der geplante Starttermin dient als Vergleichswert, um die Termintreue zu messen und Verzögerungen beim Beginn der Produktionsausführung zu erkennen. Woher beziehen Dies ist der Basisstarttermin in der SAP-Tabelle AFKO, Feld GSTRP. Beispiele 2023-05-102023-06-222023-07-01 | |||
| Materialverfügbarkeit MaterialAvailabilityStatus | Gibt an, ob alle für den Produktionsauftrag benötigten Komponenten verfügbar sind. | ||
| Beschreibung Der Materialverfügbarkeitsstatus ist ein wichtiger Indikator für die Produktionsbereitschaft. Das System ermittelt ihn, indem es die Verfügbarkeit aller für den Auftrag benötigten Komponenten prüft. Der Status „Verfügbar“ bedeutet, dass die Produktion ohne materialbedingte Verzögerungen beginnen kann. „Fehlbestand“ weist dagegen auf ein Problem hin. Dieses Attribut ist für das Dashboard „Analyse der Auswirkungen von Materialengpässen“ entscheidend. Durch die Analyse der Wartezeit von Aufträgen bei Materialengpässen können Unternehmen die Auswirkungen von Problemen in der Lieferkette auf den Produktionsplan quantifizieren. So lassen sich unzuverlässige Lieferanten und Komponenten erkennen, die häufig Verzögerungen verursachen. Warum das wichtig ist Das Attribut macht Verzögerungen durch Materialengpässe direkt sichtbar. Diese zählen zu den häufigsten und bedeutendsten Ursachen für Abweichungen vom Produktionsplan. Woher beziehen Es handelt sich nicht um ein einzelnes gespeichertes Feld, sondern um das Ergebnis einer Verfügbarkeitsprüfung (ATP-Prüfung). Die Ergebnisse sind häufig in der Transaktion CO02 oder in der Sammelverfügbarkeitsprüfung COHV sichtbar. Der Status selbst, zum Beispiel MACM (Material zugesagt), kann protokolliert werden. Prüfen Sie die Dokumentation zu SAP ECC PP. Beispiele VerfügbarFehlbestandTeilweise verfügbarNicht geprüft | |||
| Mengenabweichung QuantityVariance | Differenz zwischen der geplanten Produktionsmenge und der tatsächlich gelieferten Menge. | ||
| Beschreibung Die Mengenabweichung ist eine berechnete Kennzahl, die die Abweichung der Produktionsmenge vom ursprünglichen Plan misst. Sie wird berechnet, indem die geplante Menge von der gelieferten Menge abgezogen wird. Eine positive Abweichung weist auf Überproduktion hin, eine negative auf Unterproduktion oder Ausbeuteverluste. Dieses Attribut ist für das Dashboard „Geplante und tatsächliche Produktionsmenge“ sowie die zugehörige Kennzahl entscheidend. Die Analyse der Abweichung hilft, Probleme bei der Produktionsausbeute, Ausschussquoten oder Dateneingabefehler zu erkennen. Sie zeigt direkt, wie zuverlässig der Produktionsprozess die geplanten Mengen erreicht. Warum das wichtig ist Das Attribut misst, wie genau die Produktionsmenge dem Plan entspricht, und macht mögliche Probleme bei Ausbeute, Ausschuss oder Prozesssteuerung sichtbar. Woher beziehen Berechnetes Feld: 'DeliveredQuantity' - 'PlannedQuantity'. Beispiele -2-5005 | |||
| Produktionsauftragsstatus ProductionOrderStatus | Der aktuelle Bearbeitungsstatus des Produktionsauftrags, zum Beispiel Angelegt, Freigegeben oder Technisch abgeschlossen. | ||
| Beschreibung Der Produktionsauftragsstatus zeigt die aktuelle Phase des Auftrags im Lebenszyklus an. SAP verwaltet den Fortschritt des Auftrags über Statuscodes, zum Beispiel CRTD (Angelegt), REL (Freigegeben), CNF (Rückgemeldet), DLV (Geliefert) und TECO (Technisch abgeschlossen). Die Analyse der Verweildauer in den einzelnen Status ist ein zentraler Bestandteil des Process Mining in der Produktion. Sie zeigt beispielsweise, wie lange Aufträge nach dem Anlegen auf ihre Freigabe warten oder wie lange sie teilweise ausgeliefert bleiben. Werden Statusänderungen als Aktivitäten erfasst, ergibt sich ein Überblick über den Prozessablauf. Warum das wichtig ist Das Attribut zeigt den Fortschritt eines Auftrags und hilft dabei, Engpässe zu erkennen, an denen Aufträge über längere Zeit festhängen. Woher beziehen Statusinformationen werden in den Tabellen JEST und JSTO gespeichert und über die Objektnummer des Auftrags (AUFK-OBJNR) zugeordnet. Die Statustexte stehen in TJ02T. Zum Auslesen des Status werden häufig Funktionsbausteine wie STATUS_TEXT_EDIT verwendet. Beispiele CRTD (Angelegt)REL (Freigegeben)DLV (Geliefert)TECO (Technisch abgeschlossen) | |||
| Produktionspriorität ProductionPriority | Einstufung der Dringlichkeit oder Priorität eines Produktionsauftrags. | ||
| Beschreibung Die Produktionspriorität gibt die relative Bedeutung eines Produktionsauftrags an. Produktionsplaner und Mitarbeitende in der Fertigung können damit ihre Arbeit priorisieren und dringende Aufträge im Prozess vorziehen. Die Analyse dieses Attributs zeigt, wie wirksam das Prioritätssystem ist. Vergleicht ein Unternehmen die Durchlaufzeiten von Aufträgen mit hoher und niedriger Priorität, lässt sich feststellen, ob dringende Aufträge tatsächlich schneller bearbeitet werden. Ist das nicht der Fall, können Probleme bei der Kommunikation, der Ressourcenzuteilung oder der Auftragsausführung vorliegen. Warum das wichtig ist Damit lässt sich prüfen, ob das Prioritätsmanagement funktioniert und dringende Aufträge schneller abgeschlossen werden als Aufträge mit normaler Priorität. Woher beziehen Dieses Feld ist häufig nicht standardmäßig im Kopf des Produktionsauftrags enthalten. Es kann sich um ein kundenspezifisches Feld handeln, aus der Priorität des Kundenauftrags abgeleitet werden oder Teil eines Klassifizierungssystems sein. Prüfen Sie die Dokumentation zu SAP ECC PP oder die Systemkonfiguration. Beispiele HochMittelNiedrigEilauftrag | |||
| Status der Termineinhaltung ScheduleAdherenceStatus | Kennzeichnet, ob der Produktionsauftrag bis zum geplanten Enddatum abgeschlossen wurde. | ||
| Beschreibung Der Status der Termineinhaltung ist ein berechnetes boolesches oder kategorisches Attribut, das auf einen Blick zeigt, ob Aufträge termingerecht abgeschlossen wurden. Er ergibt sich aus dem Vergleich des tatsächlichen Enddatums mit dem geplanten Enddatum. Liegt das tatsächliche Enddatum am oder vor dem geplanten Enddatum, lautet der Status „Termingerecht“, andernfalls „Verspätet“. Dieses Attribut vereinfacht die Analyse und Visualisierung in Dashboards. Aufträge lassen sich damit einfach filtern und zusammenfassen, um die Kennzahl „Termineinhaltungsquote“ zu berechnen und die Hauptursachen verspäteter Aufträge zu ermitteln, etwa bestimmte Produkte, Werke oder Materialengpässe. Warum das wichtig ist Die vereinfachte Leistungsanalyse ordnet Aufträge den Kategorien „Termingerecht“ oder „Verspätet“ zu. So lässt sich die Termintreue einfach messen und ausweisen. Woher beziehen Berechnetes Feld: IF('ActualEndDate' <= 'PlannedEndDate', 'Termingerecht', 'Verspätet'). Beispiele TermingerechtVerspätet | |||
| Zuständiger Benutzer ResponsibleUser | Die Benutzer-ID der Person, die den Produktionsauftrag angelegt oder zuletzt geändert hat. | ||
| Beschreibung Der zuständige Benutzer bezeichnet das SAP-Benutzerkonto, das mit wichtigen Ereignissen im Lebenszyklus des Produktionsauftrags verknüpft ist, etwa mit dem Anlegen oder der Freigabe. So lassen sich Aktionen im System nachvollziehen und Verantwortlichkeiten zuordnen. Im Process Mining dient dieses Attribut dazu, Prozessabweichungen im Zusammenhang mit dem Benutzerverhalten zu analysieren. Damit lassen sich Benutzer erkennen, die möglicherweise zusätzliche Schulungen benötigen oder von den Standardvorgehensweisen abweichen. Außerdem unterstützt es die Ressourcenanalyse, indem es zeigt, wie die Arbeit auf verschiedene Benutzer verteilt ist. Warum das wichtig ist Das Attribut ordnet Prozessaktivitäten bestimmten Personen zu. Dadurch wird eine Leistungsanalyse auf Benutzerebene möglich und die Verantwortlichkeit gestärkt. Woher beziehen Der Benutzer, der den Auftrag angelegt hat, steht in AUFK-ERNAM. Der Benutzer, der ihn zuletzt geändert hat, steht in AUFK-AENAM. Änderungsbelege (CDHDR-USERNAME) enthalten den Verlauf der Benutzer, die bestimmte Änderungen vorgenommen haben. Beispiele JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
Aktivitäten der Produktionsplanung
| Aktivität | Beschreibung | ||
|---|---|---|---|
| Auftrag technisch abgeschlossen | Dieser administrative Abschlussschritt beendet den Fertigungsauftrag aus logistischer Sicht. Er verhindert weitere Materialbewegungen oder Rückmeldungen und ermöglicht die finanzielle Abrechnung. | ||
| Warum das wichtig ist Dies ist der endgültige Endpunkt des Auftragslebenszyklus in der Logistik. Die Analyse dieses Ereignisses zeigt die gesamte Prozessdauer einschließlich der administrativen Aufgaben nach der Produktion. Woher beziehen Das Ereignis wird explizit erfasst, wenn dem Auftrag der Systemstatus 'TECO' (I0045, technisch abgeschlossen) zugewiesen wird. Die Änderung wird mit einem Timestamp in der Tabelle JCDS protokolliert. Erfassung Ermitteln Sie den Timestamp, zu dem der Status 'TECO' für den Auftrag in JCDS aktiv wird. Ereignistyp explicit | |||
| Endrückmeldung erfasst | Diese Aktivität zeigt aus Sicht der Fertigung an, dass alle Vorgänge des Fertigungsauftrags abgeschlossen sind. Sie wird durch eine Endrückmeldung für den letzten Vorgang gekennzeichnet. | ||
| Warum das wichtig ist Dieser Meilenstein kennzeichnet das Ende der physischen Produktionsaktivitäten. Die Zeit zwischen der ersten und der letzten Rückmeldung entspricht der tatsächlichen Ausführungszeit der Produktion. Woher beziehen Das Ereignis wird erfasst, wenn der Systemstatus 'CNF' (I0009, bestätigt) gesetzt wird. Dies wird üblicherweise durch die Endrückmeldung in der Tabelle AFRU ausgelöst (AFRU-AUERU = 'X'). Die Statusänderung wird in JCDS protokolliert. Erfassung Ermitteln Sie den Timestamp, zu dem der Status 'CNF' gesetzt wird, oder suchen Sie den letzten Rückmeldungssatz in AFRU. Ereignistyp explicit | |||
| Erste Rückmeldung erfasst | Dieses Ereignis kennzeichnet den Beginn der tatsächlichen Arbeit am Fertigungsauftrag. Es wird erfasst, sobald die erste Zeitrückmeldung für einen Vorgang des Auftrags im System eingetragen wird. | ||
| Warum das wichtig ist Diese Aktivität zeigt den tatsächlichen Produktionsstart. Sie ist wichtig, um die Termintreue zu messen und Verzögerungen zwischen der Ressourcenzuteilung und dem Arbeitsbeginn zu erkennen. Woher beziehen Das Ereignis wird abgeleitet, indem in der Tabelle AFRU das früheste Buchungsdatum (AFRU-BUDAT) aller für den Auftrag erfassten Rückmeldungen ermittelt wird. Der erste Eintrag kennzeichnet den Beginn der tatsächlichen Produktion. Erfassung Ermitteln Sie anhand des Buchungsdatums in der Tabelle AFRU den ersten Rückmeldungssatz für den Auftrag. Ereignistyp inferred | |||
| Fertigungsauftrag angelegt | Dieses Ereignis kennzeichnet die Anlage eines neuen Fertigungsauftrags, meist durch einen Planungslauf oder eine manuelle Eingabe. Es wird erfasst, sobald ein neuer Auftragssatz im System gespeichert und mit dem Status 'CRTD' (Created) versehen wird. | ||
| Warum das wichtig ist Dies ist der Ausgangspunkt jedes Fertigungsauftrags. Die Zeitspanne bis zur Freigabe zeigt, wo es in der Produktionsvorbereitung und der administrativen Einrichtung zu Verzögerungen kommt. Woher beziehen Dieses Ereignis wird anhand des Anlegedatums (AUFK-ERDAT) und der Anlegezeit (AUFK-ERZET) des Fertigungsauftrags erfasst. Der Systemstatus 'CRTD' (I0001) wird zugewiesen und in den Tabellen JEST und JCDS protokolliert, die über die Auftragsobjektnummer (AUFK-OBJNR) mit dem Auftrag verknüpft sind. Erfassung Erfassen Sie den Timestamp der Anlage und die Zuweisung des Status 'CRTD'. Ereignistyp explicit | |||
| Fertigungsauftrag freigegeben | Diese Aktivität kennzeichnet die offizielle Freigabe des Fertigungsauftrags zur Ausführung. Danach werden Materialreservierungen wirksam und Produktionsaktivitäten wie Warenausgang und Rückmeldungen können beginnen. | ||
| Warum das wichtig ist Dies ist ein wichtiger Meilenstein beim Übergang von der Planung zur Ausführung. Die Zeit zwischen Anlage und Freigabe ist ein wichtiger Indikator für die Effizienz der Planung. Woher beziehen Das Ereignis wird explizit erfasst, wenn dem Fertigungsauftrag der Systemstatus 'REL' (I0002) zugewiesen wird. Die Änderung wird mit einem Timestamp in der Tabelle JCDS protokolliert und über die Objektnummer des Auftrags (AUFK-OBJNR) verknüpft. Erfassung Ermitteln Sie den Timestamp, zu dem der Status 'REL' für den Auftrag aktiv wird. Ereignistyp explicit | |||
| Wareneingang gebucht | Dieses Ereignis protokolliert den Zugang des Fertigprodukts aus dem Fertigungsauftrag in den Bestand. Es zeigt an, dass die hergestellte Ware nun für den Versand oder die Weiterverarbeitung verfügbar ist. | ||
| Warum das wichtig ist Dies ist ein wichtiger Meilenstein zum Abschluss und kennzeichnet das Endergebnis des Produktionsprozesses. Die Zeit von der Freigabe bis zum Wareneingang entspricht der gesamten Produktionsdurchlaufzeit. Woher beziehen Der Vorgang wird als Materialbeleg in den Tabellen MKPF/MSEG mit einer Bewegungsart, üblicherweise '101', erfasst und verweist auf den Fertigungsauftrag. Außerdem wird für den Auftrag der Systemstatus 'DLV' (I0012, geliefert) gesetzt. Erfassung Erfassen Sie das Buchungsdatum des Materialbelegs mit der Bewegungsart '101' oder den Timestamp der Statusänderung zu 'DLV'. Ereignistyp explicit | |||
| Auftragsabrechnung durchgeführt | Dieses Ereignis steht für die finanzielle Abrechnung des Fertigungsauftrags, bei der die angefallenen Kosten den entsprechenden Kostenobjekten zugeordnet werden. Aus Controlling-Sicht ist dies der letzte Schritt im Lebenszyklus des Auftrags. | ||
| Warum das wichtig ist Auch wenn es sich um einen finanziellen Vorgang handelt, können Verzögerungen bei der Abrechnung auf Probleme bei der Kostenerfassung oder der Genauigkeit der Auftragsdaten hinweisen. Mit diesem Schritt wird der Produktionsprozess finanziell abgeschlossen. Woher beziehen Das Ereignis lässt sich daran erkennen, dass der Auftragssaldo null wird oder auf den Systemstatus 'SETC' (I0076, Abrechnungsregel angelegt) Abrechnungslaufprotokolle folgen. Die tatsächliche Abrechnung wird in Controlling-Tabellen wie COSP und COSS erfasst. Erfassung Leiten Sie das Ereignis aus Abrechnungsbelegen in CO-Tabellen ab, die mit dem Auftrag verknüpft sind, oder aus der Aktivierung des Status 'SETC'. Ereignistyp inferred | |||
| Auftragsdaten geändert | Dieses Ereignis erfasst wesentliche Änderungen an einem Fertigungsauftrag nach seiner Anlage, etwa an der geplanten Menge, den Terminen oder der Stückliste. Das System protokolliert diese Änderungen zu Prüfzwecken. | ||
| Warum das wichtig ist Die Nachverfolgung dieser Änderungen hilft, instabile Abläufe und häufige Neuplanungen zu erkennen. Häufige Änderungen können auf eine unzureichende Erstplanung, schwankende Nachfrage oder fehlerhafte Daten hindeuten. Woher beziehen Änderungen an wichtigen Feldern in Tabellen wie AFKO (Auftragskopf) und AFPO (Auftragsposition) werden in den Änderungsbelegt Tabellen CDHDR (Kopf) und CDPOS (Position) protokolliert. Jede relevante Änderung lässt sich als Aktivität extrahieren. Erfassung Extrahieren Sie die Änderungsprotokolleinträge aus den Tabellen CDHDR und CDPOS für die Objektklasse des Fertigungsauftrags. Ereignistyp explicit | |||
| Auftragsstornierung gesetzt | Dieses Ereignis zeigt an, dass ein Fertigungsauftrag vor seinem Abschluss storniert wurde. Dazu wird üblicherweise ein bestimmter Status oder ein Löschkennzeichen gesetzt, wodurch die weitere Bearbeitung verhindert wird. | ||
| Warum das wichtig ist Dieses negative Ergebnis sollte unbedingt nachverfolgt werden. Die Analyse stornierter Aufträge kann Probleme bei der Nachfrageprognose, der Planungsgenauigkeit oder der Stammdatenverwaltung aufdecken. Woher beziehen Das Ereignis lässt sich aus der Zuweisung des Status 'DLFL' (I0076, Löschkennzeichen) oder, sofern konfiguriert, eines bestimmten Stornierungsstatus ableiten. Die Änderung wird mit einem Timestamp in der Tabelle JCDS protokolliert. Erfassung Ermitteln Sie den Timestamp, zu dem das Löschkennzeichen ('DLFL') oder ein Stornierungsstatus für den Auftrag gesetzt wird. Ereignistyp inferred | |||
| Materialverfügbarkeit geprüft | Dieses Ereignis steht für die Prüfung, ob alle für den Fertigungsauftrag benötigten Komponenten verfügbar sind. Die Prüfung kann automatisch bei der Anlage oder Freigabe des Auftrags erfolgen oder manuell ausgelöst werden. | ||
| Warum das wichtig ist Diese Aktivität ist wichtig, um Verzögerungen durch Materialengpässe zu verstehen. Häufige Prüfungen oder lange Wartezeiten bis zur Materialverfügbarkeit können auf Probleme in der Lieferkette oder Bestandsverwaltung hinweisen. Woher beziehen Das System setzt einen Status wie 'MACM' (Material zugesagt) oder 'MSPT' (Materialengpass). Die Ausführung lässt sich anhand des Timestamps der Statusänderung in den Tabellen JEST/JCDS ableiten. Die Ergebnisse sind im Auftragskopf sichtbar. Erfassung Leiten Sie das Ereignis aus dem Timestamp von Statusänderungen zur Materialverfügbarkeit ab, etwa 'MACM' oder 'MSPT'. Ereignistyp inferred | |||
| Warenausgang gebucht | Diese Aktivität steht für die Entnahme von Komponenten aus dem Bestand zur Verwendung im Fertigungsauftrag. Sie bestätigt, dass die benötigten Rohstoffe oder Halbfertigerzeugnisse für die Produktion bereitgestellt wurden. | ||
| Warum das wichtig ist Dieses Ereignis kennzeichnet den Beginn des Materialverbrauchs. Verzögerungen zwischen Auftragsfreigabe und Warenausgang können auf Probleme in der Lagerlogistik, der Materialbereitstellung oder der Bestandsgenauigkeit hinweisen. Woher beziehen Der Vorgang wird als Materialbeleg in den Tabellen MKPF (Kopf) und MSEG (Position) mit einer Bewegungsart, üblicherweise '261', erfasst. Der Beleg verweist auf die Fertigungsauftragsnummer (MSEG-AUFNR). Erfassung Erfassen Sie das Buchungsdatum (MKPF-BUDAT) der Materialbelege mit der Bewegungsart '261', die mit dem Auftrag verknüpft sind. Ereignistyp explicit | |||
| Zwischenrückmeldung erfasst | Dieses Ereignis steht für eine Fortschrittsmeldung zu einem Fertigungsauftrag durch die Teilrückmeldung eines Vorgangs. Das ist bei lang laufenden Aufträgen üblich, bei denen der Fortschritt vor dem endgültigen Abschluss erfasst werden muss. | ||
| Warum das wichtig ist Die Analyse von Zwischenrückmeldungen hilft, den Fortschritt bei langen Produktionszyklen zu überwachen und Engpässe im Produktionsprozess selbst zu erkennen, nicht nur am Anfang oder Ende. Woher beziehen Das Ereignis wird aus Rückmeldungssätzen in der Tabelle AFRU erfasst, die nicht als Endrückmeldung gekennzeichnet sind. Jeder Eintrag enthält ein Buchungsdatum (AFRU-BUDAT) und eine Uhrzeit. Erfassung Extrahieren Sie alle Rückmeldungssätze aus AFRU, die nicht als Endrückmeldung für einen Vorgang gekennzeichnet sind. Ereignistyp explicit | |||
Anleitungen zum Datenexport
Schritte
- InfoSet in SAP Query anlegen: Verwenden Sie den Transaktionscode
SQ02. Legen Sie ein neues InfoSet an, zum BeispielZPP_EVENTLOG. Wählen Sie als Datenquelle „Tabellenverknüpfung mit Basistabelle“. Verwenden SieAUFK(Auftragsstammdaten) als Basistabelle. - Benötigte Tabellen verknüpfen: Fügen Sie dem InfoSet die folgenden Tabellen hinzu. Das System schlägt möglicherweise Verknüpfungen vor. Prüfen Sie, ob diese korrekt sind:
AUFKmitAFKO(Kopfdaten von PP-Aufträgen):AUFK-AUFNR = AFKO-AUFNRAUFKmitJEST(Einzelobjektstatus):AUFK-OBJNR = JEST-OBJNRJESTmitJCDS(Änderungsbelege für System- und Benutzerstatus):JEST-OBJNR = JCDS-OBJNRUNDJEST-STAT = JCDS-STAT. Hinweis: Diese Verknüpfung dient zum Auslesen des Statusänderungsverlaufs.AUFKmitAFRU(Rückmeldungen zum Auftragsabschluss):AUFK-AUFNR = AFRU-AUFNRAUFKmitMSEG(Belegsegment: Material):AUFK-AUFNR = MSEG-AUFNRMSEGmitMKPF(Kopf: Materialbeleg):MSEG-MBLNR = MKPF-MBLNRUNDMSEG-MJAHR = MKPF-MJAHR
- Feldgruppen definieren: Ziehen Sie die benötigten Felder aus den Quelltabellen in die Feldgruppen. Nehmen Sie alle Felder auf, die für die abschließende Abfrage erforderlich sind, zum Beispiel
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATEundMKPF-BUDAT. - Benutzerdefinierte Felder und Code hinzufügen: Öffnen Sie im InfoSet die Registerkarte „Extras“. Definieren Sie die benutzerdefinierten Felder
ActivityName,EventTime,SourceSystemundLastDataUpdate. Schreiben Sie ABAP-Code, der diese Felder anhand der im Abfrageabschnitt beschriebenen Logik befüllt. Dazu werden Statusänderungen, Rückmeldungen und Materialbelege durchlaufen, um für jedes Geschäftsereignis einen eigenen Datensatz zu erzeugen. Dies ist der komplexeste Schritt, da tabellarische Daten in den Codeabschnitten des InfoSets in ein Event-Log-Format umgewandelt werden. - InfoSet generieren und speichern: Speichern und generieren Sie das InfoSet, sobald alle Verknüpfungen, Felder und benutzerdefinierten Codeabschnitte eingerichtet sind.
- SAP Query anlegen: Verwenden Sie den Transaktionscode
SQ01. Legen Sie eine neue Abfrage an, zum BeispielZPP_EVENTS, und verwenden Sie das zuvor erstellte InfoSet. - Abfragelayout gestalten: Legen Sie im Abfrage-Designer die Felder für den Selektionsbildschirm fest. Sinnvolle Auswahlfelder sind der Produktionsauftrag
AUFNR, das WerkWERKS, die AuftragsartAUARTund ein Datumsbereich für das Anlagedatum des AuftragsAUFK-ERDAT. - Ausgabeliste festlegen: Wählen Sie die Felder aus, die im Bericht angezeigt werden sollen. Die Liste muss genau den Spalten entsprechen, die für das Event Log benötigt werden, einschließlich benutzerdefinierter Felder wie
ActivityNameundEventTime. - Abfrage ausführen: Führen Sie die Abfrage mit den gewünschten Auswahlkriterien aus, zum Beispiel für Produktionsaufträge der letzten 3 bis 6 Monate.
- Daten exportieren: Exportieren Sie die Liste, sobald die Abfrage Ergebnisse anzeigt. Üblicherweise eignet sich dafür das Format „Tabellenkalkulation“ oder „Lokale Datei“ mit tabulatorgetrennten Werten oder CSV.
- Daten für ProcessMind formatieren: Öffnen Sie die exportierte Datei in einem Tabellenkalkulationsprogramm. Prüfen Sie, ob die Spaltenüberschriften den benötigten Attributen entsprechen (
ProductionOrder,ActivityName,EventTimeusw.) und ob Datum und Uhrzeit inEventTimeeinheitlich und im erforderlichen Format vorliegen, zum Beispiel YYYY-MM-DD HH:MI:SS. Speichern Sie die Datei als CSV, um sie hochzuladen.
Konfiguration
- InfoSet-Verknüpfungen: Grundlage dieser Methode ist ein komplexes InfoSet, das Auftragskopf-, Status-, Rückmeldungs- und Materialbewegungstabellen verknüpft. Die wichtigsten Verknüpfungen sind
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUundAUFK->MSEG->MKPF. Falsche oder ineffiziente Verknüpfungen können die Leistung beeinträchtigen oder zu ungenauen Daten führen. - Auswahlkriterien: Legen Sie einen überschaubaren Auswahlbereich fest, um Leistungsprobleme im System zu vermeiden. Auf dem Startbildschirm der Abfrage sollten insbesondere folgende Felder zur Auswahl stehen:
- Fertigungswerk (
AUFK-WERKS) - Produktionsauftragsart (
AUFK-AUART) - Anlagedatum des Auftrags (
AUFK-ERDAT): Wir empfehlen, Daten für einen rollierenden Zeitraum von 3 bis 6 Monaten zu exportieren, damit der Datenumfang überschaubar bleibt.
- Fertigungswerk (
- Systemstatus: Die Erkennung von Ereignissen wie „Angelegt“, „Freigegeben“, „Technisch abgeschlossen“ und „Storniert“ hängt von bestimmten Systemstatuscodes ab, zum Beispiel I0001, I0002, I0045 und I0047. Diese sind in der Regel in SAP-Systemen standardisiert, sollten aber überprüft werden.
- Bewegungsarten: Ereignisse wie „Warenausgang“ und „Wareneingang“ werden anhand ihrer Bewegungsarten (
MSEG-BWART) erkannt, üblicherweise „261“ beziehungsweise „101“. Prüfen Sie, ob diese Werte der Konfiguration Ihrer Organisation entsprechen. - Berechtigungen: Der Benutzer, der die Abfrage ausführt, benötigt Berechtigungen für die Transaktionen
SQ01,SQ02undSQ03sowie Anzeigezugriff auf alle zugrunde liegenden Tabellen (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF).
a Beispielabfrage 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'; Schritte
- Datenbankzugriff einrichten: Beschaffen Sie schreibgeschützte Zugangsdaten für die zugrunde liegende SAP-ECC-Datenbank. Sie benötigen die Serveradresse, den Port, den Datenbanknamen, den Benutzernamen und das Passwort. Stimmen Sie diesen Zugriff unbedingt mit Ihrem SAP-Basis- und Datenbankadministrationsteam ab.
- SAP-Schema ermitteln: Ermitteln Sie das Datenbankschema, in dem die SAP-Tabellen gespeichert sind. Häufig lautet der Name
SAPSR3oder ist ähnlich aufgebaut und systemspezifisch. Ersetzen Sie den Platzhalter[Your SAP Schema]in der Abfrage durch diesen Wert. - SQL-Abfrage vorbereiten: Kopieren Sie die vollständige SQL-Abfrage aus dem Abschnitt
query. Sie ist so aufgebaut, dass alle angegebenen Aktivitäten in ein einzelnes Event Log exportiert werden. - Abfrageparameter konfigurieren: Passen Sie vor der Ausführung die Platzhalter in der Abfrage an. Legen Sie mit
[Start Date]und[End Date]den Zeitraum für den Export fest. Wir empfehlen außerdem, nach Fertigungswerk (WERKS) oder Auftragsart (AUART) zu filtern, um das Datenvolumen zu begrenzen. - Verbindung herstellen und ausführen: Stellen Sie mit einem gängigen SQL-Client wie DBeaver oder SAP HANA Studio oder mit einem eigenen Skript (Python, Java) eine Verbindung zur SAP-Datenbank her. Verwenden Sie dafür die Zugangsdaten aus Schritt 1.
- Abfrage ausführen: Fügen Sie die konfigurierte SQL-Abfrage in Ihren Client ein und führen Sie sie aus. Je nach Zeitraum und Systemgröße kann die Ausführung mehrere Minuten dauern.
- Ergebnisse stichprobenartig prüfen: Prüfen Sie nach Abschluss der Abfrage kurz die ersten hundert Zeilen. Vergewissern Sie sich, dass Spalten wie
ProductionOrder,ActivityNameundEventTimekorrekt befüllt sind und plausible Werte enthalten. - Als CSV exportieren: Exportieren Sie das gesamte Ergebnis aus Ihrem SQL-Client in eine CSV-Datei. Verwenden Sie UTF-8-Codierung, um Zeichenfehler zu vermeiden.
- CSV für den Upload vorbereiten: Öffnen Sie die CSV-Datei und prüfen Sie, ob die Spaltenüberschriften den benötigten Attributen entsprechen (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdateusw.). Achten Sie auf ein einheitliches Format für die SpalteEventTime, zum BeispielYYYY-MM-DD HH:MI:SS. - In ProcessMind hochladen: Die vorbereitete CSV-Datei kann nun zur Analyse auf die ProcessMind-Plattform hochgeladen werden.
Konfiguration
- Datenbankschema: Geben Sie das SAP-Schema an, in dem die Tabellen zur Produktionsplanung gespeichert sind. Ersetzen Sie den Platzhalter
[Your SAP Schema]in der Abfrage durch den korrekten Namen Ihrer Umgebung, zum BeispielSAPSR3. - Datumsbereich: Ein bestimmter Datumsbereich ist für die Systemleistung entscheidend. Die Abfrage filtert nach dem Anlagedatum des Auftrags (
AUFK.ERDAT). Wir empfehlen, zunächst einen aktuellen Zeitraum von 3 bis 6 Monaten auszuwählen, damit das Datenvolumen überschaubar bleibt. - Produktionsauftragsart: Beschränken Sie die Analyse, indem Sie die Abfrage nach der Produktionsauftragsart (
AUFK.AUART) filtern. So können Sie bestimmte Auftragsarten wie Standardproduktionsaufträge, Prozessaufträge oder Nacharbeitsaufträge ein- oder ausschließen. - Fertigungswerk: Wir empfehlen dringend, nach einem oder mehreren Fertigungswerken (
AFKO.WERKS) zu filtern. Der Export von Daten für alle Werke auf einmal kann erhebliche Systemressourcen beanspruchen. - Datenbankzugriff: Für diese Methode benötigen Sie einen Datenbankbenutzer mit mindestens Leseberechtigung für folgende Tabellen:
AUFK,AFKO,JCDS,JEST,AFRU,MSEG,MKPF. Der direkte Datenbankzugriff ist nicht für alle SAP-Benutzer standardmäßig vorgesehen und erfordert eine besondere Berechtigung.
a Beispielabfrage 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'; Schritte
- Prüfen Sie, ob SAP ECC PP, die Auftragsbearbeitung, Rückmeldungen, die Bestandsführung und die Controlling-Daten verfügbar sind. Vergewissern Sie sich außerdem, dass der Extraktionsbenutzer die erforderlichen Berechtigungen zum Lesen der Anwendungstabellen und Ausführen kundenspezifischer ABAP-Reports besitzt.
- Erstellen Sie in der ABAP Workbench, zum Beispiel über die Transaktion SE38 oder SE80, einen eigenen ausführbaren Report, etwa [Your custom report name]. Verwenden Sie einen Selektionsbildschirm mit obligatorischen Datumsparametern wie [Start date] und [End date] sowie optionalen Filtern für [Company Code], [Production Plant], [Order Type], [Material] und [Production Order].
- Lesen Sie die Kopfdaten und Stammdaten der Fertigungsaufträge aus AUFK und den in Ihrem SAP-ECC-System konfigurierten Fertigungsauftragstabellen aus. Verwenden Sie JCDS und die zugehörige Statuskonfiguration, um explizite Statusänderungen zu ermitteln, darunter CRTD, freigegeben, technisch abgeschlossen und stornierungsbezogene Status. Gehen Sie nicht davon aus, dass ein Statuscode ein Ereignis darstellt, wenn die Statushistorie keine Änderung mit Timestamp enthält.
- Lesen Sie die Ergebnisse der Materialverfügbarkeitsprüfung aus den in Ihrem System konfigurierten Daten zur Verfügbarkeitsprüfung des Fertigungsauftrags aus. Falls die Prüfung nicht in einer Tabelle gespeichert wird, die sich zuverlässig dem Auftrag und einem Timestamp zuordnen lässt, implementieren Sie die von Ihrem SAP-Team freigegebene SAP-Erweiterung, das Anwendungsprotokoll oder die Audit-Quelle. Leiten Sie eine Prüfung nicht allein aus der Auftragserstellung oder -freigabe ab.
- Lesen Sie die Änderungshistorie der Aufträge aus den konfigurierten Änderungsbelegobjekten für Fertigungsaufträge und den zugehörigen Änderungstabellen aus. Extrahieren Sie nur wesentliche Änderungen, etwa an Planmenge, Terminen, Stückliste, Arbeitsplan oder anderen vom Prozessverantwortlichen freigegebenen Feldern. Verwenden Sie den Timestamp des Änderungsbelegs als EventTime.
- Lesen Sie die Warenausgangs- und Wareneingangsbuchungen aus den in Ihrem System konfigurierten Materialbelegdaten der Bestandsführung aus. Verknüpfen Sie die Buchungen über den in den Materialbelegdaten verfügbaren Auftragsbezug mit dem Fertigungsauftrag. Klassifizieren Sie Komponentenentnahmen als Goods Issue Posted und Zugänge des Fertigerzeugnisses als Goods Receipt Posted. Verwenden Sie nach Möglichkeit Buchungsdatum und Buchungszeit.
- Lesen Sie die Rückmeldedaten aus der in Ihrem System konfigurierten Quelle für Fertigungsrückmeldungen aus. Sortieren Sie die Rückmeldungen nach Fertigungsauftrag und Timestamp der Rückmeldung. Geben Sie für die erste Rückmeldung First Confirmation Recorded, für geeignete nicht abschließende Rückmeldungen Intermediate Confirmation Recorded und für eine ausdrücklich als abschließend gekennzeichnete oder anhand der konfigurierten Abschlusslogik identifizierte Rückmeldung Final Confirmation Recorded aus. Leiten Sie den Abschluss nicht aus der letzten Zeile einer beliebigen Abfrage ab.
- Lesen Sie die Ausführungsdaten der Abrechnung aus der konfigurierten Quelle für die Controlling-Abrechnung aus. Geben Sie Order Settlement Ran nur dann aus, wenn ein Abrechnungsausführungsdatensatz, ein Abrechnungsbeleg oder eine freigegebene Abrechnungsstatushistorie einen expliziten, mit dem Fertigungsauftrag verknüpften Timestamp enthält.
- Erstellen Sie für jede extrahierte Aktivität eine interne Ereigniszeile. Befüllen Sie die Felder ProductionOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ProductionPlant, ProductCode, PlannedQuantity, DeliveredQuantity, ActualStartDate und ActualEndDate. Verwenden Sie eine einheitliche Timestamp-Konvertierung und behalten Sie die Zeitzone des Quellsystems bei. Setzen Sie ActualStartDate auf den Timestamp der ersten Rückmeldung und ActualEndDate auf den Timestamp der letzten Rückmeldung, sofern diese Ereignisse vorliegen.
- Sortieren Sie die Ereigniszeilen nach ProductionOrder und EventTime. Verwenden Sie bei identischen Timestamps eine deterministische sekundäre Sortierung. Entfernen Sie nur exakt doppelte Quelldatensätze, keine legitimen wiederholten Ereignisse. Prüfen Sie, ob das Ausgabeschema alle zwölf erforderlichen Aktivitätsnamen enthält und jede ausgegebene Zeile eine Case-ID, einen Aktivitätsnamen und einen Ereignis-Timestamp aufweist.
- Schreiben Sie das Ergebnis über eine freigegebene ABAP-Dateischnittstelle in eine Datei auf dem Anwendungsserver. Verwenden Sie einen mit der ProcessMind-Aufnahmekonfiguration abgestimmten Trenner und eine abgestimmte Textkodierung. Fügen Sie eine Kopfzeile ein, setzen Sie Werte mit Trennzeichen in Anführungszeichen und formatieren Sie Timestamps einheitlich, vorzugsweise als YYYY-MM-DDThh:mm:ss.
- Laden Sie die Datei mit dem freigegebenen SAP-Dateiübertragungsverfahren herunter, prüfen Sie sie unabhängig und laden Sie sie als Event Log in ProcessMind hoch. Legen Sie ProductionOrder als Case-ID, ActivityName als Aktivität und EventTime als Ereignis-Timestamp fest. Vergewissern Sie sich, dass ProcessMind die Zeilen unverändert einliest und fehlende Aktivitäten nicht selbst ableiten soll.
Konfiguration
- Datumsbereich: Verwenden Sie für die erste Analyse einen rollierenden Extraktionszeitraum von drei bis sechs Monaten. Erweitern Sie den Zeitraum erst, nachdem Sie Leistung und Datenvolumen geprüft haben. Berücksichtigen Sie einen Rückblickzeitraum für Aufträge, die vor dem gewählten Startdatum angelegt wurden, im Analysezeitraum aber noch aktiv waren.
- Auswahlfilter: Unterstützen Sie Filter für [Company Code], [Production Plant], [Order Type], [Material], [Production Order], Auftragsstatus sowie Anlege- oder Änderungsdatum. Richten Sie die konkreten Felder entsprechend der SAP-ECC-Implementierung ein, da die verfügbaren Felder für Fertigungsaufträge je nach Release und Anpassungen variieren können.
- Ereignisumfang: Extrahieren Sie alle zwölf erforderlichen Aktivitäten als explizite Ereigniszeilen: 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 und Order Cancellation Set.
- Timestamp-Regel: Bevorzugen Sie Datum und Uhrzeit des Quellereignisses. Liegt nur ein Datum vor, dokumentieren Sie die geringere Genauigkeit und verwenden Sie eine einheitlich konfigurierte Uhrzeit, statt eine nicht belegte genaue Uhrzeit anzugeben. Konvertieren Sie alle Timestamps in die von ProcessMind erwartete Zeitzone.
- Statusverarbeitung: Verwenden Sie für Statusaktivitäten eine Statushistorie mit Timestamps. Legen Sie die Zuordnung interner Statuswerte zu Geschäftsaktivitäten anhand der Systemstatuskonfiguration und mit Freigabe des Prozessverantwortlichen fest.
- Verfügbarkeitsprüfungen: Richten Sie die freigegebene Quelle für die Ausführung von Verfügbarkeitsprüfungen ein. Erstellen Sie keine Zeile für Material Availability Checked aufgrund der Auftragserstellung, -freigabe, Reservierungen oder eines erfolgreichen Warenausgangs, es sei denn, die fachlich freigegebene Quelle dokumentiert die Prüfung ausdrücklich.
- Rückmeldungsverarbeitung: Legen Sie die Regeln zur Unterscheidung zwischen erster, zwischenzeitlicher und abschließender Rückmeldung fest. Eine Rückmeldung darf nur dann als abschließend gelten, wenn die Quelle sie ausdrücklich als solche kennzeichnet oder die konfigurierte SAP-Rückmeldelogik den Abschluss bestätigt.
- Mengen: Behalten Sie nach Möglichkeit die Mengeneinheit der Quelle bei. Wenn Sie Mengen aggregieren, dokumentieren Sie, ob die Aggregation nach Auftrag, Material, Bewegung, Rückmeldung oder Ereignis erfolgt. DeliveredQuantity sollte gebuchte Zugänge des Fertigerzeugnisses abbilden, nicht lediglich die bestätigte Gutmenge, sofern der Prozessverantwortliche diese Interpretation nicht freigibt.
- LastDataUpdate: Befüllen Sie dieses Feld mit dem Timestamp des Extraktionslaufs oder dem Aktualisierungs-Timestamp der Quelle. Verwenden Sie für alle Zeilen eines Laufs dieselbe dokumentierte Konvention.
- Leistung: Begrenzen Sie den Auswahlzeitraum, wählen Sie nur erforderliche Felder aus, verarbeiten Sie Daten paketweise und filtern Sie auf Datenbankebene. Vermeiden Sie verschachtelte Datenbankzugriffe in großen Schleifen. Erstellen oder verwenden Sie freigegebene Indizes ausschließlich über den SAP-Datenbankadministrationsprozess. Schreiben Sie die Ausgabe bei hohem Speicherbedarf schrittweise.
- Dateiausgabe: Konfigurieren Sie Anwendungsserververzeichnis, logischen Dateinamen, Trennzeichen, Kodierung, Dezimalformat, Timestamp-Format und Kopfzeile gemäß den ProcessMind-Vorgaben für den Upload. Geben Sie keine Zugangsdaten im Report oder in der Ausgabedatei preis.
- Voraussetzungen: Vergewissern Sie sich, dass SAP ECC PP, Bestandsführung, Rückmeldungen, Statusverwaltung für Fertigungsaufträge und Controlling-Abrechnungsdaten wie erforderlich aktiv sind. Erforderliche Berechtigungen, Freigaben für kundenspezifische Entwicklungen und Transporte, Dateizugriff auf den Anwendungsserver sowie Zugriff auf die ProcessMind-Datenaufnahme müssen vor der Ausführung eingerichtet sein.
- Systemspezifische Konfiguration: Tabellen, Felder, Statuscodes, Änderungsbelegobjekte sowie Quellen für Rückmeldungen, Verfügbarkeitsprüfungen und Abrechnungen müssen im jeweiligen SAP-ECC-Zielsystem bestätigt werden. Verwenden Sie [Configure based on your system], wenn die Implementierung keine standardisierte, zuverlässige Quelle bereitstellt.
a Beispielabfrage 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'. Möchten Sie beginnen?
Verwenden Sie dieses Template, um Ihre Daten vorzubereiten und Ihren Produktionsplanungsprozess gezielt zu verbessern. Gewinnen Sie Erkenntnisse und optimieren Sie Ihre Abläufe.
Optimieren Sie jetzt Ihre Produktionsplanung und steigern Sie die Effizienz
Decken Sie Ineffizienzen auf, verkürzen Sie die Durchlaufzeit um 30 % und erreichen Sie Ihre Ziele.
Keine Kreditkarte erforderlich. Beginnen Sie noch heute mit der Optimierung.