Jouw datatemplate voor crediteurenbetalingen
Jouw datatemplate voor crediteurenbetalingen
- Procesgerichte attributen voor financiële analyse
- Belangrijke activiteiten voor het volgen van betalingen
- Gedetailleerde extractie-instructies voor Dynamics 365
Attributen voor betalingsverwerking bij crediteuren
| Naam | Beschrijving | ||
|---|---|---|---|
| Activiteit Activity | De specifieke taak of statuswijziging die heeft plaatsgevonden. | ||
| Beschrijving Dit attribuut beschrijft de gebeurtenis of stap die in het proces is uitgevoerd, zoals 'Invoice Created', 'Invoice Approved' of 'Payment Posted'. Het zet technische transactietypen en wijzigingen in workflowstatus om in leesbare bedrijfsevents. In Dynamics 365 worden deze activiteiten vaak afgeleid uit een combinatie van tabelinvoegingen, bijvoorbeeld een nieuw record in Waarom dit belangrijk is Het bepaalt de procesflow en volgorde van gebeurtenissen voor de proceskaart. Waar je het vindt Afgeleid uit verschillende transactietabellen en workflowhistorielogs Voorbeelden Factuur aangemaaktFactuur goedgekeurdBetaling gegenereerd | |||
| Factuurnummer InvoiceNumber | De unieke identificatie die aan de leveranciersfactuur is toegewezen. | ||
| Beschrijving Het factuurnummer is de definitieve case-identificatie voor deze procesweergave. Het groepeert alle gebeurtenissen van één leveranciersfactuur op unieke wijze, zodat je de volledige route van ontvangst tot vereffening kunt analyseren. In Microsoft Dynamics 365 komt dit meestal overeen met het veld Waarom dit belangrijk is Dit is de basis voor het koppelen van losse AP-activiteiten aan één procesinstantie. Waar je het vindt Tabel: VendInvoiceJour, veld: InvoiceId Voorbeelden INV-2023-00198223344ACME-OCT-22 | |||
| Tijdstip van gebeurtenis EventTime | De timestamp waarop de activiteit plaatsvond. | ||
| Beschrijving Dit attribuut legt de exacte datum en tijd vast waarop een specifieke activiteit plaatsvond. Je gebruikt het om gebeurtenissen chronologisch te ordenen en de tijd tussen stappen te berekenen. Voor Dynamics 365 komt deze waarde meestal uit Waarom dit belangrijk is Belangrijk voor het berekenen van doorlooptijden en wachttijden en voor het identificeren van bottlenecks. Waar je het vindt Systeemvelden CreatedDateTime of ModifiedDateTime in transactietabellen Voorbeelden 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| Bronsysteem SourceSystem | De naam van het systeem waaruit de data afkomstig is. | ||
| Beschrijving Identificeert de bronsoftware of -omgeving waaruit de procesdata is geëxtraheerd. In deze context verwijst dit steeds naar de Microsoft Dynamics 365-instantie. Dit is vooral nuttig in analyses met meerdere systemen, waarin data uit ERP-systemen en externe scanoplossingen kan worden gecombineerd. Waarom dit belangrijk is Zorgt voor inzicht in de herkomst en traceerbaarheid van data in analyses met meerdere systemen. Waar je het vindt Hardgecodeerd of geconfigureerd tijdens de extractie Voorbeelden Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Laatste data-update LastDataUpdate | De timestamp waarop de data is geëxtraheerd of vernieuwd. | ||
| Beschrijving Geeft aan hoe actueel de data voor de analyse is. Zo zie je of je naar actuele data kijkt of naar een momentopname uit een eerdere periode. Deze waarde wordt meestal gegenereerd door het ETL-proces (Extract, Transform, Load) en is geen veld in Dynamics 365 zelf. Waarom dit belangrijk is Belangrijk voor het vertrouwen in de dashboards en KPI's. Waar je het vindt Gegenereerd door het extractiescript Voorbeelden 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| Afdeling Department | De afdeling die verantwoordelijk is voor de kosten. | ||
| Beschrijving De financiële dimensie die de interne afdeling aangeeft. In Dynamics 365 worden dimensies dynamisch opgeslagen, vaak in Dit attribuut wordt gebruikt in de 'Vendor Relationship Complexity View' om te zien welke interne afdelingen het meeste AP-volume genereren. Waarom dit belangrijk is Maakt organisatorische drill-down en analyse van verantwoordelijkheden mogelijk. Waar je het vindt Tabel: VendInvoiceJour, veld: DefaultDimension (vereist de weergave DimensionAttributeLevelValue) Voorbeelden ITFinanciënBedrijfsvoering | |||
| Bedrijfscode CompanyCode | De identificatie van de juridische entiteit of dochteronderneming. | ||
| Beschrijving Verwijst naar de juridische entiteit binnen de organisatie waar de factuur wordt verwerkt. In Microsoft Dynamics 365 wordt dit strikt vastgelegd via het systeemveld Dit attribuut is belangrijk voor de 'End to End Lead Time Analysis', waarmee je entiteiten of geografische eenheden met elkaar kunt vergelijken. Waarom dit belangrijk is Maakt vergelijkende analyses tussen verschillende bedrijfsonderdelen of landen mogelijk. Waar je het vindt Tabel: VendInvoiceJour, veld: DataAreaId Voorbeelden USMFDEMFGBSI | |||
| Factuurbedrag InvoiceAmount | De totale geldwaarde van de factuur. | ||
| Beschrijving De totale waarde van de factuur in de transactievaluta. In Dynamics 365 vind je deze in velden zoals Wordt gebruikt in het dashboard 'Duplicate Payment Risk Detection' om bedragen aan leveranciersgegevens te koppelen. Waarom dit belangrijk is Belangrijk voor het analyseren van uitgavenvolume en financieel risico. Waar je het vindt Tabel: VendInvoiceJour, veld: InvoiceAmount Voorbeelden 1500.00245.5010000.00 | |||
| Factuurdatum InvoiceDate | De documentdatum die op de factuur staat. | ||
| Beschrijving De datum op de factuur van de leverancier. In Dynamics 365 is dit het veld Wordt gebruikt in 'End to End Lead Time Analysis' om de totale levenscyclus vanuit het perspectief van de leverancier te meten. Waarom dit belangrijk is Bepaalt het begin van de ouderdomsperiode van de factuur. Waar je het vindt Tabel: VendInvoiceJour, veld: InvoiceDate Voorbeelden 2023-10-012023-10-15 | |||
| Gebruikers-ID UserId | De identificatie van de gebruiker die de activiteit heeft uitgevoerd. | ||
| Beschrijving Identificeert de systeemgebruiker die verantwoordelijk is voor een specifieke activiteit, zoals het goedkeuren van een factuur of het boeken van een betaling. Afkomstig uit de velden Wordt gebruikt in 'Payment Block and Friction Analysis' om te zien of bepaalde medewerkers vaker blokkades veroorzaken dan anderen. Waarom dit belangrijk is Maakt analyse van gedrag van medewerkers en functiescheiding mogelijk. Waar je het vindt Systeemvelden CreatedBy/ModifiedBy in transactie- en historietabellen Voorbeelden jdoeadminworkflow_sys | |||
| Inkoopordernummer PurchaseOrderNumber | Het referentienummer van de bijbehorende inkooporder. | ||
| Beschrijving Koppelt de factuur aan het oorspronkelijke inkoopdocument. In Dynamics 365 is dit het veld Dit attribuut ondersteunt het dashboard 'PO Match and Discrepancy Trends' door onderscheid te maken tussen facturen met en zonder inkooporder. Waarom dit belangrijk is Belangrijk voor het analyseren van het matchingpercentage van inkoop tot betaling. Waar je het vindt Tabel: VendInvoiceJour, veld: PurchId Voorbeelden PO-000455000342PO-22-998 | |||
| Leveranciersrekening VendorAccount | Het unieke rekeningnummer van de leverancier. | ||
| Beschrijving De unieke identificatie van de leverancier die bij de transactie betrokken is. In Dynamics 365 komt dit overeen met het veld Dit attribuut vormt de basis voor de 'Vendor Relationship Complexity View', waarmee je prestaties en knelpunten per leveranciersrelatie kunt analyseren. Waarom dit belangrijk is Maakt segmentatie van procesprestaties per leverancier mogelijk. Waar je het vindt Tabel: VendInvoiceJour, veld: InvoiceAccount of OrderAccount Voorbeelden US-101V000452001 | |||
| Naam van de leverancier VendorName | De naam van de leveranciersorganisatie. | ||
| Beschrijving De beschrijvende naam van de leverancier. In D365 fungeert het leveranciersaccount als foreign key naar het Global Address Book ( Menselijk leesbare namen maken de 'Vendor Relationship Complexity View' gebruiksvriendelijker en zorgen dat dashboards toegankelijk zijn voor zakelijke gebruikers. Waarom dit belangrijk is Geeft context bij het leveranciersrekeningnummer. Waar je het vindt Tabel: DirPartyTable (via VendTable), veld: Name Voorbeelden Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| Vervaldatum DueDate | De datum waarop de factuur uiterlijk moet zijn betaald. | ||
| Beschrijving De contractuele datum waarop de betaling moet zijn vereffend om boetes te voorkomen. In Dynamics 365 wordt deze opgeslagen als Dit is de belangrijkste basis voor de KPI 'On-Time Payment Rate' en helpt bij het prioriteren van werk in de weergave 'AP Process Throughput and Volume'. Waarom dit belangrijk is De benchmark voor het meten van tijdige betalingen. Waar je het vindt Tabel: VendInvoiceJour of VendTrans, veld: DueDate Voorbeelden 2023-11-302023-12-15 | |||
| Betaalmethode PaymentMethod | De methode waarmee de factuur wordt betaald, bijvoorbeeld Check, Wire of EFT. | ||
| Beschrijving Bepaalt hoe het geld naar de leverancier wordt overgemaakt. In Dynamics 365 is dit het veld Dit attribuut wordt gebruikt in het dashboard 'Payment Execution Lead Times' om de efficiëntie van verschillende typen betaalbatches te beoordelen. Waarom dit belangrijk is Verklaart variaties in de fase van de betalingsuitvoering. Waar je het vindt Tabel: VendInvoiceJour (gekoppeld aan PaymMode-informatie) of VendTrans Voorbeelden CHECKACHWIRE | |||
| Betalingsvoorwaarden PaymentTerms | De code voor de overeengekomen betalingsvoorwaarden. | ||
| Beschrijving De configuratiecode die vervaldatums en kortingen bepaalt, bijvoorbeeld Net30. In Dynamics 365 is dit Wordt samen met 'Cycle Time' geanalyseerd om te zien of procesvertragingen de overeengekomen voorwaarden overschrijden. Waarom dit belangrijk is Geeft context bij de berekening van de vervaldatum. Waar je het vindt Tabel: VendInvoiceJour, veld: PaymTermId Voorbeelden Netto 302%10Net30COD | |||
| Boekingsnummer VoucherNumber | Het boekingsnummer in het grootboek dat bij de transactie hoort. | ||
| Beschrijving De interne identifier van het General Ledger voor de boeking. In Dynamics 365 koppelt het veld Hoewel dit een technisch veld is, is het nuttig voor de 'Process Path and Compliance Audit' om boekingen terug te volgen naar het GL voor reconciliatie. Waarom dit belangrijk is Belangrijk voor financiële audits en reconciliatie. Waar je het vindt Tabel: VendInvoiceJour, veld: LedgerVoucher Voorbeelden VOU-10023INV-ACC-992 | |||
| Datum voor betalingskorting CashDiscountDate | De datum waarop de betaling uiterlijk moet plaatsvinden om korting te krijgen. | ||
| Beschrijving De deadline voor het benutten van kortingen bij vroege betaling. In Dynamics 365 is dit Dit attribuut vormt de basis voor het dashboard 'Cash Discount Capture Performance', waarmee de organisatie gemiste besparingsmogelijkheden kan kwantificeren. Waarom dit belangrijk is Heeft direct invloed op de financiële efficiëntie-KPI van het proces. Waar je het vindt Tabel: VendInvoiceJour of VendTrans, veld: CashDiscDate Voorbeelden 2023-10-102023-10-20 | |||
| Is betaling geblokkeerd IsPaymentBlocked | Geeft aan of de factuur momenteel is geblokkeerd voor betaling. | ||
| Beschrijving Een boolean die aangeeft of de factuur in de wacht staat. In Dynamics 365 wordt dit vaak afgeleid van de status Dit is de belangrijkste oorzaak van de 'Payment Block and Friction Analysis', waarmee procesonderbrekingen zichtbaar worden. Waarom dit belangrijk is Identificeert directe knelpunten en handmatige interventies. Waar je het vindt Tabel: VendTrans, veld: Approved (omgekeerd) of specifieke Hold-velden Voorbeelden truefalse | |||
| Valuta Currency | De valutacode van de factuur. | ||
| Beschrijving De ISO-code van de valuta waarin de factuur is uitgegeven. In Dynamics 365 is dit het veld Belangrijk voor het standaardiseren van bedragen in de 'Activity Amount'-mapping wanneer normalisatie van meerdere valuta's nodig is. Waarom dit belangrijk is Nodige context om financiële waarden te interpreteren. Waar je het vindt Tabel: VendInvoiceJour, veld: CurrencyCode Voorbeelden USDEURGBP | |||
Activiteiten in de betalingsverwerking bij crediteuren
| Activiteit | Beschrijving | ||
|---|---|---|---|
| Betaling geboekt | Het betalingsjournaal wordt geboekt in het General Ledger. Daarmee wordt de factuur vereffend en het leverancierssaldo afgeboekt. Hiermee is het financiële proces voltooid. | ||
| Waarom dit belangrijk is De laatste activiteit voor de gemiddelde doorlooptijd van factuur tot betaling. Bevestigt dat de boekingen voor de afname van liquide middelen zijn afgerond. Waar je het vindt LedgerJournalTrans is geboekt. VendTrans wordt bijgewerkt om de vereffening weer te geven. De werkelijke gebeurtenis is het boeken van het journaal. Vastleggen Vastgelegd wanneer transactie X is uitgevoerd Eventtype explicit | |||
| Betaling gegenereerd | Het systeem genereert het betalingsbestand (EFT, ISO20022) of drukt cheques af. De betalingsstatus op de journaalregel wordt bijgewerkt naar Sent of Generated. | ||
| Waarom dit belangrijk is Ondersteunt de KPI Approved-to-Executed Lag Time. Bevestigt dat de betaalopdracht is gegenereerd. Waar je het vindt LedgerJournalTrans.PaymentStatus verandert in Sent/Recieved. Vaak afgeleid uit updates van de regel. Vastleggen Vergelijk het veld PaymentStatus voor en na de wijziging Eventtype inferred | |||
| Betalingsjournaal aangemaakt | De factuur wordt geselecteerd en toegevoegd aan een regel in het betalingsjournaal. Dit geeft aan dat de betaling gepland is en start meestal de workflow voor betalingsbeoordeling. | ||
| Waarom dit belangrijk is Markeert de overgang van een verplichting naar de verwerking van de uitgaande betaling. Wordt gebruikt om doorlooptijden van betalingsuitvoering te meten. Waar je het vindt LedgerJournalTrans.CreatedDateTime. De factuur is gekoppeld via het veld MarkedInvoice of via settlementtabellen. Vastleggen Vastgelegd wanneer het record in LedgerJournalTrans is aangemaakt Eventtype explicit | |||
| Factuur aangemaakt | De eerste aanmaak van een openstaande leveranciersfactuur in het systeem. Hiermee komt de factuur in de Dynamics 365-workflow, handmatig of via import van een data-entiteit. | ||
| Waarom dit belangrijk is Dit bepaalt het startmoment voor berekeningen van de doorlooptijd. Zo kunnen organisaties meten hoe lang facturen in het systeem blijven staan voordat ze worden verwerkt of geboekt. Waar je het vindt De aanmaaktimestamp van VendInvoiceInfoTable.CreatedDateTime of VendInvoiceInfoTable.RecId. Dit staat voor de kop van de openstaande leveranciersfactuur. Vastleggen Vastgelegd wanneer het record in VendInvoiceInfoTable is aangemaakt Eventtype explicit | |||
| Factuur geboekt | De factuur wordt geboekt in het General Ledger, waardoor een verplichting in het systeem ontstaat. Het record gaat van openstaande tabellen naar tabellen met geboekte transacties. | ||
| Waarom dit belangrijk is Een belangrijke mijlpaal die aangeeft dat de schuld financieel is verwerkt. Dankzij deze activiteit kan de factuur voor betaling worden geselecteerd. Waar je het vindt Aanmaak van een record in VendInvoiceJour en VendTrans. TransDate geeft de boekingsdatum weer. Vastleggen Vastgelegd wanneer transactie X is uitgevoerd Eventtype explicit | |||
| Factuur gematcht met inkooporder | Het systeem koppelt de factuurregel succesvol aan een Purchase Order of Product Receipt. Deze activiteit bevestigt dat de factuur is gevalideerd tegen de inkooporder. | ||
| Waarom dit belangrijk is Belangrijk voor de KPI First-Pass PO Matching Rate. Hiermee maak je onderscheid tussen verwerking zonder handmatige tussenkomst en facturen waarvoor handmatige actie nodig is. Waar je het vindt VendInvoiceInfoLine.PurchId en VendInvoiceInfoTable.MatchStatus. Afgeleid wanneer MatchStatus verandert in Passed. Vastleggen Vergelijk het veld MatchStatus voor en na de wijziging Eventtype inferred | |||
| Factuur goedgekeurd | De workflowinstantie voor de openstaande factuur bereikt de status voltooid of goedgekeurd. De factuur kan nu naar het grootboek worden geboekt. | ||
| Waarom dit belangrijk is Berekent de gemiddelde goedkeuringsdoorlooptijd. Vertragingen in deze stap hebben direct invloed op de mogelijkheid om vroegbetalingskortingen te benutten. Waar je het vindt WorkflowTrackingStatusTable.CreatedDateTime waarbij TrackingStatus op Completed staat. Of VendInvoiceInfoTable.RequestStatus is gelijk aan Approved. Vastleggen Vastgelegd wanneer de workflowinstantie is voltooid Eventtype explicit | |||
| Betalingsblokkade toegepast | Er wordt een blokkade op de leverancierstransactie geplaatst, zodat deze niet in een betalingsvoorstel kan worden opgenomen. Dit gebeurt vaak handmatig bij geschillen. | ||
| Waarom dit belangrijk is Ondersteunt Payment Block and Friction Analysis. Maakt handmatige ingrepen zichtbaar die de uitstroom van geld vertragen. Waar je het vindt De vlag VendTrans.Approved staat op No, of specifieke statusvelden voor OnHold zijn ingevuld. Hiervoor moeten updates van VendTrans worden gevolgd. Vastleggen Vergelijk het statusveld voor en na de wijziging Eventtype inferred | |||
| Betalingsjournaal goedgekeurd | De workflow van het betalingsjournaal is goedgekeurd, waardoor betalingen mogen worden gegenereerd. Dit is de laatste controle voordat de gelden voor overdracht worden klaargezet. | ||
| Waarom dit belangrijk is Maakt onderscheid tussen de administratieve voorbereiding van betalingen en de bottleneck bij de autorisatie. Waar je het vindt WorkflowTrackingStatusTable die is gekoppeld aan de ID van de LedgerJournalTable-kop. Status is Completed. Vastleggen Vastgelegd wanneer de workflowinstantie is voltooid Eventtype explicit | |||
| Factuur bijgewerkt | Legt wijzigingen aan de factuurkop of factuurregels vast voordat de factuur wordt geboekt. Veel updates kunnen wijzen op problemen bij data-extractie of handmatige correcties tijdens de validatie. | ||
| Waarom dit belangrijk is Een hoge updatefrequentie wijst op herstelrondes of een lage datakwaliteit in de bron, bijvoorbeeld door OCR-fouten. Dit ondersteunt de Rework and Data Accuracy Monitor. Waar je het vindt Database-log (SysDatabaseLog) voor VendInvoiceInfoTable als deze is ingeschakeld, of afgeleid uit wijzigingen in ModifiedDateTime wanneer de pollingfrequentie hoog is. Vastleggen Vergelijk ModifiedDateTime in opeenvolgende extracties Eventtype inferred | |||
| Factuur ingediend ter goedkeuring | De openstaande factuur wordt ter beoordeling ingediend bij de workflow-engine. Hiermee verschuift het proces van data-invoer en matching naar de autorisatiefase. | ||
| Waarom dit belangrijk is Dit markeert het begin van de goedkeuringsdoorlooptijd. Belangrijk voor het analyseren van de efficiëntie van interne hiërarchieën. Waar je het vindt WorkflowTrackingStatusTable.CreatedDateTime waarbij ContextTableId gelijk is aan de ID van VendInvoiceInfoTable en Status op Submitted staat. Vastleggen Vastgelegd wanneer de workflowinstantie is gestart Eventtype explicit | |||
| Factuurmatching mislukt | Tijdens het matchen wordt een verschil gevonden tussen de factuur en de PO of ontvangst, bijvoorbeeld in prijs of hoeveelheid. Hierdoor ligt het proces vaak stil totdat het verschil is opgelost. | ||
| Waarom dit belangrijk is Maakt specifieke knelpunten in het matchingproces zichtbaar. Ondersteunt het dashboard PO Match and Discrepancy Trends. Waar je het vindt VendInvoiceInfoTable.MatchStatus verandert in Failed of Discrepancy. Ook zichtbaar in matchingverschillen op VendInvoiceInfoLine. Vastleggen Vergelijk het veld MatchStatus voor en na de wijziging Eventtype inferred | |||
Extractiegidsen
Stappen
Open de Data Management-werkruimte: Log in op je Microsoft Dynamics 365 Finance-omgeving. Ga naar Workspaces en selecteer Data Management. Dit is de centrale plek voor het instellen van data-exportprojecten.
Maak een exportproject: Klik op de tegel Export om een nieuw dataproject te maken. Geef het project een duidelijke naam, bijvoorbeeld ProcessMining_AP_Export. Selecteer in het veld Target data format het gewenste doelformaat, zoals Azure SQL DB voor BYOD of CSV voor een bestandsgebaseerde export.
Voeg data-entiteiten toe: Voeg de volgende standaarddata-entiteiten één voor één aan het project toe: VendorInvoiceHeaderEntity (voor openstaande facturen), VendorInvoiceLineEntity (voor factuurregels), VendorInvoiceJournalHeaderEntity (voor geboekte facturen), VendorPaymentJournalLineEntity (voor betalingen) en WorkflowHistoryEntity (voor goedkeuringslogs). Als WorkflowHistoryEntity niet standaard beschikbaar is, moet je mogelijk een aangepaste entiteit of een specifieke systeementiteit activeren die voor export beschikbaar is.
Stel filters voor entiteiten in: Klik bij elke entiteit op het filterpictogram. Beperk de data tot de relevante CompanyInfo (DataAreaId) en stel een datumbereik in voor de velden CreatedDateTime of InvoiceDate. Zo haal je alleen data op voor de gewenste analyseperiode, bijvoorbeeld de afgelopen 12 maanden.
Stel een terugkerende export in: Maak een terugkerende datajob zodat het event log actueel blijft. Stel de frequentie in, bijvoorbeeld dagelijks of elk uur, en schakel waar mogelijk Incremental push in. Zo belast je het systeem minder, omdat alleen gewijzigde records worden geëxporteerd.
Voer de eerste export uit: Voer het project de eerste keer handmatig uit door op Export now te klikken. Controleer het Execution summary om te zien of alle records zonder fouten zijn geëxporteerd.
Transformeer de data: Zodra de data naar je bestemming is geëxporteerd, Azure SQL of bestanden, gebruik je het SQL-script in de sectie Query om de tabellen te koppelen. Deze transformatielogica zet de verschillende entiteitsrecords om in één chronologisch event log.
Koppel attributen: Zorg dat de resulterende dataset InvoiceNumber koppelt aan Case ID, EventTime aan Timestamp en Activity aan Activity Name, volgens de vereisten van de process mining-tool.
Valideer en upload: Voer de onderstaande controles uit om de datanauwkeurigheid te bevestigen. Exporteer het eindresultaat na controle als CSV- of Parquet-bestand en upload het naar ProcessMind.
Configuratie
- Entiteiten selecteren: Gebruik VendorInvoiceHeaderEntity en VendorInvoiceLineEntity voor processtappen vóór het boeken. Gebruik VendorInvoiceJournalHeaderEntity voor het juridische, geboekte document. Gebruik VendorPaymentJournalLineEntity om betalingen te volgen.
- Incremental Push: Schakel deze instelling in het Data Management-project in om na de eerste volledige lading alleen nieuwe of gewijzigde records te exporteren. Dit is belangrijk voor de prestaties.
- Datumbereiken: Filter op InvoiceDate >= [Start Date]. Vermijd exports zonder begrenzing, omdat die kunnen verlopen.
- Bedrijfsfilter: D365 is een systeem met meerdere entiteiten. Filter altijd op DataAreaId om te voorkomen dat data van verschillende juridische entiteiten door elkaar raakt, tenzij je juist een analyse over meerdere bedrijven wilt uitvoeren.
- Workflowgeschiedenis: Standaardentiteiten voor workflowgeschiedenis kunnen veel data bevatten. Exporteer alleen geschiedenis die betrekking heeft op typen VendInvoice, zodat het volume beheersbaar blijft.
a Voorbeeldquery sql
/*
SQL Transformation Script for D365 Finance AP Process
Assumes data is loaded into Staging tables in a SQL environment (BYOD/Data Lake)
*/
SELECT
I.InvoiceNumber AS [InvoiceNumber],
'Invoice Created' AS [Activity],
I.CreatedDateTime AS [EventTime],
I.DataAreaId AS [CompanyCode],
I.InvoiceAccount AS [VendorAccount],
I.InvoiceAmount AS [InvoiceAmount],
I.CurrencyCode AS [Currency],
'D365 FO' AS [SourceSystem],
GETDATE() AS [LastDataUpdate]
FROM Staging_VendorInvoiceHeaderEntity I
UNION ALL
/* Capture updates to invoice headers */
SELECT
I.InvoiceNumber,
'Invoice Updated',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.ModifiedDateTime > I.CreatedDateTime
UNION ALL
/* Invoice Matching Activities */
SELECT
I.InvoiceNumber,
'Invoice Matched to PO',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.MatchStatus = 'Matched' -- Adjust value based on system config
UNION ALL
SELECT
I.InvoiceNumber,
'Invoice Match Failed',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.MatchStatus = 'Failed'
UNION ALL
/* Workflow Activities */
SELECT
RelatedContext AS InvoiceNumber,
CASE
WHEN Status = 'Submitted' THEN 'Invoice Submitted for Approval'
WHEN Status = 'Approved' THEN 'Invoice Approved'
ELSE 'Workflow Activity'
END AS [Activity],
CreatedDateTime AS [EventTime],
DataAreaId,
NULL AS [VendorAccount],
NULL AS [InvoiceAmount],
NULL AS [Currency],
'D365 FO',
GETDATE()
FROM Staging_WorkflowHistoryEntity
WHERE ContextTableId = 12345 -- Replace with TableId for VendInvoiceInfoTable
AND Status IN ('Submitted', 'Approved')
UNION ALL
/* Invoice Posted */
SELECT
J.InvoiceNumber,
'Invoice Posted',
J.PostedDateTime,
J.DataAreaId,
J.InvoiceAccount,
J.InvoiceAmount,
J.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceJournalHeaderEntity J
UNION ALL
/* Payment Block */
SELECT
I.InvoiceNumber,
'Payment Block Applied',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceJournalHeaderEntity I
WHERE I.OnHold = 'Yes'
UNION ALL
/* Payment Activities */
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Journal Created' AS [Activity],
P.CreatedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue AS [VendorAccount],
P.DebitAmount AS [InvoiceAmount],
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Journal Approved' AS [Activity],
P.ModifiedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.PaymentStatus = 'Approved'
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Generated' AS [Activity],
P.ModifiedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.PaymentStatus = 'Sent'
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Posted' AS [Activity],
P.PostedDate AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.IsPosted = 'Yes' Stappen
Controleer de BYOD-verbinding: Zorg dat SQL Server Management Studio (SSMS) of een vergelijkbare tool is geïnstalleerd en dat je verbinding kunt maken met de Azure SQL-database die als Bring Your Own Database (BYOD)-doel voor je Dynamics 365 Finance & Operations-omgeving is ingesteld.
Controleer de export van entiteiten: Ga in Dynamics 365 naar de werkruimte Data Management. Controleer of de volgende entiteiten, of de onderliggende tabellen ervan, naar de BYOD-database worden geëxporteerd:
VendInvoiceInfoTable(openstaande facturen),VendInvoiceInfoLine(openstaande factuurregels),VendInvoiceJour(geboekte facturen),VendTrans(leverancierstransacties),LedgerJournalTrans(journaalregels),LedgerJournalTable(journaalkoppen) enWorkflowTrackingStatusTable(workflowgeschiedenis).Configureer de exportjob: Als deze tabellen nog niet worden geëxporteerd, maak je een nieuwe exportjob. Stel Target Data Format in op je BYOD SQL-database. Kies Incremental Push om de data gesynchroniseerd te houden zonder volledige herhaalde exports. Voer de job uit om de tabellen te vullen.
Bereid de SQL-omgeving voor: Open SSMS en maak verbinding met de BYOD Azure SQL-database. Open een nieuw queryvenster.
Stel parameters in: Zoek in het onderstaande script bovenaan de sectie met variabeledeclaraties. Pas de variabelen
@StartDateen@EndDateaan de periode aan die je wilt analyseren. Als je op een specifieke juridische entiteit wilt filteren, pas je de filtervoorwaarden voorDATAAREAIDaan.Voer het script uit: Voer het volledige T-SQL-script uit. Het script gebruikt
UNION ALLom data uit meerdere tabellen te combineren tot één gestandaardiseerd event log.Valideer de data: Controleer de resultaten op nullwaarden in de kolommen
InvoiceNumberofEventTime. Controleer ook of zowel geboekte facturen uitVendInvoiceJourals openstaande facturen uitVendInvoiceInfoTablezichtbaar zijn.Exporteer het resultaat: Klik met de rechtermuisknop op het resultatenraster in SSMS en selecteer Save Results As.... Sla het bestand op als CSV-bestand (Comma Delimited).
Maak de upload gereed: Open de CSV in Excel of een teksteditor en controleer of de datumnotatie voldoet aan ISO 8601 (YYYY-MM-DD HH:MM:SS), als ProcessMind dit vereist. Als het script goed is uitgevoerd, zijn verdere transformaties niet nodig.
Upload naar ProcessMind: Importeer het CSV-bestand in ProcessMind en koppel de kolommen
InvoiceNumberaan Case ID,Activityaan Activity Name enEventTimeaan Timestamp.
Configuratie
- Exportstrategie: Gebruik Incremental Push voor tabellen met veel data, zoals
LedgerJournalTransenVendTrans, om de BYOD-belasting te beperken. Gebruik Full Push alleen als je inconsistenties in de data vermoedt. - Tijdzone: Dynamics 365 slaat data op in UTC. Het script gaat uit van UTC. Als je lokale tijd nodig hebt, pas je een
DATEADD-correctie toe in het script of tijdens de ProcessMind-import. - Filteren op bedrijf: De kolom
DataAreaIdstaat voor de juridische entiteit. Het script haalt standaard data voor alle entiteiten op. Voeg bijvoorbeeldWHERE DataAreaId = 'usmf'toe om op één dochteronderneming te filteren. - Workflowgeschiedenis: De tabel
WorkflowTrackingStatusTableis belangrijk voor tijdstempels van goedkeuringen. Zorg dat deze tabel in je BYOD-exportconfiguratie staat, omdat hij vaak standaard wordt overgeslagen. - Bewaartermijnen: Houd rekening met opschoningsroutines in D365 die voltooide workflowgeschiedenis of geboekte journaalregels kunnen verwijderen. Daardoor kan de historische diepgang van je process mining-analyse beperkt zijn.
a Voorbeeldquery sql
/* T-SQL Extraction Script for D365 AP Payment Processing */
/* Tables required: VendInvoiceInfoTable, VendInvoiceInfoLine, VendInvoiceJour, VendTrans, LedgerJournalTrans, LedgerJournalTable, WorkflowTrackingStatusTable */
DECLARE @StartDate DATETIME = '2023-01-01 00:00:00';
DECLARE @EndDate DATETIME = GETDATE();
WITH RawData AS (
/* 1. Invoice Created: Pending Invoice Header Creation */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Created' AS Activity,
T1.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
T1.CreatedBy AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoTable T1
WHERE T1.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 2. Invoice Updated: Modifications to Pending Invoice */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Updated' AS Activity,
T1.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
T1.ModifiedBy AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoTable T1
WHERE T1.ModifiedDateTime BETWEEN @StartDate AND @EndDate
AND T1.ModifiedDateTime > T1.CreatedDateTime
UNION ALL
/* 3. Invoice Matched to PO: Line Matching Success */
SELECT
H.Num AS InvoiceNumber,
'Invoice Matched to PO' AS Activity,
L.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.InvoiceAccount AS VendorAccount,
H.DataAreaId AS CompanyCode,
CAST(H.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
H.DueDate AS DueDate,
H.PurchId AS PurchaseOrderNumber,
L.ModifiedBy AS UserId,
H.VendorName AS VendorName,
H.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoLine L
JOIN dbo.VendInvoiceInfoTable H ON L.TableRefId = H.TableRefId AND L.DataAreaId = H.DataAreaId
WHERE L.MatchStatus = 1 /* 1 usually denotes Matched/Passed in enum */
AND L.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 4. Invoice Match Failed: Line Matching Discrepancy */
SELECT
H.Num AS InvoiceNumber,
'Invoice Match Failed' AS Activity,
L.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.InvoiceAccount AS VendorAccount,
H.DataAreaId AS CompanyCode,
CAST(H.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
H.DueDate AS DueDate,
H.PurchId AS PurchaseOrderNumber,
L.ModifiedBy AS UserId,
H.VendorName AS VendorName,
H.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoLine L
JOIN dbo.VendInvoiceInfoTable H ON L.TableRefId = H.TableRefId AND L.DataAreaId = H.DataAreaId
WHERE L.MatchStatus = 2 /* 2 usually denotes Failed in enum */
AND L.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 5. Invoice Submitted for Approval: Workflow Submission */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Submitted for Approval' AS Activity,
W.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
W.User AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.WorkflowTrackingStatusTable W
JOIN dbo.VendInvoiceInfoTable T1 ON W.ContextRecId = T1.RecId
WHERE W.TrackingStatus = 1 /* Submitted */
AND W.ContextTableId = 1425 /* TableId for VendInvoiceInfoTable, adjust if different in version */
AND W.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 6. Invoice Approved: Workflow Completion */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Approved' AS Activity,
W.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
W.User AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.WorkflowTrackingStatusTable W
JOIN dbo.VendInvoiceInfoTable T1 ON W.ContextRecId = T1.RecId
WHERE W.TrackingStatus = 2 /* Completed/Approved */
AND W.ContextTableId = 1425
AND W.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 7. Invoice Posted: Creation of VendInvoiceJour */
SELECT
J.InvoiceId AS InvoiceNumber,
'Invoice Posted' AS Activity,
J.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
J.InvoiceAccount AS VendorAccount,
J.DataAreaId AS CompanyCode,
CAST(J.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
J.DueDate AS DueDate,
J.PurchId AS PurchaseOrderNumber,
J.CreatedBy AS UserId,
J.InvoicingName AS VendorName,
J.InvoiceDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceJour J
WHERE J.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 8. Payment Block Applied: Updated on VendTrans */
SELECT
J.InvoiceId AS InvoiceNumber,
'Payment Block Applied' AS Activity,
VT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
J.InvoiceAccount AS VendorAccount,
J.DataAreaId AS CompanyCode,
CAST(J.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
J.DueDate AS DueDate,
J.PurchId AS PurchaseOrderNumber,
VT.ModifiedBy AS UserId,
J.InvoicingName AS VendorName,
J.InvoiceDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendTrans VT
JOIN dbo.VendInvoiceJour J ON VT.Invoice = J.InvoiceId AND VT.AccountNum = J.InvoiceAccount AND VT.DataAreaId = J.DataAreaId
WHERE VT.Approved = 0 /* 0 indicates Not Approved/Blocked */
AND VT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 9. Payment Journal Created: Line added to Journal */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Journal Created' AS Activity,
LJT.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.CreatedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.AccountType = 2 /* Vendor */
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 10. Payment Journal Approved: Workflow on Journal Header */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Journal Approved' AS Activity,
LJH.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJH.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTable LJH
JOIN dbo.LedgerJournalTrans LJT ON LJH.JournalNum = LJT.JournalNum AND LJH.DataAreaId = LJT.DataAreaId
WHERE LJH.WorkflowApprovalStatus = 2 /* Approved */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJH.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 11. Payment Generated: Payment Status Changed to Sent */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Generated' AS Activity,
LJT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.PaymentStatus = 2 /* Sent/Generated */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 12. Payment Posted: Journal Line Posted */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Posted' AS Activity,
LJT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.Posted = 1 /* Posted */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
)
SELECT *
FROM RawData
WHERE InvoiceNumber IS NOT NULL AND InvoiceNumber <> ''
ORDER BY InvoiceNumber, EventTime; Klaar om aan de slag te gaan?
Gebruik deze template om een betrouwbare databasis op te bouwen en vandaag nog je betalingsworkflows te verbeteren. Ons team helpt je graag als je ondersteuning nodig hebt bij het koppelen van je specifieke Dynamics 365-tabellen.
Verbeter je crediteurenbetalingen nu
Verkort doorlooptijden met 30 procent en voorkom vertragingen in D365.
Je hebt geen creditcard nodig. Je bent in vijf minuten klaar met instellen.