Uw Order to Cash - Billing & Invoicing Data Template
Uw Order to Cash - Billing & Invoicing Data Template
- Aanbevolen attributen voor uitgebreide analyse
- Belangrijke processtappen en mijlpalen om te volgen
- Praktische richtlijnen voor data-extractie voor SAP ECC
Order to Cash - Facturatie & Debiteurenbeheer Attributes
| Naam | Omschrijving | ||
|---|---|---|---|
| Activiteit ActivityName | De name of the business event or step that occurred within the invoice lifecycle. | ||
| Omschrijving Dit attribute beschrijft een specifieke actie of statuswijziging in het facturatieproces, zoals 'Factuur gegenereerd' of 'Klantbetaling ontvangen'. Deze activiteiten worden afgeleid van systeemevents of specifieke transactiecodes. De volgorde van deze activiteiten vormt de procesflow: de basis voor process mining. Door de activiteiten te bestuderen, begrijpen organisaties welke stappen in welke volgorde worden gezet. Zo wordt de werkelijke uitvoering zichtbaar vergeleken met het ontworpen proces. Het belang Het definieert de steps in de process map, allowing for the visualization and analysis of process flows, deviations, and bottlenecks. Vindplaats Dit is een conceptual attribute derived from multiple sources, such as transaction codes (CDHDR-TCODE), document status changes (VBUK-FKSTK), and accounting document postings. Voorbeelden Factuur OpgesteldFactuur geboektBetalingsherinnering VerzondenFactuur afgeletterd | |||
| Factuurnummer InvoiceNumber | De unique identifier for the billing document, serving as the primary case ID for the invoicing process. | ||
| Omschrijving Het Invoice Number, known as the Billing Document Number in SAP, uniquely identifies each invoice. In process mining, it acts as the CaseId, grouping all related activities such as creation, posting, sending, payment, and clearing into a single end-to-end process instance. Analyzing processes by Invoice Number allows for a complete view of the lifecycle of each billing transaction, from its inception to its final settlement. This is crucial for calculating key performance indicators like Days Sales Outstanding (DSO) and overall invoice cycle time, providing a clear basis for performance measurement and improvement. Het belang Het is de essentiële key for tracking an invoice's entire journey, enabling analysis of cycle times, bottlenecks, and variations for each individual billing transaction. Vindplaats SAP ECC Tabel: VBRK, Veld: VBELN Voorbeelden 90001234900012359000123690001237 | |||
| Starttijd EventTime | De tijdstempel die aangeeft wanneer een specifieke activiteit of gebeurtenis heeft plaatsgevonden. | ||
| Omschrijving Event Time legt de precieze datum en tijd vast van elke activiteit in de factuurlevenscyclus. Deze timestamp is fundamenteel voor alle tijdgebaseerde analyses in process mining, inclusief het berekenen van doorlooptijden, het identificeren van knelpunten en het monitoren van procesprestaties ten opzichte van service level agreements. Dit attribuut wordt doorgaans geconstrueerd door een datumveld, zoals Boekingsdatum (BUDAT), te combineren met een tijdveld (UZEIT) uit diverse SAP-tabellen die wijzigingen of documentaanmaak vastleggen. Nauwkeurige timestamps zijn cruciaal voor het bouwen van een betrouwbare event log en het waarborgen van de geldigheid van elke prestatieanalyse. Het belang Dit attribute vormt de basis voor elke prestatieanalyse en maakt het mogelijk om doorlooptijden en wachttijden tussen processtappen te berekenen. Vindplaats Opgebouwd uit diverse datum- en tijdvelden over meerdere tabellen heen, zoals BKPF (BUDAT, CPUTM), VBRK (ERDAT, ERZET), en wijzigingslogtabellen zoals CDHDR (UDATE, UTIME). Voorbeelden 2023-04-15T10:30:00Z2023-04-16T11:00:00Z2023-05-20T09:00:00Z | |||
| Bedrijfscode CompanyCode | De identifier for the legal entity that issued the invoice. | ||
| Omschrijving De Company Code represents an independent legal and accounting unit in SAP. All financial transactions, including invoices, are posted to a specific company code. This is a fundamental organizational data element. In a process mining context, Company Code is used to analyze and compare billing process performance across different legal entities within a corporation. This helps identify best practices in one entity that could be applied to others and ensures that analysis respects the company's organizational structure. Het belang Maakt het mogelijk processen te filteren en te vergelijken over verschillende juridische entiteiten heen, wat fundamenteel is voor financiële analyse en organisatorische benchmarking. Vindplaats SAP ECC Tabel: VBRK, Veld: BUKRS Voorbeelden 10002000US01DE01 | |||
| Factuurdocumenttype BillingDocumentType | Een code die het type factuurdocument categoriseert, zoals een factuur, creditnota of debetnota. | ||
| Omschrijving Het Billing Document Type classificeert transactions into distinct categories based on their business purpose. For example, 'F2' is a standard customer invoice, while 'G2' represents a credit memo. This classification is configured in SAP to control how different billing documents are processed. For process mining, this attribute is essential for filtering and comparing different billing scenarios. Analysts can examine the process for standard invoices separately from credit memos to understand their unique flows, cycle times, and challenges, leading to more targeted process improvements. Het belang Maakt de segmentatie en analyse mogelijk van verschillende facturatieprocessen, zoals standaardfacturen versus creditnota's, die vaak zeer verschillende procesflows hebben. Vindplaats SAP ECC Tabel: VBRK, Veld: FKART Voorbeelden F2G2L2IV | |||
| Gebruikersnaam UserName | Het ID van de user who executed the activity or created the document. | ||
| Omschrijving Dit attribute legt de SAP-gebruikers-ID vast van de persoon die verantwoordelijk is voor een event, zoals het aanmaken van een factuur. Dit is essentieel voor het analyseren van de menselijke factor in het proces. Met deze data kunt u prestatieverschillen tussen gebruikers of teams onderzoeken, trainingsbehoeften identificeren en compliance-risico's opsporen. Ook wordt het gebruikt om onderscheid te maken tussen handmatige acties en geautomatiseerde stappen door het systeem, wat cruciaal is voor het berekenen van de automatiseringsgraad. Het belang Maakt analyse van gebruikersprestaties, workloadverdeling mogelijk, en helpt onderscheid te maken tussen handmatige en geautomatiseerde activiteiten, ter ondersteuning van automatiserings- en efficiëntie-initiatieven. Vindplaats SAP ECC Tabel: VBRK, Veld: ERNAM (Aangemaakt door) of BKPF, Veld: USNAM (Gebruikersnaam) of CDHDR, Veld: USERNAME (Gebruiker). Voorbeelden JSMITHBW_BATCH`LROSSI`MKUMAR | |||
| Klantnummer CustomerNumber | Een uniek nummer dat de klant identificeert aan wie de factuur is gericht. | ||
| Omschrijving Het Customer Number links an invoice to a specific client or business partner. This attribute is critical for segmenting and analyzing the billing process based on customer characteristics. Analysts can use this field to compare Days Sales Outstanding (DSO) across different customers, identify which customers frequently pay late, or analyze payment term compliance. Understanding these patterns is key to managing customer relationships and improving cash collection strategies tailored to different customer segments. Het belang Maakt klantgerichte analyse mogelijk, wat helpt bij het identificeren van betalingsgedrag, de DSO per klant te beoordelen, en incassostrategieën op maat te maken. Vindplaats SAP ECC Tabel: VBRK, Veld: KUNRG (Betaler) of KUNAG (Verkocht aan partij). Voorbeelden 100023200541CUST-A487910345 | |||
| Totaal Factuurbedrag TotalInvoiceAmount | De total net value of the billing document. | ||
| Omschrijving Dit attribute staat voor het totale nettobedrag van de factuur, exclusief btw. Dit bedrag is een essentieel financieel gegeven in het facturatieproces. Het wordt gebruikt voor diverse analyses, zoals het segmenteren van facturen op waarde om te zien of procesflows verschillen. Ook helpt het bij het prioriteren van incassotrajecten of het onderzoeken waarom grote facturen langer op goedkeuring wachten. Deze financi le context verdiept de procesanalyse aanzienlijk. Het belang Biedt essentiële financiële context, waardoor analysis based on invoice value, such as identifying if high-value invoices follow a different process or take longer to clear, mogelijk is. Vindplaats SAP ECC Tabel: VBRK, Veld: NETWR Voorbeelden 1500.7525000.00500.0012345.67 | |||
| Betalingstermijnen PaymentTerms | De conditions under which a seller will complete a sale, including the payment schedule. | ||
| Omschrijving Payment Terms definiëren de regels voor wanneer een payment is due, such as 'Net 30' or 'Net 60'. These terms are agreed upon with the customer and are a key factor in determining cash flow. Analyzing the process by payment terms can reveal if certain terms are associated with longer payment cycles or higher rates of late payments. This insight can help the business negotiate better terms with customers or adjust its financial planning. It is also a key input for calculating the invoice due date. Het belang Helpt bij het analyseren van het betalingsgedrag van klanten en de impact op de cashflow, gebaseerd op overeengekomen voorwaarden. Dit levert inzichten op voor het optimaliseren van commerciële afspraken. Vindplaats SAP ECC Tabel: VBRK, Veld: ZTERM Voorbeelden Z030Z060Z001 | |||
| Boekingsdatum PostingDate | De date on which the document is posted to the financial accounting books. | ||
| Omschrijving De Posting Date determines the fiscal period in which the transaction is recorded in the General Ledger. It is a critical date for accounting and financial reporting. Delays between the document creation date and the posting date can indicate inefficiencies in the internal handling of billing documents. From a process mining view, de posting date marks a key milestone in the invoice lifecycle. The time lag between invoice generation and posting can be a key performance indicator for the billing department's efficiency. Het belang Dit is een belangrijke financi le mijlpaal voor de boekhouding. De tijd tussen het aanmaken en boeken van een factuur is een cruciale maatstaf voor de interne effici nti . Vindplaats SAP ECC Tabel: BKPF, Veld: BUDAT Voorbeelden 2023-04-152023-04-172023-05-21 | |||
| Bronsysteem SourceSystem | Identificeert het bronsysteem waaruit de data is geëxtraheerd. | ||
| Omschrijving Dit attribute geeft aan uit welk bronsysteem de data afkomstig is. In een omgeving met meerdere ERP-systemen helpt dit veld om data uit verschillende bronnen te onderscheiden. Voor process mining is dit essentieel voor datavalidatie en het vergelijken van processen tussen verschillende systemen of bedrijfsonderdelen. Het wordt meestal als een vaste waarde toegevoegd tijdens het extractieproces om de dataset te labelen. Het belang Biedt context voor de data's origin, which is crucial in environments with multiple systems for ensuring data integrity and enabling system-specific analysis. Vindplaats Dit is meestal een vaste waarde die wordt toegevoegd tijdens het ETL-proces om de specifieke SAP ECC-instantie te identificeren (bijv. 'ECC_PROD_NA'). Voorbeelden SAP_ECC_PROD`ECC_EU_100`SAP_US_FIN | |||
| Documentdatum DocumentDate | De date on the original document, provided by the vendor or creator. | ||
| Omschrijving De Document Date is de date the original document was issued. For billing, this is typically the date the invoice was created and is often used as the basis for calculating the payment due date. This date is crucial for financial reporting and for calculating key metrics like Days Sales Outstanding (DSO). It represents the starting point of the collection period from the customer's point of view. Analyzing discrepancies between the document date and the posting date can reveal internal delays in processing incoming invoices. Het belang Dient als basis voor het berekenen van de ouderdom van facturen en de DSO, wat essentieel is voor de analyse van betalingstermijnen. Vindplaats SAP ECC Tabel: VBRK, Veld: FKDAT (Factuurdatum) Voorbeelden 2023-04-152023-04-162023-05-20 | |||
| Is Geautomatiseerd IsAutomated | Een vlag die aangeeft of een activiteit werd uitgevoerd door een systeemgebruiker of door middel van automatisering. | ||
| Omschrijving Dit berekende attribute is een boolean die onderscheid maakt tussen handmatige en geautomatiseerde activiteiten. Dit gebeurt meestal door de gebruikersnaam te controleren tegen een lijst met bekende systeem- of batchgebruikers zoals 'BATCHUSER'. Deze indicator is essentieel om de mate van automatisering in het facturatieproces te meten. De KPI voor de automatiseringsgraad wordt direct op basis van dit attribute berekend, waarmee de voortgang van automatiseringsinitiatieven wordt gemonitord. Het belang Ondersteunt direct de berekening van het geautomatiseerde facturatiepercentage, wat helpt bij het meten van procesefficiëntie en de impact van automatiseringsprojecten te volgen. Vindplaats Afgeleid van het Gebruikersnaam attribuut. De logica zou zoiets zijn als: IF UserName IN ('BATCH', 'SYSTEM', 'RFCUSER') THEN true ELSE false. Voorbeelden truefalse | |||
| Is herstelwerk IsRework | Een vlag die aangeeft of een activiteit een rework- of correctiestap is. | ||
| Omschrijving Dit berekende attribute identificeert herstelwerkzaamheden (rework), zoals gecorrigeerde facturen of documentstorno's. Het is meestal een boolean die wordt afgeleid van de activiteitsnaam of transactiecodes zoals 'VF11' (factuur annuleren). In process mining is deze indicator onmisbaar om de hoeveelheid herstelwerk in het proces te kwantificeren. Het ondersteunt KPI's zoals de 'Invoice Correction Rate' en maakt rework-loops zichtbaar in de proceskaart, wat ineffici nties blootlegt die de kosten verhogen en betalingen vertragen. Het belang Helpt bij het kwantificeren van procesinefficiënties en kwaliteitsproblemen door inzicht te geven in hoeveel inspanning wordt besteed aan het corrigeren van fouten, wat direct de KPI's voor herstelwerkzaamheden ondersteunt. Vindplaats Afgeleid van de Activiteitsnaam of Transactiecode. Bijvoorbeeld: IF ActivityName = 'Invoice Corrected' OR TransactionCode = 'VF11' THEN true ELSE false. Voorbeelden truefalse | |||
| Laatste data-update LastDataUpdate | De tijdstempel van de meest recente verversing of extractie van gegevens uit het bronsysteem. | ||
| Omschrijving Dit attribute geeft aan wanneer de dataset voor het laatst is bijgewerkt vanuit het bronsysteem. Dit biedt belangrijke context, zodat gebruikers weten hoe actueel de getoonde data is. In dashboards en rapporten informeert deze timestamp stakeholders over de tijdigheid van de gegevens. Dit helpt bij het managen van verwachtingen over de zichtbaarheid van zeer recente transacties. Het belang Informeert gebruikers over de actualiteit van de data, wat cruciaal is voor het nemen van operationele beslissingen op basis van de analyse. Vindplaats Gegenereerd en opgeslagen tijdens het data-extractie-, transformatie- en laadproces (ETL). Voorbeelden 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
| Transactiecode TransactionCode | De SAP transaction code used to perform an activity. | ||
| Omschrijving De Transaction Code, or T-Code, is een unique identifier for a specific function or program in SAP, such as 'VF01' for creating a billing document. Capturing the T-Code for each event provides a technical, system-level view of how a process was executed. This information is highly valuable for root cause analysis. For example, if errors are common, analysts can check if a non-standard transaction code is being used. It also helps in deriving the activity name and understanding which system functionalities are employed in the process. Het belang Biedt technische context voor hoe een activity was performed, enabling root cause analysis of process deviations and helping to identify non-standard user actions. Vindplaats SAP ECC Tabel: CDHDR, Veld: TCODE Voorbeelden VF01VF02FB01F-28 | |||
| Valuta Currency | De currency code for the amounts specified in the invoice. | ||
| Omschrijving Dit attribute geeft de valuta van de transactie aan (zoals USD, EUR of JPY) en biedt de nodige context voor bedragen zoals het totale factuurbedrag. Bij analyses voor multinationals is dit veld onmisbaar om financi le cijfers correct te interpreteren en om te rekenen. Het maakt consistente rapportage mogelijk en voorkomt dat bedragen zonder conversie worden samengevoegd, wat tot foutieve analyses zou leiden. Het belang Biedt de necessary context for all monetary values, ensuring accurate financial analysis, especially in a multi-currency environment. Vindplaats SAP ECC Tabel: VBRK, Veld: WAERK Voorbeelden USDEURGBPJPY | |||
| Valutadatum ClearingDate | De date when the payment was received and the invoice was cleared from accounts receivable. | ||
| Omschrijving De Clearing Date is de datum waarop een open item, like an invoice, is marked as paid or 'cleared' in the financial system. This date effectively represents when the cash is considered collected and reconciled. This is one of the most important dates in the Order to Cash cycle. It serves as the end point for calculating Days Sales Outstanding (DSO) and the overall invoice-to-cash cycle time. Analyzing the clearing date helps measure the effectiveness of the collections process. Het belang Dit is de laatste stap in de factuurcyclus. Het dient als einddatum voor de berekening van de DSO en de totale doorlooptijd, en weerspiegelt hoe effici nt betalingen worden ge nd. Vindplaats SAP ECC Tabel: BSAD, Veld: AUGDT Voorbeelden 2023-05-142023-06-012023-06-25 | |||
| Verkoopdocumentnummer SalesDocumentNumber | De identifier of the original sales order that led to the invoice. | ||
| Omschrijving Dit attribute legt de directe link tussen de factuur en de verkooporder waar het mee begon. Deze traceerbaarheid is cruciaal voor een volledige end-to-end Order to Cash-analyse. Door de facturatie te koppelen aan de voorafgaande verkooporder, kunnen organisaties de totale doorlooptijd van bestelling tot betaling analyseren. Dit helpt bepalen of vertragingen ontstaan bij verkoop, logistiek of de facturatieafdeling zelf, wat een holistisch beeld van het proces geeft. Het belang Koppelt het billing process back to the sales order, enabling a true end-to-end Order to Cash analysis and helping to identify cross-departmental delays. Vindplaats SAP ECC Tabel: VBRP, Veld: VGBEL Voorbeelden 100000451000004610000047 | |||
| Verkooporganisatie SalesOrganization | De organisatie-eenheid die verantwoordelijk is voor de verkoop van producten of diensten. | ||
| Omschrijving De Sales Organization is an organizational unit in SAP responsible for distributing goods and services and negotiating sales conditions. It is a key field for structuring sales and distribution operations. In process mining, this attribute allows for the analysis of the billing process from a sales structure point of view. It enables performance comparison between different sales organizations, helping to identify which regions or business lines are more efficient in their billing processes and supporting initiatives to standardize best practices. Het belang Maakt prestatiebenchmarking en analyse mogelijk over verschillende verkoopdivisies of regio's heen, wat helpt bij het identificeren van best practices en verbeterpunten. Vindplaats SAP ECC Tabel: VBRK, Veld: VKORG Voorbeelden 1000NA01EU01AP01 | |||
| Vervaldatum factuur InvoiceDueDate | De date by which the customer is expected to make the payment. | ||
| Omschrijving De Invoice Due Date is de deadline for payment as specified by the payment terms. This date is fundamental for managing accounts receivable and initiating collections activities. This attribute is used to calculate the On-Time Payment Rate KPI by comparing it with the actual payment date. Analyzing invoices by their due date helps in forecasting cash flow and prioritizing collection efforts for upcoming or overdue payments. It is typically derived from the baseline date and the payment terms. Het belang Dit is de maatstaf voor het meten van tijdige betalingen en is essentieel voor het beheer van debiteuren en liquiditeitsprognoses. Vindplaats Berekend op basis van de basisdatum (BSEG-ZFBDT) en betalingstermijnen (BSEG-ZTERM). Het is niet altijd opgeslagen in een direct veld. Voorbeelden 2023-05-152023-05-302023-06-20 | |||
Order to Cash - Facturatie & Debiteurenbeheer Activiteiten
| Activiteit | Omschrijving | ||
|---|---|---|---|
| Factuur afgeletterd | De final status of a successfully paid invoice, indicating that the open item has been closed by a corresponding payment or credit memo. The invoice is considered fully settled. | ||
| Het belang Dit markeert de succesvolle afronding van de Order to Cash-cyclus voor een factuur. Dit is het belangrijkste eind-event voor het meten van de gemiddelde doorlooptijd van facturen. Vindplaats Dit vindt plaats wanneer de velden voor het vereffeningsdocument (AUGBL) en de vereffeningsdatum (AUGDT) zijn ingevuld voor de factuurregel in de BSEG-tabel. Vastleggen Event vindt plaats op de clearingdatum (AUGDT) vastgelegd in de BSEG-tabel voor de factuurregel. Gebeurtenistype explicit | |||
| Factuur geboekt | De factuur is officieel vastgelegd in de debiteurenadministratie en het grootboek. Hiermee is de factuur rechtsgeldig en wordt de openstaande vordering van de klant zichtbaar. | ||
| Het belang Dit is een cruciale mijlpaal die officieel de incassoperiode start. De tijd tussen de aanmaak en de boeking brengt interne vertragingen in kaart die de cashflow be nvloeden. Vindplaats Geregistreerd in tabel BKPF. De boekingsdatum (BUDAT) voor het documentnummer (BELNR) markeert dit event. Bij geparkeerde documenten is dit het moment waarop ze worden omgezet in een geboekt document. Vastleggen Van boekingsdatum (BUDAT) in tabel BKPF voor het factuurdocument. Gebeurtenistype explicit | |||
| Factuur Naar Klant Verzonden | Geeft aan dat de factuur via een gedefinieerd outputkanaal, zoals print, email, of EDI, naar de klant is verzonden. Dit wordt doorgaans vastgelegd in de logs van het output management systeem. | ||
| Het belang Dit event is een belangrijke mijlpaal die de betalingstermijn van de klant start. Vertragingen hier hebben direct invloed op wanneer een betaling kan worden verwacht en be nvloeden de effici nti van de incasso. Vindplaats Kan worden afgeleid uit de verwerkingsdatum en -tijd in de berichtstatus tabel (NAST) voor het uitvoertype dat overeenkomt met de factuur. Vastleggen Afgeleid uit NAST table entry met verwerkingsstatus '1' (succesvol verwerkt). Gebeurtenistype inferred | |||
| Factuur Opgesteld | Hiermee wordt de aanmaak van het facturatiedocument in het systeem gemarkeerd. Dit event wordt geregistreerd wanneer er een nieuwe invoer verschijnt in de tabel voor boekhoudingsdocumenten (BKPF) met een specifiek documenttype voor facturen. | ||
| Het belang Dit is het startpunt van het gehele facturatieproces. Het analyseren van de tijd vanaf dit event helpt bij het meten van de doorlooptijd van factuurcreatie en vormt de basis voor het berekenen van de DSO. Vindplaats Geregistreerd in tabel BKPF. De aanmaakdatum (CPUDT) en tijd (CPUTM) voor een specifiek documentnummer (BELNR) markeren dit event. Het documenttype (BLART) identificeert het als een factuur. Vastleggen Van aanmaak timestamp (CPUDT) in tabel BKPF voor het factuurdocument. Gebeurtenistype explicit | |||
| Klantbetaling Ontvangen | Een betaling is ontvangen van de klant en geboekt in het systeem als een kaskwijt of bankstorting. Dit creëert een apart betalingsdocument dat nog niet is toegepast op de specifieke factuur. | ||
| Het belang Dit is een belangrijke mijlpaal in de cash conversion cycle. De tijd tussen het verzenden van de factuur en de ontvangst van de betaling is een hoofdbestanddeel van de DSO (Days Sales Outstanding). Vindplaats Geregistreerd als een nieuw document in BKPF en BSEG, meestal met een documenttype voor klantbetalingen (zoals 'DZ'). De boekingsdatum (BUDAT) markeert het event. Vastleggen Van boekingsdatum van het klantbetalingsdocument in BKPF. Gebeurtenistype explicit | |||
| Betaling Toegepast op Factuur | De ontvangen betaling is gekoppeld aan de specifieke openstaande factuur, waardoor de post kan worden vereffend. Dit is de reconciliatiestap die de betaling verbindt met de vordering. | ||
| Het belang Deze activiteit is essentieel voor het meten van de doorlooptijd van de cash application. Vertragingen hierbij kunnen een vertekend beeld geven van de werkelijke status van de debiteuren en de beschikbare liquide middelen maskeren. Vindplaats Afgeleid van de clearing transactie, bijv. F-32, die de clearing fields in de invoice line item invult. De event timestamp is de clearing date. Vastleggen Afgeleid uit de clearing date (AUGDT) die is ingevuld in de invoice line item table (BSEG). Gebeurtenistype inferred | |||
| Betalingsherinnering Verzonden | Het systeem heeft een aanmaning of betalingsherinnering gegenereerd en verzonden voor een achterstallige factuur. Dit wordt geregistreerd vanuit de dunning history logs. | ||
| Het belang Helpt bij het evalueren van de effectiviteit van de incassostrategie. Het analyseren van de tijd tussen een herinnering en de ontvangst van de betaling is cruciaal voor de KPI 'Effectiviteit Betalingsherinneringen'. Vindplaats Geregistreerd in de tabellen voor aanmaningen, specifiek MHNK (kopgegevens) en MHND (regelitems), die worden gegenereerd door de dunning run (Transactie F150). Vastleggen Vastgelegd bij de uitvoering van een dunning run (F150) voor de overdue item. Gebeurtenistype explicit | |||
| Dispute Case Aangemaakt | Een formeel dispuut is geregistreerd tegen de factuur, doorgaans als gevolg van klachten van klanten. Dit wordt vastgelegd in het SAP Dispute Management systeem. | ||
| Het belang Identificeert facturen die risico lopen op vertraagde betaling en belicht onderliggende problemen die leiden tot ontevredenheid bij klanten. Dit markeert het begin van een belangrijk proces voor uitzonderingsafhandeling. Vindplaats Vastgelegd vanuit de aanmaak van een case in de dispute case tabel (UDM_CASE), gekoppeld aan het boekhoudkundige document van de factuur. Vastleggen Vastgelegd wanneer een user creates a dispute case via transaction UDM_DISPUTE. Gebeurtenistype explicit | |||
| Factuur afgeschreven | Een alternatieve eindstatus waarbij de factuur als oninbaar wordt beschouwd en het openstaande bedrag wordt afgeboekt tegen een dubieuze debiteurenrekening. Dit sluit de factuur zonder een klantbetaling. | ||
| Het belang Vertegenwoordigt een negative process outcome and revenue loss. Tracking these events helps in analyzing bad debt reasons and improving credit management policies. Vindplaats Afgeleid door de clearing transactie voor de factuur te analyseren. Als het clearing document wordt geboekt op een specifieke grootboekrekening voor dubieuze debiteuren, wordt de factuur als afgeschreven beschouwd. Vastleggen Afgeleid wanneer de clearing transactie een boeking op een aangewezen bad debt G/L account omvat. Gebeurtenistype inferred | |||
| Factuur Gecorrigeerd | Vertegenwoordigt een rework activity where an initial invoice was found to be incorrect and was subsequently reversed. This is captured by identifying reversal documents linked to the original invoice. | ||
| Het belang Benadrukt procesinefficiënties en kwaliteitsproblemen. Een hoge frequentie van correcties duidt op problemen in de upstream verkoop- of facturatiedata, ter ondersteuning van het 'Invoice Rework And Error Rates' dashboard. Vindplaats Geïdentificeerd door een omkeringsdocument te vinden waarbij BKPF-STBLG verwijst naar het originele document. De aanmaak van dit omkeringsdocument is de event. Vastleggen Vastgelegd wanneer een reversal document is created (e.g., via FB08). Gebeurtenistype explicit | |||
| Factuur geparkeerd | De factuur is opgeslagen in een voorlopige status zonder in het grootboek te zijn geboekt. Dit gebeurt vaak wanneer informatie onvolledig is of controle vereist is v r de definitieve boeking. | ||
| Het belang Houdt stappen v r het boeken en mogelijke vertragingen bij. Een lange periode in de geparkeerde status kan wijzen op datakwaliteitsproblemen of knelpunten in het goedkeuringsproces. Vindplaats Geparkeerde documenten worden opgeslagen in tabel VBKPF. De aanmaak van een document dat later wordt geboekt, duidt op deze activiteit. Vastleggen Vastgelegd bij het opslaan van een parked document using a transaction like FV70. Gebeurtenistype explicit | |||
| Factuur Goedgekeurd | Dit staat voor de formele goedkeuring van de factuur, waarna deze kan worden geboekt of verzonden. Dit wordt vaak afgeleid wanneer een geparkeerd document wordt omgezet in een geboekt document. | ||
| Het belang Volgt de interne workflow voor goedkeuring, een veelvoorkomende bron van bottlenecks. Het analyseren van deze activiteit ondersteunt dashboards voor goedkeuringsprocessen door trage goedkeurders te identificeren. Vindplaats Kan worden afgeleid uit de overgang van een document van geparkeerde status (in VBKPF) naar geboekte status (in BKPF). Als alternatief, indien een workflow systeem wordt gebruikt, kan dit een expliciet event zijn in workflow logs. Vastleggen Vergelijk aanmaakdatum van geparkeerd document (VBKPF) met boekingsdatum van definitief document (BKPF). Gebeurtenistype inferred | |||
| Factuur Vervaldatum Bereikt | Een berekend event dat de dag markeert waarop de factuurbetaling officieel verschuldigd is volgens de betalingstermijnen. Het is geen activiteit die door een gebruiker of systeem wordt uitgevoerd, maar een kritiek moment in de tijd. | ||
| Het belang Essentieel voor het analyseren van betalingsgedrag en compliance. Het is de basis voor het bepalen van tijdige versus late betalingen en het berekenen van de On-Time Payment Rate KPI. Vindplaats Afgeleid door de huidige datum te vergelijken met de netto vervaldatum. De vervaldatum is te vinden in veld BSEG-ZFBDT of berekend uit de basisdatum en betalingstermijnen. Vastleggen Vergelijk systeemdatum met het netto vervaldatum veld in de factuurregel (BSEG). Gebeurtenistype calculated | |||
Extractie Guides
Stappen
- Toegang ABAP Editor: Log in op uw SAP ECC systeem. Navigeer naar de ABAP Editor met transactiecode
SE38. - Programma aanmaken: Voer een naam in voor uw nieuwe programma in het Programmaveld, bijvoorbeeld
Z_PM_O2C_INVOICE_EXTRACT, en klik op de knop Aanmaken. Geef een beschrijvende titel op en stel het programmatype in op 'Executable Program'. - Selectiescherm definiëren: Definieer in de programma broncode de selectieschermparameters. Dit stelt gebruikers in staat de data voor extractie te filteren. Belangrijke parameters zijn onder meer het datumbereik voor documentaanmaak (
S_ERDAT), Bedrijfscode (S_BUKRS) en Factuurdocumenttype (S_VBTYP). - Datastructuren definiëren: Declareer een interne tabelstructuur die de uiteindelijke event log data zal bevatten. Deze structuur moet velden bevatten voor
Factuurnummer,Activiteitsnaam,EventTime, en aanbevolen attributes zoalsGebruikersnaam,Factuurdocumenttype,Klantnummer,BedrijfscodeenTotaalFactuurbedrag. - Dataselectielogica implementeren: Schrijf de kern ABAP-logica om data te selecteren. Selecteer eerst de primaire factuurdocumenten uit tabellen
VBRKenBKPFgebaseerd op de invoer van het selectiescherm van de gebruiker. Sla deze op in een tijdelijke interne tabel. - Activiteiten extraheren: Loop door de initiële lijst van factuurdocumenten. Voer voor elk document vervolgens selecties uit verschillende tabellen uit om de 13 vereiste activiteiten te identificeren. Query bijvoorbeeld tabel
NASTvoor 'Factuur Verzonden naar Klant' events,BSEGvoor clearing-informatie ('Factuur Gecleard', 'Betaling Toegepast'), enMHNKvoor aanmaningsdata ('Betalingsherinnering Verzonden'). - Event Log Tabel opbouwen: Vul voor elke activiteit die in de vorige stap is gevonden een nieuw record in in uw uiteindelijke event log interne tabel. Zorg ervoor dat het
Factuurnummer, deActiviteitsnaam, hetEventTimeen andere attributes correct zijn toegewezen vanuit de brontabellen. - Schrijven naar Applicatieserver: Zodra de loop voltooid is en de uiteindelijke event log tabel volledig gevuld is, gebruikt u de
OPEN DATASET,LOOP AT... TRANSFERenCLOSE DATASETstatements om de inhoud van de interne tabel naar een flat file te schrijven op de SAP applicatieserver. Specificeer een logisch bestandspad dat toegankelijk is. - Bestand ophalen: Gebruik transactiecode
AL11om door de applicatieserverdirectory's te navigeren en het gegenereerde bestand te lokaliseren. Coördineer met uw SAP Basis team om het bestand van de server naar uw lokale machine of een gedeelde netwerklocatie te downloaden. - Definitieve opmaak: Open het gedownloade bestand en bevestig dat het een komma-gescheiden waarde (CSV) bestand is met een header rij. Zorg ervoor dat het bestand is opgeslagen met UTF-8 codering om compatibel te zijn met ProcessMind voor upload.
Configuratie
- Vereisten: Toegang om ABAP-programma's aan te maken en uit te voeren (transactie SE38). Autorisatie om te lezen uit FI- en SD-tabellen, inclusief
VBRK,VBRP,BKPF,BSEG,NAST,MHNKenUDM_CASE_ATTR00(voor Dispute Management). - Datumbereikselectie: Het programma moet een verplichte datumbereikparameter hebben, doorgaans gebaseerd op de documentaanmaakdatum (
ERDATin VBRK/BKPF). Voor de initiële extractie wordt een bereik van 3-6 maanden aanbevolen om de dataset beheersbaar te houden. - Belangrijke filters: Filter altijd op
Bedrijfscode(BUKRS) om de reikwijdte van de extractie te beperken. Het wordt ook sterk aanbevolen om te filteren op Factuurdocumenttype (VBTYPuit VBRK) of Boekhoudingsdocumenttype (BLARTuit BKPF) om alleen relevante factuurtypen op te nemen, bijvoorbeeld 'RV' voor standaardboekhoudkundige facturen, en creditnota's of andere documenten uit te sluiten. - Prestatieoverwegingen: Voor grote datasets die meer dan een paar maanden beslaan, moet het programma worden uitgevoerd als een achtergrondtaak om sessietime-outs te voorkomen. De ABAP-logica moet worden geoptimaliseerd om geïndexeerde tabellezingen te gebruiken en geneste loops met databaseselecties daarin te vermijden. Eerst data in interne tabellen selecteren en deze vervolgens verwerken is de voorkeursaanpak.
- Configuratie uitvoerbestand: De ABAP-code moet het pad van het uitvoerbestand op de applicatieserver en het scheidingsteken voor het CSV-bestand specificeren, doorgaans een komma of puntkomma. Zorg ervoor dat het pad een globaal geconfigureerde en toegankelijke directory is.
a Voorbeeldquery abap
REPORT Z_PM_O2C_INVOICE_EXTRACT.
*&---------------------------------------------------------------------*
*& Tables
*&---------------------------------------------------------------------*
TABLES: VBRK, BKPF.
*&---------------------------------------------------------------------*
*& Type Definitions for Event Log Output
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
invoicenumber TYPE vbrk-vbeln,
activityname TYPE string,
eventtime TYPE timestamp,
username TYPE xubname,
billingdocumenttype TYPE vbrk-vbtyp,
customernumber TYPE vbrk-kunnr,
companycode TYPE vbrk-bukrs,
totalinvoiceamount TYPE vbrk-netwr,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: gt_event_log TYPE TABLE OF ty_event_log,
gs_event_log TYPE ty_event_log.
DATA: BEGIN OF gs_invoice,
vbeln TYPE vbrk-vbeln, " SD Doc (Invoice)
awkey TYPE bkpf-awkey, " Accounting Doc Reference Key
bukrs TYPE vbrk-bukrs, " Company Code
kunnr TYPE vbrk-kunnr, " Customer
vbtyp TYPE vbrk-vbtyp, " SD Doc Type
netwr TYPE vbrk-netwr, " Net Value
waerk TYPE vbrk-waerk, " Currency
fkdat TYPE vbrk-fkdat, " Billing Date
erdat TYPE vbrk-erdat, " Creation Date
erzet TYPE vbrk-erzet, " Creation Time
ernam TYPE vbrk-ernam, " Creator
belnr TYPE bkpf-belnr, " Acct Doc
gjahr TYPE bkpf-gjahr, " Fiscal Year
cpudt TYPE bkpf-cpudt, " Acct Doc Entry Date
cputm TYPE bkpf-cputm, " Acct Doc Entry Time
usnam TYPE bkpf-usnam, " Acct Doc User
stblg TYPE bkpf-stblg, " Reversal Doc
END OF gs_invoice.
DATA: gt_invoices LIKE TABLE OF gs_invoice.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_erdat FOR vbrk-erdat OBLIGATORY,
s_bukrs FOR vbrk-bukrs OBLIGATORY,
s_vbtyp FOR vbrk-vbtyp.
PARAMETERS: p_path TYPE string DEFAULT '/usr/sap/trans/tmp/invoice_extract.csv' OBLIGATORY.
*&---------------------------------------------------------------------*
*& Main Processing Block
*&---------------------------------------------------------------------*
START-OF-SELECTION.
" 1. Select base set of invoices
SELECT vbrk~vbeln, vbrk~bukrs, vbrk~kunnr, vbrk~vbtyp, vbrk~netwr, vbrk~waerk,
vbrk~fkdat, vbrk~erdat, vbrk~erzet, vbrk~ernam,
bkpf~belnr, bkpf~gjahr, bkpf~cpudt, bkpf~cputm, bkpf~usnam, bkpf~stblg, bkpf~awkey
INTO CORRESPONDING FIELDS OF TABLE gt_invoices
FROM vbrk
INNER JOIN bkpf ON bkpf~awkey = vbrk~vbeln AND bkpf~awtyp = 'VBRK'
WHERE vbrk~erdat IN s_erdat
AND vbrk~bukrs IN s_bukrs
AND vbrk~vbtyp IN s_vbtyp.
IF gt_invoices IS INITIAL.
MESSAGE 'No invoices found for the selected criteria.' TYPE 'I'.
RETURN.
ENDIF.
LOOP AT gt_invoices INTO gs_invoice.
CLEAR gs_event_log.
gs_event_log-invoicenumber = gs_invoice-vbeln.
gs_event_log-billingdocumenttype = gs_invoice-vbtyp.
gs_event_log-customernumber = gs_invoice-kunnr.
gs_event_log-companycode = gs_invoice-bukrs.
gs_event_log-totalinvoiceamount = gs_invoice-netwr.
" Activity: Invoice Generated (using accounting doc creation)
gs_event_log-activityname = 'Invoice Generated'.
gs_event_log-username = gs_invoice-usnam.
CONCATENATE gs_invoice-cpudt gs_invoice-cputm INTO DATA(lv_ts_gen).
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Posted (same as generated for non-parked docs)
gs_event_log-activityname = 'Invoice Posted'.
gs_event_log-username = gs_invoice-usnam.
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Approved (inferred by posting)
gs_event_log-activityname = 'Invoice Approved'.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Sent To Customer
SELECT SINGLE addat, aduhr FROM nast
INTO (DATA(lv_nast_date), DATA(lv_nast_time))
WHERE kappl = 'V3' AND objky = gs_invoice-vbeln AND vszst > '0'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Sent To Customer'.
gs_event_log-username = sy-uname.
CONVERT DATE lv_nast_date TIME lv_nast_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Corrected / Reversed
IF gs_invoice-stblg IS NOT INITIAL.
SELECT SINGLE cpudt, cputm, usnam FROM bkpf
INTO (DATA(lv_rev_date), DATA(lv_rev_time), DATA(lv_rev_user))
WHERE belnr = gs_invoice-stblg AND gjahr = gs_invoice-gjahr.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Corrected'.
gs_event_log-username = lv_rev_user.
CONVERT DATE lv_rev_date TIME lv_rev_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
" Activity: Payment Applied, Cleared, Due Date, Written Off (from BSEG)
SELECT SINGLE augdt, augbl, zfBDT, hkont FROM bseg
INTO (DATA(lv_augdt), DATA(lv_augbl), DATA(lv_zfbdt), DATA(lv_hkont))
WHERE bukrs = gs_invoice-bukrs
AND belnr = gs_invoice-belnr
AND gjahr = gs_invoice-gjahr
AND koart = 'D'. " Customer line
IF sy-subrc = 0.
" Due Date Reached (Calculated event)
IF lv_zfbdt IS NOT INITIAL.
gs_event_log-activityname = 'Invoice Due Date Reached'.
gs_event_log-username = 'System'.
CONVERT DATE lv_zfbdt INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Cleared, Applied, Write-Off
IF lv_augdt IS NOT INITIAL.
SELECT SINGLE usnam, cpudt, cputm, blart FROM bkpf
INTO (DATA(lv_clear_user), DATA(lv_clear_date), DATA(lv_clear_time), DATA(lv_clear_type))
WHERE belnr = lv_augbl AND bukrs = gs_invoice-bukrs.
IF sy-subrc = 0.
gs_event_log-username = lv_clear_user.
CONVERT DATE lv_clear_date TIME lv_clear_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
IF lv_clear_type = 'DZ'. " Standard Customer Payment
gs_event_log-activityname = 'Customer Payment Received'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Payment Applied To Invoice'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Invoice Cleared'. APPEND gs_event_log TO gt_event_log.
ELSE. " Assuming other clearing doc types could be write-offs
gs_event_log-activityname = 'Invoice Written Off'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
" Activity: Payment Reminder Issued (Dunning)
SELECT COUNT(*) FROM mhnk WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
IF sy-subrc = 0 AND sy-dbcnt > 0.
SELECT SINGLE lafdn FROM mhnk
INTO DATA(lv_dunning_date)
WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
gs_event_log-activityname = 'Payment Reminder Issued'.
gs_event_log-username = 'System'.
CONVERT DATE lv_dunning_date INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Parked (Example from VBKPF, may require system specific logic)
SELECT SINGLE cpudt, cputm, usnam FROM vbkpf
INTO (DATA(lv_park_date), DATA(lv_park_time), DATA(lv_park_user))
WHERE awkey = gs_invoice-vbeln AND awsys = 'LOG' AND bstat = 'V'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Parked'.
gs_event_log-username = lv_park_user.
CONVERT DATE lv_park_date TIME lv_park_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Dispute Case Created (Requires Dispute Management module)
SELECT SINGLE create_date, create_time, create_user FROM udm_case_attr00
INTO (DATA(lv_disp_date), DATA(lv_disp_time), DATA(lv_disp_user))
WHERE [Your logic to link invoice to dispute case, e.g., via a custom field or object link].
IF sy-subrc = 0.
gs_event_log-activityname = 'Dispute Case Created'.
gs_event_log-username = lv_disp_user.
CONVERT DATE lv_disp_date TIME lv_disp_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Write data to file
*&---------------------------------------------------------------------*
OPEN DATASET p_path FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
ENDIF.
" Header
DATA(lv_header) = 'InvoiceNumber,ActivityName,EventTime,UserName,BillingDocumentType,CustomerNumber,CompanyCode,TotalInvoiceAmount'.
TRANSFER lv_header TO p_path.
LOOP AT gt_event_log INTO gs_event_log.
DATA(lv_line) = |
{ gs_event_log-invoicenumber }|
,{ gs_event_log-activityname }|
,{ gs_event_log-eventtime }|
,{ gs_event_log-username }|
,{ gs_event_log-billingdocumenttype }|
,{ gs_event_log-customernumber }|
,{ gs_event_log-companycode }|
,{ gs_event_log-totalinvoiceamount }|.
TRANSFER lv_line TO p_path.
ENDLOOP.
CLOSE DATASET p_path.
WRITE: 'Extraction complete. File created at:', p_path. Stappen
- Vereisten en toegang: Zorg ervoor dat u een databasegebruiker heeft met alleen-lezen toegang tot de benodigde SAP ECC-tabellen, inclusief VBRK, BKPF, BSAD, NAST, CDHDR, CDPOS, SCASE, en andere die in de query zijn gespecificeerd. Dit toegangsniveau wordt doorgaans alleen verleend aan systeembeheerders of specifieke data-analyseteams.
- Verbinden met de database: Gebruik een standaard SQL-clienttool, zoals DBeaver, Oracle SQL Developer, of Microsoft SQL Server Management Studio, om een verbinding met de SAP ECC-database tot stand te brengen.
- SQL-query voorbereiden: Kopieer de volledige SQL-query uit de sectie 'query' naar de editor van uw SQL-client.
- Placeholders aanpassen: De query bevat verschillende placeholders die u moet vervangen door waarden die specifiek zijn voor uw omgeving. Deze omvatten:
'YYYYMMDD': Vervang alle instanties door de start- en einddatums voor uw gewenste analyseperiode. Het is cruciaal om de data te filteren tot een beheersbaar tijdsbestek.'XXXX': Vervang door de specifieke Bedrijfscode(s) die u wilt analyseren.[Uw Factuur Uitvoertype]: Specificeer de uitvoertype code die wordt gebruikt voor het verzenden van facturen naar klanten, bijvoorbeeld 'RD00'.[Uw Dubieuze Debiteuren Grootboekrekening]: Voer het grootboekrekeningnummer in dat wordt gebruikt voor het afschrijven van oninbare facturen.[Uw Dispute Case Factuur Attribuut]: Specificeer de attribuutnaam die wordt gebruikt voor het opslaan van het factuurnummer in uw Dispute Management configuratie, bijvoorbeeld 'INVOICE_ID'.
- Timestamp-functies controleren: De query gebruikt een generieke
CAST(CONCAT(date_field, time_field) AS TIMESTAMP)syntaxis. Mogelijk moet u dit aanpassen aan uw specifieke databasesysteem, bijvoorbeeld doorTO_TIMESTAMPvoor Oracle ofDATETIMEFROMPARTSvoor SQL Server te gebruiken. - Query uitvoeren: Voer de aangepaste query uit. De uitvoering kan aanzienlijk veel tijd in beslag nemen, afhankelijk van de grootte van uw SAP-tabellen en het geselecteerde datumbereik.
- Resultaten inspecteren: Zodra de query voltooid is, controleert u de uitvoer om ervoor te zorgen dat het de verwachte kolommen bevat: Factuurnummer, Activiteitsnaam, EventTime, en de aanbevolen attributes. Controleer op eventuele fouten of lege resultaten.
- Exporteren naar CSV: Exporteer de complete resultaatset vanuit uw SQL-client naar een CSV-bestand. Zorg ervoor dat het bestand UTF-8 codering gebruikt om problemen met speciale tekens te voorkomen.
- Voorbereiden op upload: Voordat u uploadt naar een process mining tool, bevestig dat de CSV-kolomheaders exact overeenkomen met de vereiste attribuutnamen, bijvoorbeeld
Factuurnummer,Activiteitsnaam,EventTime,Gebruikersnaam.
Configuratie
- Databaseverbinding: Een directe, alleen-lezen SQL-verbinding met de onderliggende SAP ECC database is vereist. Deze methode omzeilt de SAP-applicatielaag volledig.
- Autorisatie: De databasegebruiker moet
SELECT-rechten hebben op alle tabellen die in de query worden gebruikt, welke de FI-, SD- en mogelijk FSCM-modules beslaan. - Datumbereik: Het is cruciaal om de query te filteren op een specifiek datumbereik om redelijke prestaties en datavolume te waarborgen. Wij adviseren te beginnen met een periode van 3 tot 6 maanden. De datumfilter-placeholders
'YYYYMMDD'moeten op meerdere plaatsen in de query worden ingesteld. - Bedrijfscodefilter: De query is ontworpen om te filteren op Bedrijfscode (
BUKRS). Het analyseren van één of enkele bedrijfscodes tegelijk is een standaardprocedure. - Configuratie Documenttype: De logica voor het identificeren van events zoals factuurcorrecties, afschrijvingen of verzonden documenten is afhankelijk van standaard SAP-configuraties. U moet mogelijk de query aanpassen als uw organisatie aangepaste documenttypes (
BLART), uitvoertypen (KSCHL), of grootboekrekeningen voor deze processen gebruikt. - Prestatieoverwegingen: Het uitvoeren van deze query op een live productie-SAP-systeem kan aanzienlijke resources verbruiken en de operationele prestaties beïnvloeden. Het wordt sterk aanbevolen om grote extracties uit te voeren buiten de piekuren of op een specifieke rapportagereplica van de database.
a Voorbeeldquery sql
WITH InvoiceBase AS (
SELECT
VBRK.VBELN AS InvoiceNumber,
VBRK.FKART AS BillingDocumentType,
VBRK.KUNRG AS CustomerNumber,
VBRK.BUKRS AS CompanyCode,
VBRK.NETWR AS TotalInvoiceAmount,
VBRK.ERNAM AS CreatorName,
VBRK.ERDAT AS CreationDate,
VBRK.ERZET AS CreationTime
FROM VBRK
WHERE VBRK.ERDAT BETWEEN '20230101' AND '20231231' -- Filter by Invoice Creation Date
AND VBRK.BUKRS IN ('1000') -- Filter by Company Code
AND VBRK.FKART NOT IN ('S1', 'S2') -- Exclude cancelled invoices
)
-- 1. Invoice Generated
SELECT
ib.InvoiceNumber,
'Invoice Generated' AS ActivityName,
CAST(CONCAT(ib.CreationDate, ib.CreationTime) AS TIMESTAMP) AS EventTime,
ib.CreatorName AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM InvoiceBase ib
UNION ALL
-- 2. Invoice Parked
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Parked' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = 'V' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 3. Invoice Posted
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Posted' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = '' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 4. Invoice Approved (from Parked to Posted)
SELECT
SUBSTRING(h.OBJECTID, 4, 10) AS InvoiceNumber,
'Invoice Approved' as ActivityName,
CAST(CONCAT(h.UDATE, h.UTIME) AS TIMESTAMP) AS EventTime,
h.USERNAME AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM CDHDR h
JOIN CDPOS p ON h.MANDANT = p.MANDANT AND h.OBJECTCLAS = p.OBJECTCLAS AND h.OBJECTID = p.OBJECTID AND h.CHANGENR = p.CHANGENR
JOIN InvoiceBase ib ON SUBSTRING(h.OBJECTID, 4, 10) = ib.InvoiceNumber
WHERE h.OBJECTCLAS = 'BELEGV'
AND p.TABNAME = 'BKPF'
AND p.FNAME = 'BSTAT'
AND p.VALUE_OLD = 'V'
AND p.VALUE_NEW = ' '
AND h.UDATE BETWEEN '20230101' AND '20231231'
UNION ALL
-- 5. Invoice Sent To Customer
SELECT
n.OBJKY AS InvoiceNumber,
'Invoice Sent To Customer' AS ActivityName,
CAST(CONCAT(n.DATVR, n.UHRVR) AS TIMESTAMP) AS EventTime,
n.VSTAT AS UserName, -- User who processed is not directly available, using processing status as a proxy
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM NAST n
JOIN InvoiceBase ib ON n.OBJKY = ib.InvoiceNumber
WHERE n.KSCHL = '[Your Invoice Output Type]' -- E.g., 'RD00'
AND n.VSTAT = '1' -- Processed successfully
AND n.DATVR BETWEEN '20230101' AND '20231231'
UNION ALL
-- 6. Invoice Corrected (Reversed)
SELECT
SUBSTRING(orig_doc.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Corrected' AS ActivityName,
CAST(CONCAT(rev_doc.CPUDT, rev_doc.CPUTM) AS TIMESTAMP) AS EventTime,
rev_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
rev_doc.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF orig_doc
JOIN BKPF rev_doc ON orig_doc.STBLG = rev_doc.BELNR AND orig_doc.BUKRS = rev_doc.BUKRS AND orig_doc.GJAHR = rev_doc.STJAH
JOIN InvoiceBase ib ON SUBSTRING(orig_doc.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE orig_doc.AWTYP = 'VBRK' AND orig_doc.STBLG IS NOT NULL AND rev_doc.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 7. Invoice Due Date Reached
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Due Date Reached' AS ActivityName,
CAST(CONCAT(bs.ZFBDT, '000000') AS TIMESTAMP) AS EventTime,
'System' AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSEG bs
JOIN BKPF b ON bs.MANDT = b.MANDT AND bs.BUKRS = b.BUKRS AND bs.BELNR = b.BELNR AND bs.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND bs.KOART = 'D' AND bs.ZFBDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 8. Payment Reminder Issued
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Payment Reminder Issued' AS ActivityName,
CAST(CONCAT(h.LAUFD, '000000') AS TIMESTAMP) AS EventTime,
h.LAUFI AS UserName, -- Dunning Run ID
ib.BillingDocumentType,
ib.CustomerNumber,
d.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM MHND d
JOIN MHNK h ON d.MANDT = h.MANDT AND d.LAUFD = h.LAUFD AND d.LAUFI = h.LAUFI
JOIN BKPF b ON d.MANDT = b.MANDT AND d.BUKRS = b.BUKRS AND d.BELNR = b.BELNR AND d.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE h.LAUFD BETWEEN '20230101' AND '20231231'
UNION ALL
-- 9. Dispute Case Created
SELECT
attr.ATTR_VALUE AS InvoiceNumber,
'Dispute Case Created' AS ActivityName,
sc.CREATE_TIME AS EventTime,
sc.CREATED_BY AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM SCMG_T_CASE_ATTR attr
JOIN SCASE sc ON attr.CASE_GUID = sc.CASE_GUID
JOIN InvoiceBase ib ON attr.ATTR_VALUE = ib.InvoiceNumber
WHERE attr.ATTR_NAME = '[Your Dispute Case Invoice Attribute]' -- e.g., 'INVOICE_ID'
AND CAST(sc.CREATE_TIME AS DATE) BETWEEN '20230101' AND '20231231'
UNION ALL
-- 10, 11, 12. Clearing Events (Payment, Clearing, Write-Off)
SELECT
InvoiceNumber,
ActivityName,
EventTime,
UserName,
BillingDocumentType,
CustomerNumber,
CompanyCode,
TotalInvoiceAmount
FROM (
SELECT
bsad.XBLNR AS InvoiceNumber,
CASE
WHEN clearing_item.HKONT = '[Your Bad Debt G/L Account]' THEN 'Invoice Written Off'
ELSE 'Customer Payment Received'
END AS ActivityName,
CAST(CONCAT(clearing_doc.CPUDT, clearing_doc.CPUTM) AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
LEFT JOIN BSEG clearing_item ON clearing_doc.MANDT = clearing_item.MANDT AND clearing_doc.BUKRS = clearing_item.BUKRS AND clearing_doc.BELNR = clearing_item.BELNR AND clearing_doc.GJAHR = clearing_item.GJAHR AND clearing_item.HKONT = '[Your Bad Debt G/L Account]' -- e.g. '148000'
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Payment Applied To Invoice' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '000000') AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Invoice Cleared' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '235959') AS TIMESTAMP) AS EventTime, -- Add time to separate from 'Payment Applied'
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
) AS ClearingEvents Stappen
- Vereisten: Zorg ervoor dat u een gelicentieerde ETL tool heeft met een gecertificeerde SAP-connector (bijv. Informatica PowerCenter met SAP Connector, Talend met SAP Connector, etc.). Verifieer dat u SAP-gebruikersreferenties heeft met de nodige autorisaties om te lezen uit de vereiste financiële, verkoop- en systeemtabellen (BKPF, BSEG, VBRK, NAST, MHNK, UDM_CASE_ATTR00, CDHDR, CDPOS).
- SAP-verbinding tot stand brengen: Creëer in uw ETL tool een nieuwe verbinding met uw SAP ECC systeem. Configureer de verbindingsdetails, inclusief applicatieserver, systeemnummer, client, gebruiker en wachtwoord. Test de verbinding om er zeker van te zijn dat deze succesvol is.
- Databronnen definiëren: Definieer voor elke te extraheren activiteit de corresponderende SAP-tabel(len) als databron in uw ETL-job. Voeg bijvoorbeeld VBRK toe voor factuuraanmaak, BKPF voor boekings-events en NAST voor klantcommunicatie.
- Extractielogica voor elke activiteit opbouwen: Creëer een aparte dataflow of transformatie voor elk van de 13 vereiste activiteiten. Pas in elke flow filters toe om de relevante records te selecteren. Filter bijvoorbeeld op Bedrijfscode (BUKRS), documenttype (BLART) en een specifiek datumbereik (bijv. aanmaakdatum ERDAT).
- Velden toewijzen en data transformeren: Wijs in elke dataflow de bron SAP-tabelvelden toe aan de doel event log structuur: Factuurnummer, Activiteitsnaam, EventTime, Gebruikersnaam, en andere aanbevolen attributes. Gebruik transformatielogica om de 'Activiteitsnaam' voor elke flow te hardcoden en datums en timestamps correct te formatteren.
- Complexe activiteiten verwerken: Voor berekende events zoals 'Factuur Vervaldatum Bereikt', gebruikt u de Betaalbasisdatum (ZFBDT) en betalingstermijnlogica om de vervaldatum te berekenen, of haalt u eenvoudigweg de Netto Vervaldatum (NETDT) uit BSEG. Voor events afgeleid uit wijzigingslogs zoals 'Factuur Goedgekeurd', moet u mogelijk tabellen zoals BKPF en CDHDR/CDPOS joinen gebaseerd op het documentnummer en de datum.
- Activiteitsdata combineren: Gebruik een 'Union' of 'Merge' transformatie in uw ETL tool om de outputs van alle 13 individuele dataflows te combineren in een enkele dataset. Zorg ervoor dat de kolomnamen en datatypes consistent zijn over alle flows heen vóór de union.
- Doelbestemming configureren: Definieer de uiteindelijke uitvoerbestemming voor uw event log. Dit kan een flat file (CSV), een databasetabel, of een directe verbinding met een staging area zijn.
- Extractieschema instellen: Configureer de datumbereikparameters voor de extractie. Voor de initiële load, zou u 6-12 maanden aan data kunnen extraheren. Voor volgende delta loads, configureer de job om data te extraheren vanaf de laatste uitvoerdatum.
- Uitvoeren en exporteren: Voer de ETL-job uit. Zodra deze voltooid is, inspecteer het uitvoerbestand om ervoor te zorgen dat het voldoet aan het vereiste formaat. De uiteindelijke uitvoer moet een enkel CSV-bestand zijn waarbij elke rij een uniek event vertegenwoordigt, klaar voor upload naar ProcessMind.
Configuratie
- SAP-verbinding: Een applicatieserververbinding met het doelsysteem SAP ECC is vereist. De SAP-gebruiker heeft RFC-toegang en autorisaties nodig voor tabellen zoals VBRK, BKPF, BSEG, NAST en andere die in de query zijn gespecificeerd.
- ETL Tool Licentie: Een geldige licentie voor de commerciële ETL tool en de specifieke SAP-connector is verplicht.
- Datumbereik: Het wordt aanbevolen om data te extraheren voor een periode van 3 tot 6 maanden om een representatieve steekproef voor analyse te garanderen zonder overmatige systeembelasting te veroorzaken. Gebruik een configureerbare parameter voor de start- en einddatums.
- Belangrijke filters: Filter altijd op Bedrijfscode (BUKRS) om de reikwijdte van de extractie te beperken. Het is ook cruciaal om te filteren op de relevante Factuurdocumenttypes (VBRK-FKART) en Boekhoudingsdocumenttypes (BKPF-BLART) om alleen standaardfacturen op te nemen en andere documenttypen zoals creditnota's of interne documenten uit te sluiten.
- Prestaties: Extraheren uit grote tabellen zoals BSEG kan traag zijn. Gebruik selectieve filters, vermijd het extraheren van onnodige velden en plan de extractie buiten de piekuren om de prestatie-impact op het SAP-bronsysteem te minimaliseren.
a Voorbeeldquery config
// ETL Data Extraction Logic for SAP Order-to-Cash Invoicing
// This represents the configuration logic within a graphical ETL tool.
// == Global Parameters ==
// $StartDate: '[Start Date]' (e.g., '2023-01-01')
// $EndDate: '[End Date]' (e.g., '2023-06-30')
// $CompanyCodes: '[Company Code(s)]' (e.g., '1000', '2000')
// $BillingDocTypes: '[Billing Document Type(s)]' (e.g., 'F1', 'F2')
// == Source 1: Invoice Generated ==
// Tables: VBRK
DATA_SOURCE generated_invoices FROM VBRK WHERE
ERDAT >= $StartDate AND ERDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND FKART IN ($BillingDocTypes)
MAP {
InvoiceNumber: VBELN,
ActivityName: 'Invoice Generated',
EventTime: ERDAT + ERZET, // Combine date and time
UserName: ERNAM,
BillingDocumentType: FKART,
CustomerNumber: KUNAG,
CompanyCode: BUKRS,
TotalInvoiceAmount: NETWR
}
// == Source 2: Invoice Posted ==
// Tables: BKPF joined with VBRK
DATA_SOURCE posted_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Posted',
EventTime: A.BUDAT + A.CPUTM, // Posting date and entry time
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 3: Invoice Parked ==
// Tables: BKPF joined with VBRK
DATA_SOURCE parked_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.CPUDT >= $StartDate AND A.CPUDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = 'V'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Parked',
EventTime: A.CPUDT + A.CPUTM,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 4: Invoice Approved (Transition from Parked to Posted) ==
// Tables: BKPF joined with VBRK
DATA_SOURCE approved_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
AND EXISTS (SELECT 1 FROM VBELEGV C WHERE C.BELNR = A.BELNR) // Check if it was ever parked
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Approved',
EventTime: A.BUDAT + A.CPUTM, // Use posting date as approval date
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 5: Invoice Sent To Customer ==
// Tables: NAST joined with VBRK
DATA_SOURCE sent_invoices FROM NAST as A
INNER JOIN VBRK as B ON (A.OBJKY = B.VBELN)
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND B.BUKRS IN ($CompanyCodes)
AND A.VSTAT = '1' // Successfully processed
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Sent To Customer',
EventTime: A.ERDAT + A.ERUHR,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: B.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 6: Invoice Corrected (Reversed) ==
// Tables: VBRK (for the reversal document)
DATA_SOURCE corrected_invoices FROM VBRK as A
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.SFAKN <> '' // SFAKN is the original cancelled invoice
MAP {
InvoiceNumber: A.SFAKN, // Case ID is the original invoice
ActivityName: 'Invoice Corrected',
EventTime: A.ERDAT + A.ERZET,
UserName: A.ERNAM,
BillingDocumentType: A.FKART,
CustomerNumber: A.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: NULL // Amount belongs to the reversal doc, not original
}
// == Source 7: Invoice Due Date Reached ==
// Tables: BSEG joined with VBRK
DATA_SOURCE due_invoices FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.NETDT >= $StartDate AND A.NETDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.KOART = 'D' // Customer line item
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Due Date Reached',
EventTime: A.NETDT, // Net due date
UserName: 'System',
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 8: Payment Reminder Issued ==
// Tables: MHNK, MHND, VBRK
DATA_SOURCE reminders FROM MHNK as A
INNER JOIN MHND as D ON (A.LAUFD = D.LAUFD AND A.LAUFI = D.LAUFI)
INNER JOIN VBRK as B ON (SUBSTRING(D.XBLNR, 1, 10) = B.VBELN) // XBLNR may need parsing
WHERE A.LAUFD >= $StartDate AND A.LAUFD <= $EndDate
AND D.BUKRS IN ($CompanyCodes)
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Reminder Issued',
EventTime: A.LAUFD, // Dunning date
UserName: A.IDAPS,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: D.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 9: Dispute Case Created ==
// Tables: UDM_CASE_ATTR00
DATA_SOURCE disputes FROM UDM_CASE_ATTR00 as A
WHERE A.CREATE_TIMESTAMP >= $StartDate // Timestamp format may vary
AND A.FIN_COMP_CODE IN ($CompanyCodes)
AND A.PROCESS = 'FIN_FSCM_DIS'
MAP {
InvoiceNumber: A.BILL_DOC_ID,
ActivityName: 'Dispute Case Created',
EventTime: A.CREATE_TIMESTAMP,
UserName: A.CREATE_USER,
BillingDocumentType: NULL,
CustomerNumber: A.BP_NUMBER,
CompanyCode: A.FIN_COMP_CODE,
TotalInvoiceAmount: A.DISPUTED_AMOUNT
}
// == Source 10: Customer Payment Received ==
// Tables: BKPF
DATA_SOURCE payments FROM BKPF
WHERE BUDAT >= $StartDate AND BUDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND BLART = 'DZ' // Example for Customer Payment
MAP {
InvoiceNumber: NULL, // Invoice not yet known
ActivityName: 'Customer Payment Received',
EventTime: BUDAT + CPUTM,
UserName: USNAM,
BillingDocumentType: NULL,
CustomerNumber: NULL, // Requires join to BSEG to get customer
CompanyCode: BUKRS,
TotalInvoiceAmount: NULL
}
// == Source 11 & 12: Payment Applied To Invoice & Invoice Cleared ==
// Tables: BSEG joined with VBRK
DATA_SOURCE cleared_items FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.AUGBL <> ''
// Generate two records from this source
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Applied To Invoice',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM, // User from header of original invoice doc
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
UNION WITH {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Cleared',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 13: Invoice Written Off ==
// Tables: BSEG (for the invoice line) and BKPF (for clearing doc type)
DATA_SOURCE written_off FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
INNER JOIN BKPF as C ON (A.AUGBL = C.BELNR AND A.BUKRS = C.BUKRS AND A.AUGGJ = C.GJAHR)
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND C.BLART = '[Your Write-Off Document Type]' // e.g., 'AB'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Written Off',
EventTime: A.AUGDT,
UserName: C.USNAM, // User who posted the write-off
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Final Union of all sources ==
OUTPUT generated_invoices
UNION ALL posted_invoices
UNION ALL parked_invoices
UNION ALL approved_invoices
UNION ALL sent_invoices
UNION ALL corrected_invoices
UNION ALL due_invoices
UNION ALL reminders
UNION ALL disputes
UNION ALL payments
UNION ALL cleared_items
UNION ALL written_off