Šablona dat pro váš proces Order to Cash: fakturace a vystavování faktur
Šablona dat pro váš proces Order to Cash: fakturace a vystavování faktur
- Doporučené atributy pro podrobnou analýzu
- Důležité kroky a milníky procesu, které je třeba sledovat
- Praktické pokyny k extrakci dat ze SAP ECC
Atributy procesu Order to Cash: fakturace a vystavování faktur
| Název | Popis | ||
|---|---|---|---|
| Aktivita ActivityName | Název obchodní události nebo kroku, který proběhl v životním cyklu faktury. | ||
| Popis Tento atribut popisuje konkrétní akci nebo změnu stavu v procesu fakturace, například „Vygenerována faktura“, „Faktura zaúčtována“ nebo „Přijata platba od zákazníka“. Aktivity jsou odvozeny z různých systémových událostí, změn stavu dokladů nebo transakčních kódů, které uživatelé spustili. Pořadí aktivit tvoří tok procesu, který je základem analýzy process mining. Z aktivit lze zjistit, jaké kroky proces skutečně zahrnuje, v jakém pořadí probíhají a jak často se opakují. Díky tomu lze porovnat skutečný průběh procesu s navrženým. Proč je to důležité Určuje kroky v mapě procesu a umožňuje zobrazit a analyzovat tok procesu, odchylky i úzká místa. Kde data získat Jde o koncepční atribut odvozený z několika zdrojů, například z transakčních kódů (CDHDR-TCODE), změn stavu dokladů (VBUK-FKSTK) a zaúčtování účetních dokladů. Příklady Vystavení fakturyZaúčtování fakturyOdeslání upomínkyVyrovnání faktury | |||
| Čas zahájení EventTime | Časové razítko udávající, kdy konkrétní aktivita nebo událost nastala. | ||
| Popis Čas události zachycuje přesné datum a čas každé aktivity v životním cyklu faktury. Tento údaj je základem časových analýz v process mining, například výpočtu doby zpracování, hledání úzkých míst a sledování výkonnosti procesu vůči dohodnutým úrovním služeb. Atribut se obvykle sestavuje spojením data, například data zaúčtování (BUDAT), s časovým údajem (UZEIT) z různých tabulek SAP, které zaznamenávají změny nebo vytvoření dokladů. Přesná časová razítka jsou nezbytná pro sestavení spolehlivého záznamu událostí a platnou analýzu výkonnosti. Proč je to důležité Tento atribut je základem analýzy výkonnosti. Umožňuje počítat dobu zpracování, trvání jednotlivých kroků i čekání mezi nimi. Kde data získat Sestavuje se z různých datových a časových polí v několika tabulkách, například BKPF (BUDAT, CPUTM), VBRK (ERDAT, ERZET) a tabulkách protokolu změn, jako je CDHDR (UDATE, UTIME). Příklady 2023-04-15T10:30:00Z2023-04-16T11:00:00Z2023-05-20T09:00:00Z | |||
| Číslo faktury InvoiceNumber | Jedinečný identifikátor fakturačního dokladu, který slouží jako hlavní ID případu v procesu fakturace. | ||
| Popis Číslo faktury, v SAP označované jako číslo fakturačního dokladu, jednoznačně identifikuje každou fakturu. V process mining slouží jako CaseId a sdružuje všechny související aktivity, například vytvoření, zaúčtování, odeslání, platbu a vyrovnání, do jedné instance procesu. Analýza podle čísla faktury poskytuje úplný přehled o životním cyklu každé fakturační transakce od jejího zahájení až po konečné vyrovnání. Je nezbytná pro výpočet ukazatelů, jako jsou Days Sales Outstanding (DSO) a celková doba zpracování faktury, a poskytuje jasný základ pro měření a zlepšování výkonnosti. Proč je to důležité Jde o základní identifikátor pro sledování celé cesty faktury. Umožňuje analyzovat dobu zpracování, úzká místa a odchylky u každé jednotlivé fakturační transakce. Kde data získat Tabulka SAP ECC: VBRK, pole: VBELN Příklady 90001234900012359000123690001237 | |||
| Celková částka faktury TotalInvoiceAmount | Celková čistá hodnota fakturačního dokladu. | ||
| Popis Tento atribut představuje celkovou čistou částku faktury bez daní. Jde o důležitý finanční údaj spojený s procesem fakturace. Lze jej využít například k rozdělení faktur podle hodnoty a porovnání jejich průběhu. Pomáhá také stanovit priority při inkasu nebo zjistit, proč schválení či úhrada faktur s vysokou hodnotou trvá déle. Tento finanční kontext rozšiřuje možnosti analýzy procesu. Proč je to důležité Poskytuje důležitý finanční kontext a umožňuje analyzovat proces podle hodnoty faktury, například zjistit, zda faktury s vysokou hodnotou procházejí jiným procesem nebo se déle vyrovnávají. Kde data získat Tabulka SAP ECC: VBRK, pole: NETWR Příklady 1500.7525000.00500.0012345.67 | |||
| Číslo zákazníka CustomerNumber | Jedinečné číslo zákazníka, kterému je faktura vystavena. | ||
| Popis Číslo zákazníka propojuje fakturu s konkrétním klientem nebo obchodním partnerem. Tento atribut je důležitý pro členění a analýzu procesu fakturace podle charakteristik zákazníků. Analytici mohou porovnat Days Sales Outstanding (DSO) u různých zákazníků, zjistit, kteří zákazníci často platí pozdě, nebo vyhodnotit dodržování dohodnutých platebních podmínek. Znalost těchto vzorců pomáhá řídit vztahy se zákazníky a přizpůsobit strategii inkasa jednotlivým skupinám zákazníků. Proč je to důležité Umožňuje analýzu podle zákazníků, pomáhá odhalit platební chování, vyhodnotit DSO podle zákazníka a přizpůsobit strategii inkasa. Kde data získat Tabulka SAP ECC: VBRK, pole: KUNRG (plátce) nebo KUNAG (odběratel). Příklady 100023200541CUST-A487910345 | |||
| Typ fakturačního dokladu BillingDocumentType | Kód určující typ fakturačního dokladu, například fakturu, dobropis nebo vrubopis. | ||
| Popis Typ fakturačního dokladu rozděluje transakce do kategorií podle jejich obchodního účelu. Například „F2“ označuje standardní fakturu zákazníkovi a „G2“ dobropis. Toto členění se nastavuje v SAP a určuje, jak se jednotlivé fakturační doklady zpracovávají. V process mining je tento atribut důležitý pro filtrování a porovnávání různých scénářů fakturace. Analytici mohou zkoumat proces standardních faktur odděleně od procesu dobropisů a porovnat jejich průběh, dobu zpracování i problémy. Výsledky pomáhají lépe zacílit zlepšování procesů. Proč je to důležité Umožňuje rozdělit a analyzovat různé procesy fakturace, například standardní faktury a dobropisy, které často mají odlišný průběh. Kde data získat Tabulka SAP ECC: VBRK, pole: FKART Příklady F2G2L2IV | |||
| Účetní okruh CompanyCode | Identifikátor právnické osoby, která fakturu vystavila. | ||
| Popis Účetní okruh v SAP představuje samostatnou právní a účetní jednotku. Všechny finanční transakce včetně faktur se účtují do konkrétního účetního okruhu. Jde o základní organizační údaj. V process mining se účetní okruh používá k analýze a porovnání výkonnosti fakturačních procesů v různých právních entitách jedné společnosti. Pomáhá určit, které postupy z jedné entity lze uplatnit i jinde, a zajistit, aby analýza odpovídala organizační struktuře společnosti. Proč je to důležité Umožňuje filtrovat a porovnávat procesy napříč právními entitami. Je důležitý pro finanční analýzu a porovnávání výkonnosti organizačních jednotek. Kde data získat Tabulka SAP ECC: VBRK, pole: BUKRS Příklady 10002000US01DE01 | |||
| Uživatelské jméno UserName | ID uživatele, který provedl aktivitu nebo vytvořil doklad. | ||
| Popis Tento atribut zachycuje ID uživatele SAP odpovědného za danou událost, například vytvoření faktury nebo zaúčtování platby. Je důležitý pro analýzu lidské stránky procesu. Na základě těchto údajů lze zkoumat rozdíly ve výkonnosti mezi uživateli nebo týmy, určit potřebu školení a odhalit možné problémy se shodou. Údaj také pomáhá odlišit ruční aktivity uživatelů od automatických kroků prováděných systémovými nebo dávkovými uživateli, což je důležité při výpočtu míry automatizace. Proč je to důležité Umožňuje analyzovat výkonnost uživatelů a rozložení pracovní zátěže. Pomáhá také rozlišit ruční a automatické aktivity, což podporuje iniciativy zaměřené na automatizaci a efektivitu. Kde data získat Tabulka SAP ECC: VBRK, pole: ERNAM (vytvořil) nebo BKPF, pole: USNAM (uživatelské jméno) nebo CDHDR, pole: USERNAME (uživatel). Příklady JSMITHBW_BATCHLROSSIMKUMAR | |||
| Číslo prodejního dokladu SalesDocumentNumber | Identifikátor původní prodejní objednávky, na jejímž základě vznikla faktura. | ||
| Popis Tento atribut přímo propojuje fakturu s prodejní objednávkou, která transakci zahájila. Tato návaznost je nezbytná pro úplnou analýzu cyklu Order to Cash. Propojením fakturačního procesu s předcházejícím procesem prodejní objednávky lze analyzovat celkovou dobu od objednávky zákazníka po přijetí platby. Pomáhá zjistit, zda prodlevy při fakturaci způsobují problémy v prodeji, plnění objednávky, nebo přímo ve fakturačním oddělení, a poskytuje tak ucelenější pohled na proces. Proč je to důležité Propojuje fakturaci s prodejní objednávkou a umožňuje skutečnou analýzu celého cyklu Order to Cash. Pomáhá odhalit prodlevy mezi odděleními. Kde data získat Tabulka SAP ECC: VBRP, pole: VGBEL Příklady 100000451000004610000047 | |||
| Datum dokladu DocumentDate | Datum uvedené na původním dokladu, které zadal dodavatel nebo jeho vystavitel. | ||
| Popis Datum dokladu je datum vystavení původního dokladu. U faktur jde obvykle o datum jejich vytvoření a často slouží jako základ pro výpočet data splatnosti. Toto datum je důležité pro finanční výkaznictví a výpočet ukazatelů, jako je Days Sales Outstanding (DSO). Z pohledu zákazníka označuje začátek období pro inkaso. Rozdíly mezi datem dokladu a datem zaúčtování mohou odhalit interní prodlevy při zpracování příchozích faktur. Proč je to důležité Slouží jako základ pro výpočet stáří faktury a DSO a poskytuje důležitý údaj pro finanční analýzu i analýzu platebních podmínek. Kde data získat Tabulka SAP ECC: VBRK, pole: FKDAT (datum fakturace) Příklady 2023-04-152023-04-162023-05-20 | |||
| Datum splatnosti faktury InvoiceDueDate | Datum, do kterého má zákazník zaplatit. | ||
| Popis Datum splatnosti faktury je termín úhrady stanovený platebními podmínkami. Tento údaj je základem pro správu pohledávek a zahájení inkasa. Používá se k výpočtu KPI míry včasných plateb, která porovnává datum splatnosti se skutečným datem úhrady. Analýza faktur podle data splatnosti pomáhá předvídat peněžní tok a stanovit priority při inkasu blížících se nebo opožděných plateb. Datum se obvykle odvozuje od základního data a platebních podmínek. Proč je to důležité Slouží jako základ pro měření včasnosti plateb a je důležité pro správu pohledávek i předpověď peněžního toku. Kde data získat Vypočítává se podle základního data (BSEG-ZFBDT) a platebních podmínek (BSEG-ZTERM). Nemusí být vždy uloženo v samostatném poli. Příklady 2023-05-152023-05-302023-06-20 | |||
| Datum vyrovnání ClearingDate | Datum přijetí platby a vyrovnání faktury v pohledávkách. | ||
| Popis Datum vyrovnání označuje den, kdy je otevřená položka, například faktura, ve finančním systému označena jako zaplacená neboli vyrovnaná. K tomuto datu se přijatá platba považuje za inkasovanou a spárovanou. Jde o jedno z nejdůležitějších dat v cyklu Order to Cash. Slouží jako koncový bod pro výpočet Days Sales Outstanding (DSO) a celkové doby od fakturace po přijetí platby. Analýza data vyrovnání pomáhá měřit účinnost inkasa. Proč je to důležité Označuje závěrečný krok životního cyklu faktury. Slouží jako koncové datum pro výpočet DSO a celkové doby zpracování a vypovídá o účinnosti inkasa. Kde data získat Tabulka SAP ECC: BSAD, pole: AUGDT Příklady 2023-05-142023-06-012023-06-25 | |||
| Datum zaúčtování PostingDate | Datum zaúčtování dokladu do finančního účetnictví. | ||
| Popis Datum zaúčtování určuje účetní období, do kterého se transakce zaznamená v hlavní knize. Jde o důležitý údaj pro účetnictví a finanční výkaznictví. Prodleva mezi vytvořením dokladu a jeho zaúčtováním může ukazovat na neefektivní interní zpracování fakturačních dokladů. V process mining označuje datum zaúčtování důležitý milník v životním cyklu faktury. Čas mezi vytvořením a zaúčtováním faktury může sloužit jako ukazatel výkonnosti fakturačního oddělení. Proč je to důležité Označuje důležitý finanční milník a je nezbytné pro účetnictví. Čas mezi vytvořením a zaúčtováním faktury měří efektivitu interního zpracování. Kde data získat Tabulka SAP ECC: BKPF, pole: BUDAT Příklady 2023-04-152023-04-172023-05-21 | |||
| Jde o přepracování IsRework | Příznak určující, zda aktivita představuje přepracování nebo opravu. | ||
| Popis Tento vypočítaný atribut označuje aktivity, které představují přepracování, například „Oprava faktury“ nebo storno dokladu. Obvykle jde o logický příznak odvozený z názvu aktivity nebo z transakčních kódů souvisejících s opravami a storny, například „VF11“ pro storno fakturačního dokladu. V process mining tento příznak umožňuje vyčíslit rozsah přepracování v procesu fakturace. Přímo podporuje KPI, jako je míra oprav faktur, a pomáhá zobrazit opakující se smyčky v mapě procesu. Díky tomu lze odhalit neefektivitu a problémy s kvalitou, které zvyšují provozní náklady a prodlužují dobu do úhrady. Proč je to důležité Pomáhá vyčíslit neefektivitu procesu a problémy s kvalitou tím, že ukazuje, kolik práce se věnuje opravám chyb. Přímo podporuje KPI přepracování. Kde data získat Odvozuje se z názvu aktivity nebo transakčního kódu. Například: IF ActivityName = 'Invoice Corrected' OR TransactionCode = 'VF11' THEN true ELSE false. Příklady truefalse | |||
| Je automatizovaná IsAutomated | Příznak určující, zda aktivitu provedl systémový uživatel nebo automatizovaný proces. | ||
| Popis Tento vypočítaný atribut je logický příznak, který rozlišuje ruční a automatizované aktivity. Obvykle se odvozuje porovnáním atributu Uživatelské jméno se seznamem známých systémových nebo dávkových uživatelských ID, například „BATCHUSER“ nebo „SAPSYSTEM“. Tento příznak je důležitý pro měření míry automatizace procesu fakturace, což je pro mnoho organizací jedním z cílů při zvyšování efektivity a snižování nákladů. KPI míry automatizované fakturace se počítá přímo z tohoto atributu a pomáhá sledovat pokrok automatizačních iniciativ. Proč je to důležité Přímo podporuje výpočet míry automatizované fakturace. Pomáhá měřit efektivitu procesu a sledovat dopad automatizačních projektů. Kde data získat Odvozuje se z atributu Uživatelské jméno. Logika může vypadat například takto: IF UserName IN ('BATCH', 'SYSTEM', 'RFCUSER') THEN true ELSE false. Příklady truefalse | |||
| Měna Currency | Kód měny částek uvedených na faktuře. | ||
| Popis Tento atribut určuje měnu transakce, například USD, EUR nebo JPY. Poskytuje nezbytný kontext pro všechny peněžní hodnoty, například celkovou částku faktury. Při analýze dat z mezinárodní společnosti je údaj o měně nezbytný pro správný výklad a převod finančních částek. Umožňuje jednotné vykazování a zabraňuje sčítání částek bez správného převodu měn, které by vedlo k chybným finančním analýzám. Proč je to důležité Poskytuje potřebný kontext pro všechny peněžní hodnoty a zajišťuje správnost finanční analýzy, zejména při práci s více měnami. Kde data získat Tabulka SAP ECC: VBRK, pole: WAERK Příklady USDEURGBPJPY | |||
| Platební podmínky PaymentTerms | Podmínky, za kterých prodávající uskuteční prodej, včetně harmonogramu plateb. | ||
| Popis Platební podmínky určují, kdy je platba splatná, například „Net 30“ nebo „Net 60“. Dohodnou se se zákazníkem a významně ovlivňují peněžní tok. Analýza procesu podle platebních podmínek může ukázat, zda jsou některé podmínky spojené s delší dobou úhrady nebo častějšími opožděnými platbami. Tyto poznatky mohou firmě pomoci vyjednat se zákazníky výhodnější podmínky nebo upravit finanční plánování. Platební podmínky jsou také důležitým vstupem pro výpočet data splatnosti faktury. Proč je to důležité Pomáhá analyzovat platební chování zákazníků a dopad sjednaných podmínek na peněžní tok. Poskytuje podklady pro úpravu obchodních dohod. Kde data získat Tabulka SAP ECC: VBRK, pole: ZTERM Příklady Z030Z060Z001 | |||
| Poslední aktualizace dat LastDataUpdate | Časové razítko poslední aktualizace dat nebo extrakce ze zdrojového systému. | ||
| Popis Tento atribut uvádí, kdy byla datová sada naposledy aktualizována ze zdrojového systému. Poskytuje důležitý kontext pro analýzu a pomáhá uživatelům posoudit aktuálnost zobrazovaných dat. V dashboardech a reportech tento časový údaj informuje o tom, jak čerstvá data jsou, a pomáhá nastavit očekávání ohledně viditelnosti nejnovějších transakcí. Obvykle se generuje na konci extrakce dat. Proč je to důležité Informuje uživatele o aktuálnosti dat, což je důležité při rozhodování o provozu na základě analýzy. Kde data získat Vytváří a ukládá se při procesu extrakce, transformace a načtení dat (ETL). Příklady 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
| Prodejní organizace SalesOrganization | Organizační jednotka odpovědná za prodej výrobků nebo služeb. | ||
| Popis Prodejní organizace je organizační jednotka v SAP odpovědná za distribuci zboží a služeb a sjednávání prodejních podmínek. Je důležitým údajem pro strukturování prodeje a distribuce. V process mining umožňuje tento atribut analyzovat fakturační proces z pohledu prodejní struktury. Lze porovnat výkonnost různých prodejních organizací, zjistit, které regiony nebo obchodní oblasti fakturují efektivněji, a podpořit zavádění osvědčených postupů. Proč je to důležité Umožňuje porovnávat výkonnost a analyzovat různé prodejní divize nebo regiony. Pomáhá určit osvědčené postupy i oblasti, které je třeba zlepšit. Kde data získat Tabulka SAP ECC: VBRK, pole: VKORG Příklady 1000NA01EU01AP01 | |||
| Transakční kód TransactionCode | Transakční kód SAP použitý k provedení aktivity. | ||
| Popis Transakční kód neboli T-Code je jedinečný identifikátor konkrétní funkce nebo programu v SAP, například „VF01“ pro vytvoření fakturačního dokladu. Zaznamenání T-Code u každé události poskytuje technický pohled na provedení procesu v systému. Tyto informace jsou užitečné při hledání příčin problémů. Pokud se například často objevují chyby, analytici mohou ověřit, zda se nepoužívá nestandardní transakční kód. Pomáhají také odvodit název aktivity a zjistit, které funkce systému se v procesu používají. Proč je to důležité Poskytuje technický kontext k provedení aktivity. Umožňuje hledat příčiny odchylek v procesu a odhalovat nestandardní kroky uživatelů. Kde data získat Tabulka SAP ECC: CDHDR, pole: TCODE Příklady VF01VF02FB01F-28 | |||
| Zdrojový systém SourceSystem | Určuje zdrojový systém, ze kterého byla data extrahována. | ||
| Popis Tento atribut určuje systém, ve kterém data vznikla. V prostředí s několika instancemi ERP nebo integrovanými systémy pomáhá rozlišit data z různých zdrojů. V process mining je důležitý pro ověřování dat a analýzy, které porovnávají procesy napříč systémy nebo organizačními jednotkami. Obvykle se nastavuje jako statická hodnota při extrakci dat, aby označil datovou sadu. Proč je to důležité Udává původ dat. V prostředí s více systémy je důležitý pro zachování integrity dat a analýzu konkrétního systému. Kde data získat Obvykle jde o statickou hodnotu přidanou při procesu extrakce, transformace a načtení dat (ETL), která označuje konkrétní instanci SAP ECC, například „ECC_PROD_NA“. Příklady SAP_ECC_PRODECC_EU_100SAP_US_FIN | |||
Aktivity procesu Order to Cash: fakturace a vystavování faktur
| Aktivita | Popis | ||
|---|---|---|---|
| Odeslání faktury zákazníkovi | Označuje odeslání faktury zákazníkovi prostřednictvím určeného kanálu, například poštou, e-mailem nebo přes EDI. Událost se obvykle zaznamenává v protokolech systému pro správu výstupů. | ||
| Proč je to důležité Tento milník spouští běh lhůty pro úhradu zákazníkem. Prodlevy přímo ovlivňují, kdy lze platbu očekávat, a snižují efektivitu inkasa. Kde data získat Událost lze odvodit z data a času zpracování v tabulce stavů zpráv (NAST) pro typ výstupu odpovídající faktuře. Zachycení Odvozuje se ze záznamu v tabulce NAST se stavem zpracování „1“ (úspěšně zpracováno). Typ události inferred | |||
| Přijetí platby od zákazníka | Zákazník zaplatil a platba byla v systému zaúčtována jako příjem hotovosti nebo bankovní vklad. Vznikne samostatný platební doklad, který zatím není přiřazen ke konkrétní faktuře. | ||
| Proč je to důležité Jde o důležitý milník v cyklu přeměny hotovosti. Doba od odeslání faktury do přijetí platby tvoří podstatnou část Days Sales Outstanding (DSO). Kde data získat Platba se zaznamená jako nový doklad v tabulkách BKPF a BSEG, obvykle s typem dokladu označujícím platbu zákazníka, například „DZ“. Událost označuje datum zaúčtování (BUDAT). Zachycení Podle data zaúčtování platebního dokladu zákazníka v tabulce BKPF. Typ události explicit | |||
| Vyrovnání faktury | Konečný stav úspěšně uhrazené faktury. Otevřená položka byla uzavřena odpovídající platbou nebo dobropisem a faktura je považována za plně uhrazenou. | ||
| Proč je to důležité Označuje úspěšné dokončení cyklu Order to Cash pro danou fakturu. Jde o hlavní koncovou událost pro měření průměrné doby zpracování faktury. Kde data získat Nastane, když jsou v tabulce BSEG pro položku faktury vyplněna pole dokladu vyrovnání (AUGBL) a data vyrovnání (AUGDT). Zachycení Událost nastane v den vyrovnání (AUGDT) zaznamenaný v tabulce BSEG u položky faktury. Typ události explicit | |||
| Vystavení faktury | Označuje vytvoření fakturačního dokladu v systému. Událost se zaznamená při vytvoření nového záznamu v tabulce hlaviček účetních dokladů (BKPF) s konkrétním typem dokladu pro faktury. | ||
| Proč je to důležité Tímto začíná celý proces fakturace. Doba od této události pomáhá měřit dobu vystavení faktury a slouží jako základ pro výpočet Days Sales Outstanding (DSO). Kde data získat Událost se zaznamenává v tabulce BKPF. Označuje ji datum vytvoření (CPUDT) a čas (CPUTM) konkrétního čísla dokladu (BELNR). Typ dokladu (BLART) určuje, že jde o fakturu. Zachycení Podle časového razítka vytvoření (CPUDT) fakturačního dokladu v tabulce BKPF. Typ události explicit | |||
| Zaúčtování faktury | Faktura je oficiálně zaevidována v pomocné knize pohledávek i v hlavní knize. Tím se stává právně závaznou a zaznamenává dluh zákazníka. | ||
| Proč je to důležité Jde o důležitý milník, kterým oficiálně začíná běžet lhůta pro inkaso. Doba mezi vystavením a zaúčtováním může odhalit interní prodlevy, které ovlivňují peněžní tok. Kde data získat Událost se zaznamenává v tabulce BKPF. Označuje ji datum zaúčtování (BUDAT) daného čísla dokladu (BELNR). U předběžně uložených dokladů jde o okamžik jejich převedení na zaúčtovaný doklad. Zachycení Podle data zaúčtování (BUDAT) fakturačního dokladu v tabulce BKPF. Typ události explicit | |||
| Nastal termín splatnosti faktury | Vypočítaná událost označující den, kdy má být faktura podle platebních podmínek uhrazena. Nejde o činnost uživatele ani systému, ale o důležitý časový okamžik. | ||
| Proč je to důležité Je nezbytná pro analýzu platebního chování a dodržování podmínek. Slouží jako základ pro rozlišení včasných a opožděných plateb i pro výpočet KPI včasných plateb. Kde data získat Odvozuje se porovnáním aktuálního data s konečným datem splatnosti. Datum splatnosti je v poli BSEG-ZFBDT nebo se vypočítá ze základního data a platebních podmínek. Zachycení Porovnejte systémové datum s polem konečného data splatnosti v položce faktury (BSEG). Typ události calculated | |||
| Odeslání upomínky | Systém vytvořil a odeslal zákazníkovi upomínku nebo výzvu k úhradě faktury po splatnosti. Událost se zaznamenává v historii upomínek. | ||
| Proč je to důležité Pomáhá vyhodnotit účinnost strategie inkasa. Doba od odeslání upomínky do přijetí platby je důležitá pro KPI účinnosti upomínek. Kde data získat Událost se zaznamenává v tabulkách s údaji o upomínkách, konkrétně MHNK (hlavička údajů o upomínkách) a MHND (položky údajů o upomínkách), které vznikají při běhu upomínek (transakce F150). Zachycení Zaznamená se při spuštění běhu upomínek (F150) pro položku po splatnosti. Typ události explicit | |||
| Odpis faktury | Alternativní konečný stav, kdy je faktura považována za nedobytnou a neuhrazená částka se zaúčtuje na účet nedobytných pohledávek. Faktura se tak uzavře bez platby od zákazníka. | ||
| Proč je to důležité Jde o nepříznivý výsledek procesu a ztrátu výnosů. Sledování těchto událostí pomáhá analyzovat příčiny nedobytných pohledávek a zlepšovat pravidla řízení úvěrového rizika. Kde data získat Odvozuje se analýzou transakce vyrovnání faktury. Pokud se vyrovnávací doklad zaúčtuje na konkrétní účet hlavní knihy pro náklady na nedobytné pohledávky, považuje se faktura za odepsanou. Zachycení Odvozuje se v případě, že transakce vyrovnání zahrnuje zaúčtování na určený účet hlavní knihy pro nedobytné pohledávky. Typ události inferred | |||
| Oprava faktury | Označuje opakované zpracování, při kterém se zjistilo, že původní faktura obsahuje chybu, a následně byla stornována. Událost se zachytí vyhledáním stornovacích dokladů propojených s původní fakturou. | ||
| Proč je to důležité Upozorňuje na neefektivitu procesu a problémy s kvalitou. Časté opravy signalizují potíže s předcházejícími prodejními nebo fakturačními údaji a pomáhají při analýze dashboardu oprav a chybovosti faktur. Kde data získat Událost se určí vyhledáním stornovacího dokladu, v němž BKPF-STBLG odkazuje na původní doklad. Událostí je vytvoření tohoto stornovacího dokladu. Zachycení Zaznamená se při vytvoření stornovacího dokladu, například pomocí FB08. Typ události explicit | |||
| Předběžné uložení faktury | Fakturační doklad byl uložen v předběžném stavu, ale ještě nebyl zaúčtován do hlavní knihy. Tento postup se často používá, když jsou údaje neúplné nebo je před konečným zaúčtováním potřeba kontrola. | ||
| Proč je to důležité Sleduje kroky před zaúčtováním a případné prodlevy. Dlouhá doba v předběžném stavu může ukazovat na problémy s kvalitou dat nebo úzká místa při předběžném schvalování. Kde data získat Předběžně uložené doklady jsou v tabulce VBKPF. Tuto činnost označuje vytvoření dokladu v této tabulce, který je později zaúčtován. Zachycení Zaznamená se při uložení předběžného dokladu pomocí transakce, jako je FV70. Typ události explicit | |||
| Přiřazení platby k faktuře | Přijatá platba zákazníka byla spárována s konkrétní otevřenou fakturou a přiřazena k ní, čímž se položka označí k vyrovnání. Tento krok propojí platbu s dluhem. | ||
| Proč je to důležité Tato činnost je důležitá pro měření doby zpracování přijatých plateb. Prodlevy při přiřazování plateb mohou zkreslit skutečný stav pohledávek a zakrýt dostupnou hotovost. Kde data získat Událost se odvozuje z transakce vyrovnání, například F-32, která vyplní pole vyrovnání v položce faktury. Časovým razítkem události je datum vyrovnání. Zachycení Událost se odvozuje od vyplněného data vyrovnání (AUGDT) v tabulce položek faktur (BSEG). Typ události inferred | |||
| Schválení faktury | Označuje formální schválení faktury, po kterém ji lze zaúčtovat nebo odeslat zákazníkovi. Obvykle se odvozuje od převedení předběžně uloženého dokladu na zaúčtovaný. | ||
| Proč je to důležité Sleduje interní workflow schvalování, které často bývá zdrojem úzkých míst. Analýza této činnosti pomáhá v dashboardu analýzy schvalování faktur odhalit pomalé schvalovatele. Kde data získat Událost lze odvodit z přechodu dokladu z předběžného stavu (ve VBKPF) do zaúčtovaného stavu (v BKPF). Pokud se používá systém workflow, může jít o výslovně zaznamenanou událost v jeho záznamech. Zachycení Porovnejte datum vytvoření předběžného dokladu (VBKPF) s datem zaúčtování konečného dokladu (BKPF). Typ události inferred | |||
| Založení případu sporu | K faktuře byl zaznamenán formální spor, obvykle na základě stížnosti zákazníka. Událost se eviduje v systému SAP Dispute Management. | ||
| Proč je to důležité Označuje faktury, u nichž hrozí opožděná platba, a upozorňuje na příčiny nespokojenosti zákazníků. Jde o začátek důležitého procesu řešení výjimek. Kde data získat Událost se zachytí při vytvoření případu v tabulce sporů (UDM_CASE) propojeného s účetním dokladem faktury. Zachycení Zaznamená se, když uživatel založí případ sporu pomocí transakce UDM_DISPUTE. Typ události explicit | |||
Návody k extrakci
Kroky
- Otevřete editor ABAP: Přihlaste se do systému SAP ECC. Editor ABAP otevřete pomocí transakčního kódu
SE38. - Vytvořte program: Do pole Program zadejte název nového programu, například
Z_PM_O2C_INVOICE_EXTRACT, a klikněte na tlačítko Vytvořit. Zadejte výstižný název a jako typ programu vyberte „Spustitelný program“. - Definujte výběrovou obrazovku: Ve zdrojovém kódu programu definujte parametry výběrové obrazovky. Uživatelé díky nim mohou filtrovat data pro extrakci. Mezi hlavní parametry patří rozsah dat vytvoření dokladu (
S_ERDAT), kód společnosti (S_BUKRS) a typ fakturačního dokladu (S_VBTYP). - Definujte datové struktury: Deklarujte interní tabulku, do které se uloží výsledná data záznamu událostí. Struktura musí obsahovat pole
InvoiceNumber,ActivityName,EventTimea doporučené atributy, napříkladUserName,BillingDocumentType,CustomerNumber,CompanyCodeaTotalInvoiceAmount. - Naprogramujte výběr dat: Napište hlavní logiku ABAP pro výběr dat. Nejprve podle vstupů z výběrové obrazovky vyberte hlavní fakturační doklady z tabulek
VBRKaBKPF. Uložte je do dočasné interní tabulky. - Extrahujte aktivity: Projděte počáteční seznam fakturačních dokladů. U každého dokladu proveďte další výběry z různých tabulek a určete 13 požadovaných aktivit. Například v tabulce
NASTvyhledejte události „Faktura odeslána zákazníkovi“, v tabulceBSEGinformace o vyrovnání („Faktura vyrovnána“, „Platba přiřazena“) a v tabulceMHNKúdaje o upomínkách („Odeslána upomínka k platbě“). - Vytvořte tabulku záznamu událostí: Pro každou nalezenou aktivitu vytvořte nový záznam ve výsledné interní tabulce. Správně namapujte
InvoiceNumber,ActivityName,EventTimea další atributy ze zdrojových tabulek. - Zapište data na aplikační server: Po dokončení cyklu a naplnění výsledné tabulky záznamu událostí použijte příkazy
OPEN DATASET,LOOP AT... TRANSFERaCLOSE DATASETa zapište její obsah do textového souboru na aplikačním serveru SAP. Zadejte dostupnou logickou cestu k souboru. - Najděte soubor: Pomocí transakčního kódu
AL11otevřete adresáře aplikačního serveru a vyhledejte vytvořený soubor. Domluvte se s týmem SAP Basis na stažení souboru ze serveru do počítače nebo na sdílené síťové úložiště. - Upravte výsledný soubor: Otevřete stažený soubor a ověřte, že jde o soubor CSV s řádkem záhlaví. Uložte jej v kódování UTF-8, aby jej bylo možné nahrát do ProcessMind.
Konfigurace
- Předpoklady: Potřebujete oprávnění vytvářet a spouštět programy ABAP (transakce SE38) a číst tabulky FI a SD, včetně
VBRK,VBRP,BKPF,BSEG,NAST,MHNKaUDM_CASE_ATTR00(pro správu sporů). - Výběr období: Program musí mít povinný parametr pro rozsah dat, obvykle podle data vytvoření dokladu (
ERDATv tabulce VBRK/BKPF). Při první extrakci doporučujeme rozsah 3 až 6 měsíců, aby objem dat zůstal přiměřený. - Hlavní filtry: Vždy filtrujte podle kódu společnosti (
CompanyCode,BUKRS), abyste omezili rozsah extrakce. Doporučujeme také filtrovat podle typu fakturačního dokladu (VBTYPz VBRK) nebo typu účetního dokladu (BLARTz BKPF). Zahrňte jen relevantní typy faktur, například „RV“ pro standardní účetní faktury, a vylučte dobropisy a jiné doklady. - Výkon: U rozsáhlých datových sad pokrývajících více než několik měsíců spouštějte program jako úlohu na pozadí, abyste předešli vypršení časového limitu relace. Optimalizujte logiku ABAP tak, aby využívala čtení indexovaných tabulek a neprováděla vnořené cykly s výběrem z databáze. Doporučeným postupem je nejprve načíst data do interních tabulek a teprve potom je zpracovat.
- Nastavení výstupního souboru: V kódu ABAP zadejte cestu k výstupnímu souboru na aplikačním serveru a oddělovač pro CSV, obvykle čárku nebo středník. Ověřte, že jde o globálně nastavený a dostupný adresář.
Ukázkový dotaz abap
REPORT Z_PM_O2C_INVOICE_EXTRACT.
*&---------------------------------------------------------------------*
*& Tables
*&---------------------------------------------------------------------*
TABLES: VBRK, BKPF.
*&---------------------------------------------------------------------*
*& Type Definitions for Event Log Output
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
invoicenumber TYPE vbrk-vbeln,
activityname TYPE string,
eventtime TYPE timestamp,
username TYPE xubname,
billingdocumenttype TYPE vbrk-vbtyp,
customernumber TYPE vbrk-kunnr,
companycode TYPE vbrk-bukrs,
totalinvoiceamount TYPE vbrk-netwr,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: gt_event_log TYPE TABLE OF ty_event_log,
gs_event_log TYPE ty_event_log.
DATA: BEGIN OF gs_invoice,
vbeln TYPE vbrk-vbeln, " SD Doc (Invoice)
awkey TYPE bkpf-awkey, " Accounting Doc Reference Key
bukrs TYPE vbrk-bukrs, " Company Code
kunnr TYPE vbrk-kunnr, " Customer
vbtyp TYPE vbrk-vbtyp, " SD Doc Type
netwr TYPE vbrk-netwr, " Net Value
waerk TYPE vbrk-waerk, " Currency
fkdat TYPE vbrk-fkdat, " Billing Date
erdat TYPE vbrk-erdat, " Creation Date
erzet TYPE vbrk-erzet, " Creation Time
ernam TYPE vbrk-ernam, " Creator
belnr TYPE bkpf-belnr, " Acct Doc
gjahr TYPE bkpf-gjahr, " Fiscal Year
cpudt TYPE bkpf-cpudt, " Acct Doc Entry Date
cputm TYPE bkpf-cputm, " Acct Doc Entry Time
usnam TYPE bkpf-usnam, " Acct Doc User
stblg TYPE bkpf-stblg, " Reversal Doc
END OF gs_invoice.
DATA: gt_invoices LIKE TABLE OF gs_invoice.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_erdat FOR vbrk-erdat OBLIGATORY,
s_bukrs FOR vbrk-bukrs OBLIGATORY,
s_vbtyp FOR vbrk-vbtyp.
PARAMETERS: p_path TYPE string DEFAULT '/usr/sap/trans/tmp/invoice_extract.csv' OBLIGATORY.
*&---------------------------------------------------------------------*
*& Main Processing Block
*&---------------------------------------------------------------------*
START-OF-SELECTION.
" 1. Select base set of invoices
SELECT vbrk~vbeln, vbrk~bukrs, vbrk~kunnr, vbrk~vbtyp, vbrk~netwr, vbrk~waerk,
vbrk~fkdat, vbrk~erdat, vbrk~erzet, vbrk~ernam,
bkpf~belnr, bkpf~gjahr, bkpf~cpudt, bkpf~cputm, bkpf~usnam, bkpf~stblg, bkpf~awkey
INTO CORRESPONDING FIELDS OF TABLE gt_invoices
FROM vbrk
INNER JOIN bkpf ON bkpf~awkey = vbrk~vbeln AND bkpf~awtyp = 'VBRK'
WHERE vbrk~erdat IN s_erdat
AND vbrk~bukrs IN s_bukrs
AND vbrk~vbtyp IN s_vbtyp.
IF gt_invoices IS INITIAL.
MESSAGE 'No invoices found for the selected criteria.' TYPE 'I'.
RETURN.
ENDIF.
LOOP AT gt_invoices INTO gs_invoice.
CLEAR gs_event_log.
gs_event_log-invoicenumber = gs_invoice-vbeln.
gs_event_log-billingdocumenttype = gs_invoice-vbtyp.
gs_event_log-customernumber = gs_invoice-kunnr.
gs_event_log-companycode = gs_invoice-bukrs.
gs_event_log-totalinvoiceamount = gs_invoice-netwr.
" Activity: Invoice Generated (using accounting doc creation)
gs_event_log-activityname = 'Invoice Generated'.
gs_event_log-username = gs_invoice-usnam.
CONCATENATE gs_invoice-cpudt gs_invoice-cputm INTO DATA(lv_ts_gen).
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Posted (same as generated for non-parked docs)
gs_event_log-activityname = 'Invoice Posted'.
gs_event_log-username = gs_invoice-usnam.
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Approved (inferred by posting)
gs_event_log-activityname = 'Invoice Approved'.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Sent To Customer
SELECT SINGLE addat, aduhr FROM nast
INTO (DATA(lv_nast_date), DATA(lv_nast_time))
WHERE kappl = 'V3' AND objky = gs_invoice-vbeln AND vszst > '0'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Sent To Customer'.
gs_event_log-username = sy-uname.
CONVERT DATE lv_nast_date TIME lv_nast_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Corrected / Reversed
IF gs_invoice-stblg IS NOT INITIAL.
SELECT SINGLE cpudt, cputm, usnam FROM bkpf
INTO (DATA(lv_rev_date), DATA(lv_rev_time), DATA(lv_rev_user))
WHERE belnr = gs_invoice-stblg AND gjahr = gs_invoice-gjahr.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Corrected'.
gs_event_log-username = lv_rev_user.
CONVERT DATE lv_rev_date TIME lv_rev_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
" Activity: Payment Applied, Cleared, Due Date, Written Off (from BSEG)
SELECT SINGLE augdt, augbl, zfBDT, hkont FROM bseg
INTO (DATA(lv_augdt), DATA(lv_augbl), DATA(lv_zfbdt), DATA(lv_hkont))
WHERE bukrs = gs_invoice-bukrs
AND belnr = gs_invoice-belnr
AND gjahr = gs_invoice-gjahr
AND koart = 'D'. " Customer line
IF sy-subrc = 0.
" Due Date Reached (Calculated event)
IF lv_zfbdt IS NOT INITIAL.
gs_event_log-activityname = 'Invoice Due Date Reached'.
gs_event_log-username = 'System'.
CONVERT DATE lv_zfbdt INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Cleared, Applied, Write-Off
IF lv_augdt IS NOT INITIAL.
SELECT SINGLE usnam, cpudt, cputm, blart FROM bkpf
INTO (DATA(lv_clear_user), DATA(lv_clear_date), DATA(lv_clear_time), DATA(lv_clear_type))
WHERE belnr = lv_augbl AND bukrs = gs_invoice-bukrs.
IF sy-subrc = 0.
gs_event_log-username = lv_clear_user.
CONVERT DATE lv_clear_date TIME lv_clear_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
IF lv_clear_type = 'DZ'. " Standard Customer Payment
gs_event_log-activityname = 'Customer Payment Received'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Payment Applied To Invoice'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Invoice Cleared'. APPEND gs_event_log TO gt_event_log.
ELSE. " Assuming other clearing doc types could be write-offs
gs_event_log-activityname = 'Invoice Written Off'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
" Activity: Payment Reminder Issued (Dunning)
SELECT COUNT(*) FROM mhnk WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
IF sy-subrc = 0 AND sy-dbcnt > 0.
SELECT SINGLE lafdn FROM mhnk
INTO DATA(lv_dunning_date)
WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
gs_event_log-activityname = 'Payment Reminder Issued'.
gs_event_log-username = 'System'.
CONVERT DATE lv_dunning_date INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Parked (Example from VBKPF, may require system specific logic)
SELECT SINGLE cpudt, cputm, usnam FROM vbkpf
INTO (DATA(lv_park_date), DATA(lv_park_time), DATA(lv_park_user))
WHERE awkey = gs_invoice-vbeln AND awsys = 'LOG' AND bstat = 'V'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Parked'.
gs_event_log-username = lv_park_user.
CONVERT DATE lv_park_date TIME lv_park_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Dispute Case Created (Requires Dispute Management module)
SELECT SINGLE create_date, create_time, create_user FROM udm_case_attr00
INTO (DATA(lv_disp_date), DATA(lv_disp_time), DATA(lv_disp_user))
WHERE [Your logic to link invoice to dispute case, e.g., via a custom field or object link].
IF sy-subrc = 0.
gs_event_log-activityname = 'Dispute Case Created'.
gs_event_log-username = lv_disp_user.
CONVERT DATE lv_disp_date TIME lv_disp_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Write data to file
*&---------------------------------------------------------------------*
OPEN DATASET p_path FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
ENDIF.
" Header
DATA(lv_header) = 'InvoiceNumber,ActivityName,EventTime,UserName,BillingDocumentType,CustomerNumber,CompanyCode,TotalInvoiceAmount'.
TRANSFER lv_header TO p_path.
LOOP AT gt_event_log INTO gs_event_log.
DATA(lv_line) = |
{ gs_event_log-invoicenumber }|
,{ gs_event_log-activityname }|
,{ gs_event_log-eventtime }|
,{ gs_event_log-username }|
,{ gs_event_log-billingdocumenttype }|
,{ gs_event_log-customernumber }|
,{ gs_event_log-companycode }|
,{ gs_event_log-totalinvoiceamount }|.
TRANSFER lv_line TO p_path.
ENDLOOP.
CLOSE DATASET p_path.
WRITE: 'Extraction complete. File created at:', p_path. Kroky
- Předpoklady a přístup: Zajistěte, aby databázový uživatel měl přístup pouze pro čtení k potřebným tabulkám SAP ECC, včetně VBRK, BKPF, BSAD, NAST, CDHDR, CDPOS, SCASE a dalších uvedených v dotazu. Tento přístup obvykle získávají pouze správci systému nebo vybrané týmy datové analytiky.
- Připojte se k databázi: Připojte se k databázi SAP ECC pomocí běžného SQL klienta, například DBeaver, Oracle SQL Developer nebo Microsoft SQL Server Management Studio.
- Připravte SQL dotaz: Zkopírujte celý SQL dotaz z části „query“ do editoru SQL klienta.
- Upravte zástupné hodnoty: Dotaz obsahuje několik zástupných hodnot, které nahraďte údaji platnými ve vašem prostředí. Patří mezi ně:
'YYYYMMDD': Všechna tato místa nahraďte počátečním a koncovým datem požadovaného období analýzy. Je důležité omezit data na zvládnutelné období.'XXXX': Nahraďte kódem či kódy společností, které chcete analyzovat.[Your Invoice Output Type]: Zadejte kód typu výstupu používaný k odesílání faktur zákazníkům, například „RD00“.[Your Bad Debt G/L Account]: Zadejte číslo účtu hlavní knihy používaného k odpisu nedobytných faktur.[Your Dispute Case Invoice Attribute]: Zadejte název atributu, ve kterém je v nastavení správy sporů uloženo číslo faktury, například „INVOICE_ID“.
- Zkontrolujte funkce pro časová razítka: Dotaz používá obecnou syntaxi
CAST(CONCAT(date_field, time_field) AS TIMESTAMP). Možná ji bude třeba upravit podle konkrétní databáze, například použítTO_TIMESTAMPpro Oracle neboDATETIMEFROMPARTSpro SQL Server. - Spusťte dotaz: Spusťte upravený dotaz. Doba zpracování může být značná, záleží na velikosti tabulek SAP a zvoleném období.
- Zkontrolujte výsledky: Po dokončení dotazu ověřte, že výstup obsahuje očekávané sloupce: InvoiceNumber, ActivityName, EventTime a doporučené atributy. Zkontrolujte, zda se neobjevily chyby a zda výsledek není prázdný.
- Exportujte do CSV: Exportujte celou sadu výsledků z SQL klienta do souboru CSV. Použijte kódování UTF-8, aby nedošlo k problémům se speciálními znaky.
- Připravte soubor k nahrání: Před nahráním do nástroje process mining ověřte, že záhlaví sloupců v CSV přesně odpovídají požadovaným názvům atributů, například
InvoiceNumber,ActivityName,EventTimeaUserName.
Konfigurace
- Připojení k databázi: Potřebujete přímé připojení SQL pouze pro čtení k podkladové databázi SAP ECC. Tato metoda zcela obchází aplikační vrstvu SAP.
- Oprávnění: Databázový uživatel musí mít oprávnění
SELECTke všem tabulkám použitým v dotazu, které zahrnují moduly FI, SD a případně FSCM. - Rozsah dat: Pro zajištění přiměřeného výkonu a objemu dat je nutné filtrovat dotaz podle konkrétního období. Doporučujeme začít rozsahem 3 až 6 měsíců. Zástupné hodnoty data
'YYYYMMDD'je třeba nastavit na několika místech dotazu. - Filtr kódu společnosti: Dotaz je určen k filtrování podle kódu společnosti (
BUKRS). Běžným postupem je analyzovat jeden nebo několik kódů společnosti najednou. - Nastavení typů dokladů: Logika pro určení událostí, jako jsou opravy faktur, odpisy nebo odeslané doklady, závisí na standardním nastavení SAP. Pokud vaše organizace používá vlastní typy dokladů (
BLART), typy výstupu (KSCHL) nebo účty hlavní knihy, bude možná nutné dotaz upravit. - Výkon: Spuštění tohoto dotazu nad produkčním systémem SAP může spotřebovat značné množství zdrojů a ovlivnit provozní výkon. Rozsáhlou extrakci doporučujeme spouštět mimo špičku nebo nad vyhrazenou replikou databáze pro reporting.
Ukázkový dotaz sql
WITH InvoiceBase AS (
SELECT
VBRK.VBELN AS InvoiceNumber,
VBRK.FKART AS BillingDocumentType,
VBRK.KUNRG AS CustomerNumber,
VBRK.BUKRS AS CompanyCode,
VBRK.NETWR AS TotalInvoiceAmount,
VBRK.ERNAM AS CreatorName,
VBRK.ERDAT AS CreationDate,
VBRK.ERZET AS CreationTime
FROM VBRK
WHERE VBRK.ERDAT BETWEEN '20230101' AND '20231231' -- Filter by Invoice Creation Date
AND VBRK.BUKRS IN ('1000') -- Filter by Company Code
AND VBRK.FKART NOT IN ('S1', 'S2') -- Exclude cancelled invoices
)
-- 1. Invoice Generated
SELECT
ib.InvoiceNumber,
'Invoice Generated' AS ActivityName,
CAST(CONCAT(ib.CreationDate, ib.CreationTime) AS TIMESTAMP) AS EventTime,
ib.CreatorName AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM InvoiceBase ib
UNION ALL
-- 2. Invoice Parked
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Parked' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = 'V' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 3. Invoice Posted
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Posted' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = '' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 4. Invoice Approved (from Parked to Posted)
SELECT
SUBSTRING(h.OBJECTID, 4, 10) AS InvoiceNumber,
'Invoice Approved' as ActivityName,
CAST(CONCAT(h.UDATE, h.UTIME) AS TIMESTAMP) AS EventTime,
h.USERNAME AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM CDHDR h
JOIN CDPOS p ON h.MANDANT = p.MANDANT AND h.OBJECTCLAS = p.OBJECTCLAS AND h.OBJECTID = p.OBJECTID AND h.CHANGENR = p.CHANGENR
JOIN InvoiceBase ib ON SUBSTRING(h.OBJECTID, 4, 10) = ib.InvoiceNumber
WHERE h.OBJECTCLAS = 'BELEGV'
AND p.TABNAME = 'BKPF'
AND p.FNAME = 'BSTAT'
AND p.VALUE_OLD = 'V'
AND p.VALUE_NEW = ' '
AND h.UDATE BETWEEN '20230101' AND '20231231'
UNION ALL
-- 5. Invoice Sent To Customer
SELECT
n.OBJKY AS InvoiceNumber,
'Invoice Sent To Customer' AS ActivityName,
CAST(CONCAT(n.DATVR, n.UHRVR) AS TIMESTAMP) AS EventTime,
n.VSTAT AS UserName, -- User who processed is not directly available, using processing status as a proxy
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM NAST n
JOIN InvoiceBase ib ON n.OBJKY = ib.InvoiceNumber
WHERE n.KSCHL = '[Your Invoice Output Type]' -- E.g., 'RD00'
AND n.VSTAT = '1' -- Processed successfully
AND n.DATVR BETWEEN '20230101' AND '20231231'
UNION ALL
-- 6. Invoice Corrected (Reversed)
SELECT
SUBSTRING(orig_doc.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Corrected' AS ActivityName,
CAST(CONCAT(rev_doc.CPUDT, rev_doc.CPUTM) AS TIMESTAMP) AS EventTime,
rev_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
rev_doc.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF orig_doc
JOIN BKPF rev_doc ON orig_doc.STBLG = rev_doc.BELNR AND orig_doc.BUKRS = rev_doc.BUKRS AND orig_doc.GJAHR = rev_doc.STJAH
JOIN InvoiceBase ib ON SUBSTRING(orig_doc.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE orig_doc.AWTYP = 'VBRK' AND orig_doc.STBLG IS NOT NULL AND rev_doc.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 7. Invoice Due Date Reached
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Due Date Reached' AS ActivityName,
CAST(CONCAT(bs.ZFBDT, '000000') AS TIMESTAMP) AS EventTime,
'System' AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSEG bs
JOIN BKPF b ON bs.MANDT = b.MANDT AND bs.BUKRS = b.BUKRS AND bs.BELNR = b.BELNR AND bs.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND bs.KOART = 'D' AND bs.ZFBDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 8. Payment Reminder Issued
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Payment Reminder Issued' AS ActivityName,
CAST(CONCAT(h.LAUFD, '000000') AS TIMESTAMP) AS EventTime,
h.LAUFI AS UserName, -- Dunning Run ID
ib.BillingDocumentType,
ib.CustomerNumber,
d.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM MHND d
JOIN MHNK h ON d.MANDT = h.MANDT AND d.LAUFD = h.LAUFD AND d.LAUFI = h.LAUFI
JOIN BKPF b ON d.MANDT = b.MANDT AND d.BUKRS = b.BUKRS AND d.BELNR = b.BELNR AND d.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE h.LAUFD BETWEEN '20230101' AND '20231231'
UNION ALL
-- 9. Dispute Case Created
SELECT
attr.ATTR_VALUE AS InvoiceNumber,
'Dispute Case Created' AS ActivityName,
sc.CREATE_TIME AS EventTime,
sc.CREATED_BY AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM SCMG_T_CASE_ATTR attr
JOIN SCASE sc ON attr.CASE_GUID = sc.CASE_GUID
JOIN InvoiceBase ib ON attr.ATTR_VALUE = ib.InvoiceNumber
WHERE attr.ATTR_NAME = '[Your Dispute Case Invoice Attribute]' -- e.g., 'INVOICE_ID'
AND CAST(sc.CREATE_TIME AS DATE) BETWEEN '20230101' AND '20231231'
UNION ALL
-- 10, 11, 12. Clearing Events (Payment, Clearing, Write-Off)
SELECT
InvoiceNumber,
ActivityName,
EventTime,
UserName,
BillingDocumentType,
CustomerNumber,
CompanyCode,
TotalInvoiceAmount
FROM (
SELECT
bsad.XBLNR AS InvoiceNumber,
CASE
WHEN clearing_item.HKONT = '[Your Bad Debt G/L Account]' THEN 'Invoice Written Off'
ELSE 'Customer Payment Received'
END AS ActivityName,
CAST(CONCAT(clearing_doc.CPUDT, clearing_doc.CPUTM) AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
LEFT JOIN BSEG clearing_item ON clearing_doc.MANDT = clearing_item.MANDT AND clearing_doc.BUKRS = clearing_item.BUKRS AND clearing_doc.BELNR = clearing_item.BELNR AND clearing_doc.GJAHR = clearing_item.GJAHR AND clearing_item.HKONT = '[Your Bad Debt G/L Account]' -- e.g. '148000'
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Payment Applied To Invoice' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '000000') AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Invoice Cleared' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '235959') AS TIMESTAMP) AS EventTime, -- Add time to separate from 'Payment Applied'
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
) AS ClearingEvents Kroky
- Předpoklady: Zajistěte si licencovaný nástroj ETL s certifikovaným konektorem SAP, například Informatica PowerCenter se SAP Connector nebo Talend se SAP Connector. Ověřte, že máte přihlašovací údaje uživatele SAP s potřebnými oprávněními ke čtení požadovaných finančních, prodejních a systémových tabulek (BKPF, BSEG, VBRK, NAST, MHNK, UDM_CASE_ATTR00, CDHDR, CDPOS).
- Připojte se k SAP: V nástroji ETL vytvořte nové připojení k systému SAP ECC. Nastavte údaje o aplikačním serveru, čísle systému, klientovi, uživateli a hesle. Ověřte, že připojení funguje.
- Definujte zdroje dat: Pro každou extrahovanou aktivitu určete odpovídající tabulky SAP jako zdroje dat v úloze ETL. Například přidejte VBRK pro vytvoření faktury, BKPF pro události zaúčtování a NAST pro komunikaci se zákazníkem.
- Nastavte extrakci pro jednotlivé aktivity: Vytvořte samostatný datový tok nebo transformaci pro každou z 13 požadovaných aktivit. V každém toku nastavte filtry pro výběr relevantních záznamů. Filtrujte například podle kódu společnosti (BUKRS), typu dokladu (BLART) a konkrétního období, například podle data vytvoření ERDAT.
- Namapujte pole a transformujte data: V každém datovém toku namapujte pole zdrojových tabulek SAP na strukturu cílového záznamu událostí: InvoiceNumber, ActivityName, EventTime, UserName a další doporučené atributy. Pomocí transformační logiky nastavte pro každý tok pevnou hodnotu
ActivityNamea správně formátujte data a časová razítka. - Zpracujte složitější aktivity: U vypočítávaných událostí, jako je „Nastalo datum splatnosti faktury“, použijte výchozí datum platby (ZFBDT) a platební podmínky k výpočtu data splatnosti, případně načtěte čisté datum splatnosti (NETDT) z tabulky BSEG. U událostí odvozených z protokolů změn, například „Faktura schválena“, může být nutné spojit tabulky BKPF a CDHDR/CDPOS podle čísla a data dokladu.
- Spojte data aktivit: Pomocí transformace „Union“ nebo „Merge“ v nástroji ETL spojte výstupy všech 13 samostatných datových toků do jedné datové sady. Před spojením ověřte, že mají všechny toky stejné názvy sloupců a datové typy.
- Nastavte cílové umístění: Určete, kam se uloží výsledný záznam událostí. Může jít o textový soubor (CSV), databázovou tabulku nebo přímé připojení k přípravné oblasti.
- Nastavte plán extrakce: Určete parametry období pro extrakci. Při prvním načtení můžete extrahovat data za 6 až 12 měsíců. U dalších přírůstkových načtení nastavte extrakci dat od data posledního spuštění.
- Spusťte úlohu a exportujte data: Spusťte úlohu ETL. Po dokončení zkontrolujte, zda výstupní soubor odpovídá požadovanému formátu. Výsledkem má být jeden soubor CSV, kde každý řádek představuje samostatnou událost a který lze nahrát do ProcessMind.
Konfigurace
- Připojení k SAP: Potřebujete připojení aplikačního serveru k cílovému systému SAP ECC. Uživatel SAP musí mít přístup RFC a oprávnění k tabulkám VBRK, BKPF, BSEG, NAST a dalším tabulkám uvedeným v dotazu.
- Licence nástroje ETL: Potřebujete platnou licenci komerčního nástroje ETL a jeho konkrétního konektoru SAP.
- Rozsah dat: Doporučujeme extrahovat data za období 3 až 6 měsíců. Získáte tak reprezentativní vzorek pro analýzu, aniž byste systém nadměrně zatížili. Pro počáteční a koncové datum použijte nastavitelné parametry.
- Hlavní filtry: Vždy filtrujte podle kódu společnosti (BUKRS), abyste omezili rozsah extrakce. Důležité je také filtrovat podle relevantních typů fakturačních dokladů (VBRK-FKART) a účetních dokladů (BKPF-BLART). Zahrňte pouze standardní faktury a vylučte jiné typy dokladů, například dobropisy nebo interní doklady.
- Výkon: Extrakce z rozsáhlých tabulek, jako je BSEG, může být pomalá. Používejte přesné filtry, neextrahujte nepotřebná pole a úlohu plánujte mimo špičku, abyste omezili dopad na výkon zdrojového systému SAP.
Ukázkový dotaz config
// ETL Data Extraction Logic for SAP Order-to-Cash Invoicing
// This represents the configuration logic within a graphical ETL tool.
// == Global Parameters ==
// $StartDate: '[Start Date]' (e.g., '2023-01-01')
// $EndDate: '[End Date]' (e.g., '2023-06-30')
// $CompanyCodes: '[Company Code(s)]' (e.g., '1000', '2000')
// $BillingDocTypes: '[Billing Document Type(s)]' (e.g., 'F1', 'F2')
// == Source 1: Invoice Generated ==
// Tables: VBRK
DATA_SOURCE generated_invoices FROM VBRK WHERE
ERDAT >= $StartDate AND ERDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND FKART IN ($BillingDocTypes)
MAP {
InvoiceNumber: VBELN,
ActivityName: 'Invoice Generated',
EventTime: ERDAT + ERZET, // Combine date and time
UserName: ERNAM,
BillingDocumentType: FKART,
CustomerNumber: KUNAG,
CompanyCode: BUKRS,
TotalInvoiceAmount: NETWR
}
// == Source 2: Invoice Posted ==
// Tables: BKPF joined with VBRK
DATA_SOURCE posted_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Posted',
EventTime: A.BUDAT + A.CPUTM, // Posting date and entry time
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 3: Invoice Parked ==
// Tables: BKPF joined with VBRK
DATA_SOURCE parked_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.CPUDT >= $StartDate AND A.CPUDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = 'V'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Parked',
EventTime: A.CPUDT + A.CPUTM,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 4: Invoice Approved (Transition from Parked to Posted) ==
// Tables: BKPF joined with VBRK
DATA_SOURCE approved_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
AND EXISTS (SELECT 1 FROM VBELEGV C WHERE C.BELNR = A.BELNR) // Check if it was ever parked
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Approved',
EventTime: A.BUDAT + A.CPUTM, // Use posting date as approval date
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 5: Invoice Sent To Customer ==
// Tables: NAST joined with VBRK
DATA_SOURCE sent_invoices FROM NAST as A
INNER JOIN VBRK as B ON (A.OBJKY = B.VBELN)
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND B.BUKRS IN ($CompanyCodes)
AND A.VSTAT = '1' // Successfully processed
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Sent To Customer',
EventTime: A.ERDAT + A.ERUHR,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: B.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 6: Invoice Corrected (Reversed) ==
// Tables: VBRK (for the reversal document)
DATA_SOURCE corrected_invoices FROM VBRK as A
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.SFAKN <> '' // SFAKN is the original cancelled invoice
MAP {
InvoiceNumber: A.SFAKN, // Case ID is the original invoice
ActivityName: 'Invoice Corrected',
EventTime: A.ERDAT + A.ERZET,
UserName: A.ERNAM,
BillingDocumentType: A.FKART,
CustomerNumber: A.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: NULL // Amount belongs to the reversal doc, not original
}
// == Source 7: Invoice Due Date Reached ==
// Tables: BSEG joined with VBRK
DATA_SOURCE due_invoices FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.NETDT >= $StartDate AND A.NETDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.KOART = 'D' // Customer line item
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Due Date Reached',
EventTime: A.NETDT, // Net due date
UserName: 'System',
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 8: Payment Reminder Issued ==
// Tables: MHNK, MHND, VBRK
DATA_SOURCE reminders FROM MHNK as A
INNER JOIN MHND as D ON (A.LAUFD = D.LAUFD AND A.LAUFI = D.LAUFI)
INNER JOIN VBRK as B ON (SUBSTRING(D.XBLNR, 1, 10) = B.VBELN) // XBLNR may need parsing
WHERE A.LAUFD >= $StartDate AND A.LAUFD <= $EndDate
AND D.BUKRS IN ($CompanyCodes)
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Reminder Issued',
EventTime: A.LAUFD, // Dunning date
UserName: A.IDAPS,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: D.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 9: Dispute Case Created ==
// Tables: UDM_CASE_ATTR00
DATA_SOURCE disputes FROM UDM_CASE_ATTR00 as A
WHERE A.CREATE_TIMESTAMP >= $StartDate // Timestamp format may vary
AND A.FIN_COMP_CODE IN ($CompanyCodes)
AND A.PROCESS = 'FIN_FSCM_DIS'
MAP {
InvoiceNumber: A.BILL_DOC_ID,
ActivityName: 'Dispute Case Created',
EventTime: A.CREATE_TIMESTAMP,
UserName: A.CREATE_USER,
BillingDocumentType: NULL,
CustomerNumber: A.BP_NUMBER,
CompanyCode: A.FIN_COMP_CODE,
TotalInvoiceAmount: A.DISPUTED_AMOUNT
}
// == Source 10: Customer Payment Received ==
// Tables: BKPF
DATA_SOURCE payments FROM BKPF
WHERE BUDAT >= $StartDate AND BUDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND BLART = 'DZ' // Example for Customer Payment
MAP {
InvoiceNumber: NULL, // Invoice not yet known
ActivityName: 'Customer Payment Received',
EventTime: BUDAT + CPUTM,
UserName: USNAM,
BillingDocumentType: NULL,
CustomerNumber: NULL, // Requires join to BSEG to get customer
CompanyCode: BUKRS,
TotalInvoiceAmount: NULL
}
// == Source 11 & 12: Payment Applied To Invoice & Invoice Cleared ==
// Tables: BSEG joined with VBRK
DATA_SOURCE cleared_items FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.AUGBL <> ''
// Generate two records from this source
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Applied To Invoice',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM, // User from header of original invoice doc
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
UNION WITH {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Cleared',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 13: Invoice Written Off ==
// Tables: BSEG (for the invoice line) and BKPF (for clearing doc type)
DATA_SOURCE written_off FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
INNER JOIN BKPF as C ON (A.AUGBL = C.BELNR AND A.BUKRS = C.BUKRS AND A.AUGGJ = C.GJAHR)
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND C.BLART = '[Your Write-Off Document Type]' // e.g., 'AB'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Written Off',
EventTime: A.AUGDT,
UserName: C.USNAM, // User who posted the write-off
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Final Union of all sources ==
OUTPUT generated_invoices
UNION ALL posted_invoices
UNION ALL parked_invoices
UNION ALL approved_invoices
UNION ALL sent_invoices
UNION ALL corrected_invoices
UNION ALL due_invoices
UNION ALL reminders
UNION ALL disputes
UNION ALL payments
UNION ALL cleared_items
UNION ALL written_off Chcete začít?
Pomocí této šablony si zjednodušíte přípravu dat a získáte užitečný přehled o procesu fakturace a vystavování faktur. Začněte zlepšovat cash flow ještě dnes.
Zrychlete cash flow: zlepšete fakturaci ještě dnes!
Odstraňte neefektivitu, zkraťte dobu průchodu o 30 % a zlepšete cash flow.
Platební kartu nepotřebujete. Se zlepšováním můžete začít během několika minut.