Ihr Daten-Template für die Bestandsverwaltung
Ihr Daten-Template für die Bestandsverwaltung
- Empfohlene Attribute für die Datenerfassung
- Wichtige Aktivitäten für die Prozesserkennung
- Anleitung zur Datenextraktion für SAP S/4HANA
Attribute der Bestandsverwaltung
| Name | Beschreibung | ||
|---|---|---|---|
| Bestandscharge oder -los InventoryBatchLot | Eindeutige Kennung einer bestimmten Produktmenge. Sie dient als Case-ID, um deren Lebenszyklus nachzuverfolgen. | ||
| Beschreibung Die Nummer der Bestandscharge oder des Loses ist die zentrale Case-ID. Sie fasst alle Aktivitäten zu einer bestimmten, abgegrenzten Produktmenge zusammen. Dadurch lässt sich der Weg einer Bestandsmenge chronologisch nachvollziehen: vom Wareneingang über interne Umlagerungen und Statusänderungen bis zur Ausgabe für einen Verkauf oder eine Produktion beziehungsweise zur Entsorgung. Bei der Prozessanalyse ist dieses Attribut grundlegend. Damit können Sie den gesamten Ablauf jeder Charge nachverfolgen, Durchlaufzeiten genau messen, Prozessvarianten erkennen und nachvollziehen, wie unterschiedliche Chargen behandelt werden. Die Analyse auf Chargenebene ist besonders wichtig in Branchen, in denen Rückverfolgbarkeit, Qualitätskontrolle und die Überwachung von Verfallsdaten entscheidend sind, etwa in der Pharma-, Lebensmittel- und Getränke- sowie Chemieindustrie. Warum das wichtig ist Diese zentrale Kennung führt alle zugehörigen Bestandsereignisse in einem Case zusammen und ermöglicht so die durchgängige Prozessanalyse. Woher beziehen In der Regel handelt es sich um die Chargennummer im Feld CHARG, die in SAP-Tabellen wie MCHA (Chargenstammsatz) oder MCH1 (Chargen) zu finden ist. Beispiele B001-A452023L202405-XYZ789456123BATCH-05-24 | |||
| Ereigniszeitpunkt EventTime | Datum und Uhrzeit, zu denen die Bestandsaktivität im System erfasst wurde. | ||
| Beschreibung Der Ereigniszeitpunkt ist der Timestamp, der genau festhält, wann eine Aktivität stattgefunden hat. Anhand dieses Datenpunkts lassen sich Ereignisse chronologisch ordnen und die Prozessabläufe für jede Bestandscharge rekonstruieren. Er bildet die Grundlage für alle zeitbezogenen Process-Mining-Analysen. Die Genauigkeit des Ereigniszeitpunkts ist entscheidend für die Berechnung wichtiger Kennzahlen wie Zykluszeiten, Durchlaufzeiten und Prozessdauern. Sie ermöglicht den Vergleich der Prozessleistung über verschiedene Zeiträume, zeigt, wann Engpässe auftreten, und liefert eine verlässliche Grundlage, um Verzögerungen zu verstehen, etwa die Zeit, die eine Charge vor ihrer Freigabe in der Qualitätsprüfung verbringt. Warum das wichtig ist Dieser Timestamp ordnet Ereignisse chronologisch und bildet die Grundlage für alle Berechnungen von Dauer und Leistung. Woher beziehen In der Regel eine Kombination aus Buchungsdatum (MKPF-BUDAT) und Erfassungszeit (MKPF-CPUTM) aus der Materialbelegkopftabelle MKPF. Beispiele 2023-10-26T09:00:00Z2023-11-15T14:35:10Z2024-01-05T23:15:00Z | |||
| Aktivität ActivityName | Bezeichnung des Geschäftsvorfalls, der zu einem bestimmten Zeitpunkt im Prozess der Bestandsverwaltung eingetreten ist. | ||
| Beschreibung Das Attribut Aktivität beschreibt einen einzelnen Schritt oder ein Ereignis im Lebenszyklus einer Bestandscharge. Dazu gehören wichtige Geschäftsvorgänge wie der Wareneingang, eine Umlagerung, eine Qualitätsprüfung oder die Materialausgabe. Jede Aktivität dokumentiert, was zu einem bestimmten Zeitpunkt mit der Bestandscharge geschehen ist. Die Analyse der Aktivitäten bildet die Grundlage für Process Mining. Sie ermöglicht die Visualisierung des Prozessablaufs, zeigt häufige und seltene Pfade sowie Engpässe mit verzögerten Aktivitäten und macht Nacharbeitsschleifen sichtbar. Wenn Unternehmen die Reihenfolge und Häufigkeit von Aktivitäten wie „Bestand verschrottet“ oder „Qualitätsprüfung“ verstehen, können sie Ansatzpunkte für bessere Prozesse und effizientere Abläufe erkennen. Warum das wichtig ist Das Attribut bildet die Prozessschritte ab und ermöglicht die Visualisierung und Analyse des Bestandslebenszyklus. Woher beziehen Dies ist ein abgeleitetes Attribut, das häufig aus SAP-Bewegungsarten (MSEG-BWART) oder Transaktionscodes (MKPF-TCODE2) auf verständliche Bezeichnungen übertragen wird. Beispiele Wareneingang gebuchtEinlagerungsumbuchung gebuchtWarenausgang zur Lieferung gebuchtBestand verschrottet | |||
| Benutzername UserName | Benutzer-ID der Person, die die Transaktion in SAP ausgeführt hat. | ||
| Beschreibung Dieses Attribut erfasst die SAP-Benutzer-ID des Mitarbeitenden, der den Beleg gebucht oder die Aktivität ausgeführt hat. So lässt sich nachvollziehen, wer für bestimmte Vorgänge in der Bestandsverwaltung verantwortlich ist. Die Analyse nach Benutzern ist wichtig, um Leistung, Compliance und Schulungsbedarf zu verstehen. Das Dashboard „Ursachen manueller Bestandskorrekturen“ zeigt beispielsweise, wer die meisten Korrekturen vornimmt. So lassen sich Benutzer mit zusätzlichem Schulungsbedarf oder nicht autorisierte Aktivitäten erkennen und besonders gute Leistungen sichtbar machen. Warum das wichtig ist Das Attribut schafft Nachvollziehbarkeit und hilft, benutzerspezifische Verhaltensmuster, Schulungsbedarf oder Compliance-Probleme zu erkennen. Woher beziehen Zu finden in der Materialbelegkopftabelle MKPF, Feld USNAM (Benutzername). Beispiele JSMITHMBROWNWAREHOUSE_OPS | |||
| Bewegungsart MovementType | Dreistelliger Schlüssel in SAP, der festlegt, wie eine Warenbewegung gebucht wird. | ||
| Beschreibung Die Bewegungsart ist ein wichtiger Steuerungsschlüssel in der SAP-Bestandsverwaltung und bestimmt die Merkmale einer Materialbewegung. Sie legt fest, welche Konten aktualisiert werden, wie die Transaktionsmaske aussieht und welche Mengen- oder Wertfelder aktualisiert werden. Beispielsweise steht 101 für einen Wareneingang, 311 für eine Umbuchung und 551 für eine Verschrottung. Dieses Attribut dient häufig als Grundlage, um eine verständliche Bezeichnung für die Aktivität abzuleiten. Die Analyse nach Bewegungsart zeigt detailliert und technisch, wie sich der Bestand bewegt. Sie ist wichtig, um die Prozesslandkarte auf ihre Richtigkeit zu prüfen und bestimmte Transaktionen zu erkennen, die Engpässe oder Abweichungen verursachen können. Warum das wichtig ist Das Attribut klassifiziert jedes Bestandsereignis präzise und technisch. Es ist wichtig, um Aktivitäten abzuleiten und detaillierte Analysen durchzuführen. Woher beziehen Zu finden in der Materialbelegpositionstabelle MSEG, Feld BWART (Bewegungsart). Beispiele 101311261551601 | |||
| Bewegungsgrundcode MovementReasonCode | Ein Code, der den Grund für eine Bestandsbewegung angibt. | ||
| Beschreibung Der Bewegungsgrundcode gibt an, warum eine Warenbewegung durchgeführt wurde. Er erklärt häufig ungeplante Bewegungen wie Bestandskorrekturen, Retouren oder Verschrottungen. Dieses Attribut ist besonders wertvoll für die Ursachenanalyse. Im Dashboard „Ursachen manueller Bestandskorrekturen“ kann die Auswertung nach Bewegungsgrund zeigen, warum Abweichungen auftreten, etwa durch Beschädigung, Diebstahl oder Eingabefehler. So können Unternehmen die zugrunde liegenden Probleme beheben, statt nur ihre Auswirkungen zu korrigieren. Warum das wichtig ist Es erklärt die Gründe für ungeplante Bestandsbewegungen und ermöglicht eine gezielte Ursachenanalyse. Woher beziehen Zu finden in der Positionstabelle des Materialbelegs MSEG, Feld GRUND (Bewegungsgrund). Beispiele 00010005102 | |||
| Lagerort StorageLocation | Ein bestimmter Ort innerhalb eines Werks, an dem Bestand physisch gelagert wird. | ||
| Beschreibung Ein Lagerort ist eine Organisationseinheit, mit der sich Materialbestände innerhalb eines Werks unterscheiden lassen. Ein Werk kann beispielsweise separate Lagerorte für Rohstoffe, Fertigerzeugnisse und Bestände in der Qualitätsprüfung haben. Dieses Attribut ermöglicht eine genauere Standortanalyse als das Werk. Es zeigt etwa, wie lange Umlagerungen vom Wareneingangsbereich ins Hauptlager dauern. Wenn Sie die Lagernutzung und die Häufigkeit von Bewegungen nach Lagerort auswerten, können Sie die Lageraufteilung und die interne Logistik verbessern. Warum das wichtig ist Es ermöglicht eine detaillierte Analyse der Bestandsorte innerhalb eines Werks und hilft dabei, interne Bewegungen und die Lagereffizienz zu untersuchen. Woher beziehen Zu finden in der Positionstabelle des Materialbelegs MSEG, Feld LGORT (Lagerort). Beispiele 0001RM01FG01QI01 | |||
| Materialnummer MaterialNumber | Eindeutige Kennung des verwalteten Produkts oder Materials. | ||
| Beschreibung Die Materialnummer, häufig auch SKU (Stock Keeping Unit) genannt, ist der eindeutige Code eines bestimmten Produkts. Sie gehört zu den grundlegenden Stammdaten der Bestandsverwaltung und dient dazu, Mengen, Werte und Warenbewegungen nachzuverfolgen. In Process Mining ermöglicht die Analyse nach Materialnummer eine produktbezogene Sicht auf die Bestandsprozesse. Sie zeigt zum Beispiel, bei welchen Produkten die Qualitätsprüfung am längsten dauert, welche am häufigsten verschrottet werden oder bei welchen die meisten internen Umlagerungen anfallen. Diese Aufschlüsselung hilft, produktspezifische Probleme zu erkennen und die Bestandsstrategie für unterschiedliche Waren zu verbessern. Warum das wichtig ist Damit lässt sich die Analyse nach Produkten aufschlüsseln, um Muster und Probleme einzelner Artikel zu erkennen. Woher beziehen Zu finden in der Materialbelegpositionstabelle MSEG, Feld MATNR. Die Stammdaten stehen in der Tabelle MARA. Beispiele RM-1001FG-2050-B100-400-A | |||
| Menge Quantity | Die Menge des Materials, das bei der Bestandsbewegung betroffen ist. | ||
| Beschreibung Dieses Attribut gibt an, wie viel Material bei einer Aktivität bewegt, empfangen, ausgegeben oder angepasst wurde. Die Menge wird in der Basismengeneinheit des Materials erfasst. Die Mengenauswertung ist entscheidend, um Umfang und Auswirkungen von Bestandsprozessen zu verstehen. Sie können damit Dashboards erstellen, die das bewegte Warenvolumen darstellen, etwa den „Warenausgang nach Artikel“. Die Menge fließt auch in Kennzahlen wie die „Ausschuss- und Verschrottungsquote“ ein. So ergänzt sie die Prozessanalyse um eine quantitative Perspektive, die über das bloße Zählen von Ereignissen hinausgeht. Warum das wichtig ist Es quantifiziert die Materialmenge je Aktivität und ermöglicht Auswertungen zu Durchsatz, Ausschussvolumen und den Auswirkungen von Bestandsanpassungen. Woher beziehen Zu finden in der Positionstabelle des Materialbelegs MSEG, Feld MENGE (Menge). Beispiele 10012.55000-10 | |||
| Werk Plant | Organisationseinheit für einen Standort, an dem sich Bestand befindet, zum Beispiel ein Werk oder ein Verteilzentrum. | ||
| Beschreibung Ein Werk ist eine zentrale Organisationseinheit in SAP. Es kann einen Produktionsstandort, ein zentrales Lager oder eine Unternehmenszentrale bezeichnen. Der gesamte Bestand befindet sich physisch oder logisch in einem Werk. Die Analyse nach Werk ist grundlegend, um die Prozessleistung an verschiedenen Standorten zu vergleichen. Sie hilft bei Fragen wie: „In welchem Werk dauert die Einlagerung am längsten?“ oder „Ist die Bestandsabweichungsquote in Werk A höher als in Werk B?“ Diese geografische oder organisatorische Gliederung ist entscheidend, um standortspezifische Probleme zu erkennen und bewährte Vorgehensweisen im Unternehmen weiterzugeben. Warum das wichtig ist Damit lassen sich Bestandsprozesse und ihre Leistung an verschiedenen Unternehmensstandorten vergleichen. Woher beziehen Zu finden in der Positionstabelle des Materialbelegs MSEG, Feld WERKS (Werk). Beispiele 10001710DE01US01 | |||
| Bestandsart StockType | Gibt den Status des Bestands an, zum Beispiel frei verwendbar, in Qualitätsprüfung oder gesperrt. | ||
| Beschreibung Die Bestandsart ordnet Bestände nach ihrer Verwendbarkeit. Die wichtigsten Arten sind frei verwendbarer Bestand, Bestand in Qualitätsprüfung und gesperrter Bestand. Warenbewegungen ändern häufig die Bestandsart. Die Änderungen der Bestandsart nachzuverfolgen ist entscheidend, um die Bestandsverfügbarkeit zu verstehen. Das unterstützt direkt Aktivitäten wie „Bestand in Qualitätsprüfung gebucht“ und „Bestandsstatus auf gesperrt geändert“. Die Verweildauer in den einzelnen Bestandsarten, insbesondere in der Qualitätsprüfung, zeigt Verzögerungen auf, die die Verfügbarkeit von Waren für Verkauf oder Produktion beeinträchtigen. Warum das wichtig ist Es erfasst die Verwendbarkeit des Bestands und ist entscheidend, um Verzögerungen bei der Qualitätsprüfung und der Bestandsverfügbarkeit zu analysieren. Woher beziehen Zu finden in der Positionstabelle des Materialbelegs MSEG, Feld INSMK (Bestandsart). Beispiele Frei verwendbarQualitätsprüfungGesperrter Bestand | |||
| Durchlaufzeit der Auftragserfüllung OrderFulfillmentCycleTime | Die Gesamtdauer vom Beginn der Kommissionierung bis zur Buchung des Warenausgangs für die Lieferung. | ||
| Beschreibung Diese berechnete Kennzahl misst die Zeit zwischen den Aktivitäten „Kommissionierung gestartet“ und „Warenausgang für Lieferung gebucht“. Sie gibt an, wie lange das Lager ab Prozessbeginn benötigt, um einen Kundenauftrag vorzubereiten und zu versenden. Dieses Attribut misst direkt die KPI „Durchlaufzeit der Auftragserfüllung“. Die Auswertung zeigt, wie schnell ein Unternehmen auf die Kundennachfrage reagiert. Sie können die Dauer nach Produkt, Lager oder Kunde aufschlüsseln, um Verzögerungen bei Kommissionierung, Verpackung und Versand zu erkennen. Diese wirken sich unmittelbar auf die Kundenzufriedenheit und die logistische Effizienz aus. Warum das wichtig ist Sie misst Geschwindigkeit und Effizienz des Warenausgangs im Lager, die entscheidend zur Kundenzufriedenheit beitragen. Woher beziehen Dieses berechnete Attribut ergibt sich aus der Zeitdifferenz zwischen den Ereignissen „Kommissionierung gestartet“ und „Warenausgang für Lieferung gebucht“ je Charge. Beispiele 7200144003600 | |||
| Lagerplatz StorageBin | Die kleinste Lagereinheit, an der sich Materialien in einem Lager physisch befinden. | ||
| Beschreibung Ein Lagerplatz bezeichnet eine bestimmte Position im Lager, zum Beispiel einen Regalplatz. Diese Detailtiefe wird üblicherweise verwendet, wenn SAP Warehouse Management (WM) oder Extended Warehouse Management (EWM) implementiert ist. Für das Dashboard „Auslastung der Lagerplätze“ ist dieses Attribut entscheidend. Es zeigt, wie effizient die Lagerfläche genutzt wird, macht mögliche Engpässe sichtbar und kann ineffiziente Einlagerungs- oder Kommissionierwege aufdecken. Die Analyse von Bewegungen zwischen Lagerplätzen hilft, die Lageraufteilung zu verbessern und die Laufwege der Mitarbeitenden zu verkürzen. Warum das wichtig ist Es liefert die genauesten Standortdaten und ermöglicht die Analyse der Flächennutzung und der betrieblichen Effizienz im Lager. Woher beziehen Bei Verwendung von WM finden Sie diese Angabe in Tabellen zu Transportaufträgen wie LTAK/LTAP. Bei Bestandsbelegen kann sie in MSEG-LGPBE stehen. Beachten Sie die SAP-S/4HANA-Dokumentation. Beispiele A-01-01-AB-05-10-CRCV-AREA-01 | |||
| Letzte Datenaktualisierung LastDataUpdate | Timestamp der letzten Aktualisierung dieses Datensatzes aus dem Quellsystem. | ||
| Beschreibung Dieses Attribut erfasst Datum und Uhrzeit der letzten Datenextraktion oder Aktualisierung aus dem Quellsystem. Als wichtige Metadaten gibt es Auskunft darüber, wie aktuell die analysierten Informationen sind. So können Benutzer einschätzen, ob sie nahezu aktuelle Daten oder einen älteren Datenstand betrachten. Für relevante und fundierte Schlussfolgerungen ist es wichtig zu wissen, wie aktuell die Daten sind. Dieses Feld hilft Analysten und Fachanwendern, den Datenstand zu prüfen. Häufig wird es in Dashboards angezeigt, um die dargestellten Erkenntnisse einzuordnen. Warum das wichtig ist Das Attribut zeigt, wie aktuell die Daten sind, und hilft sicherzustellen, dass Analysen auf dem neuesten Stand beruhen. Woher beziehen Dieser Timestamp wird während des ETL-Prozesses (Extraktion, Transformation und Laden) erzeugt und hinzugefügt. Beispiele 2024-05-21T08:00:00Z2024-05-20T08:00:00Z | |||
| Materialbelegnummer MaterialDocumentNumber | Die eindeutige Nummer des Materialbelegs, der die Warenbewegung dokumentiert. | ||
| Beschreibung Wenn in SAP eine Warenbewegung gebucht wird, erstellt das System als Nachweis einen Materialbeleg. Dieses Attribut ist die eindeutige Kennung des Belegs. Ein einzelner Materialbeleg kann mehrere Positionen oder Aktivitäten enthalten. Im Process Mining ist die Materialbelegnummer eine wichtige Transaktionskennung, mit der sich gemeinsam gebuchte Ereignisse gruppieren lassen. Sie ist außerdem für Audits und für den Wechsel von der Prozessanalyse ins Quellsystem wichtig, um einzelne Transaktionen genauer zu untersuchen. Warum das wichtig ist Sie dient als Transaktionsschlüssel für Audits und ermöglicht es, gemeinsam ausgeführte Aktivitäten zu gruppieren. Woher beziehen Zu finden in den Tabellen MKPF (Kopf) und MSEG (Position), Feld MBLNR (Materialbelegnummer). Beispiele 490000123450000056784900002345 | |||
| Mengeneinheit UnitOfMeasure | Die Einheit, in der die Materialmenge gemessen wird, zum Beispiel Stück oder Kilogramm. | ||
| Beschreibung Die Mengeneinheit gibt an, in welcher Einheit das Attribut „Menge“ erfasst wird. Häufige Beispiele sind Stück (PC), Kilogramm (KG), Liter (L) oder Kartons (BOX). Sie liefert den notwendigen Kontext zur Mengenangabe. Auch wenn dieses Attribut oft nur als Beschreibung dient, ist es wichtig für die Datenqualität und für Auswertungen, bei denen unterschiedliche Einheiten auf einen gemeinsamen Standard umgerechnet werden müssen. Um beispielsweise den Gesamtwert verschrotteter Bestände korrekt zu berechnen, müssen Mengen in verschiedenen Einheiten berücksichtigt und gegebenenfalls umgerechnet werden. Warum das wichtig ist Es liefert den notwendigen Kontext zum Attribut „Menge“ und stellt sicher, dass Materialmengen korrekt interpretiert werden. Woher beziehen Zu finden in der Positionstabelle des Materialbelegs MSEG, Feld MEINS (Basismengeneinheit). Beispiele PCKGEAM | |||
| Quellsystem SourceSystem | Gibt an, aus welchem Quellsystem die Daten extrahiert wurden. | ||
| Beschreibung Dieses Attribut bezeichnet das führende System, aus dem die Daten zur Bestandsverwaltung stammen. In diesem Fall ist es die jeweilige SAP-S/4HANA-Instanz. Diese Information ist wichtig, wenn Daten aus mehreren ERP-Systemen, Lagerverwaltungssystemen oder älteren Plattformen zusammengeführt werden. Bei einer Analyse mit nur einem System mag das Attribut unveränderlich erscheinen. Werden jedoch Daten aus verschiedenen Quellen zusammengeführt, ist es unverzichtbar für eine umfassende Prozesssicht. Es unterstützt die Data Governance, die Fehlersuche bei der Datenextraktion und eine nachvollziehbare Datenherkunft. Warum das wichtig ist Das Attribut gibt Auskunft über die Herkunft der Daten und ist wichtig für die Data Governance und die systemübergreifende Analyse. Woher beziehen In der Regel ein fest codierter Wert, der während der Datentransformation vergeben wird, um die jeweilige SAP-S/4HANA-Instanz zu kennzeichnen. Beispiele S4H_PROD_100SAP_S4_FINANCES4HANA_GLOBAL | |||
| Verfallsdatum ExpirationDate | Das Datum, an dem eine Materialcharge abläuft und nicht mehr verwendet werden kann. | ||
| Beschreibung Das Mindesthaltbarkeitsdatum (SLED) ist ein wichtiges Stammdatum für verderbliche oder zeitkritische Waren. Es wird auf Chargenebene verwaltet und legt fest, ab wann ein Produkt nicht mehr verkauft oder verbraucht werden darf. Dieses Attribut ist für das Dashboard „Analyse veralteter und abgelaufener Bestände“ unverzichtbar. Durch die Auswertung von Aktivitäten im Zusammenhang mit dem Verfallsdatum können Unternehmen Chargen erkennen, bei denen ein Ablauf droht, und rechtzeitig Maßnahmen ergreifen. Außerdem lässt sich damit die Wirksamkeit von Lagerstrategien wie First-Expired-First-Out (FEFO) messen und der Verlust durch die Verschrottung abgelaufener Bestände beziffern. Warum das wichtig ist Es ermöglicht die Analyse veralteter und abgelaufener Bestände und hilft, Verschwendung und finanzielle Verluste zu verringern. Woher beziehen Zu finden in den Chargenstammdatentabellen MCH1 oder MCHA, Feld VFDAT (Mindesthaltbarkeitsdatum). Beispiele 2024-12-312025-06-302024-09-01 | |||
Aktivitäten der Bestandsverwaltung
| Aktivität | Beschreibung | ||
|---|---|---|---|
| Bestand aus Qualitätsprüfung freigegeben | Zeigt an, dass eine Charge die Qualitätsprüfung bestanden hat und nun verwendet oder eingelagert werden kann. Dies wird als explizite Umbuchung aus dem Qualitätsprüfbestand in eine andere Bestandsart erfasst, zum Beispiel in den frei verwendbaren Bestand. | ||
| Warum das wichtig ist Dieser Meilenstein markiert den Abschluss der Qualitätsprüfung und gibt den Bestand zur Verwendung frei. Verzögerungen an dieser Stelle können erhebliche Folgeprobleme in der Produktion oder Auftragserfüllung verursachen. Woher beziehen In der Tabelle MATDOC als Umbuchung erfasst. In der Regel anhand der Bewegungsart (BWART) 321 erkennbar, mit der Bestand aus der „Qualitätsprüfung“ in den „frei verwendbaren“ Bestand umgebucht wird. Erfassung Aus Materialbelegen in MATDOC mit der Bewegungsart 321 übernommen. Ereignistyp explicit | |||
| Bestand verschrottet | Markiert die endgültige Ausbuchung einer Bestandscharge, die dauerhaft aus den Bestandsaufzeichnungen entfernt wird. Dies betrifft in der Regel abgelaufene, beschädigte oder veraltete Bestände. | ||
| Warum das wichtig ist Dieses End-Event steht für einen finanziellen Verlust. Die Analyse von Verschrottungen hilft, Probleme mit der Lagerdauer, den Handhabungsabläufen oder der Bedarfsplanung aufzudecken. Woher beziehen Erfasst in der Tabelle MATDOC. Anhand von Bewegungsarten (BWART) für Verschrottungen erkennbar, zum Beispiel 551 (aus dem frei verwendbaren Bestand), 553 (aus dem Qualitätsprüfbestand) oder 555 (aus dem gesperrten Bestand). Erfassung Aus Materialbelegen in MATDOC mit Bewegungsarten für Verschrottungen übernommen (z. B. 551). Ereignistyp explicit | |||
| Bestandskorrektur gebucht | Erfasst eine Änderung der Bestandsmenge aufgrund einer Inventur oder einer anderen Abweichung. Mit diesem Ereignis wird der Buchbestand ausdrücklich an den gezählten Bestand angepasst. | ||
| Warum das wichtig ist Diese Korrekturen sind entscheidend für die Bestandsgenauigkeit. Häufige Korrekturen weisen auf grundlegende Probleme bei der Bestandsverwaltung, der Sicherheit oder der Dateneingabe hin. Woher beziehen Erfasst in der Tabelle MATDOC. Anhand von Bewegungsarten für die Inventur (BWART) erkennbar, zum Beispiel 701 (Bestandszugang) oder 702 (Bestandsabgang). Erfassung Aus Materialbelegen in MATDOC mit Bewegungsarten für Inventurkorrekturen übernommen (z. B. 701, 702). Ereignistyp explicit | |||
| Einlagerungsumbuchung gebucht | Erfasst die physische Umlagerung der Charge vom Wareneingangs- oder Bereitstellungsbereich an ihren endgültigen Lagerplatz. In SAP wird dies als Materialbeleg für eine Umbuchung erfasst. | ||
| Warum das wichtig ist Damit ist der Wareneingangsprozess abgeschlossen. Die Dauer dieser Aktivität, die Einlagerungszeit, ist eine wichtige Kennzahl für die Lagereffizienz. Woher beziehen In der Tabelle MATDOC als Umbuchung erfasst, häufig zwischen Lagerorten (z. B. Bewegungsart 311). Welche Bewegungsart verwendet wird, hängt von der Lagerstruktur ab. Erfassung Ermittelt anhand von Umbuchungsbelegen in MATDOC, mit denen Bestand von einem Zwischen- oder Wareneingangslagerort an einen endgültigen Lagerort umgelagert wird. Ereignistyp explicit | |||
| Warenausgang für Produktion gebucht | Erfasst den Verbrauch einer Bestandscharge durch einen Fertigungs- oder Prozessauftrag. Diese Transaktion verringert den Bestand und ordnet die Materialkosten dem Fertigungsauftrag zu. | ||
| Warum das wichtig ist Dies ist ein zentrales Verbrauchsereignis und markiert das Ende des Bestandslebenszyklus für Komponenten. Es ist entscheidend, um die Materialverfügbarkeit für die Produktion und Verbrauchsmuster zu analysieren. Woher beziehen Erfasst in der Tabelle MATDOC. Anhand von Bewegungsarten (BWART) für den Warenausgang zu einem Auftrag erkennbar, zum Beispiel 261. Erfassung Aus Materialbelegen in MATDOC mit der Bewegungsart 261 übernommen. Ereignistyp explicit | |||
| Warenausgang zur Lieferung gebucht | Erfasst den letzten Schritt des Warenausgangsprozesses, bei dem die Charge an einen Kunden oder Frachtführer übergeht. Diese explizite Transaktion verringert den Bestand und wird in der Buchhaltung erfasst. | ||
| Warum das wichtig ist Dies ist ein wichtiges Abschlussereignis der Auftragserfüllung. Es ist entscheidend, um die pünktliche Lieferung zu messen und die Durchlaufzeit der Auftragserfüllung zu berechnen. Woher beziehen Erfasst in der Tabelle MATDOC. Anhand der Bewegungsart (BWART) für den Warenausgang zu einer Kundenauftragslieferung erkennbar, in der Regel 601. Erfassung Aus Materialbelegen in MATDOC mit der Bewegungsart 601 übernommen. Ereignistyp explicit | |||
| Wareneingang gebucht | Erfasst den Eingang einer Bestandscharge im Lager, in der Regel von einem Lieferanten oder aus der Produktion. Dieses Ereignis wird in SAP S/4HANA ausdrücklich erfasst, wenn beim Wareneingang ein Materialbeleg erstellt wird. | ||
| Warum das wichtig ist Dies ist das zentrale Start-Event im Lebenszyklus des Bestands. Die Zeitspanne von dieser Aktivität bis zu nachfolgenden Schritten wie der Einlagerung ist entscheidend, um die Effizienz der Warenannahme zu messen. Woher beziehen Erfasst in der Tabelle MATDOC. Die Buchung wird anhand bestimmter Bewegungsarten (BWART) identifiziert, zum Beispiel 101 für Wareneingänge zu einer Bestellung oder 103 für den Wareneingang in gesperrten Bestand. Erfassung Aus Materialbelegen in MATDOC mit den entsprechenden Wareneingangsbewegungsarten übernommen. Ereignistyp explicit | |||
| Bestand zur Qualitätsprüfung gebucht | Erfasst die Umbuchung einer eingegangenen Charge in den Bestand zur Qualitätsprüfung. Bis zur Freigabe ist sie nicht verwendbar. In SAP wird dies als explizite Transaktion erfasst, die die Bestandsart der Charge ändert. | ||
| Warum das wichtig ist Diese Aktivität startet den Qualitätsprüfungsprozess. Die Zeit bis zur Freigabe aus der Qualitätsprüfung ist eine wichtige Kennzahl, um qualitätsbedingte Verzögerungen zu verstehen. Woher beziehen Erfasst in der Tabelle MATDOC. Dabei kann es sich um eine Wareneingangsbewegung (z. B. 101) mit der Bestandsart (INSMK) „Q“ (Qualitätsprüfung) oder um eine Umbuchung (z. B. 322) handeln. Erfassung Ermittelt anhand von Materialbelegen in MATDOC, mit denen Bestand der Bestandsart „Qualitätsprüfung“ zugeordnet wird. Ereignistyp explicit | |||
| Bestandsstatus auf frei verwendbar geändert | Erfasst eine Statusänderung der Charge, durch die sie aus einer Sperre oder Qualitätssperre freigegeben und wieder verwendbar wird. Dies wird als explizite Umbuchung erfasst. | ||
| Warum das wichtig ist Diese Aktivität markiert die Aufhebung einer Bestandssperre. Die Dauer, die Bestand gesperrt bleibt, lässt sich analysieren, um die Abläufe zur Klärung von Sperren zu verbessern. Woher beziehen In der Tabelle MATDOC als Umbuchung erfasst. Mit der Bewegungsart (BWART) 344 wird Bestand aus „gesperrt“ in „frei verwendbar“ umgebucht. Erfassung Anhand von Materialbelegen in MATDOC mit der Bewegungsart 344 ermittelt. Ereignistyp explicit | |||
| Bestandsstatus auf gesperrt geändert | Erfasst eine Statusänderung der Charge, durch die sie für den Warenausgang gesperrt wird, etwa wegen einer Beschädigung, einer Sperranforderung oder aus anderen Gründen. In SAP wird dies als explizite Umbuchung erfasst. | ||
| Warum das wichtig ist Macht Unterbrechungen bei der Bestandsverfügbarkeit sichtbar. Häufige Sperrungen können auf Probleme bei der Handhabung, den Lagerbedingungen oder der Lieferantenqualität hinweisen. Woher beziehen In der Tabelle MATDOC als Umbuchung erfasst. Mit der Bewegungsart (BWART) 344 wird Bestand üblicherweise von „gesperrt“ in „frei verwendbar“ umgebucht, mit 343 in die Gegenrichtung. Diese Aktivität bezieht sich auf 343. Erfassung Anhand von Materialbelegen in MATDOC mit der Bewegungsart 343 ermittelt. Ereignistyp explicit | |||
| Chargenstatus geändert | Erfasst eine Änderung im Chargenstammsatz, zum Beispiel den Wechsel des Status von „frei verwendbar“ zu „eingeschränkt“. Dabei handelt es sich nicht um eine Materialbewegung, sondern um eine protokollierte Änderung der Stammdaten. | ||
| Warum das wichtig ist Änderungen des Chargenstatus wirken sich unmittelbar darauf aus, ob die Charge im Vertrieb oder in der Produktion verwendet werden kann. Ihre Analyse kann Probleme mit ablaufendem Bestand oder der Qualitätskontrolle aufdecken, auch wenn keine physische Bewegung stattfindet. Woher beziehen Abgeleitet aus Änderungsprotokollen der Chargenstammdatentabellen (MCH1, MCHA). Die Tabellen CDHDR und CDPOS erfassen Änderungen am Statusfeld der Charge (MCH1-ZUSTD). Erfassung Aus Änderungsbelegen in CDHDR/CDPOS für das Statusfeld im Chargenstammsatz (MCH1-ZUSTD) abgeleitet. Ereignistyp inferred | |||
| Interne Bestandsumbuchung gebucht | Erfasst die Umlagerung einer Bestandscharge zwischen verschiedenen Lagerorten oder Lagerplätzen innerhalb desselben Werks. Dabei handelt es sich um eine explizite Transaktion, die einen Materialbeleg erzeugt. | ||
| Warum das wichtig ist Die Analyse interner Umlagerungen zeigt, wie effizient die Lagerabläufe sind, macht unnötige Bewegungen sichtbar und ermöglicht die Messung der Wiederbeschaffungszeit zwischen Lagerorten. Woher beziehen Erfasst in der Tabelle MATDOC. Häufig anhand der Bewegungsart (BWART) 311 für Umlagerungen zwischen Lagerorten erkennbar. Erfassung Aus Materialbelegen in MATDOC mit Bewegungsarten für interne Bestandsbewegungen übernommen (z. B. 311). Ereignistyp explicit | |||
| Kommissionierung gestartet | Markiert den Beginn der Auftragserfüllung. Dabei wird ein Lagerauftrag erstellt, um eine Charge aus ihrem Lagerplatz zu entnehmen. Erfasst wird dies häufig bei der Erstellung eines Transportauftrags oder einer Lageraufgabe. | ||
| Warum das wichtig ist Diese Aktivität löst die Kommissionierung aus. Die Zeitspanne von diesem Ereignis bis zum Abschluss der Kommissionierung zeigt, wie effizient die Lagerbeschäftigten arbeiten und wo Verzögerungen auftreten. Woher beziehen In der Regel nicht in MATDOC erfasst. In Systemen mit Warehouse Management (WM/EWM) wird der Vorgang anhand des Erstellungszeitpunkts eines Transportauftrags (Tabelle LTAK) oder einer Lageraufgabe abgeleitet. Erfassung Abgeleitet aus dem Erstellungsdatensatz eines Transportauftrags (in WM) oder einer Lageraufgabe (in EWM), der mit der Materialcharge verknüpft ist. Ereignistyp inferred | |||
| Kundenretoure eingegangen | Erfasst die Rücksendung einer zuvor ausgelieferten Charge vom Kunden ins Lager. Diese explizite Transaktion erhöht den Bestand. | ||
| Warum das wichtig ist Die Analyse von Retouren ist wichtig, um Qualitätsprobleme und Unzufriedenheit bei Kunden zu verstehen. Auch die Bearbeitung und weitere Behandlung von Retouren kann ineffizient sein. Woher beziehen Erfasst in der Tabelle MATDOC. Anhand von Bewegungsarten (BWART) für Kundenretouren erkennbar, zum Beispiel 651 (in den frei verwendbaren Bestand) oder 653 (in den Qualitätsprüfbestand). Erfassung Aus Materialbelegen in MATDOC mit Bewegungsarten für Kundenretouren übernommen (z. B. 651, 653). Ereignistyp explicit | |||
Anleitungen zur Datenextraktion
Schritte
- Systemzugriff einrichten: Stellen Sie sicher, dass Sie über einen Benutzer mit den erforderlichen Berechtigungen zum Abfragen von Core Data Services (CDS)-Views im SAP-S/4HANA-System verfügen. Diese Berechtigungen muss in der Regel eine Systemadministration erteilen.
- SQL-Client auswählen: Wählen Sie ein SQL-Client-Tool, das eine Verbindung zur SAP-HANA-Datenbank herstellen kann. Gängige Optionen sind SAP HANA Studio, SAP HANA Database Explorer und Drittanbieter-Tools wie DBeaver.
- Datenbankverbindung konfigurieren: Richten Sie in Ihrem SQL-Client eine neue Datenbankverbindung ein. Sie benötigen den Hostnamen und die Portnummer der HANA-Datenbank (in der Regel 3<instance_number>15) sowie Ihre Datenbank-Zugangsdaten.
- SQL-Abfrage vorbereiten: Kopieren Sie die vollständige SQL-Abfrage aus dem Abschnitt „query“ dieses Dokuments in den Editor Ihres SQL-Clients.
- Abfrageparameter festlegen: Suchen Sie in der Abfrage nach Platzhalterwerten. Ersetzen Sie
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'durch den gewünschten Zeitraum, zum BeispielBETWEEN '20230101' AND '20230630'. Passen Sie außerdem Filter für Unternehmen oder Werke wieMaterialDocumentItem.Plant IN ('Plant1', 'Plant2')an Ihre Organisationsstruktur an. - Abfrage ausführen: Führen Sie die angepasste SQL-Abfrage für die S/4HANA-Datenbank aus. Die Ausführungszeit hängt vom Zeitraum und vom Umfang der Bestandsdaten in Ihrem System ab.
- Daten prüfen: Prüfen Sie nach Abschluss der Abfrage die Ergebnisse in Ihrem SQL-Client auf Richtigkeit und Vollständigkeit. Achten Sie darauf, dass verschiedene Aktivitäten enthalten und wichtige Attribute befüllt sind.
- Event Log exportieren: Exportieren Sie das gesamte Ergebnis aus Ihrem SQL-Client in eine CSV-Datei. Verwenden Sie beim Export UTF-8, um Zeichenfehler zu vermeiden.
- Upload vorbereiten: Benennen Sie die Spalten in der CSV-Datei genau wie in der Abfrage, zum Beispiel
InventoryBatchLot,ActivityName,EventTimeund weitere. Anschließend können Sie die Datei in ein Process-Mining-Tool hochladen.
Konfiguration
- Berechtigungen: Der ausführende Benutzer benötigt
SELECT-Berechtigungen für die folgenden CDS-Views:I_MaterialDocumentItem,I_BatchChangeDocumentundI_WarehouseTask. Außerdem ist Zugriff auf das zugrunde liegende Datenbankschema erforderlich, in dem sich diese Views befinden. - Filter für den Zeitraum: Filtern Sie unbedingt nach einem Zeitraum über die Felder
PostingDate,ChangeDocumentCreationDateoderWarehouseTaskCreationDate. Für eine Analyse eignet sich meist ein Zeitraum von 3 bis 12 Monaten. Abfragen über mehrere Jahre können erhebliche Leistungseinbußen verursachen. - Organisationsfilter: Ergänzen Sie
WHERE-Klauseln fürPlantoderCompanyCode, um die Leistung zu verbessern und die Analyse gezielt einzugrenzen. So sinkt das Datenvolumen und die Extraktion konzentriert sich auf relevante Unternehmensbereiche. - Datenvolumen: Bestandsverwaltungssysteme erzeugen große Datenmengen. Ein weiter Zeitraum kann Millionen von Zeilen umfassen und dadurch sowohl das Quellsystem während der Extraktion als auch die Leistung Ihres Client-Tools beeinträchtigen.
- Extended Warehouse Management (EWM): Die Aktivität „Kommissionierung gestartet“ basiert auf der CDS-View
I_WarehouseTask. Diese View enthält nur dann Daten, wenn Sie SAP Extended Warehouse Management verwenden. Wenn Ihr Unternehmen das ältere Warehouse-Management-Modul (WM) oder nur Inventory Management (IM) einsetzt, wird diese Aktivität nicht extrahiert.
a Beispielabfrage sql
SELECT
mat_doc.Batch AS "InventoryBatchLot",
CASE
WHEN mat_doc.MovementType = '101' AND mat_doc.InventoryStockType = '2' THEN 'Stock Posted to Quality Inspection'
WHEN mat_doc.MovementType = '101' THEN 'Goods Receipt Posted'
WHEN mat_doc.MovementType = '321' THEN 'Quality Inspection Stock Released'
WHEN mat_doc.MovementType = '311' THEN 'Internal Stock Transfer Posted'
WHEN mat_doc.MovementType = '344' THEN 'Stock Status Changed to Blocked'
WHEN mat_doc.MovementType IN ('343', '322') THEN 'Stock Status Changed to Unrestricted'
WHEN mat_doc.MovementType IN ('701', '702') THEN 'Inventory Adjustment Posted'
WHEN mat_doc.MovementType = '601' THEN 'Goods Issue for Delivery Posted'
WHEN mat_doc.MovementType = '261' THEN 'Goods Issue for Production Posted'
WHEN mat_doc.MovementType IN ('651', '653') THEN 'Sales Return Received'
WHEN mat_doc.MovementType = '551' THEN 'Stock Scrapped'
WHEN mat_doc.MovementType = '313' THEN 'Put-Away Transfer Posted' -- Example for two-step transfers
ELSE 'Unknown Material Movement'
END AS "ActivityName",
TO_TIMESTAMP(mat_doc.PostingDate || LPAD(mat_doc.CreationTime, 6, '0'), 'YYYYMMDDHH24MISS') AS "EventTime",
mat_doc.Material AS "MaterialNumber",
mat_doc.CreatedByUser AS "UserName",
mat_doc.MovementType AS "MovementType",
mat_doc.Plant AS "Plant",
mat_doc.StorageLocation AS "StorageLocation",
mat_doc.QuantityInEntryUnit AS "Quantity",
mat_doc.ReasonForMovement AS "MovementReasonCode"
FROM
I_MaterialDocumentItem AS mat_doc
WHERE
mat_doc.Batch IS NOT NULL AND mat_doc.Batch <> ''
AND mat_doc.PostingDate BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
-- AND mat_doc.Plant IN ('Plant1', 'Plant2') -- Placeholder: Add filters for relevant plants
UNION ALL
SELECT
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 3) AS "InventoryBatchLot",
'Batch Status Changed' AS "ActivityName",
change_doc.ChangeDocumentCreationDateTime AS "EventTime",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 1) AS "MaterialNumber",
change_doc.ChangedByUser AS "UserName",
NULL AS "MovementType",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 2) AS "Plant",
NULL AS "StorageLocation",
NULL AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_BatchChangeDocument AS change_doc
WHERE
change_doc.ChangeDocumentTable = 'MCHA' AND change_doc.ChangeDocumentTableFieldName = 'ZUSTD'
AND TO_VARCHAR(change_doc.ChangeDocumentCreationDate) BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
UNION ALL
SELECT
wh_task.Batch AS "InventoryBatchLot",
'Picking Initiated' AS "ActivityName",
wh_task.WarehouseTaskCreationDateTime AS "EventTime",
wh_task.Product AS "MaterialNumber",
wh_task.CreatedByUser AS "UserName",
NULL AS "MovementType",
wh_task.Plant AS "Plant",
wh_task.SourceStorageLocation AS "StorageLocation",
wh_task.TargetQuantity AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_WarehouseTask AS wh_task
WHERE
wh_task.Batch IS NOT NULL AND wh_task.Batch <> ''
AND wh_task.WarehouseProcessType IN ('P210', 'P220') -- Placeholder: Adjust process types based on your picking configuration
AND TO_VARCHAR(wh_task.WarehouseTaskCreationDate) BETWEEN '20230101' AND '20231231'; -- Placeholder: Set your date range Schritte
- Vergewissern Sie sich, dass der direkte Zugriff auf SAP HANA per SQL genehmigt ist und der Extraktionsbenutzer Leseberechtigungen für MATDOC sowie die erforderlichen Chargenstammdatentabellen hat. Prüfen Sie, wem das physische Schema gehört, und ersetzen Sie [Your SAP HANA schema] durch den genehmigten Schemanamen.
- Prüfen Sie, welche Felder in MATDOC und den Chargentabellen der verwendeten SAP-S/4HANA-Version verfügbar sind. Die folgende Abfrage verwendet häufig verfügbare MATDOC- und MCHA-Felder. Verfügbarkeit und Bezeichnungen können jedoch je nach Version, Bereitstellung und aktiviertem Umfang variieren. Ersetzen Sie alle mit [Configure based on your system] gekennzeichneten Felder vor der Ausführung.
- Legen Sie den Extraktionszeitraum fest, indem Sie [Start timestamp] und [End timestamp] durch ISO-Timestamp-Werte ersetzen. Beginnen Sie mit drei bis sechs Monaten und verlängern Sie den Zeitraum erst, nachdem Sie Datenvolumen und Leistung geprüft haben.
- Führen Sie die Abfrage in einem genehmigten SQL-Client, im SAP HANA Database Explorer oder in einem gleichwertigen autorisierten Datenbank-Tool aus. Begrenzen Sie das Ergebnis auf die benötigten Buchungskreise, Werke, Belegarten oder Bewegungsarten, indem Sie die entsprechenden Filterplatzhalter ersetzen.
- Prüfen Sie die Zuordnung der Bewegungsarten im Aktivitäts-CTE. Die Bedeutung der Bewegungsarten hängt von der System- und Geschäftskonfiguration ab. Ersetzen Sie die Beispielwerte durch die im Zielsystem konfigurierten Bewegungsarten für Wareneingang, Qualitätsprüfung, Freigabe, Einlagerung, interne Umlagerung, gesperrten Bestand, frei verwendbaren Bestand, Bestandskorrektur, Kommissionierung, Warenausgang, Produktionsentnahme, Kundenretoure und Verschrottung.
- Prüfen Sie, ob jede Ausgabezeile
InventoryBatchLot,ActivityNameundEventTimeenthält. Stellen Sie sicher, dass die Chargenkennung als ProcessMind-Case-ID ausreichend stabil ist. Wenn Material, Werk oder Lagerort erforderlich sind, um identische Chargenwerte in verschiedenen Organisationseinheiten zu unterscheiden, verwenden Sie statt des Chargenwerts allein die konfigurierte zusammengesetzte Case-ID. - Prüfen Sie die Ereignisreihenfolge, doppelte Zeilen, Stornobelege, stornierte Belege und die Zeitzonenbehandlung. MATDOC erfasst Belegbuchungen. Daher können Storno- und Stornierungsdatensätze als separate Ereignisse erscheinen, sofern sie nicht ausdrücklich ausgeschlossen oder zugeordnet werden.
- Exportieren Sie das Abfrageergebnis als flache Datei mit einer Zeile je Ereignis und den Spalten
InventoryBatchLot,ActivityName,EventTime,MaterialNumber,UserName,MovementType,Plant,StorageLocation,QuantityundMovementReasonCode. Verwenden Sie für Timestamps ein einheitliches ISO-8601-Format und erhalten Sie führende Nullen in Material-, Chargen-, Werks- und Lagerortwerten. - Laden Sie das resultierende Event Log in ProcessMind hoch und ordnen Sie
InventoryBatchLotals Case-ID,ActivityNameals Aktivität undEventTimeals Ereignis-Timestamp zu. Verlassen Sie sich nicht darauf, dass ProcessMind Aktivitäten ableitet, Datensätze zusammenführt oder fehlende Ereignisse ergänzt.
Konfiguration
- Extraktionsmethode: direkte SQL-Abfrage der Bestands- und Chargendaten in SAP HANA. Die Abfrage liest MATDOC und verbindet die Chargenstammdaten aus MCHA. Ergänzen Sie MCH1 oder eine andere Chargentabelle erst, nachdem Sie die relevanten Felder und die Chargenebene im Zielsystem geprüft haben.
- Zeitraum: Beginnen Sie mit drei bis sechs Monaten. Verwenden Sie für
EventTimedas in MATDOC verfügbare Buchungsdatum und die Buchungszeit des Materialbelegs. Legen Sie für inkrementelle Ladevorgänge ein kontrolliertes Überlappungsfenster fest, damit nachträgliche Buchungen erfasst werden. Entfernen Sie anschließend Duplikate anhand der konfigurierten Beleg- und Positionskennungen. - Erforderliche Filter: Konfigurieren Sie Buchungskreis, Werk, Materialbelegart, Bewegungsart, Vorhandensein einer Charge und Buchungsdatum entsprechend dem Prozessumfang. Prüfen Sie vor dem Ergänzen der Buchungskreis- und Belegartfelder, ob sie in der installierten Version verfügbar sind.
- Aktivitätszuordnung: Die Bedeutung der Bewegungsarten hängt von der Konfiguration ab. Pflegen Sie eine genehmigte Zuordnungstabelle oder ersetzen Sie die Bewegungsartlisten in der Abfrage durch die geschäftlich verwendeten Werte. Behandeln Sie die Beispielwerte nicht als allgemeingültige SAP-Semantik.
- Chargenumfang: Die Abfrage schließt Zeilen ohne Chargenwert aus, da
InventoryBatchLotals Case-ID dient. Wenn die Charge aus einer anderen Quelle abgeleitet werden muss, konfigurieren Sie diese Quelle ausdrücklich vor der Extraktion. - Ereignisgranularität: Jeder passende MATDOC-Posten wird als eigene Ereigniszeile ausgegeben. Die Abfrage leitet weder Kommissionierungen noch Qualitätsentscheidungen, Änderungen des Chargenstatus oder andere Aktivitäten aus späteren Datensätzen ab.
- Änderungen an Chargenstammdaten: Änderungen des Chargenstatus lassen sich nicht zuverlässig allein aus MATDOC ermitteln. Richten Sie für die Aktivität „Chargenstatus geändert“ eine Änderungsbeleg- oder Chargenhistorienquelle ein. Die Abfrage enthält einen Platzhalterzweig, der vor der Ausführung mit einer geprüften Quelle verbunden werden muss.
- Kommissionierung: Der Beginn der Kommissionierung wird in der Regel in den Lagerausführungsdaten und nicht als MATDOC-Buchung erfasst. Richten Sie eine geprüfte Quelle für Lageraufgaben oder Transportaufträge ein und ersetzen Sie den Platzhalterzweig vor der Ausführung.
- Leistung: Filtern Sie nach Buchungs-Timestamp oder Buchungsdatum, Werk, Buchungskreis und relevanten Bewegungsarten. Wählen Sie nur erforderliche Spalten aus, vermeiden Sie uneingeschränkte Abfragen historischer Daten und führen Sie die Extraktion in einem genehmigten Zeitfenster aus. Bei großen MATDOC-Datenmengen empfiehlt sich eine partitionierte oder inkrementelle Extraktion.
- Berechtigungen und Voraussetzungen: Sorgen Sie für genehmigte Datenbankverbindungen, Schemazugriff, Leseberechtigungen, Zugriff auf Bestandsdaten in SAP S/4HANA sowie Zugriff auf alle verwendeten Quellen für Lagerausführung oder Änderungshistorie der beiden Aktivitäten, die nicht aus MATDOC stammen. Prüfen Sie, ob der direkte Datenbankzugriff mit dem SAP-Betriebsmodell und den Supportvorgaben Ihres Unternehmens vereinbar ist.
- Zeitzonen: Prüfen Sie die Zeitzonen der Datenbank und der Anwendung. Konvertieren Sie
EventTimevor dem Upload in ProcessMind einheitlich. - Datenschutz: Wenden Sie die Kontrollen Ihres Unternehmens für Benutzer-IDs, Materialdaten, kundenbezogene Daten und Datenbank-Zugangsdaten an. Hinterlegen Sie keine Zugangsdaten im Abfragetext.
a Beispielabfrage sql
WITH
params AS (
SELECT
TO_TIMESTAMP('[Start timestamp]') AS start_ts,
TO_TIMESTAMP('[End timestamp]') AS end_ts
FROM DUMMY
),
movement_map AS (
SELECT '101' AS movement_type, 'Goods Receipt Posted' AS activity_name FROM DUMMY
UNION ALL SELECT '105', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '107', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '109', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '321', 'Stock Posted to Quality Inspection' FROM DUMMY
UNION ALL SELECT '322', 'Quality Inspection Stock Released' FROM DUMMY
UNION ALL SELECT '343', 'Stock Status Changed to Unrestricted' FROM DUMMY
UNION ALL SELECT '344', 'Stock Status Changed to Blocked' FROM DUMMY
UNION ALL SELECT '311', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '301', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '311', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '701', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '702', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '703', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '704', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '705', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '706', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '601', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '602', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '261', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '262', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '651', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '653', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '654', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '551', 'Stock Scrapped' FROM DUMMY
UNION ALL SELECT '552', 'Stock Scrapped' FROM DUMMY
),
matdoc_events AS (
SELECT
m.MATNR AS MaterialNumber,
m.CHARG AS InventoryBatchLot,
COALESCE(m.BUDAT_MKPF, m.BUDAT) AS EventTime,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(m.BWART AS NVARCHAR(3)) AS MovementType,
m.WERKS AS Plant,
m.LGORT AS StorageLocation,
m.MENGE AS Quantity,
m.GRUND AS MovementReasonCode,
mm.activity_name AS ActivityName,
m.MBLNR AS MaterialDocumentNumber,
m.MJAHR AS MaterialDocumentYear,
m.ZEILE AS MaterialDocumentItem
FROM [Your SAP HANA schema].MATDOC m
INNER JOIN movement_map mm
ON CAST(m.BWART AS NVARCHAR(3)) = mm.movement_type
CROSS JOIN params p
WHERE m.CHARG IS NOT NULL
AND TRIM(m.CHARG) <> ''
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) >= p.start_ts
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) < p.end_ts
AND m.WERKS IN ([Configure based on your system])
),
batch_enriched_events AS (
SELECT
e.InventoryBatchLot,
e.ActivityName,
e.EventTime,
e.MaterialNumber,
e.UserName,
e.MovementType,
e.Plant,
e.StorageLocation,
e.Quantity,
e.MovementReasonCode,
e.MaterialDocumentNumber,
e.MaterialDocumentYear,
e.MaterialDocumentItem,
c.CUOBJ_BM AS BatchObjectNumber
FROM matdoc_events e
LEFT JOIN [Your SAP HANA schema].MCHA c
ON c.MATNR = e.MaterialNumber
AND c.CHARG = e.InventoryBatchLot
AND c.WERKS = e.Plant
),
verified_batch_status_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Batch Status Changed' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
verified_picking_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
all_events AS (
SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM batch_enriched_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_batch_status_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_picking_events
)
SELECT
InventoryBatchLot,
ActivityName,
EventTime,
MaterialNumber,
UserName,
MovementType,
Plant,
StorageLocation,
Quantity,
MovementReasonCode
FROM all_events
WHERE InventoryBatchLot IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY InventoryBatchLot, EventTime, MaterialDocumentYear, MaterialDocumentNumber, MaterialDocumentItem, ActivityName; Schritte
- ABAP-Editor öffnen: Melden Sie sich bei Ihrem SAP S/4HANA-System an. Öffnen Sie den ABAP-Editor über den Transaktionscode
SE38. - Neues Programm anlegen: Geben Sie im Feld „Programm“ einen Namen für das neue Programm ein, zum Beispiel
Z_PM_INVENTORY_EXTRACT, und klicken Sie auf „Anlegen“. Tragen Sie einen aussagekräftigen Titel ein, wählen Sie als „Typ“ „Ausführbares Programm“ und speichern Sie das Programm in einem Paket. - Programmparameter festlegen: Definieren Sie im Programmeditor den Selektionsbildschirm, der als Benutzeroberfläche für die Extraktion dient. Dort können Benutzer Parameter wie den Datumsbereich und das Werk für die Datenextraktion angeben.
- Extraktionslogik implementieren: Kopieren Sie den vollständigen ABAP-Code aus dem Abschnitt „Query“ und fügen Sie ihn in den ABAP-Editor ein. Der Code wählt Daten zu allen 14 erforderlichen Bestandsaktivitäten aus verschiedenen SAP-Tabellen aus.
- Kernlogik nachvollziehen: Das Programm wählt für jede einzelne Bestandsaktivität Daten aus den jeweiligen Quelltabellen aus, etwa aus
MKPFundMSEGfür Materialbewegungen oder ausCDHDRundCDPOSfür Änderungen an Stammdaten. Anschließend werden die einzelnen Auswahlen mitUNION ALLin einer internen Tabelle zusammengeführt, die das Event Log abbildet. - Dateiausgabe konfigurieren: Im letzten Teil des Codes werden die zusammengeführten Daten aus der internen Tabelle in eine Datei geschrieben. Dazu erstellt die Anweisung
OPEN DATASETeine Datei auf dem SAP-Anwendungsserver. Geben Sie einen gültigen Serverpfad an, für den der SAP-Systembenutzer Schreibberechtigungen hat. - Programm ausführen: Speichern und aktivieren Sie das ABAP-Programm (Strg+F3). Drücken Sie F8, um es auszuführen. Geben Sie auf dem Selektionsbildschirm den gewünschten Datumsbereich und weitere relevante Filter ein, etwa Werk oder Buchungskreis.
- Als Hintergrundjob ausführen: Bei großen Datenmengen sollten Sie das Programm unbedingt als Hintergrundjob ausführen, um Zeitüberschreitungen der Sitzung zu vermeiden. Wählen Sie auf dem Ausführungsbildschirm (F8) im Menü
Programm -> Im Hintergrund ausführen. Planen Sie den Job für eine Zeit mit geringer Systemauslastung ein. - Ausgabedatei abrufen: Suchen Sie nach Abschluss des Jobs die Ausgabedatei auf dem SAP-Anwendungsserver. Mit dem Transaktionscode
AL11können Sie die Serververzeichnisse durchsuchen und die Datei finden. Verwenden Sie die TransaktionCG3Y, um die Datei vom Anwendungsserver auf Ihren lokalen Computer herunterzuladen. - Upload vorbereiten: Öffnen Sie die heruntergeladene Datei in einem Texteditor oder einer Tabellenkalkulation. Stellen Sie sicher, dass sie als CSV-Datei mit Kopfzeile formatiert ist, Kommas als Trennzeichen und doppelte Anführungszeichen als Textbegrenzungszeichen verwendet. Prüfen Sie vor dem Upload in das Process-Mining-Tool, ob die Spaltennamen den Anforderungen entsprechen.
Konfiguration
- Buchungsdatumsbereich: Dies ist der wichtigste Parameter. Wir empfehlen, die Daten in überschaubaren Zeiträumen zu extrahieren, zum Beispiel jeweils für 3 bis 6 Monate. So stellen Sie eine gute Leistung sicher und vermeiden Zeitüberschreitungen des Systems.
- Werksfilter: Filtern Sie möglichst nach einem oder mehreren bestimmten Werken (
WERKS). Eine Extraktion für alle Werke gleichzeitig kann sehr ressourcenintensiv sein. - Buchungskreisfilter: Sie können optional nach Buchungskreis (
BUKRS) filtern, um den Datenumfang weiter einzugrenzen, wenn Ihre Organisation mehrere Buchungskreise im selben System verwendet. - Dateipfad auf dem Anwendungsserver: Das ABAP-Programm benötigt einen vordefinierten, gültigen Verzeichnispfad auf dem SAP-Anwendungsserver. Stellen Sie sicher, dass der SAP-Systembenutzer (
SY-UNAME) auf Betriebssystemebene die erforderlichen Schreibberechtigungen für dieses Verzeichnis hat. - Berechtigungen: Der Benutzer, der die Extraktion ausführt, benötigt Berechtigungen für die Transaktion
SE38(zum Anlegen und Ausführen des Programms), Anzeigezugriff auf die TabellenMKPF,MSEG,MCH1,CDHDR,CDPOS,LTAKundLTAPsowie die Berechtigung, Hintergrundjobs einzuplanen (SM36/SM37).
a Beispielabfrage abap
REPORT Z_PM_INVENTORY_EXTRACT.
" ====================================================================
" SELECTION SCREEN
" ====================================================================
SELECT-OPTIONS: s_budat FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: s_werks FOR mseg-werks.
PARAMETERS: p_fpath TYPE string DEFAULT '/usr/sap/trans/tmp/inventory_log.csv' OBLIGATORY.
" ====================================================================
" DATA STRUCTURES
" ====================================================================
TYPES: BEGIN OF ty_event_log,
InventoryBatchLot TYPE charg,
ActivityName TYPE string,
EventTime TYPE string,
MaterialNumber TYPE matnr,
UserName TYPE xubname,
MovementType TYPE bwart,
Plant TYPE werks_d,
StorageLocation TYPE lgort_d,
Quantity TYPE menge_d,
MovementReasonCode TYPE grund,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log.
" ====================================================================
" DATA SELECTION
" ====================================================================
START-OF-SELECTION.
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Receipt Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('101', '103', '105', '501', '521', '561')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~shkzg
WHEN 'H' THEN 'Stock Posted to Quality Inspection'
WHEN 'S' THEN 'Quality Inspection Stock Released'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '321' " For QI to Unrestricted
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Put-Away Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '311' AND mseg~shkzg = 'H' " Assume put-away is the credit side
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Internal Stock Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('301', '311', '313', '315')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~bwart
WHEN '343' THEN 'Stock Status Changed to Blocked'
WHEN '344' THEN 'Stock Status Changed to Unrestricted'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('343', '344')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Inventory Adjustment Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('701', '702', '711', '712')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Delivery Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '601'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Production Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '261'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Sales Return Received' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('651', '653')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Stock Scrapped' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '551'
UNION ALL
SELECT
ltap~charg AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CONCAT( ltak~bdatu, ltak~bzeit ) AS EventTime,
ltap~matnr AS MaterialNumber,
ltak~bname AS UserName,
ltak~bwart AS MovementType,
ltap~werks AS Plant,
ltap~lgort AS StorageLocation,
ltap~nista AS Quantity,
'' AS MovementReasonCode
FROM ltap
JOIN ltak ON ltak~tanum = ltap~tanum
WHERE ltak~bdatu IN s_budat
AND ltap~werks IN s_werks
AND ltap~charg IS NOT NULL AND ltap~charg <> ''
UNION ALL
SELECT
SUBSTRING( cdhdr~objectid, 5, 18 ) AS InventoryBatchLot, " Object ID for BATCH is MATNR+WERKS+CHARG
'Batch Status Changed' AS ActivityName,
CONCAT( cdhdr~udate, cdhdr~utime ) AS EventTime,
SUBSTRING( cdhdr~objectid, 1, 4 ) AS MaterialNumber,
cdhdr~username AS UserName,
'' AS MovementType,
'' AS Plant,
'' AS StorageLocation,
0 AS Quantity,
'' AS MovementReasonCode
FROM cdhdr
JOIN cdpos ON cdpos~objectclas = cdhdr~objectclas
AND cdpos~objectid = cdhdr~objectid
AND cdpos~changenr = cdhdr~changenr
WHERE cdhdr~udate IN s_budat
AND cdhdr~objectclas = 'BATCH'
AND cdpos~tabname = 'MCH1'
AND cdpos~fname = 'ZUSTD'
INTO TABLE @lt_event_log.
" ====================================================================
" WRITE OUTPUT FILE
" ====================================================================
DATA: lv_string TYPE string.
DATA: lo_conv TYPE REF TO cl_abap_conv_out_ce.
lo_conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
OPEN DATASET p_fpath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
RETURN.
ENDIF.
" Write Header
lv_string = 'InventoryBatchLot,ActivityName,EventTime,MaterialNumber,UserName,MovementType,Plant,StorageLocation,Quantity,MovementReasonCode'.
TRANSFER lv_string TO p_fpath.
" Write Data
LOOP AT lt_event_log ASSIGNING FIELD-SYMBOL(<fs_log>).
CONCATENATE
<fs_log>-InventoryBatchLot
<fs_log>-ActivityName
<fs_log>-EventTime
<fs_log>-MaterialNumber
<fs_log>-UserName
<fs_log>-MovementType
<fs_log>-Plant
<fs_log>-StorageLocation
<fs_log>-Quantity
<fs_log>-MovementReasonCode
INTO lv_string
SEPARATED BY ','.
TRANSFER lv_string TO p_fpath.
ENDLOOP.
CLOSE DATASET p_fpath.
WRITE: 'Extraction complete. File written to:', p_fpath. Möchten Sie loslegen?
Mit diesem Template können Sie Ihre Daten gezielt vorbereiten und wertvolle Erkenntnisse zu Ihren Abläufen in der Bestandsverwaltung gewinnen. Beginnen Sie noch heute damit, die Effizienz zu verbessern und Kosten zu senken.
Optimieren Sie Ihre Bestandsverwaltung mit SAP S/4HANA
Erkennen Sie Ineffizienzen, verkürzen Sie die Durchlaufzeit um 30 % und senken Sie Kosten.
Keine Kreditkarte erforderlich • In wenigen Minuten eingerichtet