Uw Purchase to Pay - Factuurverwerking Data Template
Uw Purchase to Pay - Factuurverwerking Data Template
- Aanbevolen attributen om vast te leggen
- Belangrijkste activiteiten om te volgen
- Extractiehandleiding voor SAP ECC
Purchase to Pay - Factuurverwerkings-attributes
| Naam | Omschrijving | ||
|---|---|---|---|
| Activiteit Activity | De naam van een specifieke bedrijfsstap of event die plaatsvond tijdens de levenscyclus van factuurverwerking. | ||
| Omschrijving Het Activiteit attribuut vertegenwoordigt een afzonderlijke fase of actie binnen de factuurverwerkingsworkflow. Deze activiteiten zijn afgeleid van verschillende systeemevents, zoals documentcreatie, statuswijzigingen, goedkeuringen of gebruikersacties vastgelegd in SAP wijzigingslogs. Het analyseren van activiteiten is de kern van process mining. Het maakt de visualisatie van proceskaarten mogelijk, de identificatie van knelpunten (bijv. lange wachttijden na 'Factuur Verzonden ter Goedkeuring'), herstelwerkzaamheden (bijv. herhaalde cycli van 'Betalingsblokkade Ingesteld' en 'Betalingsblokkade Vrijgegeven') en compliance-afwijkingen. De sequentie en frequentie van activiteiten onthullen de daadwerkelijke, huidige (as-is) processtroom. Het belang Het definieert de stappen in de proceskaart, wat de visualisatie van processtromen, het ontdekken van knelpunten en de identificatie van herstelwerk mogelijk maakt. Vindplaats Dit attribuut is doorgaans afgeleid van meerdere bronnen, waaronder transactiecodes (SY-TCODE), statusvelden in tabellen zoals RBKP (bijv. RBSTAT), en wijzigingsevents uit tabellen CDHDR en CDPOS. Voorbeelden Factuur geparkeerdFactuur ter goedkeuring verzondenFactuur GoedgekeurdFactuur geboektFactuur afgeletterd | |||
| Factuurnummer InvoiceNumber | De unieke identificatie voor een leveranciersfactuurdocument. | ||
| Omschrijving Het Factuurnummer dient als de unieke case-identifier voor het factuurverwerkingsproces. Elk nummer komt overeen met één factuur die van een leverancier is ontvangen, waardoor alle gerelateerde activiteiten, van data-invoer tot uiteindelijke betaling, kunnen worden gevolgd als onderdeel van één cohesieve procesinstantie. In process mining-analyse is dit attribuut fundamenteel voor het reconstrueren van de end-to-end levenscyclus van elke factuur. Het maakt de verbinding mogelijk van verschillende events die in SAP zijn gelogd, zoals parkeren, boeken, blokkeren en vereffenen, tot een chronologische volgorde. Dit biedt een duidelijk beeld van hoe elke factuur wordt afgehandeld, hoe lang het duurt en waar afwijkingen van het standaardproces optreden. Het belang Dit is de primaire sleutel die alle events gerelateerd aan één factuur koppelt, waardoor het de essentiële basis vormt voor procesanalyse en variantverkenning. Vindplaats Dit is doorgaans het Documentnummer uit de SAP-tabel RBKP, veld BELNR, vaak samengevoegd met Bedrijfscode (BUKRS) en Boekjaar (GJAHR) voor absolute uniciteit. Voorbeelden 510004567851000456795100045680 | |||
| Tijdstip Gebeurtenis EventTime | De exacte tijdstempel, inclusief datum en tijd, waarop een activiteit plaatsvond. | ||
| Omschrijving Event Time registreert het exacte moment waarop een bedrijfsactiviteit werd uitgevoerd en vastgelegd in het bronsysteem. Deze timestamp is de chronologische ruggengraat van het proces en ordent alle activiteiten voor elke factuur in een coherente volgorde. Bij analyse is Event Time essentieel voor het berekenen van alle op duur gebaseerde metrics, zoals cyclustijden, wachttijden en verwerkingstijden tussen activiteiten. Het voedt dashboards zoals de 'Factuur End-to-End Cyclustijd' en 'Oplossingsduur Betalingsblokkade' door de data te leveren die nodig is om de verstreken tijd tussen twee punten in het proces te meten. Nauwkeurige timestamps zijn cruciaal voor het identificeren van vertragingen en prestatieknelpunten. Het belang Deze tijdstempel is essentieel voor het correct ordenen van events en het berekenen van alle prestatiemetrieken, zoals doorlooptijden en knelpuntduur. Vindplaats Dit wordt doorgaans afgeleid door het combineren van de wijzigingsdatum (UDATE) en wijzigingstijd (UTIME) uit de wijzigingsdocumentheadertabel, CDHDR. Voor specifieke creatie-events kan het de creatie datum en tijd zijn uit tabellen zoals RBKP (ERNAM, ERZET). Voorbeelden 2023-03-15T10:30:00Z2023-03-16T14:05:21Z2023-03-28T09:00:00Z | |||
| Boekingsdatum PostingDate | De datum waarop de factuur officieel werd geboekt op de financiële grootboekrekeningen. | ||
| Omschrijving De Boekingsdatum is een belangrijke datum in het boekhoudproces. Het bepaalt de fiscale periode waarin de factuurkosten in het Grootboek worden opgenomen. Deze wordt doorgaans vastgesteld door de crediteurenmedewerker tijdens de factuurverwerking. In procesanalyse is de activiteit 'Factuur Geboekt', gemarkeerd door deze datum, een belangrijke mijlpaal. De duur van factuurontvangst tot de Boekingsdatum is een cruciaal onderdeel van de totale doorlooptijd. Deze datum is ook fundamenteel voor financiële rapportage en doorvoeranalyse, zoals het volgen van het volume van facturen dat per week of maand wordt geboekt. Het belang Het markeert een kritieke mijlpaal in het proces, bepaalt de financiële periode voor de transactie en is een belangrijk onderdeel van de cyclustijdberekening. Vindplaats Dit is het 'Boekingsdatum' veld (BUDAT) uit de factuurdocumentheadertabel, RBKP. Voorbeelden 2023-03-202023-04-052023-04-11 | |||
| Factuurbedrag InvoiceAmount | Het totale brutobedrag van de factuur in de oorspronkelijke documentvaluta. | ||
| Omschrijving Factuurbedrag vertegenwoordigt de totale waarde van de factuur die door de leverancier is ingediend. Dit is een belangrijke financiële metric voor elke factuurcase. In process mining is dit attribuut essentieel voor waardegedreven analyse. Het maakt filtering en segmentering van het proces mogelijk op basis van de factuurwaarde, wat vaak correleert met procescomplexiteit en goedkeuringsvereisten. Bijvoorbeeld, facturen met een hoge waarde kunnen een ander, strenger goedkeuringstraject volgen. Het wordt ook gebruikt in compliance-analyse, bijvoorbeeld om te controleren of facturen met een hoge waarde vereiste goedkeuringsstappen omzeilen. Het belang Het maakt waardegedreven analyse mogelijk, helpt bij het prioriteren van facturen met hoge waarde en het begrijpen hoe het factuurbedrag de processtroom en compliance beïnvloedt. Vindplaats Dit is het 'Bruto factuurbedrag' veld (RMWWR) uit de factuurdocumentheadertabel, RBKP. Voorbeelden 1500.7512500.00850.20 | |||
| Gebruikersnaam UserName | De SAP gebruikers-ID van de persoon die de activiteit heeft uitgevoerd. | ||
| Omschrijving Het Gebruikersnaam-attribuut identificeert de specifieke persoon die verantwoordelijk is voor het uitvoeren van een bepaalde activiteit in het proces. Dit is doorgaans de SAP-gebruikersnaam die is gelogd bij de transactie of het wijzigingsevent. Dit attribuut is cruciaal voor prestatieanalyse op gebruikers- of teamniveau. Het helpt vragen te beantwoorden als 'Wie zijn de snelste goedkeurders?' of 'Welke gebruikers genereren het meeste herstelwerk?'. Het wordt gebruikt in dashboards om de werkverdeling te analyseren, trainingsbehoeften te identificeren en variaties in prestaties tussen verschillende medewerkers te begrijpen. Het belang Het maakt analyse van prestaties en werkbelasting per individu of team mogelijk, wat helpt bij het identificeren van toppresteerders, trainingsmogelijkheden en resource-onevenwichtigheden. Vindplaats Dit is het 'Gewijzigd Door' veld (USERNAME) uit de wijzigingsdocumentheadertabel, CDHDR. Voor creatie-events kan het het 'Ingevoerd door' veld (ERNAM) zijn in tabellen zoals RBKP. Voorbeelden JSMITHBWILSONCHEN | |||
| Inkoopordernummer PurchaseOrderNumber | De identificatie voor de Inkooporder (PO) waartegen de factuur wordt gematcht. | ||
| Omschrijving Het Inkoopordernummer koppelt een factuur aan het oorspronkelijke inkoopdocument. Dit is fundamenteel voor driezijdige matching (IO, Goederenontvangst, Factuur) en voor het analyseren van de efficiëntie van het IO-gesteunde factuurproces. Dit attribuut is cruciaal voor dashboards zoals het 'Percentage Afwijkingen Factuur-IO Matching'. Het maakt het mogelijk om het proces te segmenteren in IO-facturen versus niet-IO-facturen, die vaak zeer verschillende verwerkingspaden en complexiteiten hebben. Het analyseren van problemen gerelateerd aan specifieke IO's kan helpen bij het diagnosticeren van stroomopwaartse problemen in het inkoopproces. Het belang Het verbindt de factuur met het inkoopproces, waardoor analyse van IO- versus niet-IO-facturen en het identificeren van matchingverschillen mogelijk wordt. Vindplaats Dit wordt doorgaans gevonden op regelitemniveau. Het 'Inkoopordernummer' (EBELN) bevindt zich in de factuuritemtabel, RSEG. Het moet mogelijk worden geaggregeerd naar headerniveau. Voorbeelden 450001756345000175644500017565 | |||
| Leveranciersnummer VendorNumber | Een unieke identificatie voor de leverancier die de factuur heeft ingediend. | ||
| Omschrijving Het Leveranciersnummer is de stamdatasleutel die de leverancier identificeert. Dit koppelt de factuurtransactie aan een specifieke zakelijke partner, waardoor analyse op basis van leverancierskenmerken mogelijk is. Het analyseren van het proces per Leveranciersnummer kan belangrijke inzichten opleveren in leveranciersrelaties en -prestaties. Het kan bijvoorbeeld helpen identificeren welke leveranciers consequent problematische facturen indienen die leiden tot betalingsblokkades of afwijkingen, of welke leveranciers' facturen het meest efficiënt worden verwerkt. Deze informatie is waardevol voor leveranciersbeheer en strategische inkoopinitiatieven. Het belang Het maakt leveranciersspecifieke analyse mogelijk, wat helpt bij het identificeren van patronen, problemen of efficiënties die verband houden met specifieke leveranciers. Vindplaats Dit is het 'Facturerende Partij' veld (LIFNR) uit de factuurdocumentheadertabel, RBKP. Voorbeelden 100345100876200112 | |||
| Reden betalingsblokkade PaymentBlockReason | Een code die de reden aangeeft waarom een factuur is geblokkeerd voor betaling. | ||
| Omschrijving Wanneer een factuur een afwijking heeft of nader onderzoek vereist, wordt een betalingsblokkade toegepast. De Redencode Betalingsblokkade specificeert waarom de blokkade werd ingesteld, bijvoorbeeld vanwege een hoeveelheidsverschil, prijsverschil of een handmatige blokkade. Dit attribuut is essentieel voor het 'Duur Oplossing Betalingsblokkade' dashboard. Het analyseren van de frequentie en duur van blokkades per reden helpt de grondoorzaken van betalingsvertragingen te identificeren. Als bijvoorbeeld 'Prijsverschil' de meest voorkomende reden is voor lange blokkades, duidt dit op een potentieel probleem in de stamdata of het inkooporderproces dat moet worden aangepakt. Het belang Het verklaart waarom facturen vertraagd zijn, maakt hoofdoorzaakanalyse van betalingsblokkades mogelijk en helpt bij het prioriteren van procesverbeteringsinspanningen. Vindplaats De reden van de betalingsblokkade kan worden gevonden op regelitemniveau in tabel RSEG (veld SPGRS) of in de boekingsdocumenttabel BSEG (veld ZLSPR). Voorbeelden RIM | |||
| Uiterste betaaldatum PaymentDueDate | De datum waarop de factuurbetaling aan de leverancier uiterlijk moet plaatsvinden, volgens de betalingsvoorwaarden. | ||
| Omschrijving De Uiterste Betaaldatum wordt berekend op basis van de basisdatum van de factuur en de overeengekomen betalingsvoorwaarden. Het vertegenwoordigt de deadline voor het doen van de betaling om te voorkomen dat men te laat is en mogelijk boetes oploopt of leveranciersrelaties schaadt. Dit attribuut is cruciaal voor prestatie- en compliance-KPI's zoals het 'Percentage Tijdige Betalingen' en 'Gemiste Contantkorting'. Door de werkelijke betalingsdatum (Vereffeningsdatum) te vergelijken met de Uiterste Betaaldatum, kan de analyse automatisch bepalen of een betaling op tijd, te vroeg of te laat was. Het is een fundamenteel element voor het Dashboard voor naleving van betalingsvoorwaarden. Het belang Het dient als de basislijn voor het meten van de prestaties van tijdige betalingen en het identificeren van kansen voor het vastleggen van kortingen bij vroegtijdige betaling. Vindplaats Deze datum wordt vaak berekend. De basisdatum voor betaling (ZFBDT) bevindt zich in tabel BSEG. De vervaldatumberekening hangt ook af van de betalingsvoorwaarden (BSEG-ZTERM). Voorbeelden 2023-04-192023-05-052023-05-11 | |||
| Valutadatum ClearingDate | De datum waarop de betaling werd gedaan en de factuur werd vereffend vanuit de crediteurenadministratie. | ||
| Omschrijving De Vereffeningsdatum markeert de laatste stap in de levenscyclus van de factuur: betaling. Het is de datum waarop de openstaande factuurpost wordt vereffend door een betalingsdocument in het systeem. Deze datum vertegenwoordigt de werkelijke betalingsuitvoeringstijd. Dit attribuut is het eindpunt voor veel kritieke KPI's, inclusief de 'Gemiddelde Factuurdoorlooptijd' en 'Percentage Tijdige Betalingen'. Het wordt vergeleken met de Uiterste Betaaldatum om de betalingsprestaties te meten. Voor contantkortingsanalyse wordt het vergeleken met de kortingsperiode om te zien of de betaling op tijd is gedaan om de korting te benutten. Het belang Het markeert de voltooiing van het proces en is de basis voor het berekenen van de totale cyclustijd, tijdige betalingspercentages en de realisatie van contantkortingen. Vindplaats Voor afgeboekte posten is dit het veld 'Afboekingsdatum' (AUGDT) uit de tabel met afgeboekte leveranciersposten, BSAK. Voorbeelden 2023-04-152023-05-022023-05-20 | |||
| Bedrijfscode CompanyCode | De identificatie voor de juridische entiteit of onderneming waarvoor de factuur wordt verwerkt. | ||
| Omschrijving De Bedrijfscode is een fundamentele organisatorische eenheid in SAP Financials, die een onafhankelijke juridische entiteit vertegenwoordigt. Alle financiële transacties, inclusief facturen, worden op een specifieke bedrijfscode geboekt. Dit attribuut maakt het mogelijk procesanalyses te segmenteren per juridische entiteit. Het is cruciaal voor het vergelijken van procesprestaties, compliance en efficiëntie tussen verschillende bedrijven binnen een concern. Dashboards kunnen worden gefilterd op Bedrijfscode om een bedrijfsspecifiek overzicht van KPI's voor factuurverwerking te bieden. Het belang Het maakt procesvergelijking en prestatiebenchmarking mogelijk tussen verschillende juridische entiteiten binnen een organisatie. Vindplaats Dit is het 'Bedrijfscode' veld (BUKRS) uit de factuurdocumentheadertabel, RBKP. Voorbeelden 10002000US01 | |||
| Betalingstermijnen PaymentTerms | De code die de overeengekomen betalingsvoorwaarden met de leverancier definieert, zoals kortingsperioden en vervaldata. | ||
| Omschrijving Betalingsvoorwaarden definiëren de regels voor wanneer een factuur betaald moet worden en welke contantkortingen, indien van toepassing, beschikbaar zijn voor vroegtijdige betaling. Voorbeelden zijn 'Netto 30 dagen' of '2% 10, Netto 30', wat betekent een korting van 2% indien betaald binnen 10 dagen, anders is het volledige bedrag verschuldigd binnen 30 dagen. Dit attribuut vormt de basis voor het 'Cash Discount Opportunity Loss' dashboard en de 'Cash Discount Capture Rate' KPI. De analyse gebruikt de betalingsvoorwaarden in combinatie met de boekings- en betalingsdata om te bepalen of er een korting beschikbaar was en of deze succesvol is benut. Het is ook essentieel voor het Dashboard voor naleving van betalingsvoorwaarden. Het belang Het is essentieel voor het analyseren van de vastlegging van contantkortingen en het begrijpen van de financiële impact van procesvertragingen. Vindplaats Dit is het 'Betalingsvoorwaarden Sleutel' veld (ZTERM) uit de factuurdocumentheadertabel, RBKP. Voorbeelden Z0010001NT30 | |||
| Bewerkingstijd ProcessingTime | De tijdsduur besteed aan een specifieke activiteit. | ||
| Omschrijving Verwerkingstijd meet de tijd die nodig is om een activiteit uit te voeren, van begin tot eind. Het wordt berekend als het verschil tussen de Eindtijd en de Starttijd van een activiteit. Dit onderscheidt zich van de doorlooptijd, die de wachttijd tussen activiteiten omvat. Het analyseren van de verwerkingstijd helpt om de werkelijke inspanning of werktijd voor verschillende stappen te begrijpen. Het kan activiteiten aanwijzen die resource-intensief of inefficiënt zijn. Een lange verwerkingstijd voor 'Factuurgegevens Vastgelegd' kan bijvoorbeeld duiden op een complexe factuur of een inefficiënt data-invoerproces. Deze meetwaarde is waardevol voor resourceplanning en automatiseringsinitiatieven. Het belang Het meet de daadwerkelijke werkduur voor een activiteit, wat helpt bij het identificeren van resource-intensieve stappen en het onderscheid maken tussen actieve werktijd en onbenutte wachttijd. Vindplaats Dit attribuut is niet in SAP aanwezig. Het wordt berekend tijdens datatransformatie met behulp van de formule: EndTime - StartTime. Voorbeelden PT5M10SPT2H15MPT30S | |||
| Bronsysteem SourceSystem | Identificeert het specifieke bronsysteem waaruit de data is geëxtraheerd. | ||
| Omschrijving Het Bronysteem-attribuut geeft de oorsprong van de event-data aan, bijvoorbeeld een specifieke SAP ECC instantienaam. Dit is bijzonder belangrijk in omgevingen met meerdere ERP-systemen of wanneer data wordt gecombineerd uit verschillende bronnen. In analyse helpt dit attribuut processen en prestaties te onderscheiden over verschillende systemen, regio's of bedrijfseenheden die mogelijk op afzonderlijke instanties draaien. Het zorgt ervoor dat de datatracing duidelijk is en maakt systeem-specifieke filtering en analyse mogelijk. Het belang Het biedt cruciale context in multi-systeemlandschappen, wat een juiste datascheiding en systeemspecifieke prestatieanalyse mogelijk maakt. Vindplaats Dit is doorgaans een statische waarde die tijdens het data-extractieproces wordt toegevoegd, en die de SAP Systeem-ID (TADIR-SRCSYSTEM) of een handmatig toegewezen identificatie voor de specifieke SAP-instantie vertegenwoordigt. Voorbeelden SAPECC_PROD_EUECC_US_FINSAP_ERP_6_EHP8 | |||
| Contantkorting gemist IsCashDiscountLost | Een berekende indicator die aangeeft of een beschikbare contantkorting is gemist. | ||
| Omschrijving Dit is een booleaans attribuut dat wordt berekend op basis van betalingsvoorwaarden en de werkelijke betalingsdatum. Het wordt ingesteld op 'waar' als de 'Payment Terms' een korting boden voor vroegtijdige betaling en de 'Clearing Date' na het verstrijken van de kortingsperiode viel. Dit meet direct financieel verlies als gevolg van procesinefficiënties. Dit attribuut is de basis van het 'Gemiste Contantkorting' dashboard. Het maakt een eenvoudige kwantificering van de financiële impact van verwerkingsvertragingen mogelijk. Door te filteren op cases waarbij dit vlaggetje 'waar' is, kunnen analisten de specifieke procesvarianten en knelpunten onderzoeken die het meest frequent leiden tot gemiste kortingen, wat een sterke business case biedt voor procesverbetering. Het belang Het kwantificeert direct het financiële verlies als gevolg van procesvertragingen, waardoor een overtuigende case ontstaat voor het optimaliseren van de factuurverwerkingsworkflow. Vindplaats Dit attribuut is niet in SAP aanwezig. Het wordt berekend tijdens datatransformatie door de 'PaymentTerms' te interpreteren en de 'ClearingDate' te vergelijken met de uiterste kortingsdatum. Voorbeelden truefalse | |||
| Documenttype DocumentType | Een code die het boekingsdocument classificeert, bijvoorbeeld als een leveranciersfactuur of creditnota. | ||
| Omschrijving De Documentsoort wordt gebruikt om verschillende soorten zakelijke transacties in SAP te categoriseren. Voor factuurverwerking omvatten veelvoorkomende soorten 'RE' voor standaardfacturen of 'KG' voor creditnota's van leveranciers. Het documenttype regelt aspecten van de boeking, zoals het gebruikte nummerbereik. In analyse maakt dit attribuut het mogelijk om het proces te filteren op specifieke transactietypen. Zo kan het proces voor het afhandelen van een creditnota aanzienlijk verschillen van dat van een standaardfactuur. Het scheiden van deze stromen met behulp van de Documentsoort biedt een nauwkeurigere en zinvollere procesweergave. Het belang Het maakt de scheiding en analyse van verschillende bedrijfstransacties mogelijk, zoals facturen versus creditnota's, die verschillende processen volgen. Vindplaats Dit is het 'Documentsoort' veld (BLART) uit de factuurdocumentheadertabel, RBKP. Voorbeelden REKRKG | |||
| Eindtijd EndTime | De tijdstempel die aangeeft wanneer een activiteit werd voltooid. Voor ogenblikkelijke events is dit hetzelfde als de Starttijd. | ||
| Omschrijving Het Eindtijd-attribuut markeert de voltooiing van een specifieke activiteit. Voor veel events in SAP, die als enkelvoudige tijdspunten worden gelogd, zal de Eindtijd identiek zijn aan de Starttijd. Voor activiteiten met een meetbare duur, zoals een goedkeuringsstap waaraan actief wordt gewerkt, kan het echter het einde van die werkzaamheden vertegenwoordigen. In procesanalyse maakt een distincte Eindtijd de meting van de verwerkingstijd van de activiteit mogelijk, los van de wachttijd die eraan voorafgaat. Dit helpt te onderscheiden hoe lang een activiteit duurt om uit te voeren versus hoe lang een case wacht voordat die activiteit begint, wat diepere inzichten biedt in middelenefficiëntie. Het belang Het maakt de berekening van de activiteitsverwerkingstijd mogelijk, onderscheidt deze van de wachttijd tussen activiteiten en verbetert de knelpuntanalyse. Vindplaats Dit is vaak hetzelfde als de Starttijd, afgeleid van CDHDR-UDATE en CDHDR-UTIME. In sommige gevallen kan het worden afgeleid uit workflow logs die expliciet het begin en einde van een taak vastleggen. Voorbeelden 2023-03-15T10:35:10Z2023-03-16T14:10:00Z2023-03-28T09:02:45Z | |||
| Grootboekrekening GeneralLedgerAccount | Het Grootboekrekeningnummer waarop de factuurkosten of -uitgaven worden geboekt. | ||
| Omschrijving De Grootboekrekening (G/L) is de bestemmingsrekening in het rekeningschema waar de financiële impact van de factuur wordt vastgelegd. Dit is een cruciaal stuk data voor financiële rapportage en kostenbeheer. Voor process mining biedt het analyseren van de G/L-rekening een financiële dimensie aan de processtroom. Het 'Gebruiksanalyse Grootboekrekeningen' dashboard kan uitgavenpatronen onthullen, potentiële onjuiste codering van facturen identificeren en ervoor zorgen dat kosten aan de juiste afdelingen of projecten worden toegewezen. Het helpt de kloof te overbruggen tussen procesuitvoering en financiële impact. Het belang Het voegt een financiële dimensie toe aan het proces, waardoor analyse van kostenallocatie, bestedingspatronen en potentiële onjuiste factuurcodering mogelijk wordt. Vindplaats Dit wordt gevonden op regelitemniveau. Het 'Grootboekrekeningnummer' (HKONT) bevindt zich in de factuuritemtabel RSEG voor IO-facturen of BSEG voor directe FI-facturen. Voorbeelden 630000655100741000 | |||
| Is te laat IsOverdue | Een berekende indicator die aangeeft of de factuur na de vervaldatum is betaald. | ||
| Omschrijving Dit is een booleaans attribuut dat wordt berekend door de 'Clearing Date' (werkelijke betalingsdatum) te vergelijken met de 'Payment Due Date'. Als de vereffeningsdatum na de vervaldatum valt, is de vlag 'waar'; anders is deze 'onwaar'. Dit biedt een eenvoudige, directe maatstaf voor de tijdige betalingsprestaties voor elke factuur. Dit attribuut vereenvoudigt analyse en visualisatie in dashboards. Het maakt eenvoudige filtering en aggregatie mogelijk om de 'Percentage Tijdige Betalingen' KPI te berekenen. Gebruikers kunnen het proces snel segmenteren om de processtromen van achterstallige facturen te vergelijken met die welke op tijd zijn betaald, waardoor mogelijk de procespatronen die leiden tot te late betalingen worden onthuld. Het belang Het vereenvoudigt de analyse van de prestaties van tijdige betalingen en maakt een eenvoudige vergelijking mogelijk tussen tijdige en late factuurprocessen. Vindplaats Dit attribuut is niet in SAP aanwezig. Het wordt berekend tijdens datatransformatie met behulp van de formule: ClearingDate > PaymentDueDate. Voorbeelden truefalse | |||
| Laatste data-update LastDataUpdate | Tijdstempel dat aangeeft wanneer de data voor het proces voor het laatst is ververst vanuit het bronsysteem. | ||
| Omschrijving Dit attribuut registreert de datum en tijd van de meest recente data-extractie of -update. Het is van toepassing op de gehele dataset in plaats van op individuele events, en geeft een duidelijke indicatie van de versheid van de data. Dit is een kritiek metadata-attribuut voor dashboardgebruikers en analisten. Het helpt hen de tijdsperiode te begrijpen die door de analyse wordt bestreken en zorgt ervoor dat ze beslissingen nemen op basis van actuele informatie. Het wordt doorgaans prominent weergegeven op dashboards om gebruikers te informeren over de recentheid van de data. Het belang Het informeert gebruikers over de actualiteit van de data, waardoor wordt gewaarborgd dat analyse en beslissingen gebaseerd zijn op actuele informatie. Vindplaats Deze waarde wordt gegenereerd en geïnjecteerd in de dataset door de data-extractie of ETL tool op het moment van de dataverversing. Voorbeelden 2024-05-20T08:00:00Z2024-05-21T08:00:00Z2024-05-22T08:00:00Z | |||
| Reden van afwijzing RejectionReason | Een code of tekst die uitlegt waarom een factuur is afgekeurd tijdens de goedkeuringsworkflow. | ||
| Omschrijving Wanneer een goedkeurder een factuur afwijst, geeft deze idealiter een reden op voor de afwijzing. Dit kan een gestandaardiseerde code zijn of een vrije-tekst opmerking die problemen aangeeft zoals 'Incorrect IO-nummer', 'Dubbele Factuur' of 'Bedrag incorrect'. Deze data is vitaal voor het 'Redenen & Trends Factuurafwijzing' dashboard. Door de frequentie van verschillende afwijsredenen te analyseren, kan het bedrijf veelvoorkomende problemen identificeren en corrigerende acties implementeren. Als bijvoorbeeld 'Incorrect IO-nummer' een frequente reden is, kan dit duiden op een behoefte aan betere communicatie met leveranciers of training voor data-invoermedewerkers. Deze analyse is cruciaal voor het verminderen van procesherstelwerk. Het belang Het biedt de hoofdoorzaak voor afwijzingen, wat gerichte procesverbeteringen mogelijk maakt om herstelwerk te verminderen en 'first-time-right' percentages te verbeteren. Vindplaats Deze informatie is vaak niet opgeslagen in een enkel, standaard veld. Het kan worden gevonden in workflow container logs, lange tekstvelden geassocieerd met het document, of specifieke velden in een aangepaste workflow-oplossing. Voorbeelden DUPLICAAT_FACTUURWRONG_AMTNO_PO_MATCH | |||
| Valuta Currency | De valutacode voor het factuurbedrag. | ||
| Omschrijving Het Valuta-attribuut specificeert de valuta waarin het factuurbedrag is uitgedrukt, bijvoorbeeld USD, EUR of JPY. Dit attribuut biedt essentiële context voor het Factuurbedrag. Het maakt een correcte interpretatie en aggregatie van financiële data mogelijk, vooral in internationale organisaties die met meerdere valuta's werken. Analyse kan worden gefilterd op valuta om de verwerkingsefficiëntie of problemen tussen verschillende valutazones te vergelijken. Voor zinvolle financiële aggregatie moeten bedragen mogelijk worden geconverteerd naar één rapportagevaluta. Het belang Het biedt de nodige context voor financiële bedragen, waarborgt een nauwkeurige interpretatie en maakt valutagebaseerde filtering en analyse mogelijk. Vindplaats Dit is het 'Valutasleutel' veld (WAERS) uit de factuurdocumentheadertabel, RBKP. Voorbeelden USDEURGBP | |||
Purchase to Pay - Factuurverwerkingsactiviteiten
| Activiteit | Omschrijving | ||
|---|---|---|---|
| Betalingsblokkade Ingesteld | Deze activiteit vindt plaats wanneer een blokkade op een factuurregel wordt geplaatst, waardoor deze niet kan worden betaald. Blokkades kunnen automatisch worden ingesteld vanwege verschillen in driezijdige matching of handmatig om diverse redenen. | ||
| Het belang Dit event is cruciaal voor het meten van de Duur Oplossing Betalingsblokkade en het identificeren van de grondoorzaken van betalingsvertragingen. Het belicht problemen met prijzen, kwantiteit of vereiste goedkeuringen. Vindplaats Dit is een expliciet event dat kan worden gevolgd via wijzigingsdocumentlogs (tabellen CDHDR en CDPOS) voor de BSEG-tabel, veld ZLSPR (Betalingsblokkade Sleutel). Vastleggen Tijdstempel uit wijzigingsdocumenten (CDHDR) wanneer de waarde van BSEG-ZLSPR wijzigt van leeg naar niet-leeg. Gebeurtenistype explicit | |||
| Factuur afgeletterd | Deze activiteit markeert de laatste stap in een succesvolle levenscyclus van de factuur, waarbij de openstaande verplichting wordt vereffend door een betalingsdocument. Dit betekent dat de betaling is uitgevoerd. | ||
| Het belang Als de primaire eindgebeurtenis is dit cruciaal voor het berekenen van de totale end-to-end cyclustijd. Het bevestigt de succesvolle voltooiing van het proces en wordt gebruikt om de prestaties van tijdige betalingen te meten. Vindplaats Dit is een expliciet event vastgelegd in de factuurregel-tabel BSEG. De vereffeningsdatum is opgeslagen in veld AUGDT, en het vereffeningsdocumentnummer in AUGBL. Vastleggen Gebruik de vereffeningsdatum (BSEG-AUGDT) van het regelitem van het factuurdocument. Gebeurtenistype explicit | |||
| Factuur geboekt | Dit is een belangrijk financieel event waarbij de factuur officieel in het grootboek wordt vastgelegd, waardoor een verplichting ontstaat. Dit verplaatst het document van een tijdelijke (geparkeerde) status naar een permanente boekingspost. | ||
| Het belang Boeken is een belangrijke mijlpaal die de geldigheid van de factuur bevestigt. Het is een voorwaarde voor betaling en een belangrijke indicator voor de verwerkingsdoorvoer. Vindplaats Dit is een expliciet event vastgelegd in de documentheadertabel BKPF. De tijdstempel is de boekingsdatum, BKPF-BUDAT. Het document zal niet langer een 'geparkeerde' status hebben. Vastleggen Gebruik de boekingsdatum (BKPF-BUDAT) voor documenten die niet geparkeerd zijn (BKPF-BSTAT is leeg of ' '). Gebeurtenistype explicit | |||
| Factuur gestorneerd | Vertegenwoordigt de annulering van een geboekt factuurdocument. Er wordt een storneringsdocument gecreëerd om het financiële effect van de oorspronkelijke factuur teniet te doen. | ||
| Het belang Deze activiteit belicht een significante uitzondering en herstelpad. Het analyseren van de frequentie en redenen voor storneringen kan systematische problemen in het factuurvalidatie- en boekingsproces blootleggen. Vindplaats Dit is een expliciet event vastgelegd in de documentheadertabel BKPF. De header van het gestorneerde document bevat het storneringsdocumentnummer (STBLG) en het boekjaar (STJAH). Vastleggen Identificeer documenten waar BKPF-STBLG is gevuld. De gebeurtenis-timestamp is de boekingsdatum van het annuleringsdocument. Gebeurtenistype explicit | |||
| Factuurgegevens vastgelegd | Markeert de initiële creatie van het factuurdocument in SAP, hetzij als een geparkeerd of volledig geboekt document. Dit is doorgaans het eerste vastgelegde event in het systeem voor de levenscyclus van een factuur en dient als de starttijd van het proces. | ||
| Het belang Deze activiteit is het primaire startpunt voor het meten van de end-to-end factuurverwerkingsdoorlooptijd. Het analyseren van de duur vanaf dit punt helpt vertragingen in de initiële data-invoer en documentcreatiefase te identificeren. Vindplaats De aanmaaktijdstempel wordt vastgelegd in de SAP-tabel BKPF, veld CPUDT (Datum waarop boekingsdocument werd ingevoerd) en CPUTM (Tijd van invoer). Vastleggen Gebruik de document aanmaaktijdstempel uit de BKPF tabelheader (CPUDT). Gebeurtenistype explicit | |||
| Betalingsblokkade Opgeheven | Vertegenwoordigt het verwijderen van een betalingsblokkade van een factuurregel, waardoor deze kan doorgaan naar de betaalrun. Dit betekent dat een eerder geïdentificeerd probleem is opgelost. | ||
| Het belang Deze activiteit concludeert de meting van de blokkadeduur. Het analyseren van de tijd tussen het instellen en vrijgeven van een blokkade onthult de efficiëntie van het probleemoplossingsproces. Vindplaats Dit event wordt gevolgd via wijzigingsdocumentlogs (tabellen CDHDR en CDPOS) voor de BSEG-tabel, veld ZLSPR (Betalingsblokkade Sleutel), wanneer de blokkade wordt verwijderd. Vastleggen Tijdstempel uit wijzigingsdocumenten (CDHDR) wanneer de waarde van BSEG-ZLSPR wijzigt van niet-leeg naar leeg. Gebeurtenistype explicit | |||
| Factuur afgewezen | Geeft aan dat een factuur is afgekeurd tijdens het goedkeuringsproces. Deze actie vereist doorgaans correctie en opnieuw indienen, waardoor een herstelronde ontstaat. | ||
| Het belang Het volgen van afwijzingen is cruciaal voor het identificeren van veelvoorkomende redenen voor falen, zoals incorrecte data of beleidsovertredingen. Het helpt herstelwerk te kwantificeren en gebieden voor procesverbetering of leveranciersvoorlichting aan te wijzen. Vindplaats Dit event wordt meestal gevonden in SAP Business Workflow logs als een afwijs-stap. Het kan ook worden afgeleid uit specifieke statuswijzigingen of notities die aan het factuurdocument zijn toegevoegd. Vastleggen Tijdstempel van de afwijs-stap in workflow logs of een documentstatuswijziging die afwijzing aangeeft. Gebeurtenistype inferred | |||
| Factuur geparkeerd | Geeft aan dat een factuur is ingevoerd in SAP, maar nog niet is geboekt in het grootboek. Dit is een tijdelijke status die beoordeling, correctie of goedkeuring mogelijk maakt vóór de financiële boeking. | ||
| Het belang Het volgen wanneer facturen worden geparkeerd en hoe lang belicht knelpunten in het pre-boekingsvalidatie- en goedkeuringsproces. Het scheidt data-invoertijd van financiële verwerkingstijd. Vindplaats Dit wordt afgeleid uit de documentstatus in tabel BKPF, veld BSTAT. Een waarde van 'V' (Geparkeerd Document) of 'W' (Geparkeerd Document met Wijzigingsvrijgave) duidt op een geparkeerde staat. Vastleggen Identificeer documenten waarbij het statusveld BKPF-BSTAT 'V' is. De gebeurtenis-timestamp is de aanmaakdatum BKPF-CPUDT. Gebeurtenistype inferred | |||
| Factuur Goedgekeurd | Betekent dat de factuur formeel is goedgekeurd door de aangewezen autoriteit, waardoor deze kan doorgaan naar boeking en betaling. Dit is vaak de afsluitende stap van een workflow. | ||
| Het belang Deze mijlpaal concludeert de meting van de goedkeuringsdoorlooptijd. Het deblokkeert het proces, waardoor tijdige betaling mogelijk is en helpt bij het analyseren van de werkverdeling onder goedkeurders. Vindplaats Dit wordt doorgaans vastgelegd uit SAP Business Workflow-tabellen door de voltooiing van een goedkeuringstaak te identificeren. Alternatief kan het worden afgeleid uit de vrijgave van een goedkeuringsgerelateerde betalingsblokkade. Vastleggen Tijdstempel van de voltooide goedkeuringsstap in workflow logs of de verwijdering van een specifieke betalingsblokkade. Gebeurtenistype inferred | |||
| Factuur ter goedkeuring verzonden | Vertegenwoordigt het punt waarop een factuur wordt ingediend in een formeel goedkeuringsworkflow. Het vastleggingsmechanisme is sterk afhankelijk van de specifieke SAP Workflow of de implementatie van een extern systeem. | ||
| Het belang Deze activiteit start de meting voor de KPI voor Factuurgoedkeuringsdoorlooptijd. Het is essentieel voor het identificeren van vertragingen in de goedkeuringsketen en het analyseren van de prestaties van goedkeurders. Vindplaats Dit event wordt doorgaans vastgelegd uit SAP Business Workflow-tabellen (bijv. SWW_WI2OBJ, SWWLOG) door het begin van een specifieke goedkeuringstaak te identificeren. In eenvoudigere scenario's kan het worden afgeleid uit een statuswijziging in een aangepast veld. Vastleggen Vereist analyse van SAP workflow logs of aangepaste statusvelden gekoppeld aan het factuurdocument. Gebeurtenistype inferred | |||
| Factuur Wordt Achterstallig | Een berekende gebeurtenis die optreedt wanneer de huidige datum de netto vervaldatum van de factuur passeert en de factuur nog niet is betaald. De vervaldatum wordt bepaald op basis van de betalingstermijnen en de basisdatum. | ||
| Het belang Deze activiteit is essentieel voor het monitoren van de KPI voor Percentage Tijdige Betalingen. Het signaleert proactief facturen met risico op te late betaling, wat leveranciersrelaties kan schaden en boetes kan opleveren. Vindplaats Dit event wordt berekend door de huidige datum te vergelijken met de netto vervaldatum. De vervaldatum is afgeleid van de basisdatum (BSEG-ZFBDT) en betalingsvoorwaarden (BSEG-ZTERM). Vastleggen Gebeurtenis wordt geactiveerd wanneer Gebeurtenistype calculated | |||
Extractie Guides
Stappen
- Het ABAP-programma aanmaken: Gebruik transactie
SE38ofSE80om een nieuw uitvoerbaar programma aan te maken, bijvoorbeeldZ_PM_INVOICE_EXTRACT. Geef een geschikte titel op en stel het type in op 'Uitvoerbaar Programma'. - Het selectiescherm definiëren: Definieer in het programma een selectiescherm om gebruikers in staat te stellen de data te filteren. Belangrijke parameters moeten Bedrijfscode (
BUKRS), Boekjaar (GJAHR), Boekingsdatumbereik (BUDAT) en een parameter voor het uitvoerbestandspad op de applicatieserver omvatten. - Datastructuren declareren: Definieer een interne tabelstructuur die de uiteindelijke event log zal bevatten. Deze structuur moet alle vereiste en aanbevolen attributen bevatten:
InvoiceNumber,Activity,EventTime,UserName,VendorNumber,PurchaseOrderNumber,InvoiceAmount,PostingDate,PaymentDueDate,PaymentBlockReasonenClearingDate. - Datalogica implementeren: Schrijf de kern ABAP-logica om factuurdata te selecteren. De aanpak omvat meerdere selecties die worden gecombineerd in de uiteindelijke event log tabel.
- Selecteer eerst kop- en regelitemdata uit primaire factuurtabelen
BKPF,BSEG,RBKPenRSEGop basis van de selectieschermcriteria. - Genereer voor elke factuur de basisgebeurtenissen zoals 'Factuurdata vastgelegd' (van creatie-timestamp) en 'Factuur geboekt' (van boekings-timestamp).
- Query wijzigingsdocumenttabellen
CDHDRenCDPOSom wijzigingen met betrekking tot betalingsblokkades te vinden (ZLSPRveld inBSEG). Voor elke relevante wijziging, 'Betalingsblokkade ingesteld' en 'Betalingsblokkade vrijgegeven' gebeurtenissen creëren. - Identificeer 'Factuur afgeboekt' gebeurtenissen door te controleren op een afboekingsdocument (
AUGBL) en afboekingsdatum (AUGDT) in tabelBSEG. - Identificeer 'Factuur geannuleerd' gebeurtenissen door te controleren op een annuleringsdocument (
STBLG) in deBKPFkop. - Implementeer aangepaste logica om workflow-gebeurtenissen ('Factuur ter goedkeuring verzonden', 'Goedgekeurd', 'Afgekeurd') vast te leggen. Dit deel is zeer klantspecifiek en vereist het aanpassen van de code aan de tabellen of statusvelden van uw workflow.
- Selecteer eerst kop- en regelitemdata uit primaire factuurtabelen
- Berekende gebeurtenissen genereren: Bereken binnen de programmalogica de gebeurtenis
Factuur Achterstallig. Dit wordt afgeleid door de vervaldatum van de factuur (PaymentDueDate) te vergelijken met de huidige datum voor alle onbetaalde facturen. Als de vervaldatum in het verleden ligt, maak dan een gebeurtenis aan met deEventTimeingesteld op de vervaldatum. - De Event Log Tabel vullen: Naarmate u data voor elke factuur uit de verschillende bronnen verzamelt, formatteer deze en voeg nieuwe rijen toe aan de uiteindelijke interne event log tabel, één rij per activiteit.
- De data exporteren naar een bestand: Gebruik de
OPEN DATASET,TRANSFERenCLOSE DATASETstatements om de inhoud van de uiteindelijke interne tabel naar een plat bestand te schrijven op het SAP-applicatieserverpad dat op het selectiescherm is opgegeven. Gebruik een consistent scheidingsteken, zoals een puntkomma of tab, om een CSV-bestand aan te maken. - De extractie plannen: Voor reguliere data-extractie, maak een variant voor het programma aan met de gewenste selectiecriteria en plan deze om als achtergrondtaak uit te voeren met transactie
SM36. - Het uitvoerbestand ophalen: Benader de SAP-applicatieserverdirectory met transactie
AL11om het gegenereerde bestand te lokaliseren. Gebruik transactieCG3Yom het bestand van de applicatieserver naar uw lokale machine te downloaden. - Voorbereiden op upload: Voordat u uploadt naar een process mining tool, opent u het CSV-bestand om te controleren of de headers correct zijn, het dataformaat consistent is (vooral voor timestamps) en het scheidingsteken zoals verwacht is. Zorg ervoor dat het bestand wordt opgeslagen met UTF-8-codering.
Configuratie
- Selectiecriteria: Het ABAP-rapport moet een uitgebreid selectiescherm bevatten. De belangrijkste filters zijn:
Bedrijfscode (BUKRS): Om de extractie te beperken tot specifieke juridische entiteiten.Boekingsdatum (BUDAT): Om het tijdsbestek voor de extractie te definiëren. Het wordt aanbevolen om data in beheersbare delen te extraheren, bijvoorbeeld 3 tot 6 maanden tegelijk.Documenttype (BLART): Om alleen relevante factuurdocumenttypen op te nemen, zoals 'RE' voor logistieke facturen en 'KR' voor leveranciersfacturen.
- Uitvoerbestandspad: Een verplichte parameter om het volledige pad en de bestandsnaam op de SAP-applicatieserver op te geven waar het uitvoerbestand zal worden aangemaakt. De gebruiker die het rapport uitvoert, heeft schrijfrechten nodig voor deze directory.
- Prestatieoverwegingen: Voor grote datasets moet het rapport als een achtergrondtaak worden uitgevoerd tijdens daluren om prestatievermindering van het systeem te voorkomen. De logica moet alleen de vereiste velden uit tabellen selecteren en waar mogelijk standaard SAP-database-indexen gebruiken.
- Vereisten en autorisaties: De gebruiker of het serviceaccount dat deze extractie uitvoert, vereist:
- ABAP-rapportuitvoeringsrechten (onderdeel van
S_PROGRAM). - Leestoegang tot financiële en logistieke tabellen, inclusief
BKPF,BSEG,RBKP,RSEG,CDHDRenCDPOS. - Autorisatie om bestanden te schrijven naar de opgegeven applicatieserverdirectory (
S_DATASET). - Toegang tot transacties
SE38,SM36,AL11enCG3Yvoor ontwikkeling, planning en bestandsuitwisseling.
- ABAP-rapportuitvoeringsrechten (onderdeel van
a Voorbeeldquery abap
REPORT Z_PM_INVOICE_EXTRACT.
*&---------------------------------------------------------------------*
*& Tables for Selection Screen
*&---------------------------------------------------------------------*
TABLES: BKPF, RBKP.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
InvoiceNumber TYPE belnr_v,
Activity TYPE string,
EventTime TYPE timestamp,
UserName TYPE uname,
VendorNumber TYPE lifnr,
PurchaseOrderNumber TYPE ebeln,
InvoiceAmount TYPE wrbtr,
PostingDate TYPE budat,
PaymentDueDate TYPE faedt,
PaymentBlockReason TYPE rstgr,
ClearingDate TYPE augdt,
END OF ty_event_log.
DATA: gt_event_log TYPE TABLE OF ty_event_log,
gs_event_log TYPE ty_event_log.
DATA: lt_bkpf TYPE TABLE OF bkpf,
ls_bkpf TYPE bkpf,
lt_bseg TYPE TABLE OF bseg,
ls_bseg TYPE bseg.
DATA: lt_rbkp TYPE TABLE OF rbkp,
ls_rbkp TYPE rbkp.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs OBLIGATORY,
s_gjahr FOR bkpf-gjahr OBLIGATORY,
s_budat FOR bkpf-budat.
PARAMETERS: p_fpath TYPE string OBLIGATORY DEFAULT '/usr/sap/tmp/invoice_events.csv'.
*&---------------------------------------------------------------------*
*& Start of Program Logic
*&---------------------------------------------------------------------*
START-OF-SELECTION.
" Select FI Invoices (e.g., Doc Type KR)
SELECT * FROM bkpf INTO TABLE lt_bkpf
WHERE bukrs IN s_bukrs
AND gjahr IN s_gjahr
AND budat IN s_budat
AND blart = 'KR'.
" Select MM Invoices
SELECT * FROM rbkp INTO TABLE lt_rbkp
WHERE bukrs IN s_bukrs
AND gjahr IN s_gjahr
AND budat IN s_budat.
* --- Process FI Invoices ---
LOOP AT lt_bkpf INTO ls_bkpf.
CLEAR gs_event_log.
gs_event_log-InvoiceNumber = ls_bkpf-belnr.
gs_event_log-PostingDate = ls_bkpf-budat.
SELECT SINGLE * FROM bseg INTO ls_bseg
WHERE bukrs = ls_bkpf-bukrs
AND belnr = ls_bkpf-belnr
AND gjahr = ls_bkpf-gjahr
AND koart = 'K'. " Vendor Line Item
IF sy-subrc = 0.
gs_event_log-VendorNumber = ls_bseg-lifnr.
gs_event_log-InvoiceAmount = ls_bseg-wrbtr.
gs_event_log-ClearingDate = ls_bseg-augdt.
" Calculate Due Date
CALL FUNCTION 'DETERMINE_DUE_DATE'
EXPORTING
i_bseg = ls_bseg
IMPORTING
e_faedt = gs_event_log-PaymentDueDate.
ENDIF.
" Activity: Invoice Data Captured
gs_event_log-Activity = 'Invoice Data Captured'.
CONVERT DATE ls_bkpf-cpudt TIME ls_bkpf-cputm INTO TIME STAMP gs_event_log-EventTime TIME ZONE sy-zonlo.
gs_event_log-UserName = ls_bkpf-usnam.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Parked (if BSTAT = 'V')
IF ls_bkpf-bstat = 'V'.
gs_event_log-Activity = 'Invoice Parked'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Posted
gs_event_log-Activity = 'Invoice Posted'.
CONVERT DATE ls_bkpf-budat TIME ls_bkpf-cputm INTO TIME STAMP gs_event_log-EventTime TIME ZONE sy-zonlo.
gs_event_log-UserName = ls_bkpf-usnam.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Cleared
IF ls_bseg-augbl IS NOT INITIAL.
gs_event_log-Activity = 'Invoice Cleared'.
CONVERT DATE ls_bseg-augdt INTO TIME STAMP gs_event_log-EventTime TIME ZONE sy-zonlo.
gs_event_log-UserName = ls_bseg-usnam_cl.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Becomes Overdue
IF gs_event_log-PaymentDueDate IS NOT INITIAL AND gs_event_log-PaymentDueDate < sy-datum AND ls_bseg-augbl IS INITIAL.
gs_event_log-Activity = 'Invoice Becomes Overdue'.
CONVERT DATE gs_event_log-PaymentDueDate INTO TIME STAMP gs_event_log-EventTime TIME ZONE sy-zonlo.
gs_event_log-UserName = 'SYSTEM'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Reversed
IF ls_bkpf-stblg IS NOT INITIAL.
DATA: ls_rev_bkpf TYPE bkpf.
SELECT SINGLE budat, usnam FROM bkpf INTO ls_rev_bkpf
WHERE belnr = ls_bkpf-stblg AND bukrs = ls_bkpf-bukrs AND gjahr = ls_bkpf-gjahr.
IF sy-subrc = 0.
gs_event_log-Activity = 'Invoice Reversed'.
CONVERT DATE ls_rev_bkpf-budat INTO TIME STAMP gs_event_log-EventTime TIME ZONE sy-zonlo.
gs_event_log-UserName = ls_rev_bkpf-usnam.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
ENDLOOP.
* --- NOTE: The logic for MM invoices (from lt_rbkp) would be similar, joining RBKP with RSEG.
* --- NOTE: The logic for Payment Blocks and Workflow events requires reading change documents (CDHDR/CDPOS)
* --- or custom workflow tables. Below is a conceptual example for payment blocks.
* --- Conceptual Example for 'Payment Block Set' / 'Released' using Change Docs
* DATA: lt_cdhdr TYPE TABLE OF cdhdr, ls_cdhdr TYPE cdhdr,
* lt_cdpos TYPE TABLE OF cdpos, ls_cdpos TYPE cdpos.
* SELECT * FROM cdhdr INTO TABLE lt_cdhdr
* WHERE objectclas = 'BELEG' AND objectid IN (SELECT belnr FROM bkpf WHERE ...).
* LOOP AT lt_cdhdr.
* SELECT * FROM cdpos INTO TABLE lt_cdpos
* WHERE changenr = ls_cdhdr-changenr AND tabname = 'BSEG' AND fname = 'ZLSPR'.
* LOOP AT lt_cdpos.
* "... logic to create 'Payment Block Set' (if VALUE_NEW is not blank)
* "... or 'Payment Block Released' (if VALUE_NEW is blank) events.
* ENDLOOP.
* ENDLOOP.
* --- Conceptual Example for Workflow events ('Sent For Approval', 'Approved', 'Rejected')
* --- This part MUST be customized based on your specific workflow implementation (e.g., OpenText VIM, SAP WF).
* --- You would query the relevant workflow tables or status change tables here.
*&---------------------------------------------------------------------*
*& Write to File
*&---------------------------------------------------------------------*
END-OF-SELECTION.
DATA: lv_string TYPE string,
lv_header TYPE string.
" Create Header
lv_header = 'InvoiceNumber;Activity;EventTime;UserName;VendorNumber;PurchaseOrderNumber;InvoiceAmount;PostingDate;PaymentDueDate;PaymentBlockReason;ClearingDate'.
OPEN DATASET p_fpath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc = 0.
TRANSFER lv_header TO p_fpath.
LOOP AT gt_event_log INTO gs_event_log.
CONCATENATE gs_event_log-InvoiceNumber
gs_event_log-Activity
gs_event_log-EventTime
gs_event_log-UserName
gs_event_log-VendorNumber
gs_event_log-PurchaseOrderNumber
gs_event_log-InvoiceAmount
gs_event_log-PostingDate
gs_event_log-PaymentDueDate
gs_event_log-PaymentBlockReason
gs_event_log-ClearingDate
INTO lv_string SEPARATED BY ';'.
TRANSFER lv_string TO p_fpath.
ENDLOOP.
CLOSE DATASET p_fpath.
ELSE.
MESSAGE 'Error opening file.' TYPE 'E'.
ENDIF.