Šablona dat pro zpracování plateb dodavatelům
Šablona dat pro zpracování plateb dodavatelům
- Atributy procesu pro finanční analýzu
- Důležité milníky pro sledování plateb
- Podrobný návod na extrakci dat z Dynamics 365
Atributy zpracování plateb dodavatelům
| Název | Popis | ||
|---|---|---|---|
| Aktivita Activity | Konkrétní úloha nebo změna stavu, ke které došlo. | ||
| Popis Tento atribut popisuje událost nebo krok v procesu, například „Faktura vytvořena“, „Faktura schválena“ nebo „Platba zaúčtována“. Technické typy transakcí a změny stavu workflow převádí na srozumitelné obchodní události. V Dynamics 365 se aktivity často odvozují z kombinace vložení záznamu do tabulky, například nového záznamu v Proč je to důležité Určuje průběh procesu a pořadí událostí v mapě procesu. Kde data získat Odvozeno z různých tabulek transakcí a protokolů historie workflow Příklady Faktura vytvořenaFaktura schválenaPlatba vytvořena | |||
| Čas události EventTime | Časové razítko udávající, kdy k aktivitě došlo. | ||
| Popis Tento atribut zaznamenává přesné datum a čas konkrétní aktivity. Slouží k řazení událostí podle času a výpočtu doby mezi jednotlivými kroky. V Dynamics 365 se obvykle získává z polí Proč je to důležité Nezbytný pro výpočet doby cyklu a zpracování i pro odhalování úzkých míst. Kde data získat Systémová pole CreatedDateTime nebo ModifiedDateTime v tabulkách transakcí Příklady 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| Číslo faktury InvoiceNumber | Jedinečný identifikátor přidělený faktuře dodavatele. | ||
| Popis Číslo faktury slouží v tomto zobrazení procesu jako jednoznačný identifikátor případu. Sdružuje všechny události týkající se jedné faktury dodavatele a umožňuje podrobně analyzovat její průběh od přijetí po úhradu. V Microsoft Dynamics 365 obvykle odpovídá poli Proč je to důležité Je to základní klíč, který propojuje nesouvisející aktivity v oblasti závazků do jedné instance procesu. Kde data získat Tabulka: VendInvoiceJour, pole: InvoiceId Příklady INV-2023-00198223344ACME-OCT-22 | |||
| Poslední aktualizace dat LastDataUpdate | Časové razítko udávající, kdy byla data získána nebo obnovena. | ||
| Popis Udává aktuálnost dat použitých při analýze. Pomáhá uživatelům zjistit, zda pracují s aktuálními daty, nebo se snímkem z předchozího období. Tento údaj obvykle vytváří proces ETL (Extract, Transform, Load), nejde o pole přímo v Dynamics 365. Proč je to důležité Důležité pro důvěryhodnost dashboardů a KPI. Kde data získat Vytvořeno skriptem pro získávání dat Příklady 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| Zdrojový systém SourceSystem | Název systému, ze kterého data pocházejí. | ||
| Popis Označuje zdrojový software nebo prostředí, ze kterého byla data procesu získána. V tomto případě bude vždy uvedena instance Microsoft Dynamics 365. Tento údaj je užitečný zejména v prostředí s více systémy, kde se mohou kombinovat data z ERP a externích řešení pro skenování. Proč je to důležité Zajišťuje dohledatelnost původu dat při analýze více systémů. Kde data získat Pevně nastaveno nebo nakonfigurováno při získávání dat Příklady Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Částka faktury InvoiceAmount | Celková peněžní hodnota faktury. | ||
| Popis Celková hodnota faktury v měně transakce. V Dynamics 365 ji najdete v polích, jako jsou Používá se v dashboardu pro odhalování rizika duplicitních plateb, kde umožňuje porovnávat částky s údaji o dodavatelích. Proč je to důležité Důležitý údaj pro analýzu objemu výdajů a finančních rizik. Kde data získat Tabulka: VendInvoiceJour, pole: InvoiceAmount Příklady 1500.00245.5010000.00 | |||
| Číslo objednávky PurchaseOrderNumber | Referenční číslo související objednávky. | ||
| Popis Propojuje fakturu s původním nákupním dokladem. V Dynamics 365 jde o pole Tento atribut se používá v dashboardu „Shoda objednávek a vývoj nesrovnalostí“ k rozlišení faktur navázaných na objednávku od faktur bez objednávky. Proč je to důležité Nezbytné pro analýzu míry shody v procesu od nákupu po platbu. Kde data získat Tabulka: VendInvoiceJour, pole: PurchId Příklady PO-000455000342PO-22-998 | |||
| Datum faktury InvoiceDate | Datum uvedené na faktuře. | ||
| Popis Datum uvedené na faktuře dodavatele. V Dynamics 365 jde o pole V analýze „Doba zpracování od začátku do konce“ se používá k měření celého životního cyklu z pohledu dodavatele. Proč je to důležité Určuje začátek období, za které se sleduje stáří faktury. Kde data získat Tabulka: VendInvoiceJour, pole: InvoiceDate Příklady 2023-10-012023-10-15 | |||
| Datum splatnosti DueDate | Datum, do kterého má být faktura uhrazena. | ||
| Popis Smluvní datum, do kterého musí být platba uhrazena, aby se předešlo sankcím. V Dynamics 365 je uloženo v poli Slouží jako hlavní základ pro KPI „Podíl včas uhrazených plateb“ a pomáhá určovat priority v přehledu „Průchodnost a objem procesu AP“. Proč je to důležité Základ pro měření včasnosti plateb. Kde data získat Tabulka: VendInvoiceJour nebo VendTrans, pole: DueDate Příklady 2023-11-302023-12-15 | |||
| ID uživatele UserId | Identifikátor uživatele, který provedl danou aktivitu. | ||
| Popis Určuje systémového uživatele odpovědného za konkrétní aktivitu, například schválení faktury nebo zaúčtování platby. Údaj pochází z polí V analýze „Blokace plateb a překážky v procesu“ pomáhá zjistit, zda někteří zpracovatelé způsobují více blokací než ostatní. Proč je to důležité Umožňuje analyzovat chování uživatelů a oddělení odpovědností. Kde data získat Systémová pole CreatedBy/ModifiedBy v tabulkách transakcí a historie Příklady jdoeadminworkflow_sys | |||
| Kód společnosti CompanyCode | Identifikátor právnické osoby nebo dceřiné společnosti. | ||
| Popis Označuje právnickou osobu v organizaci, ve které se faktura zpracovává. V Microsoft Dynamics 365 je tento údaj pevně určen systémovým polem Tento atribut je důležitý pro analýzu celkové doby zpracování, která umožňuje porovnávat různé dceřiné společnosti nebo geografické oblasti. Proč je to důležité Umožňuje porovnávat různé obchodní jednotky nebo země. Kde data získat Tabulka: VendInvoiceJour, pole: DataAreaId Příklady USMFDEMFGBSI | |||
| Název dodavatele VendorName | Název dodavatelské organizace. | ||
| Popis Název dodavatele. V D365 slouží účet dodavatele jako cizí klíč do globálního adresáře ( Srozumitelné názvy usnadňují práci s přehledem „Složitost vztahů s dodavateli“ a zpřístupňují dashboardy uživatelům z byznysu. Proč je to důležité Doplňuje číslo účtu dodavatele o kontext. Kde data získat Tabulka: DirPartyTable (přes VendTable), pole: Name Příklady Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| Oddělení Department | Oddělení odpovědné za náklad. | ||
| Popis Finanční dimenze označující interní oddělení. V Dynamics 365 jsou dimenze ukládány dynamicky, často v Tento atribut se používá v přehledu „Složitost vztahů s dodavateli“ ke zjištění, která interní oddělení vytvářejí největší objem závazků. Proč je to důležité Umožňuje přejít na podrobnější úroveň podle organizační struktury a analyzovat odpovědnost. Kde data získat Tabulka: VendInvoiceJour, pole: DefaultDimension (vyžaduje zobrazení DimensionAttributeLevelValue) Příklady ITFinanceProvoz | |||
| Účet dodavatele VendorAccount | Jedinečné číslo účtu dodavatele. | ||
| Popis Jedinečný identifikátor dodavatele zapojeného do transakce. V Dynamics 365 odpovídá poli Tento atribut je důležitý pro zobrazení složitosti vztahů s dodavateli. Umožňuje analyzovat výkon a problémy v rámci vztahu s konkrétním dodavatelem. Proč je to důležité Umožňuje porovnávat výkon procesu podle dodavatele. Kde data získat Tabulka: VendInvoiceJour, pole: InvoiceAccount nebo OrderAccount Příklady US-101V000452001 | |||
| Číslo účetního dokladu VoucherNumber | Číslo účetního dokladu hlavní knihy souvisejícího s transakcí. | ||
| Popis Interní identifikátor účetního zápisu v hlavní knize. V Dynamics 365 propojuje pole Přestože jde o technický údaj, při auditu „Cesta procesem a kontrola shody“ pomáhá dohledat zápisy v hlavní knize a provést odsouhlasení. Proč je to důležité Důležitý údaj pro finanční audit a odsouhlasení. Kde data získat Tabulka: VendInvoiceJour, pole: LedgerVoucher Příklady VOU-10023INV-ACC-992 | |||
| Datum pro slevu za platbu v hotovosti CashDiscountDate | Datum, do kterého je nutné zaplatit, aby bylo možné získat slevu. | ||
| Popis Termín pro využití slevy za včasnou platbu. V Dynamics 365 jde o pole Tento atribut se používá v dashboardu „Využití slev za včasnou platbu“, který organizaci umožňuje vyčíslit ušlé úspory. Proč je to důležité Přímo ovlivňuje KPI finanční efektivity procesu. Kde data získat Tabulka: VendInvoiceJour nebo VendTrans, pole: CashDiscDate Příklady 2023-10-102023-10-20 | |||
| Je platba blokována IsPaymentBlocked | Příznak, který určuje, zda je faktura aktuálně blokována pro platbu. | ||
| Popis Logická hodnota určující, zda je faktura pozastavena. V Dynamics 365 se obvykle odvozuje ze stavu Tento údaj je základem analýzy „Blokace plateb a překážky v procesu“ a upozorňuje na přerušení procesu. Proč je to důležité Odhaluje bezprostřední překážky a ruční zásahy. Kde data získat Tabulka: VendTrans, pole: Approved (obrácená hodnota) nebo specializovaná pole Hold Příklady truefalse | |||
| Měna Currency | Kód měny faktury. | ||
| Popis Kód ISO měny, ve které byla faktura vystavena. V Dynamics 365 jde o pole Je důležitý pro sjednocení částek v mapování „Částka aktivity“, pokud je potřeba převádět různé měny na společnou měnu. Proč je to důležité Nezbytný kontext pro interpretaci finančních hodnot. Kde data získat Tabulka: VendInvoiceJour, pole: CurrencyCode Příklady USDEURGBP | |||
| Platební podmínky PaymentTerms | Kód označující dohodnuté platební podmínky. | ||
| Popis Konfigurační kód určující termíny splatnosti a slevy, například Net30. V Dynamics 365 jde o pole Analyzuje se společně s dobou průchodu procesem, aby bylo možné zjistit, zda zpoždění procesu vedou k porušení dohodnutých podmínek. Proč je to důležité Doplňuje kontext pro výpočet data splatnosti. Kde data získat Tabulka: VendInvoiceJour, pole: PaymTermId Příklady Net302%10Net30COD | |||
| Způsob platby PaymentMethod | Způsob úhrady faktury, například šekem, bankovním převodem nebo elektronickým převodem. | ||
| Popis Určuje, jak se převádějí peníze dodavateli. V Dynamics 365 jde o pole Tento atribut se používá v dashboardu „Doba zpracování plateb“ k vyhodnocení efektivity různých typů platebních dávek. Proč je to důležité Pomáhá vysvětlit rozdíly v délce fáze provedení platby. Kde data získat Tabulka: VendInvoiceJour (spojená s údaji PaymMode) nebo VendTrans Příklady ŠEKACHBANKOVNÍ PŘEVOD | |||
Činnosti při zpracování plateb dodavatelům
| Aktivita | Popis | ||
|---|---|---|---|
| Faktura schválena | Instance workflow pro čekající fakturu dosáhne stavu dokončeno nebo schváleno. Fakturu lze nyní zaúčtovat do hlavní knihy. | ||
| Proč je to důležité Vypočítává průměrnou dobu schválení. Zpoždění v této fázi přímo ovlivňuje možnost využít slevy za včasnou platbu. Kde data získat WorkflowTrackingStatusTable.CreatedDateTime, kde TrackingStatus je Completed. Případně VendInvoiceInfoTable.RequestStatus odpovídá Approved. Zachycení Zaznamená se při dokončení instance workflow Typ události explicit | |||
| Faktura spárována s nákupní objednávkou | Systém úspěšně propojí řádek faktury s nákupní objednávkou nebo příjemkou. Tato aktivita potvrzuje ověření faktury vůči nákupní objednávce. | ||
| Proč je to důležité Důležité pro KPI podílu faktur spárovaných s nákupní objednávkou napoprvé. Rozlišuje zpracování bez ručních zásahů od faktur, které vyžadují ruční práci. Kde data získat VendInvoiceInfoLine.PurchId a VendInvoiceInfoTable.MatchStatus. Událost se odvodí při změně MatchStatus na Passed. Zachycení Porovnejte hodnotu pole MatchStatus před změnou a po ní Typ události inferred | |||
| Faktura vytvořena | V systému se vytvoří záznam čekající faktury dodavatele. Tím faktura vstupuje do workflow Dynamics 365, ať už byla zadána ručně, nebo importována prostřednictvím datové entity. | ||
| Proč je to důležité Určuje počáteční čas pro výpočet doby zpracování. Organizace tak mohou měřit, jak dlouho faktury zůstávají v systému před zpracováním nebo zaúčtováním. Kde data získat Časové razítko VendInvoiceInfoTable.CreatedDateTime nebo vytvoření VendInvoiceInfoTable.RecId. Jde o hlavičku čekající faktury dodavatele. Zachycení Zaznamená se při vytvoření záznamu v VendInvoiceInfoTable Typ události explicit | |||
| Faktura zaúčtována | Faktura se zaúčtuje do hlavní knihy a v systému vznikne závazek. Záznam se přesune z tabulek čekajících faktur do tabulek zaúčtovaných transakcí. | ||
| Proč je to důležité Významný milník, který potvrzuje zaúčtování závazku. Po této aktivitě lze fakturu vybrat k úhradě. Kde data získat Vytvoření záznamu v VendInvoiceJour a VendTrans. TransDate označuje datum zaúčtování. Zachycení Zaznamená se při provedení transakce X Typ události explicit | |||
| Platba vytvořena | Systém vytvoří platební soubor (EFT, ISO20022) nebo vytiskne šeky. Stav platby na řádku deníku se změní na Sent nebo Generated. | ||
| Proč je to důležité Slouží ke sledování KPI prodlevy mezi schválením a provedením. Potvrzuje, že byl vytvořen platební příkaz. Kde data získat LedgerJournalTrans.PaymentStatus se změní na Sent/Recieved. Změna se často odvozuje z aktualizací řádku. Zachycení Porovnejte hodnotu pole PaymentStatus před změnou a po ní Typ události inferred | |||
| Platba zaúčtována | Platební deník se zaúčtuje do hlavní knihy, faktura se vypořádá a zůstatek dodavatele se vyrovná. Tím se finanční proces dokončí. | ||
| Proč je to důležité Závěrečná aktivita pro výpočet průměrné doby od faktury po platbu. Potvrzuje dokončení účetních zápisů souvisejících se snížením hotovosti. Kde data získat LedgerJournalTrans je zaúčtována. Aktualizuje se VendTrans a zaznamená vypořádání. Skutečnou událostí je zaúčtování deníku. Zachycení Zaznamená se při provedení transakce X Typ události explicit | |||
| Platební deník vytvořen | Faktura se vybere a přidá na řádek platebního deníku. Tím se projeví záměr provést platbu a obvykle se spustí workflow její kontroly. | ||
| Proč je to důležité Označuje přechod od evidence závazku ke zpracování výplaty. Používá se k měření doby provedení platby. Kde data získat LedgerJournalTrans.CreatedDateTime. Faktura je propojena prostřednictvím pole MarkedInvoice nebo tabulek vypořádání. Zachycení Zaznamená se při vytvoření záznamu v LedgerJournalTrans Typ události explicit | |||
| Blokace platby nastavena | Na transakci dodavatele se nastaví blokace, která zabrání jejímu zařazení do návrhu platby. Často se nastavuje ručně při řešení sporu. | ||
| Proč je to důležité Slouží k analýze blokací plateb a problémových míst. Odhaluje ruční zásahy, které zdržují odchozí platby. Kde data získat Příznak VendTrans.Approved je nastaven na No nebo jsou vyplněna konkrétní pole stavu OnHold. Je nutné sledovat změny v VendTrans. Zachycení Porovnejte hodnotu stavového pole před změnou a po ní Typ události inferred | |||
| Faktura odeslána ke schválení | Čekající faktura se odešle ke kontrole do workflow enginu. Tím končí zadávání a párování dat a začíná fáze schvalování. | ||
| Proč je to důležité Označuje začátek schvalovacího cyklu. Je nezbytný pro analýzu efektivity interního schvalování. Kde data získat WorkflowTrackingStatusTable.CreatedDateTime, kde ContextTableId odpovídá ID VendInvoiceInfoTable a Status je Submitted. Zachycení Zaznamená se při spuštění instance workflow Typ události explicit | |||
| Faktura upravena | Zaznamenává změny hlavičky nebo řádků faktury před zaúčtováním. Časté úpravy mohou ukazovat na problémy při získávání dat nebo na nutnost ručních oprav během ověřování. | ||
| Proč je to důležité Časté úpravy mohou znamenat opakované opravy nebo nízkou kvalitu zdrojových dat, například chyby OCR. Tento údaj slouží ke sledování oprav a přesnosti dat. Kde data získat Protokol databáze (SysDatabaseLog) pro VendInvoiceInfoTable, pokud je zapnutý, nebo odvození změn z ModifiedDateTime při častém dotazování. Zachycení Porovnejte ModifiedDateTime v po sobě jdoucích exportech Typ události inferred | |||
| Párování faktury se nezdařilo | Při párování se zjistí nesoulad mezi fakturou a nákupní objednávkou nebo příjemkou, například rozdíl v ceně či množství. Proces se často zastaví, dokud se problém nevyřeší. | ||
| Proč je to důležité Odhaluje konkrétní problémy při párování. Slouží pro dashboard sledování párování nákupních objednávek a nesrovnalostí. Kde data získat VendInvoiceInfoTable.MatchStatus se změní na Failed nebo Discrepancy. Rozdíly jsou viditelné také v údajích o párování v VendInvoiceInfoLine. Zachycení Porovnejte hodnotu pole MatchStatus před změnou a po ní Typ události inferred | |||
| Platební deník schválen | Workflow platebního deníku je schváleno a platby lze vytvořit. Jde o poslední kontrolu před přípravou převodu peněz. | ||
| Proč je to důležité Odděluje administrativní přípravu plateb od úzkého místa při jejich schvalování. Kde data získat WorkflowTrackingStatusTable propojená s ID hlavičky LedgerJournalTable. Stav je Completed. Zachycení Zaznamená se při dokončení instance workflow Typ události explicit | |||
Návody na extrakci dat
Kroky
Otevřete pracovní prostor Správa dat: Přihlaste se do prostředí Microsoft Dynamics 365 Finance. Přejděte do pracovních prostorů a vyberte Správa dat. Zde se nastavují projekty exportu dat.
Vytvořte projekt exportu: Kliknutím na dlaždici Export vytvořte nový datový projekt. Zvolte výstižný název, například ProcessMining_AP_Export. V poli Cílový formát dat vyberte cílový formát, například Azure SQL DB pro BYOD nebo CSV pro export do souboru.
Přidejte datové entity: Do projektu postupně přidejte následující standardní datové entity: VendorInvoiceHeaderEntity (nevyřízené faktury), VendorInvoiceLineEntity (položky faktur), VendorInvoiceJournalHeaderEntity (zaúčtované faktury), VendorPaymentJournalLineEntity (platby) a WorkflowHistoryEntity (záznamy schválení). Pokud WorkflowHistoryEntity není ve výchozím nastavení k dispozici, možná budete muset povolit vlastní entitu nebo konkrétní systémovou entitu zpřístupněnou pro export.
Nastavte filtry entit: U každé entity klikněte na ikonu Filtr. Omezte data na příslušnou CompanyInfo (DataAreaId) a nastavte období podle polí CreatedDateTime nebo InvoiceDate. Extrahují se tak pouze data za požadované období, například za posledních 12 měsíců.
Nastavte opakovaný export: Chcete-li udržovat záznam událostí aktuální, vytvořte opakovanou úlohu dat. Nastavte četnost, například denně nebo každou hodinu, a pokud je tato možnost podporovaná, zapněte Přírůstkové odesílání. Snížíte tak zatížení systému, protože se budou exportovat pouze změněné záznamy.
Proveďte první export: Poprvé spusťte projekt ručně kliknutím na Exportovat nyní. Sledujte souhrn provádění a ověřte, že se všechny záznamy exportovaly bez chyb.
Transformujte data: Po exportu dat do cílového umístění, tedy Azure SQL nebo souborů, spojte tabulky pomocí SQL skriptu uvedeného v části Dotaz. Transformace převede záznamy z různých entit do jednoho chronologického záznamu událostí.
Namapujte atributy: Ověřte, že výsledná datová sada mapuje InvoiceNumber na ID případu, EventTime na časové razítko a Activity na název aktivity podle požadavků nástroje process mining.
Ověřte a nahrajte data: Proveďte níže uvedené kontroly a ověřte správnost dat. Po ověření exportujte výsledek do souboru CSV nebo Parquet a nahrajte jej do ProcessMind.
Konfigurace
- Výběr entit: Pro kroky procesu před zaúčtováním použijte VendorInvoiceHeaderEntity a VendorInvoiceLineEntity. Pro právní doklad po zaúčtování použijte VendorInvoiceJournalHeaderEntity. Platby sledujte pomocí VendorPaymentJournalLineEntity.
- Incremental Push: Toto nastavení zapněte v projektu Data Management, aby se po prvním úplném načtení exportovaly jen nové nebo upravené záznamy. Je to důležité pro výkon.
- Časové období: Filtrujte podle InvoiceDate >= [Start Date]. Vyhněte se exportu bez časového omezení, který může skončit vypršením časového limitu.
- Filtr společnosti: D365 pracuje s více právními entitami. Vždy filtrujte podle DataAreaId, aby se data z různých právních entit nesmíchala, pokud nechcete provádět analýzu napříč společnostmi.
- Historie workflow: Standardní entity pro historii workflow mohou obsahovat velké množství dat. Exportujte pouze historii související s typy VendInvoice, aby objem dat zůstal přiměřený.
Ukázkový dotaz 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' Kroky
Ověřte připojení BYOD: Zkontrolujte, že máte nainstalovaný SQL Server Management Studio (SSMS) nebo podobný nástroj a že se přes něj můžete připojit k databázi Azure SQL nastavené jako cíl Bring Your Own Database (BYOD) pro vaše prostředí Dynamics 365 Finance & Operations.
Ověřte export entit: Přejděte do pracovního prostoru Správa dat v Dynamics 365. Ověřte, že jsou následující entity nebo jejich podkladové tabulky nastavené pro export do databáze BYOD:
VendInvoiceInfoTable(nevyřízené faktury),VendInvoiceInfoLine(nevyřízené položky),VendInvoiceJour(zaúčtované faktury),VendTrans(transakce dodavatelů),LedgerJournalTrans(řádky deníku),LedgerJournalTable(hlavičky deníku) aWorkflowTrackingStatusTable(historie workflow).Nastavte úlohu exportu: Pokud se tyto tabulky zatím neexportují, vytvořte novou úlohu exportu. Jako Cílový formát dat nastavte databázi BYOD SQL. Zvolte Přírůstkové odesílání, aby data zůstala synchronizovaná bez opakovaného úplného exportu. Spusťte úlohu a naplňte tabulky.
Připravte prostředí SQL: Otevřete SSMS a připojte se k databázi BYOD Azure SQL. Otevřete nové okno dotazu.
Nastavte parametry: V níže uvedeném skriptu najděte na začátku část s deklaracemi proměnných. Upravte proměnné
@StartDatea@EndDatepodle období, které chcete analyzovat. Pokud potřebujete filtrovat podle konkrétní právnické osoby, upravte podmínky filtruDATAAREAID.Spusťte skript: Spusťte celý skript T-SQL. Pomocí
UNION ALLspojí data z více tabulek do jednotného formátu záznamu událostí.Ověřte data: Zkontrolujte, zda sloupce
InvoiceNumberneboEventTimeneobsahují prázdné hodnoty. Ověřte, že jsou zahrnuté zaúčtované faktury zVendInvoiceJouri nevyřízené faktury zVendInvoiceInfoTable.Exportujte výsledek: Klikněte pravým tlačítkem na mřížku výsledků v SSMS a vyberte Uložit výsledky jako.... Uložte soubor ve formátu CSV (odděleném čárkami).
Naformátujte data pro nahrání: Otevřete soubor CSV v Excelu nebo textovém editoru a ověřte, že formát data odpovídá normě ISO 8601 (YYYY-MM-DD HH:MM:SS), pokud to ProcessMind vyžaduje. Pokud skript proběhl úspěšně, další transformace by neměla být potřeba.
Nahrajte data do ProcessMind: Importujte soubor CSV do ProcessMind a namapujte sloupce
InvoiceNumberna ID případu,Activityna název aktivity aEventTimena časové razítko.
Konfigurace
- Strategie exportu: U tabulek s velkým objemem dat, jako jsou
LedgerJournalTransaVendTrans, použijte Incremental Push, abyste omezili zatížení BYOD. Úplný export použijte pouze při podezření na nesrovnalosti v datech. - Časová pásma: Dynamics 365 ukládá data v UTC. Skript předpokládá čas UTC. Pokud potřebujete analyzovat místní čas, použijte úpravu
DATEADDve skriptu nebo při importu do ProcessMind. - Filtrování podle společnosti: Sloupec
DataAreaIdoznačuje právní entitu. Skript ve výchozím nastavení načítá data ze všech entit. Konkrétní dceřinou společnost vyfiltrujete přidáním podmínkyWHERE DataAreaId = 'usmf'. - Historie workflow: Tabulka
WorkflowTrackingStatusTableje důležitá pro časová razítka schvalování. Zahrňte ji do nastavení exportu BYOD, protože ve výchozím nastavení bývá často vynechána. - Uchovávání dat: Ověřte, zda úlohy čištění v D365 nemažou dokončenou historii workflow nebo zaúčtované řádky deníku. Jejich odstranění omezí, jak daleko do minulosti lze proces analyzovat.
Ukázkový dotaz 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; Chcete začít?
Pomocí této šablony připravíte spolehlivý základ dat a můžete začít zlepšovat workflow plateb. Pokud potřebujete poradit s mapováním konkrétních tabulek Dynamics 365, náš tým vám pomůže.
Začněte optimalizovat zpracování plateb dodavatelům
Zkraťte dobu zpracování o 30 % a odstraňte prodlevy v D365.
Platební kartu zadávat nemusíte. Nastavení zabere pět minut.