Ihr Daten-Template für den Retouren- & Erstattungsprozess
Ihr Daten-Template für den Retouren- & Erstattungsprozess
- Empfohlene Attribute zur Erfassung
- Wichtige Aktivitäten zur Verfolgung
- Extraktionsanleitung
Attribute im Retouren- und Rückerstattungsprozess
| Name | Beschreibung | ||
|---|---|---|---|
| Aktivitätsname ActivityName | Der Name eines spezifischen Geschäftsereignisses oder Schritts, der innerhalb des Retourenprozesses stattfand. | ||
| Beschreibung Dieses Attribut beschreibt eine einzelne, eindeutige Aktion oder Statusänderung im Retourenlebenszyklus, wie 'Retourenauftrag erstellt', 'Wareneingang gebucht' oder 'Gutschrift erstellt'. Diese Aktivitäten bilden die Bausteine der Process Map. Die Analyse der Reihenfolge und Häufigkeit dieser Aktivitäten hilft, die häufigsten Prozesspfade, Abweichungen und Nacharbeits-Schleifen zu identifizieren. Es ist entscheidend für das Verständnis, was innerhalb eines Cases und in welcher Reihenfolge geschieht, und bildet die Grundlage für alle Process Mining Analysen. Bedeutung Aktivitäten definieren die Schritte im Prozess. Die Analyse ihrer Abfolge, Dauer und Häufigkeit ist der Kern des Process Mining und offenbart, wie die Arbeit tatsächlich ausgeführt wird. Datenquelle Abgeleitet von Statusänderungen in Tabellen wie VBUK/VBUP, Dokumentenerstellungsereignissen (z.B. in VBAK, LIKP, VBRK) oder Änderungsprotokollen in CDHDR/CDPOS-Tabellen. Beispiele Retourenauftrag erstellt`Wareneingang` gebuchtGutschrift erstelltRetourenauftragsposition abgeschlossen | |||
| Ereigniszeit EventTime | Das genaue Datum und die Uhrzeit, zu der die Aktivität stattgefunden hat. | ||
| Beschreibung Dieser Timestamp markiert den präzisen Moment, in dem ein Business Event stattfand. Er wird für jede Activity im Prozess recorded und liefert die Chronological Sequence of Events innerhalb eines Case. Event Time ist Critical für alle Time-based Analysis, inklusive Calculating Cycle Times between Activities, Identifying Bottlenecks where Time is spent Waiting, und Measuring Overall Case Duration. Er Enables Performance Analysis und Compliance Checks against Service Level Agreements (SLAs). Bedeutung Dieser Timestamp ist essentiell für die Berechnung aller Durations, die Analyse der Process Performance, die Identifizierung von Engpässen und das Verständnis der Timeline jedes Return Case. Datenquelle Stammt aus verschiedenen Datums- und Zeitfeldern in SAP-Tabellen. Für Erstellungsereignisse sind dies oft die Felder ERDAT und ERZET (z. B. in VBAK). Für Änderungsereignisse sind dies UDATE und UTIME in der Tabelle CDHDR. Beispiele 2023-04-15T10:22:05Z2023-04-16T14:01:30Z2023-04-18T09:15:00Z | |||
| Retourenfall-ID ReturnCaseId | Die eindeutige Kennung für die Retourenanfrage eines Kunden, die alle zugehörigen Aktivitäten und Belege miteinander verknüpft. | ||
| Beschreibung Die Retourenfall-ID dient als Primärschlüssel zur Verfolgung des gesamten Lebenszyklus eines Retourenprozesses von der Initiierung bis zum Abschluss. Jede ID entspricht einer spezifischen Kundenretoure und umfasst alle zugehörigen Events wie Auftragserstellung, Lieferung, Prüfung und Gutschriftsverarbeitung. In der Prozessanalyse ist dieses Attribut grundlegend für die Erstellung der Process Map. Es ermöglicht dem System, individuelle Events zu End-to-End-Case Journeys zu gruppieren, was die Analyse von Prozessvarianten, Cycle Times und Engpässen für jede einzelne Retoureninstanz ermöglicht. Bedeutung Dies ist der essentielle Case Identifier, der alle Steps einer Return Journey verbindet, wodurch es möglich wird, den End-to-End Process Flow und die Performance zu analysieren. Datenquelle Dies ist typischerweise die Return Order Number aus dem Sales and Distribution (SD) Module. Gefunden in Tabelle VBAK (Sales Document Header Data), Field VBELN, wo die Document Category (VBAK-VBTYP) 'H' für Returns ist. Beispiele 600001236000045660000789 | |||
| Letzte Datenaktualisierung LastDataUpdate | Der Timestamp, der angibt, wann die Daten für diesen Prozess zuletzt aktualisiert wurden. | ||
| Beschreibung Dieses Attribut zeichnet Datum und Uhrzeit der letzten Datenextraktion oder -aktualisierung auf. Es schafft Transparenz über die Aktualität der analysierten Daten. In der Analyse ist dies wichtig, um die Zeitgerechtigkeit der Erkenntnisse zu verstehen. User können sehen, wie aktuell die Daten sind, was die Relevanz der Findings beeinflusst, insbesondere beim Monitoring laufender Operations. Bedeutung Zeigt die Aktualität der Daten an und stellt sicher, dass Benutzer verstehen, wie aktuell die Prozessanalyse ist und wann die nächste Aktualisierung zu erwarten ist. Datenquelle Dies ist ein Metadaten-Attribut, das mit dem Ausführungs-Timestamp des Datenextraktionsjobs gefüllt wird. Beispiele 2023-05-20T02:00:00Z2023-05-21T02:00:00Z | |||
| Quellsystem SourceSystem | Das System, aus dem die Daten extrahiert wurden. | ||
| Beschreibung Dieses Attribut identifiziert den Ursprung der Daten, was in Umgebungen mit mehreren Systemen unerlässlich ist. Es liefert Kontext und hilft, die Datenherkunft und -integrität sicherzustellen. Für die Analyse wird es verwendet, um Daten zu segmentieren oder zu filtern, wenn Prozesse aus verschiedenen Quellsystemen kombiniert werden. Es bestätigt, dass die Events aus der erwarteten Anwendung stammen, in diesem Fall SAP ECC. Bedeutung Identifiziert den Datenursprung, was für die Data Governance und für Analysen über mehrere Unternehmenssysteme hinweg entscheidend ist. Datenquelle Dies ist ein statischer Wert, der während der Datenextraktion definiert wird, um die spezifische SAP ECC-Instanz (z. B. 'ECC_PROD_100') zu identifizieren. Beispiele SAP_ECC_PRODSAPECC_FINANCE_200 | |||
| `Materialnummer` MaterialNumber | Die eindeutige Kennung für das Produkt, das zurückgegeben wird. | ||
| Beschreibung Die Materialnummer oder SKU spezifiziert den genauen Artikel, der in der Retoure enthalten ist. Dies ermöglicht eine detaillierte Analyse auf Produktebene. Durch die Analyse von Retouren nach Materialnummern können Unternehmen Produkte mit hohen Retourenquoten identifizieren, was auf Qualitätsprobleme, ungenaue Beschreibungen oder Herstellungsfehler hindeuten kann. Es ist wesentlich für Dashboards wie 'Inventory Impact of Returns' und zum Verständnis, wie verschiedene Produkte den Retourenprozess durchlaufen. Bedeutung Identifiziert, welche Produkte zurückgegeben werden, und hebt potenzielle Qualitätskontrollprobleme oder ungenaue Produktbeschreibungen hervor. Datenquelle Gefunden in der Verkaufsbelegpositionstabelle VBAP, Feld MATNR. Beispiele RM-1025FG-2050-BACC-5591 | |||
| Beantragter Erstattungsbetrag RequestedRefundAmount | Der erwartete Erstattungsbetrag, typischerweise basierend auf dem Nettowert der zurückgegebenen Artikel. | ||
| Beschreibung Dieses Attribut repräsentiert den anfänglichen Geldwert der Retoure, wie er im Retourenauftrag erfasst wurde. Es dient als Baseline für die Finanzanalyse und -abstimmung. Dieser Amount wird mit dem 'Actual Refund Amount' verglichen, um Discrepancies zu verfolgen, eine Key Metric für das 'Refund Amount Discrepancy Tracking' Dashboard. Die Analyse dieses Values hilft, den Financial Impact von Retouren zu monitoren und potenzielle Issues in Pricing oder Credit Calculation zu identifizieren. Bedeutung Legt den anfänglichen finanziellen Wert der Retoure fest, was entscheidend ist für die Verfolgung finanzieller Diskrepanzen und das Verständnis des Gesamtwerts der zurückgesandten Waren. Datenquelle Dieser Value ist typischerweise der Net Value aus dem Return Order Item Level. Gefunden in Tabelle VBAP, Field NETWR. Beispiele 150.0049.991250.75 | |||
| Bearbeitender Agent ProcessingAgent | Die Benutzer-ID des Mitarbeiters, der die Aktivität durchgeführt hat. | ||
| Beschreibung Dieses Attribut erfasst den Benutzernamen der Person, die für die Ausführung eines spezifischen Prozessschritts verantwortlich ist, z. B. das Anlegen des Retourenauftrags oder die Buchung des Wareneingangs. Es wird oft als 'Geändert von' oder 'Erstellt von' Benutzer bezeichnet. Die Analyse nach Bearbeitendem Agent ist entscheidend für Leistungsmanagement und Ressourcenanalyse. Sie hilft, Top-Performer, Agenten, die zusätzliche Schulung benötigen könnten, und die Arbeitslastverteilung innerhalb eines Teams zu identifizieren. Sie wird in Dashboards wie 'Leistung der Retourenbearbeitung durch Agenten' verwendet, um Cycle Times und Durchsatz zu vergleichen. Bedeutung Tracks User Involvement, enabling Analysis of Team Performance, Workload Distribution und Identification of Training Needs oder Best Practices. Datenquelle Typischerweise gefunden in Fields wie ERNAM (Created by) oder AENAM (Changed by) in Header Tables wie VBAK, LIKP, VBRK. Für Change Events ist es USERNAME in CDHDR. Beispiele CBURNSDSCRANTONJHALPERT | |||
| Retourenkanal ReturnChannel | Der Kanal, über den die Retoure initiiert wurde, wie online, im Geschäft oder über ein Callcenter. | ||
| Beschreibung Dieses Attribut spezifiziert den Ursprung oder die Aufnahmemethode für die Retourenanfrage. Es hilft, zwischen Retouren zu unterscheiden, die über ein Webportal, ein physisches Geschäft oder über einen Kundendienstmitarbeiter initiiert wurden. Die Segmentierung des Prozesses nach Return Channel ist entscheidend für das Verständnis operativer Unterschiede und der Ressourcenallokation. Zum Beispiel können In-Store Returns schnellere Inspection Times, aber unterschiedliche Dokumentationsschritte im Vergleich zu Online Returns aufweisen. Dies ist eine Key Dimension für das 'Returns Process Throughput Trends' Dashboard. Bedeutung Unterscheidet, wie Retouren initiiert werden, was oft den Prozessfluss, den Ressourcenbedarf und die Durchlaufzeiten für verschiedene Kanäle beeinflusst. Datenquelle Dies ist oft kein Standardfeld in SAP ECC und muss möglicherweise aus einem Custom Field (z. B. in VBAK) bezogen oder aus anderen Daten wie der Sales Organization (VKORG) oder dem Distribution Channel (VTWEG) abgeleitet werden. Konsultieren Sie die SAP ECC-Dokumentation für eine spezifische Implementierung. Beispiele Online-PortalIm GeschäftCallcenter | |||
| Rückgabegrund ReturnReason | Der vom Kunden angegebene Grundcode für die Rücksendung des Artikels. | ||
| Beschreibung Dieses Attribut gibt an, warum ein Produkt zurückgesendet wurde, unter Verwendung vordefinierter Gründe-Codes in SAP. Beispiele sind 'Transportschaden', 'Falscher Artikel geliefert' oder 'Passt nicht'. Dies ist eine kritische Dimension für die Ursachenanalyse. Durch das Filtern der Process Map oder KPIs nach Retourengrund können Analysten feststellen, ob bestimmte Gründe mit längeren Processing Times, höheren Prüfungsfehlerquoten oder spezifischen Prozessabweichungen verbunden sind. Diese Erkenntnis kann Verbesserungen in der Produktqualität, Logistik oder den Verkaufsprozessen vorantreiben. Bedeutung Erklärt, warum Retouren auftreten, ermöglicht eine Ursachenanalyse, um die Retourenquoten durch die Behebung von Problemen mit Produktqualität, Versand oder Beschreibung zu senken. Datenquelle Gefunden in der Verkaufsbelegpositionstabelle VBAP, Feld ABGRU (Ablehnungsgrund für Verkaufsbelege). Beispiele 001 - Damaged product002 - Wrong product005 - Arrived too late | |||
| Tatsächlicher Erstattungsbetrag ActualRefundAmount | Der endgültige dem Kunden gutgeschriebene Betrag, wie in den Finanzbelegen verbucht. | ||
| Beschreibung Dieses Attribut ist der endgültige, bestätigte Erstattungswert, der im Buchhaltungssystem bearbeitet und verbucht wurde. Dieser Betrag kann aufgrund von Wiedereinlagerungsgebühren, Anpassungen basierend auf dem Artikelzustand oder anderen Richtlinienanwendungen vom beantragten Betrag abweichen. Dies ist ein kritisches Attribut für das Dashboard 'Refund Amount Discrepancy Tracking'. Der Vergleich mit dem beantragten Betrag hilft, systemische Probleme im Erstattungsberechnungs- und Genehmigungsprozess zu identifizieren und die finanzielle Genauigkeit sicherzustellen. Bedeutung Stellt das endgültige finanzielle Ergebnis der Retoure dar. Der Vergleich mit dem beantragten Betrag hilft, die Genauigkeit sicherzustellen und finanzielle Verluste zu identifizieren. Datenquelle Stammt aus dem Finanzbeleg zur Gutschrift. Typischerweise in Tabelle BSEG (Rechnungswesen-Belegsegment), Feld WRBTR (Betrag in Belegwährung), für die entsprechende G/L-Kontobuchung zu finden. Beispiele 150.0045.001200.75 | |||
| Buchungskreis CompanyCode | Die juristische Einheit oder das Unternehmen, das für die Transaktion verantwortlich ist. | ||
| Beschreibung Der Buchungskreis repräsentiert eine eigenständige Rechnungslegungseinheit innerhalb von SAP. Alle Finanztransaktionen, einschließlich Retouren und Rückerstattungen, werden einem spezifischen Buchungskreis zugeordnet. Dieses Attribut ist entscheidend für die Finanzberichterstattung und für die Segmentierung des Prozesses in multinationalen oder Multi-Entität-Organisationen. Eine Analyse nach Buchungskreis ermöglicht den Vergleich der Retourenprozessleistung über verschiedene rechtliche Einheiten innerhalb des Unternehmens hinweg. Bedeutung Ermöglicht das Filtern und Vergleichen von Retourenprozessen über verschiedene rechtliche Einheiten innerhalb einer Organisation hinweg, was für die Finanzanalyse entscheidend ist. Datenquelle Gefunden in der Verkaufsbelegkopf-Tabelle VBAK, Feld BUKRS_VF (Buchungskreis für Fakturierung). Beispiele 10002000US01 | |||
| Diskrepanz Erstattungsbetrag RefundAmountDiscrepancy | Die berechnete Differenz zwischen dem tatsächlichen und dem beantragten Erstattungsbetrag. | ||
| Beschreibung Diese berechnete Metrik quantifiziert die monetäre Differenz zwischen dem, was ursprünglich im Retourenauftrag angefragt und was schließlich in der Gutschrift ausgestellt wurde. Ein positiver Value könnte auf eine Partial Refund hinweisen, während ein negativer Value ungewöhnlich ist, aber eine Overpayment anzeigen könnte. Dieses Attribut ist die Key Measure für das 'Refund Amount Discrepancy Tracking' Dashboard. Es hilft, Cases mit Financial Deviations schnell zu identifizieren und zu analysieren, die auf Item Condition Assessments, Restocking Fees oder Errors zurückzuführen sein könnten. Das Monitoring dessen hilft, Financial Control und Policy Adherence sicherzustellen. Bedeutung Misst direkt finanzielle Abweichungen im Rückerstattungsprozess und hilft dabei, Richtlinien-Nichteinhaltung, Verarbeitungsfehler oder finanzielle Leckagen zu identifizieren. Datenquelle Berechnetes Feld: Tatsächlicher Erstattungsbetrag - Angeforderter Erstattungsbetrag. Beispiele 0.00-4.99-50.00 | |||
| Einhaltung der Retourenrichtlinien ReturnPolicyAdherence | Ein Flag, das anzeigt, ob die Retoure allen definierten Geschäftsregeln und Richtlinien entspricht. | ||
| Beschreibung Dieses berechnete boolesche Attribut signalisiert, ob ein Return Case den Standard-Unternehmensrichtlinien entsprach. Die Logik könnte die Überprüfung mehrerer Conditions umfassen, wie z. B. ob die Retoure innerhalb des erlaubten Timeframes initiiert wurde, ob der Reason Code für das Produkt gültig ist oder ob eine Manager Approval für eine Exception eingeholt wurde. Dieses Attribut treibt das 'Return Approval Policy Compliance' Dashboard an. Es ermöglicht die direkte Messung der Compliance Rate und hilft zu identifizieren, welche Policies am häufigsten bypassed werden, was gezielte Process Improvement oder Training ermöglicht. Bedeutung Misst die Einhaltung von Geschäftsregeln und hilft dabei, Richtlinien konsequent durchzusetzen und Fälle zu identifizieren, die eine spezielle Überprüfung oder Genehmigung erfordern. Datenquelle Dies ist ein abgeleitetes Attribut, basierend auf einer Reihe von Geschäftsregeln. Zum Beispiel: (Retouren-Initiierungsdatum - Ursprüngliches Kaufdatum) <= 30 Tage UND Retourengrund IST NICHT NULL. Beispiele truefalsch | |||
| End-to-End Zykluszeit EndToEndCycleTime | Die insgesamt verstrichene Zeit von der ersten bis zur letzten Aktivität für einen Retourenfall. | ||
| Beschreibung Dies ist eine Case-Level Metrik, berechnet als die Duration zwischen dem Very First Event (z. B. 'Return Order Created') und dem Final Event (z. B. 'Return Order Completed' oder 'Credit Memo Cleared'). Sie repräsentiert die Total Time, die ein Return im Prozess verbringt. Dies ist ein Primary Key Performance Indicator für die Overall Process Efficiency. Sie wird in Trend Analysis und Benchmarking verwendet, um Improvements over Time zu tracken. Die Analyse der Distribution dieser Metrik hilft, die Factors, wie Product Type oder Return Reason, zu identifizieren, die mit Longer or Shorter Resolution Times korrelieren. Bedeutung Misst die Gesamtdauer des Retourenprozesses und liefert einen Schlüsselindikator für die gesamte Prozesseffizienz und das Kundenerlebnis. Datenquelle Dies ist eine berechnete Metrik. Es ist der Timestamp der letzten Aktivität in einem Case minus dem Timestamp der ersten Aktivität. Beispiele 5 Tage 4 Stunden12 Tage 8 Stunden3 Tage 2 Stunden | |||
| Gutschriftsnummer CreditMemoNumber | Die eindeutige Kennung für den Gutschriftsbeleg, der für die Rückerstattung ausgestellt wurde. | ||
| Beschreibung Die Gutschrift ist der offizielle Fakturabeleg in SAP, der die an den Kunden zu zahlende Rückerstattung formalisiert. Diese Nummer identifiziert diesen Finanzbeleg eindeutig. Dieses Attribut ist wesentlich für die Finanzabstimmung und für die Verfolgung des Prozesses von der operativen Retoure bis zur finanziellen Abwicklung. Es dient als wichtiger Meilenstein im Prozess und wird verwendet, um zugehörige Buchhaltungsbelege für Attribute wie den 'Tatsächlichen Erstattungsbetrag' zu finden. Bedeutung Bietet einen direkten Link zum Finanzbeleg, der die Kundenerstattung autorisiert, was für die Finanzprüfung und Abstimmung unerlässlich ist. Datenquelle Die Gutschrift ist ein Fakturabeleg. Ihre Nummer ist in der Tabelle VBRK (Fakturabeleg: Kopfdaten), Feld VBELN, zu finden. Die Verknüpfung erfolgt über den Belegfluss des Retourenauftrags. Beispiele 900011229000334490005566 | |||
| Ist SLA-konform IsSLACompliant | Ein Flag, das anzeigt, ob die Rückerstattung innerhalb der vereinbarten Service Level Agreement (SLA) bearbeitet wurde. | ||
| Beschreibung Dies ist ein berechnetes boolesches Attribut, das das tatsächliche Datum der 'Refund Processed' Activity mit dem 'Refund SLA Target Date' vergleicht. Es ist 'true', wenn die Refund on time abgeschlossen wurde, und 'false' andernfalls. Dieses Attribut vereinfacht Analysis und Reporting, indem es ein klares, binäres Outcome für die SLA Performance jedes Cases liefert. Es wird verwendet, um die Overall 'Refund Processing SLA Compliance' Rate zu berechnen und ermöglicht einfaches Filtering, um Non-Compliant Cases zu isolieren und zu analysieren. Bedeutung Bietet einen klaren, binären Indikator der SLA-Leistung für jeden Case und vereinfacht die Compliance-Überwachung und Berichterstattung. Datenquelle Dies ist ein berechnetes Attribut. Die Logik ist: 'Refund Processed' EventTime <= RefundSLATargetDate. Beispiele truefalsch | |||
| Kunden-ID CustomerId | Die eindeutige Kennung für den Kunden, der die Retoure initiiert. | ||
| Beschreibung Dieses Attribut identifiziert den spezifischen Kunden (in SAP-Terminologie den 'Auftraggeber'), der das Produkt zurücksendet. Es verknüpft die Retourentransaktion mit den Kundenstammdaten. Die Analyse nach Customer ID hilft, Kunden mit häufigen Retouren zu identifizieren, was auf Unzufriedenheit oder einen möglichen Missbrauch der Retourenrichtlinien hindeuten könnte. Es kann auch mit Kundensegmentierungsdaten verwendet werden, um zu verstehen, ob bestimmte Kundengruppen unterschiedliche Retourenverhaltensweisen oder Prozesserfahrungen aufweisen. Bedeutung Verknüpft Retouren mit spezifischen Kunden, was eine Analyse des Kundenverhaltens, die Identifizierung von Wiederholungstätern und den Einfluss auf Kundenbeziehungen ermöglicht. Datenquelle Gefunden in der Verkaufsbelegkopf-Tabelle VBAK, Feld KUNNR (Regulierer). Beispiele CUST-100432CUST-203991CUST-831102 | |||
| Originalverkaufsbeleg OriginalSalesDocument | Die Nummer des ursprünglichen Verkaufsauftrags, gegen den die Retoure erfolgt. | ||
| Beschreibung Dieses Attribut bietet einen direkten Link zum ursprünglichen Kundenkauf. Es ist ein Referenzbeleg, der die Retoure mit den ursprünglichen Transaktionsdetails verbindet. Diese Verknüpfung ist äußerst wertvoll für eine tiefgehende Analyse. Sie ermöglicht es Analysten zu untersuchen, warum Verkäufe aus bestimmten Orders zurückgegeben werden, die ursprünglichen Preise und Terms zu überprüfen und den kompletten Customer Order-to-Return Lifecycle zu verstehen. Es kann helfen, Fragen zu beantworten, ob Produkte, die über spezifische Kampagnen oder Channels verkauft wurden, höhere Return Rates aufweisen. Bedeutung Verknüpft die Retoure mit dem ursprünglichen Verkauf, was eine umfassende Sicht auf die Kundentransaktion und eine tiefere Ursachenanalyse ermöglicht. Datenquelle Diese Referenz ist auf dem Item Level des Return Order gespeichert. Sie kann in Tabelle VBAP, Field VGBEL (Document Number des Reference Document) gefunden werden. Beispiele 100034561000987110012345 | |||
| Retourenauftragsstatus ReturnOrderStatus | Der Gesamtbearbeitungsstatus des Retourenauftragsfalls. | ||
| Beschreibung Dieses Attribut bietet einen Snapshot des aktuellen Zustands des Return Case, wie 'Open', 'In Process' oder 'Completed'. Es wird aus der Kombination von Status auf Header- oder Item-Level des Sales Document abgeleitet. In der Analyse ist dieses Attribut nützlich, um Cases zu filtern und sich auf aktive oder abgeschlossene Returns zu konzentrieren. Es kann bei der Überwachung der gesamten Workload und des Fortschritts offener Cases helfen und liefert ein High-Level Outcome für jede Return Journey. Bedeutung Bietet eine übergeordnete Ansicht, wo sich ein Case in seinem Lebenszyklus befindet, was die Filterung und Analyse von offenen, laufenden oder abgeschlossenen Retouren ermöglicht. Datenquelle Abgeleitet aus den Statusfeldern in den Tabellen VBUK (Kopfstatus) und VBUP (Positionsstatus). Zum Beispiel ist VBUK-GBSTK der Gesamtbearbeitungsstatus des Belegs. Beispiele OffenIn BearbeitungAbgeschlossen | |||
| SLA-Zieldatum für Erstattung RefundSLATargetDate | Das Datum, bis zu dem die Rückerstattung voraussichtlich gemäß den Service Level Agreements bearbeitet wird. | ||
| Beschreibung Dieses Attribut definiert die Frist für den Abschluss des Erstattungsprozesses für einen bestimmten Retourenfall. Sie wird typischerweise auf Basis von Geschäftsregeln berechnet, z. B. '5 Werktage nach Wareneingang'. Dieses Zieldatum ist der Benchmark, an dem die tatsächliche Leistung gemessen wird. Es ist die Kernkomponente für das Dashboard 'Refund Processing SLA Compliance', das es dem Unternehmen ermöglicht, die Einhaltung von Kundenverpflichtungen zu überwachen und Cases zu identifizieren, bei denen die Gefahr einer SLA-Verletzung besteht. Bedeutung Legt das Leistungsziel für die Bearbeitung von Rückerstattungen fest, sodass das Unternehmen die Einhaltung der SLA messen und berichten sowie überfällige Cases priorisieren kann. Datenquelle Dies ist typischerweise kein Standard-SAP-Feld und müsste basierend auf Business Rules abgeleitet werden. Es könnte aus einem Key Date Field (z. B. Goods Receipt Date aus MKPF) plus einer Configured Duration berechnet werden. Konsultieren Sie die SAP ECC-Dokumentation oder Business Requirements. Beispiele 2023-04-25T23:59:59Z2023-04-28T23:59:59Z2023-05-02T23:59:59Z | |||
| Werk Plant | Der physische Standort oder die Einrichtung, wo der zurückgesendete Artikel empfangen und bearbeitet wird. | ||
| Beschreibung Das Werk in SAP repräsentiert einen physischen Standort, wie ein Lager oder ein Distributionszentrum, wo Waren gehandhabt werden. Für Retouren ist dies typischerweise der Ort, an dem der Artikel empfangen und geprüft wird. Eine Analyse des Prozesses nach Werk hilft, Leistungsunterschiede zwischen verschiedenen Einrichtungen zu identifizieren. Es kann hervorheben, welche Lager bei der Warenprüfung effizienter sind oder einen höheren Durchsatz aufweisen, was das Dashboard 'Durchsatz & Effizienz der Warenprüfung' unterstützt. Bedeutung Identifiziert den physischen Ort, der die Retoure bearbeitet, was den Leistungsvergleich zwischen verschiedenen Lagern oder Distributionszentren ermöglicht. Datenquelle Gefunden auf Positionsebene im Retourenauftrag, Tabelle VBAP, Feld WERKS. Beispiele PL01WH02DC05 | |||
Aktivitäten im Retouren- und Rückerstattungsprozess
| Aktivität | Beschreibung | ||
|---|---|---|---|
| `Wareneingang` gebucht | Diese Aktivität tritt ein, wenn der physisch zurückgesendete Artikel im Lager oder Bearbeitungszentrum empfangen wird. Sie wird durch die Buchung eines Warenbewegungsbelegs zur Retourenlieferung erfasst. | ||
| Bedeutung Ein wichtiger Meilenstein, der anzeigt, dass das Unternehmen den zurückgesandten Artikel in Besitz genommen hat. Es ist der Ausgangspunkt für die physische Prüfung und beeinflusst die Bestandsgenauigkeit. Datenquelle Dieses Event kann aus dem Goods Movement Status des Return Delivery Item in der VBUP-Tabelle (z. B. WBSTA = 'C') abgeleitet werden. Der exakte Timestamp ist im Material Document Header (MKPF-BUDAT) für den entsprechenden Goods Receipt. Erfassen Finden Sie das Buchungsdatum (BUDAT) aus der MKPF-Tabelle für den Materialbeleg, der mit der Retourenlieferung verknüpft ist. Ereignistyp inferred | |||
| Gutschrift erstellt | Eine Faktura (Gutschrift) wird erstellt, um die finanzielle Gutschrift an den Kunden zu autorisieren. Dies ist der offizielle Finanzbeleg, der den Erstattungsbetrag formalisiert. | ||
| Bedeutung Dies ist ein wichtiger finanzieller Meilenstein im Prozess. Die Analyse der Zeit bis zur Gutschriftserstellung hilft, Verzögerungen bei der Finanzbelegbearbeitung nach Wareneingang und Prüfung zu identifizieren. Datenquelle Dies ist ein explizites Event, das in der VBRK-Tabelle (Billing Document Header) aufgezeichnet wird. Das Creation Date ist VBRK-ERDAT. Das Credit Memo ist mit dem Return Order oder Credit Memo Request im Document Flow verknüpft. Erfassen Verwenden Sie den Creation Timestamp (ERDAT) aus der VBRK-Tabelle für das relevante Billing Document. Ereignistyp explicit | |||
| Gutschrift in FI gebucht | Die Gutschrift wird an die Finanzbuchhaltung freigegeben, wodurch sie zu einem offiziellen Forderungseintrag wird. Dieser Schritt löst den eigentlichen Rückerstattungsprozess an den Kunden aus. | ||
| Bedeutung Diese Aktivität markiert den Zeitpunkt, an dem die Rückerstattung vom Unternehmen finanziell anerkannt wird. Verzögerungen zwischen der Gutschriftserstellung und -buchung können die tatsächliche Rückerstattung an den Kunden verlangsamen. Datenquelle Dies ist ein abgeleitetes Event, identifiziert, wenn der Posting Status im Billing Document Header (VBRK-RFBSK) auf 'C' (Posting Document wurde erstellt) aktualisiert wird. Das Actual Accounting Document Creation Date ist in der BKPF-Tabelle. Erfassen Identifizieren Sie den Timestamp, wenn VBRK-RFBSK auf 'C' gesetzt wird, oder verwenden Sie das Erstellungsdatum (CPUDT) aus dem verknüpften BKPF-Buchhaltungsbeleg. Ereignistyp inferred | |||
| Retourenauftrag erstellt | Diese Aktivität markiert die Initiierung des Retourenprozesses, wenn ein Kunde die Rücksendung eines Produkts beantragt. Sie wird erfasst, wenn ein neuer Verkaufsbeleg vom Typ 'Retoure' (z. B. RE) in SAP ECC angelegt wird. | ||
| Bedeutung Dies ist das primäre Start Event für den Returns Process. Die Analyse der Time von dieser Activity zu anderen hilft, die Total Cycle Time zu messen und Initial Processing Delays zu identifizieren. Datenquelle Dies ist ein explizites Event, das in der VBAK-Tabelle (Sales Document Header) aufgezeichnet wird. Der Creation Timestamp ist in VBAK-ERDAT und VBAK-ERZET für die Corresponding Sales Document Number (VBAK-VBELN) mit Order Type VBAK-AUART = 'RE' gespeichert. Erfassen Verwenden Sie den Creation Timestamp (ERDAT, ERZET) aus der VBAK-Tabelle für den Sales Document Type 'RE'. Ereignistyp explicit | |||
| Retourenauftrag vollständig bearbeitet | Diese Aktivität markiert das Ende des Retourenprozesses aus Vertriebssicht. Sie tritt ein, wenn alle Positionen des Retourenauftrags vollständig bearbeitet und abgeschlossen sind. | ||
| Bedeutung Dies ist das primäre End Event für den Prozess. Die Messung der Time von 'Return Order Created' zu dieser Activity liefert die End-to-End Cycle Time für den Return Case. Datenquelle Dies ist ein abgeleitetes Event aus den Status-Tabellen. Es wird erfasst, wenn der Overall Status des Sales Document Headers (VBUK-GBSTK) auf 'C' (Completely Processed) aktualisiert wird. Erfassen Identifizieren Sie den Timestamp aus Änderungsbelegen (CDHDR/CDPOS), wenn sich das Kopfstatusfeld VBUK-GBSTK auf 'C' ändert. Ereignistyp inferred | |||
| Verwendungsentscheidung getroffen | Nach der Prüfung trifft ein Qualitätsingenieur oder Prüfer eine formale Entscheidung über den Zustand des zurückgesandten Artikels. Diese Entscheidung bestimmt den nachfolgenden Prozess, wie die Rückführung in den Lagerbestand, die Verschrottung oder die Reparatur. | ||
| Bedeutung Diese Aktivität ist entscheidend, um die Effizienz der Prüfung und deren Ergebnisse zu verstehen. Die Entscheidung wirkt sich direkt auf den Erstattungsbetrag und die Bestandsverwaltung aus. Datenquelle Wenn SAP QM verwendet wird, ist dies ein explizites Event, das in der QAVE-Tabelle (Verwendungsentscheidung der Prüfabwicklung) erfasst wird. Die Entscheidungszeit wird in QAVE-VDATUM gespeichert. Die Verknüpfung zur Lieferung befindet sich in der QALS-Tabelle. Erfassen Verwenden Sie das Usage Decision Date (VDATUM) aus der QAVE-Tabelle, verknüpft über den Inspection Lot (QALS-PRUEFLOS). Ereignistyp explicit | |||
| Gutschrift ausgeglichen | Die offene Gutschriftposition in den Forderungen wird ausgeglichen, typischerweise durch eine ausgehende Zahlung an den Kunden. Dieses Ereignis markiert den endgültigen finanziellen Abschluss der Rückerstattung. | ||
| Bedeutung Diese Aktivität bestätigt den Geldabfluss und schließt die finanzielle Seite des Prozesses ab. Aus Kundensicht ist dies das tatsächliche Ende der Erstattungsreise. Datenquelle Dies ist ein explizites Event aus dem FI-Modul. Das Clearing Date für das Accounting Document ist in der BSEG-Tabelle (BSEG-AUGDT) für das Corresponding Customer Line Item gespeichert. Erfassen Verwenden Sie das Clearing Date (AUGDT) aus der BSEG- oder BSAD-Tabelle für das Accounting Document, das mit dem Credit Memo verknüpft ist. Ereignistyp explicit | |||
| Gutschriftsanforderung erstellt | Eine Gutschriftsanforderung wird erstellt, um den Bedarf für eine Rückerstattung formell zu dokumentieren. In vielen Konfigurationen dient der Retourenauftrag selbst als Gutschriftsanforderung. | ||
| Bedeutung Dies ist der formelle Start des Financial Settlement Teils des Returns Process. Er bietet einen Trigger für Subsequent Financial Approvals und Document Creation. Datenquelle Dies kann ein explizites Event in VBAK für ein Sales Document vom Typ 'Credit Memo Request' (z. B. CR) sein, oder es kann das gleiche Event wie 'Return Order Created' sein, wenn der Order Type für Order-related Billing konfiguriert ist. Erfassen Verwenden Sie den Creation Timestamp (ERDAT) aus VBAK für den Document Type 'CR', oder Reusen Sie den Return Order Creation Event. Ereignistyp explicit | |||
| Retourenauftragsposition abgelehnt | Ein spezifischer Artikel im Retourenauftrag wird entweder während der ersten Überprüfung oder nach der Prüfung abgelehnt. Dies bedeutet, dass für diesen Artikel keine weitere Bearbeitung, wie z.B. eine Rückerstattung, erfolgen wird. | ||
| Bedeutung Die Analyse von Ablehnungen hilft, ungültige Retourenanfragen zu identifizieren und kann die Kommunikation der Kundenrichtlinien beeinflussen. Es ist ein wichtiger Pfad im Prozess, der nicht zu einer Rückerstattung führt. Datenquelle Dies ist ein abgeleitetes Event. Es wird typischerweise durch einen Unique 'Reason for Rejection' Code erfasst, der für das Item in der VBAP-Tabelle (VBAP-ABGRU) gesetzt wird. Der Timestamp muss aus Change Logs stammen. Erfassen Identifizieren Sie den Timestamp aus Änderungsbelegen (CDHDR/CDPOS), wenn das Feld VBAP-ABGRU für einen Retourenartikel gefüllt wird. Ereignistyp inferred | |||
| Retourenauftragsposition abgeschlossen | Ein einzelner Positionsposten innerhalb des Retourenauftrags wird als vollständig bearbeitet markiert. Dies geschieht typischerweise, nachdem alle logistischen und finanziellen Folgebelege für diesen Artikel abgeschlossen wurden. | ||
| Bedeutung Tracking auf dem Item Level hilft zu identifizieren, welche Products oder Return Reasons die Longest Delays verursachen. Es bietet eine Granular View der Process Completion. Datenquelle Dies ist ein abgeleitetes Event aus den Status-Tabellen. Es wird erfasst, wenn der Overall Status des Sales Document Item (VBUP-GBSTK) auf 'C' (Completely Processed) aktualisiert wird. Erfassen Identifizieren Sie den Timestamp aus Änderungsbelegen (CDHDR/CDPOS), wenn sich das Positionsstatusfeld VBUP-GBSTK auf 'C' ändert. Ereignistyp inferred | |||
| Retourenauftragssperre entfernt | Stellt die Genehmigung der Retourenanfrage dar, die den Übergang zur nächsten Phase ermöglicht. Dies wird typischerweise durch eine Änderung des Belegstatus oder die Aufhebung einer Liefer- oder Fakturasperre erfasst. | ||
| Bedeutung Diese Aktivität ist ein kritischer Genehmigungsmeilenstein. Die Messung der Zeit, die bis zum Erreichen dieses Schritts benötigt wird, hilft, Engpässe im Retouren-Autorisierungs- und Genehmigungsprozess zu identifizieren. Datenquelle Dies ist ein abgeleitetes Event, das aus Change Logs für das Sales Document stammt. Prüfen Sie die Tabellen CDHDR und CDPOS auf Changes zu Block Fields in VBAK oder VBAP, oder Status Fields in VBUK/VBUP. Erfassen Identifizieren Sie den Timestamp aus den Änderungsbelegtabellen (CDHDR/CDPOS), wenn ein relevanter Sperrstatus entfernt wird. Ereignistyp inferred | |||
| Retourenlieferung erstellt | Ein Lieferbeleg wird generiert, um den physischen Wareneingang der zurückgesandten Güter zu verwalten. Dieses Ereignis signalisiert, dass der Logistikprozess für die Retoure eingeleitet wurde. | ||
| Bedeutung Tracks den Transition von Administrative Processing zu Physical Logistics. Delays hier können Warehouse Planning und Overall Return Cycle Time impacten. Datenquelle Dies ist ein explizites Event, das in der LIKP-Tabelle (Delivery Header) aufgezeichnet wird. Der Creation Timestamp ist in LIKP-ERDAT. Der Link zum Source Return Order ist in der LIPS-Tabelle (LIPS-VGBEL) zu finden. Erfassen Verwenden Sie den Creation Timestamp (ERDAT) aus der LIKP-Tabelle für die Delivery, die mit dem Return Order assoziiert ist. Ereignistyp explicit | |||
Extraktionsleitfäden
Schritte
- ABAP-Programm anlegen: Erstellen Sie über den Transaktionscode
SE38ein neues ausführbares Programm, zum BeispielZ_PM_RETURN_EXTRACTION. Vergeben Sie einen aussagekräftigen Titel und speichern Sie es als lokales Objekt oder in einem Entwicklungspaket. - Selektionsbild definieren: Legen Sie im Programm ein Selektionsbild fest, um Daten zu filtern. Wichtige Filter sind der Zeitraum für das Erstellungsdatum (
S_ERDAT), die Belegart für Retouren (S_AUART, z. B. „RE“) und der Buchungskreis (P_BUKRS). - Datenstrukturen definieren: Erstellen Sie einen lokalen Strukturtyp, der dem Format des Event Logs entspricht. Diese Struktur sollte Felder wie
ReturnCaseId,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProcessingAgent,ReturnReasonund weitere benötigte Attribute enthalten. - Selektionslogik implementieren: Schreiben Sie die ABAP-Logik, um Daten für die 12 erforderlichen Aktivitäten abzufragen. Hierzu selektieren Sie aus SAP-Tabellen wie VBAK, VBAP, LIKP, VBRK, BKPF, CDHDR und CDPOS. Nutzen Sie die Belegfluss-Tabelle (VBFA), um Lieferungen und Gutschriften mit dem ursprünglichen Retourenauftrag zu verknüpfen.
- „Retourenauftrag angelegt“ extrahieren: Selektieren Sie Datensätze aus
VBAKundVBAPgemäß den Selektionskriterien. Die Belegnummer (VBAK-VBELN) dient dabei alsReturnCaseId. - Statusänderungen und Ereignisse extrahieren: Für Aktivitäten wie „Retourensperre entfernt“ oder „Position abgelehnt“ fragen Sie die Änderungsbeleg-Tabellen (
CDHDR,CDPOS) oder Statusfelder in Tabellen wieVBAP(ABGRU) ab. Für logistische und finanzielle Folgeaktivitäten nutzen Sie Tabellen wieLIKP,MKPF,VBRKundBKPFin Verbindung mitVBFA. - Event Log Tabelle füllen: Erzeugen Sie für jede gefundene Aktivität einen Eintrag in einer internen Tabelle mit Ihrer Event Log Struktur. Mappen Sie die SAP-Felder auf die Zielattribute, zum Beispiel
VBAK-ERNAMaufProcessingAgentsowieVBAK-ERDATundVBAK-ERZETaufEventTime. - Aktivitätsdaten zusammenführen: Stellen Sie sicher, dass jedes SELECT-Statement seine Ergebnisse an die zentrale interne Tabelle anhängt. So entsteht die finale flache Dateistruktur, in der jede Zeile ein Event repräsentiert.
- Zeitstempel und Systeminfos: Nutzen Sie die Systemfelder
SY-DATUMundSY-UZEITfür den ZeitstempelLastDataUpdatein jeder Zeile. Das FeldSourceSystemfüllen Sie überSY-SYSID. - Ausgabefunktion implementieren: Fügen Sie eine Funktion hinzu, um die Ergebnisse in einem ALV-Grid (SAP List Viewer) anzuzeigen (z. B. via
REUSE_ALV_GRID_DISPLAY). Ermöglichen Sie zudem den Download der Tabelle als CSV- oder Textdatei auf den lokalen Rechner. - Ausführen und Exportieren: Starten Sie das Programm über
SE38. Geben Sie die gewünschten Kriterien ein und führen Sie es aus. Nutzen Sie nach der Anzeige die Exportfunktion, um das Event Log als CSV (mit Kopfzeile) für ProcessMind zu speichern.
Konfiguration
- Datumsbereich: Geben Sie im Selektionsbild den Zeitraum für das Erstelldatum der Retourenaufträge an. Für eine erste Analyse empfehlen wir 3 bis 6 Monate, um ein ausgewogenes Verhältnis zwischen Datenvolumen und Prozesstiefe zu erhalten.
- Belegart für Retouren: Filtern Sie nach den spezifischen Verkaufsbelegarten, die in Ihrem System für Retouren genutzt werden (z. B. „RE“ für Retouren oder „CR“ für Gutschriftsanforderungen). Dies ist entscheidend, um den Prozess korrekt einzugrenzen. Geben Sie die Werte in der Selektionsoption
S_AUARTein. - Buchungskreis: Bestimmen Sie den relevanten Buchungskreis (
P_BUKRS), um die Daten auf eine bestimmte rechtliche Einheit zu beschränken – insbesondere in Multi-Company-Umgebungen unerlässlich. - Voraussetzungen: Der ausführende Benutzer benötigt Berechtigungen für die Transaktion
SE38sowie Zugriff auf die zugrunde liegenden SD-, MM- und FI-Tabellen (z. B. VBAK, LIKP, VBRK, BKPF, CDHDR). Für die Entwicklung ist eine ABAP-Entwicklerrolle erforderlich. - Performance: Bei sehr großen Datenmengen über mehrere Jahre hinweg kann das Programm lange Laufzeiten haben. Prüfen Sie in diesem Fall eine Ausführung als Hintergrundjob (
SM36) und speichern Sie die Ausgabe im Dateisystem des Applikationsservers statt sie direkt anzuzeigen.
a Beispielabfrage abap
REPORT Z_PM_RETURN_EXTRACTION.
" =======================================================================
" DATA DECLARATIONS
" =======================================================================
TYPES: BEGIN OF ty_event_log,
returncaseid TYPE vbeln_va,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE sysysid,
lastdataupdate TYPE timestamp,
processingagent TYPE ernam,
returnreason TYPE augru,
materialnumber TYPE matnr,
returnchannel TYPE string, " Placeholder, needs custom logic
requestedrefundamount TYPE netwr,
actualrefundamount TYPE netwr,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log.
DATA: lv_timestamp TYPE timestamp,
lv_last_update TYPE timestamp.
" =======================================================================
" SELECTION SCREEN
" =======================================================================
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_auart FOR vbak-auart.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
" =======================================================================
" MAIN LOGIC
" =======================================================================
START-OF-SELECTION.
" Set static values for the extraction run
GET TIME STAMP FIELD lv_last_update.
" 1. Return Order Created & 6. Credit Memo Request Created
" Note: In many SAP standard processes, the Return Order itself acts as the Credit Memo Request.
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~augru, i~matnr, i~netwr
INTO TABLE @DATA(lt_return_orders)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~auart IN @s_auart
AND h~bukrs_vf = @p_bukrs.
LOOP AT lt_return_orders INTO DATA(ls_return_order).
" Activity: Return Order Created
ls_event_log-returncaseid = ls_return_order-vbeln.
ls_event_log-activityname = 'Return Order Created'.
CONVERT DATE ls_return_order-erdat TIME ls_return_order-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_return_order-ernam.
ls_event_log-returnreason = ls_return_order-augru.
ls_event_log-materialnumber = ls_return_order-matnr.
ls_event_log-requestedrefundamount = ls_return_order-netwr.
APPEND ls_event_log TO lt_event_log.
" Activity: Credit Memo Request Created
ls_event_log-activityname = 'Credit Memo Request Created'.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
IF lt_return_orders IS NOT INITIAL.
" 2. Return Order Block Removed (Example for Delivery Block)
SELECT objectid, udate, utime, username
FROM cdhdr
INTO TABLE @DATA(lt_block_changes)
FOR ALL ENTRIES IN @lt_return_orders
WHERE objectclas = 'VERKBELEG'
AND objectid = @lt_return_orders-vbeln
AND tcode = 'VA02'.
IF sy-subrc = 0.
SELECT objectid, fname, value_new
INTO TABLE @DATA(lt_cdpos_block)
FROM cdpos
FOR ALL ENTRIES IN @lt_block_changes
WHERE objectclas = @lt_block_changes-objectclas
AND objectid = @lt_block_changes-objectid
AND changenr = @lt_block_changes-changenr
AND tabname = 'VBAK'
AND fname = 'LIFSK' " Delivery Block field
AND value_new = ''.
LOOP AT lt_cdpos_block INTO DATA(ls_cdpos_block).
READ TABLE lt_block_changes INTO DATA(ls_block_change) WITH KEY objectid = ls_cdpos_block-objectid.
IF sy-subrc = 0.
ls_event_log-returncaseid = ls_cdpos_block-objectid.
ls_event_log-activityname = 'Return Order Block Removed'.
CONVERT DATE ls_block_change-udate TIME ls_block_change-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_block_change-username.
CLEAR: ls_event_log-returnreason, ls_event_log-materialnumber, ls_event_log-requestedrefundamount, ls_event_log-actualrefundamount.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDIF.
" Get subsequent documents from flow
SELECT vbelv, vbtyp_n, vbeln, rfbsk
INTO TABLE @DATA(lt_doc_flow)
FROM vbfa
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbelv = @lt_return_orders-vbeln
AND vbtyp_n IN ('J', 'R', 'M'). " J=Delivery, R=Goods Mvmt, M=Invoice
" 3. Return Delivery Created
SELECT vbeln, erdat, erzet, ernam FROM likp
INTO TABLE @DATA(lt_deliveries)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'J'.
LOOP AT lt_deliveries INTO DATA(ls_delivery).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_del) WITH KEY vbeln = ls_delivery-vbeln.
ls_event_log-returncaseid = ls_doc_flow_del-vbelv.
ls_event_log-activityname = 'Return Delivery Created'.
CONVERT DATE ls_delivery-erdat TIME ls_delivery-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_delivery-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 4. Goods Receipt Posted
SELECT mblnr, mjahr, budat, cputm, usnam FROM mkpf
INTO TABLE @DATA(lt_goods_receipt)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE xblnr = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'R'.
LOOP AT lt_goods_receipt INTO DATA(ls_goods_receipt).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_gr) WITH KEY vbeln = ls_goods_receipt-mblnr.
ls_event_log-returncaseid = ls_doc_flow_gr-vbelv.
ls_event_log-activityname = 'Goods Receipt Posted'.
CONVERT DATE ls_goods_receipt-budat TIME ls_goods_receipt-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_goods_receipt-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 5. Usage Decision Made (Requires QM Module implementation)
SELECT q~prueflos, q~vdatu, q~vzeit, q~vname
FROM qals AS q
INNER JOIN qave AS v ON q~prueflos = v~prueflos
INTO TABLE @DATA(lt_usage_decisions)
FOR ALL ENTRIES IN @lt_deliveries
WHERE q~kdauf = @lt_deliveries-vbeln.
LOOP AT lt_usage_decisions INTO DATA(ls_ud).
SELECT SINGLE vbelv FROM vbfa INTO @DATA(lv_vbelv_ud) WHERE vbeln = @ls_ud-prueflos.
ls_event_log-returncaseid = lv_vbelv_ud.
ls_event_log-activityname = 'Usage Decision Made'.
CONVERT DATE ls_ud-vdatu TIME ls_ud-vzeit INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_ud-vname.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 7. Credit Memo Created
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, i~netwr, i~vgbel
INTO TABLE @DATA(lt_cred_memos)
FROM vbrk AS h
INNER JOIN vbrp AS i ON h~vbeln = i~vbeln
FOR ALL ENTRIES IN @lt_doc_flow
WHERE h~vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'M'.
LOOP AT lt_cred_memos INTO DATA(ls_cred_memo).
ls_event_log-returncaseid = ls_cred_memo-vgbel.
ls_event_log-activityname = 'Credit Memo Created'.
CONVERT DATE ls_cred_memo-erdat TIME ls_cred_memo-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_cred_memo-ernam.
ls_event_log-actualrefundamount = ls_cred_memo-netwr.
APPEND ls_event_log TO lt_event_log.
" 8. Credit Memo Posted To FI
SELECT SINGLE budat, cputime, usnam FROM bkpf
INTO @DATA(ls_bkpf_post)
WHERE awkey = @ls_cred_memo-vbeln AND awtyp = 'VBRK'.
IF sy-subrc = 0.
ls_event_log-activityname = 'Credit Memo Posted To FI'.
CONVERT DATE ls_bkpf_post-budat TIME ls_bkpf_post-cputime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-processingagent = ls_bkpf_post-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 12. Credit Memo Cleared
SELECT SINGLE augdt FROM bseg
INTO @DATA(lv_augdt)
WHERE bukrs = @p_bukrs
AND belnr = @ls_cred_memo-vbeln
AND augdt IS NOT NULL.
IF sy-subrc = 0 AND lv_augdt IS NOT INITIAL.
ls_event_log-activityname = 'Credit Memo Cleared'.
CONVERT DATE lv_augdt INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
CLEAR: ls_event_log-processingagent.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 9. Return Order Item Completed
SELECT vbeln, erdat, erzet, ernam, abgru FROM vbap
INTO TABLE @DATA(lt_items_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_items_completed INTO DATA(ls_item_completed).
ls_event_log-returncaseid = ls_item_completed-vbeln.
ls_event_log-activityname = 'Return Order Item Completed'.
CONVERT DATE ls_item_completed-erdat TIME ls_item_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 10. Return Order Completed
SELECT vbeln, erdat, erzet, ernam FROM vbak
INTO TABLE @DATA(lt_orders_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_orders_completed INTO DATA(ls_order_completed).
ls_event_log-returncaseid = ls_order_completed-vbeln.
ls_event_log-activityname = 'Return Order Completed'.
CONVERT DATE ls_order_completed-erdat TIME ls_order_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_order_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 11. Return Order Item Rejected
SELECT vbeln, erdat, erzet, ernam FROM vbap
INTO TABLE @DATA(lt_items_rejected)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND abgru IS NOT NULL AND abgru <> ''.
LOOP AT lt_items_rejected INTO DATA(ls_item_rejected).
ls_event_log-returncaseid = ls_item_rejected-vbeln.
ls_event_log-activityname = 'Return Order Item Rejected'.
CONVERT DATE ls_item_rejected-erdat TIME ls_item_rejected-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_rejected-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
ENDIF.
" =======================================================================
" OUTPUT
" =======================================================================
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_alv)
CHANGING
t_table = lt_event_log ).
lo_alv->display( ). Schritte
- Voraussetzungen: Sie benötigen einen Datenbankbenutzer mit Leserechten für die relevanten SAP ECC Tabellen (SD, MM und FI). Nutzen Sie einen SQL-Client wie DBeaver, SAP HANA Studio oder Oracle SQL Developer für die Verbindung.
- Systembesonderheiten bestimmen: Ermitteln Sie die in Ihrem Unternehmen genutzten Belegarten für Retouren. Ersetzen Sie den Platzhalter
[YOUR_RETURN_ORDER_TYPES]in der Query durch die tatsächlichen Werte (z. B. „RE“). - Query vorbereiten: Kopieren Sie die vollständige SQL-Query aus dem Abschnitt „Query“ in Ihren SQL-Client.
- Parameter konfigurieren: Suchen Sie den CTE
BaseReturnOrdersam Anfang der Query. Passen Sie imWHERE-Teil den Zeitraum an ([START_DATE]und[END_DATE]). Aktualisieren Sie die Liste der Belegarten und filtern Sie bei Bedarf nach einem bestimmten Buchungskreis (BUKRS_VF). - Query ausführen: Starten Sie die Abfrage auf der SAP ECC Datenbank. Die Dauer hängt vom gewählten Zeitraum und der Datenbankgröße ab.
- Rohdaten prüfen: Kontrollieren Sie nach Abschluss kurz die Ergebnisse. Prüfen Sie, ob Spalten wie
ReturnCaseId,ActivityNameundEventTimebefüllt sind und verschiedene Aktivitäten enthalten. - CSV-Export: Exportieren Sie das gesamte Ergebnis als CSV-Datei. Wählen Sie UTF-8-Kodierung, um Sonderzeichen korrekt zu erhalten.
- Datei vorbereiten: Öffnen Sie die CSV und stellen Sie sicher, dass die Kopfzeilen exakt den Attributen entsprechen:
ReturnCaseId,ActivityName,EventTime,SourceSystemetc. Korrigieren Sie diese, falls der SQL-Client sie beim Export geändert hat. - Finaler Upload: Laden Sie die bereinigte CSV-Datei zur Analyse auf die ProcessMind-Plattform hoch.
Konfiguration
- Belegarten für Retouren: Die Query muss auf die spezifischen Verkaufsbelegarten konfiguriert werden, die in Ihrem SAP-System für Retouren stehen. Ersetzen Sie dazu den Platzhalter
[YOUR_RETURN_ORDER_TYPES]. Üblich sind „RE“ oder kundeneigene „Z“-Belegarten. - Datumsbereich: Die Definition eines passenden Zeitraums ist für die Extraktion entscheidend. Wir empfehlen für den Start 3 bis 6 Monate. Nutzen Sie die Platzhalter
[START_DATE]und[END_DATE]im Format „JJJJMMTT“. - Buchungskreis: Bei Unternehmen mit mehreren Buchungskreisen ist eine Filterung für eine fokussierte Analyse wichtig. Fügen Sie im initialen CTE einen Filter wie
VBAK.BUKRS_VF = '[YOUR_COMPANY_CODE]'hinzu. - Datenbank-Dialekt: Die Query nutzt Standard-SQL-Funktionen. Datums- und Zeitkonvertierungen wie
TO_TIMESTAMPoder String-Verknüpfungen (CONCAT) erfordern je nach Datenbanksystem (z. B. Oracle, HANA, DB2) eventuell leichte Syntax-Anpassungen. - Erforderliche Berechtigungen: Der Datenbankbenutzer benötigt Leserechte für folgende Tabellen: VBAK, VBAP, VBFA, LIKP, LIPS, VBRK, VBRP, MKPF, MSEG, BKPF, BSAD, QALS, QAVE, CDHDR und CDPOS.
a Beispielabfrage sql
WITH BaseReturnOrders AS (
SELECT
VBAK.VBELN AS ReturnOrderNumber,
VBAP.POSNR AS ReturnOrderItemNumber
FROM VBAK
JOIN VBAP ON VBAK.VBELN = VBAP.VBELN
WHERE VBAK.AUART IN ('[YOUR_RETURN_ORDER_TYPES]') -- e.g., 'RE'
AND VBAK.ERDAT BETWEEN '[START_DATE]' AND '[END_DATE]' -- e.g., '20230101' and '20231231'
)
-- 1. Return Order Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBAK.ERDAT, VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
UNION ALL
-- 2. Return Order Block Removed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Block Removed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAK'
AND CDPOS.FNAME IN ('LIFSK', 'FAKSK')
AND CDPOS.VALUE_NEW = ''
AND CDPOS.VALUE_OLD <> ''
UNION ALL
-- 3. Return Delivery Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(LIKP.ERDAT, LIKP.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
LIKP.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIKP ON VBFA.VBELN = LIKP.VBELN
UNION ALL
-- 4. Goods Receipt Posted
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Goods Receipt Posted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(MKPF.CPUDT, MKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
MKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIPS ON VBFA.VBELN = LIPS.VBELN AND VBFA.POSNN = LIPS.POSNR
JOIN MSEG ON LIPS.VBELN = MSEG.LFBNR AND LIPS.POSNR = MSEG.LFPOS
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART IN ('651', '653', '655') -- Standard returns movement types
UNION ALL
-- 5. Usage Decision Made
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Usage Decision Made' AS "ActivityName",
TO_TIMESTAMP(CONCAT(QAVE.ADAT, QAVE.ATIM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
QAVE.AENAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN QALS ON VBFA.VBELN = QALS.VBELN AND VBFA.POSNN = QALS.POSNR -- Linking inspection lot to delivery item
JOIN QAVE ON QALS.PRUEFLOS = QAVE.PRUEFLOS
UNION ALL
-- 6. Credit Memo Request Created (assumes a separate doc, or can be the return order itself)
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CMR_VBAK.ERDAT, CMR_VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CMR_VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'K' -- 'K' is Credit Memo Request
JOIN VBAK AS CMR_VBAK ON VBFA.VBELN = CMR_VBAK.VBELN
UNION ALL
-- 7. Credit Memo Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBRK.ERDAT, VBRK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBRK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
WHERE VBRK.FKART IN ('[YOUR_CREDIT_MEMO_TYPES]') -- e.g., 'G2'
UNION ALL
-- 8. Credit Memo Posted To FI
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Posted To FI' AS "ActivityName",
TO_TIMESTAMP(CONCAT(BKPF.CPUDT, BKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
BKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BKPF ON VBRK.VBELN = BKPF.AWKEY AND BKPF.AWTYP = 'VBRK'
UNION ALL
-- 9. Return Order Item Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUP'
AND CDPOS.FNAME = 'GBSTA'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 10. Return Order Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUK'
AND CDPOS.FNAME = 'GBSTK'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 11. Return Order Item Rejected
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Rejected' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
CDPOS.VALUE_NEW AS "ReturnReason", -- Using rejection reason for this specific event
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAP'
AND CDPOS.FNAME = 'ABGRU'
AND CDPOS.VALUE_NEW <> ''
UNION ALL
-- 12. Credit Memo Cleared
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Cleared' AS "ActivityName",
TO_TIMESTAMP(BSAD.AUGDT, 'YYYYMMDD') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CLEAR_DOC.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BSAD ON VBRK.VBELN = BSAD.VBELN
JOIN BKPF AS CLEAR_DOC ON BSAD.AUGBL = CLEAR_DOC.BELNR AND BSAD.BUKRS = CLEAR_DOC.BUKRS AND BSAD.GJAHR_AUGL = CLEAR_DOC.GJAHR;