Šablona dat pro řízení dodavatelského řetězce
Šablona dat pro řízení dodavatelského řetězce
- Doporučené atributy ke sběru
- Aktivity, které je vhodné sledovat
- Pokyny k extrakci
Atributy řízení dodavatelského řetězce
| Název | Popis | ||
|---|---|---|---|
| Čas události EventTime | Časové razítko udávající datum a čas, kdy aktivita nastala. | ||
| Popis Tento atribut uvádí přesné datum a čas každé aktivity v procesu. Tvoří chronologický základ záznamu událostí a řadí kroky procesu podle toho, kdy skutečně nastaly. Čas události je nezbytný pro veškerou časovou analýzu. Používá se k výpočtu doby cyklu mezi aktivitami, měření celkové průběžné doby procesu, sledování vývoje výkonnosti v čase a určení, kdy nejčastěji vznikají úzká místa. Proč je to důležité Toto časové razítko je nezbytné pro výpočet dob trvání a ukazatelů výkonnosti. Umožňuje analyzovat úzká místa procesu a průběžné doby. Kde data získat Získává se z polí časových razítek souvisejících s vytvořením dokladu nebo změnou stavu v hlavních tabulkách SAP, například z CDHDR/CDPOS pro dokumenty změn nebo z polí data a času, jako jsou ERDAT/ERZET, v tabulkách hlaviček. Příklady 2023-04-15T10:25:00Z2023-04-18T14:00:00Z2023-04-22T08:15:00Z | |||
| Logistická objednávka LogisticsOrder | Jedinečný identifikátor celého procesu dodavatelského řetězce od prvotní poptávky až po závěrečné potvrzení doručení. | ||
| Popis Logistická objednávka slouží jako hlavní identifikátor případu a propojuje všechny aktivity související s konkrétní poptávkou nebo požadavkem na vyřízení v dodavatelském řetězci. Díky tomu lze sledovat celý životní cyklus produktu, od plánování a nákupu přes výrobu až po distribuci, a získat ucelený přehled o procesu. Analýza podle logistické objednávky v process mining ukazuje celou cestu, kterou produkt urazil při vyřízení poptávky. Pomáhá odhalit obvyklé varianty, úzká místa a odchylky v celém dodavatelském řetězci, místo aby se jednotlivě a odděleně analyzovaly například nákup nebo prodej. Proč je to důležité Tento identifikátor je nezbytný pro propojení všech souvisejících událostí do jedné instance procesu a umožňuje analyzovat dodavatelský řetězec od začátku do konce. Kde data získat Jde o koncepční identifikátor, který může být nutné sestavit propojením různých čísel dokladů, například čísla prodejní objednávky s navazujícími čísly nákupní objednávky a dodávky. Informace najdete v dokumentaci SAP S/4HANA Supply Chain nebo u odborníka na danou oblast. Příklady LO-4500078192LO-4500078193LO-4500078194 | |||
| Název aktivity ActivityName | Název obchodní aktivity nebo události, která nastala v konkrétním okamžiku procesu dodavatelského řetězce. | ||
| Popis Tento atribut popisuje konkrétní krok nebo milník v životním cyklu logistické objednávky, například „Nákupní objednávka vystavena“ nebo „Výdej zboží zaúčtován“. Tyto aktivity tvoří posloupnost událostí, z nichž se proces skládá. Analýza posloupnosti aktivit je základem process mining. Umožňuje zjistit skutečný tok procesu, porovnat ho se standardními postupy a určit kroky, které způsobují zpoždění nebo vyžadují přepracování. Proč je to důležité Určuje jednotlivé kroky procesu. To je základ pro zjištění mapy procesu, analýzu variant a měření doby cyklu mezi aktivitami. Kde data získat Vzniká při transformaci dat, kdy se transakční kódy nebo změny stavů z různých tabulek SAP (například EKKO, LIKP, VBUK) mapují na srozumitelné názvy aktivit. Příklady Vystavení nákupní objednávkyZaúčtování příjmu zboží k nákupní objednávceVytvoření výstupní dodávkyDoručení potvrzeno | |||
| Poslední aktualizace dat LastDataUpdate | Časové razítko poslední aktualizace nebo extrakce dat ze zdrojového systému. | ||
| Popis Tento atribut uvádí, kdy byla data v záznamu událostí naposledy aktualizována. Ukazuje, jak aktuální jsou analyzovaná data, a uživatelé tak vědí, kdy byla naposledy obnovena. Při každé analýze je důležité vědět, jak stará data jsou. Časové razítko pomáhá uživatelům důvěřovat výsledkům a určit období, které dashboardy a KPI pokrývají. Proč je to důležité Zajišťuje přehled o aktuálnosti dat, takže uživatelé vědí, jak aktuální je analýza procesu. Kde data získat Jde o pole metadat, které obvykle na konci úspěšné aktualizace dat vytvoří a vyplní nástroj pro extrakci dat nebo ETL. Příklady 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Zdrojový systém SourceSystem | Systém, ze kterého data pocházejí. | ||
| Popis Určuje konkrétní instanci zdrojového systému, ve které vznikla data události. Ve složitějším prostředí může mít společnost několik instancí SAP S/4HANA pro různé regiony nebo obchodní jednotky. Tento atribut je důležitý pro správu dat a rozdělení analýzy. Analytici díky němu mohou porovnávat výkonnost procesů mezi různými systémy nebo vyčlenit data z jednoho důvěryhodného zdroje. Proč je to důležité Poskytuje důležitý kontext o původu dat, který pomáhá při jejich ověřování a porovnávání procesů v různých systémových prostředích. Kde data získat Obvykle jde o statickou hodnotu přidanou při extrakci dat, která označuje jejich původ, například ID systému SAP (SAPSID). Příklady S4H_PROD_EUS4H_PROD_NAS4H_DEV | |||
| Číslo materiálu MaterialNumber | Jedinečný identifikátor zpracovávaného produktu nebo materiálu. | ||
| Popis Číslo materiálu, často označované jako SKU, je v SAP jedinečný kód konkrétního produktu. Propojuje aktivity procesu s fyzickým nebo digitálním zbožím, které se vyrábí, nakupuje nebo odesílá. Tento atribut je důležitý pro analýzu zaměřenou na produkty. Pomáhá zjistit, zda se u některých produktů častěji vyskytují problémy s kvalitou, zpoždění výroby nebo výpadky zásob. Dashboardy lze filtrovat podle materiálu a zkoumat výkonnost konkrétních produktových řad. Proč je to důležité Umožňuje analyzovat proces podle produktů a zjistit, zda se problémy, jako jsou zpoždění nebo nedostatky v kvalitě, týkají konkrétních materiálů. Kde data získat Najdete jej v tabulkách položek většiny dokladů, například ve VBAP pro prodejní objednávky, EKPO pro nákupní objednávky a LIPS pro dodávky. Pole se obvykle jmenuje MATNR. Příklady FG-100-ARM-2034-BSA-5500 | |||
| Název dodavatele SupplierName | Název dodavatele nebo prodejce souvisejícího s nákupními aktivitami. | ||
| Popis Tento atribut určuje dodavatele, od kterého se nakupuje zboží nebo služby. Obvykle souvisí s aktivitami, jako jsou „Nákupní požadavek vytvořen“ a „Nákupní objednávka vystavena“. Název dodavatele je nezbytný pro dashboard Výkonnost dodavatelů při dodávkách. Umožňuje filtrovat a rozdělit data a porovnávat včasnost dodávek, průběžné doby a kvalitu jednotlivých dodavatelů. To je důležité pro strategický výběr dodavatelů a řízení vztahů s nimi. Proč je to důležité Umožňuje analyzovat výkonnost jednotlivých dodavatelů, což pomáhá zefektivnit nákupní proces a vyhodnotit jejich spolehlivost. Kde data získat Číslo dodavatele (LIFNR) je uloženo v nákupních dokladech (například v tabulkách EKKN a EBAN). Název se načítá z centrální kmenové tabulky dodavatelů LFA1. Příklady Global Components Inc.Advanced Materials LLCPrecision Parts Co. | |||
| Název zákazníka CustomerName | Název zákazníka, pro kterého se objednávka vyřizuje. | ||
| Popis Tento atribut určuje koncového zákazníka spojeného s prodejní objednávkou a navazujícími aktivitami při jejím vyřízení. Poskytuje kontext k poptávkové straně dodavatelského řetězce. Analýza podle zákazníka v process mining pomáhá odhalit rozdílné způsoby vyřizování objednávek a úroveň výkonnosti u důležitých zákazníků. Využívá se například v dashboardu Analýza prodlev při potvrzení doručení, který ukazuje, zda někteří zákazníci potvrzení pravidelně zpožďují. Proč je to důležité Umožňuje rozdělit analýzu podle zákazníků a odhalit jejich specifické chování, úzká místa nebo plnění dohodnuté úrovně služeb. Kde data získat Číslo zákazníka (KUNNR) je uloženo v prodejních dokladech, například v tabulce VBAK. Název se načítá z centrální kmenové tabulky zákazníků KNA1. Příklady Retail CorpInnovate SolutionsManufacturing Partners | |||
| Požadované datum dodání RequestedDeliveryDate | Datum, kdy měl dodavatel podle požadavku dodat zboží. | ||
| Popis Jde o datum dodání uvedené v nákupní objednávce, které představuje cílový termín pro dodavatele. Slouží jako základ pro měření skutečné výkonnosti dodávek. Toto datum je nezbytné pro výpočet KPI Včasnost dodávek od dodavatelů. Porovnáním skutečného data příjmu zboží s požadovaným datem může firma objektivně změřit, zda dodavatelé plní své závazky. Proč je to důležité Toto základní datum se používá k výpočtu KPI „Včasnost dodávek od dodavatelů“, a je proto důležité pro řízení výkonnosti dodavatelů. Kde data získat Najdete jej v tabulce položek nákupních objednávek EKPO v poli EINDT (datum dodání). Příklady 2023-05-20T00:00:00Z2023-06-15T00:00:00Z2023-07-01T00:00:00Z | |||
| Uživatel, který aktivitu provedl ExecutingUser | ID uživatele, který aktivitu provedl. | ||
| Popis Tento atribut zachycuje uživatelské jméno nebo ID zaměstnance v SAP, který provedl danou aktivitu, například vytvořil nákupní objednávku nebo zaúčtoval příjem zboží. Propojuje kroky procesu s lidmi, kteří se na nich podíleli. Analýza podle uživatele pomáhá porozumět rozložení pracovní zátěže, určit potřeby školení a odhalit rozdíly ve výkonnosti jednotlivců nebo týmů. Umožňuje také ověřit shodu a zjistit, kdo provedl důležité kroky procesu. Proč je to důležité Přiřazuje aktivity konkrétním uživatelům a umožňuje analyzovat pracovní zátěž a výkonnost i prověřovat činnosti, které nejsou v souladu s pravidly. Kde data získat Najdete jej v polích „Vytvořil“ nebo „Změnil“ v mnoha tabulkách SAP, například v poli ERNAM v EKKO (hlavička nákupní objednávky), LIKP (hlavička dodávky) a VBRK (hlavička faktury). Příklady CBROWNJSMITHASINGH | |||
| Výsledek kontroly kvality QualityInspectionResult | Výsledek kontroly kvality, například „Vyhověl“ nebo „Nevyhověl“. | ||
| Popis Tento atribut zaznamenává výsledek kontroly kvality vyrobeného nebo přijatého zboží. Podle výsledku lze určit, zda zboží může pokračovat do dalšího kroku, nebo zda je třeba jej přepracovat, vrátit či vyřadit. Tento atribut je důležitý pro dashboard a KPI Míra zamítnutí při kontrole kvality. Analýza četnosti a příčin neúspěšných kontrol pomáhá odhalit systémové problémy s kvalitou konkrétních produktů, dodavatelů nebo výrobních linek. Proč je to důležité Přímo podporuje výpočet KPI souvisejících s kvalitou a pomáhá určit zdroje nízké kvality v dodavatelském řetězci. Kde data získat Tyto informace se obvykle ukládají v modulu Quality Management (QM). Data mohou pocházet z tabulek kontrolních dávek, například QALS, a z kódů rozhodnutí o použití v QAVE. Příklady VyhovělNevyhovělJe třeba přepracovatVyhověl s odchylkou | |||
| Závod Plant | Výrobní nebo distribuční provozovna, ve které aktivita proběhla. | ||
| Popis Závod je organizační jednotka SAP, která představuje místo výroby, skladování nebo distribuce zboží. Poskytuje geografický nebo funkční kontext aktivit procesu. Analýza výkonnosti procesu podle závodu je běžným požadavkem. Umožňuje porovnávat efektivitu, průchodnost a shodu mezi různými provozovnami a pomáhá určit osvědčené postupy i místa, která je třeba zlepšit. Proč je to důležité Poskytuje geografické nebo organizační hledisko analýzy a umožňuje porovnávat výkonnost různých provozoven. Kde data získat Najdete jej v mnoha tabulkách položek dokladů, například ve VBAP (prodej), EKPO (nákup) a LIPS (dodávka). Pole se obvykle jmenuje WERKS. Příklady 100021003500 | |||
| Čas ukončení EndTime | Časové razítko udávající, kdy byla aktivita dokončena. Používá se k výpočtu doby zpracování. | ||
| Popis Čas ukončení označuje dokončení konkrétní aktivity. Čas zahájení (EventTime) uvádí, kdy aktivita začala, zatímco čas ukončení je potřeba k určení, jak dlouho její provedení trvalo, zejména pokud nejde o okamžitou událost. Pokud analýza obsahuje čas zahájení i ukončení, lze přesně změřit dobu zpracování a dobu čekání. Díky tomu rozlišíte čas věnovaný samotné práci od čekání na další krok, což pomáhá hledat možnosti, jak proces zefektivnit. Proč je to důležité Umožňuje přesně vypočítat dobu zpracování aktivit a odlišit práci přidávající hodnotu od čekání. Kde data získat Lze jej odvodit ze změn stavů v SAP. Začátek může například označovat změna stavu na „Probíhá“ a konec změna na „Dokončeno“ v tabulkách, jako jsou JEST/JCDS. U okamžitých událostí může být EndTime stejný jako StartTime. Příklady 2023-04-15T11:30:00Z2023-04-18T14:05:00Z2023-04-22T09:00:00Z | |||
| Číslo nákupní objednávky PurchaseOrderNumber | Jedinečný identifikátor dokladu nákupní objednávky (PO). | ||
| Popis Číslo nákupní objednávky je oficiální číslo dokladu, kterým se u dodavatele objednávají materiály. Jde o důležitý identifikátor nákupní části dodavatelského řetězce. Tento atribut umožňuje podrobně analyzovat nákupní proces. Používá se v dashboardu Průběžná doba nákupu od začátku do konce a při výpočtu KPI Včasnost dodávek od dodavatelů. Propojuje nákupní požadavek, objednávku, příjem zboží a platbu. Proč je to důležité Slouží jako důležitý identifikátor pro podrobnou analýzu dílčího nákupního procesu a propojení souvisejících nákupních událostí. Kde data získat Najdete jej v tabulce hlaviček nákupních objednávek EKKO a v tabulce položek EKPO. Pole se jmenuje EBELN. Příklady 450007819245000781934500078194 | |||
| Číslo prodejní objednávky SalesOrderNumber | Jedinečný identifikátor dokladu prodejní objednávky (SO). | ||
| Popis Číslo prodejní objednávky je oficiální číslo dokladu potvrzujícího prodej zákazníkovi. Jde o důležitý identifikátor části dodavatelského řetězce od objednávky po platbu. Tento atribut umožňuje sledovat vyřízení konkrétní zákaznické objednávky. Propojuje původní požadavek zákazníka s navazujícími aktivitami, jako jsou dodání a fakturace, a podporuje analýzu průběžné doby vyřízení objednávky. Proč je to důležité Slouží jako důležitý identifikátor dílčího procesu vyřízení objednávky a propojuje poptávku zákazníka s logistikou a finančním vypořádáním. Kde data získat Najdete jej v tabulce hlaviček prodejních objednávek VBAK a v tabulce položek VBAP. Pole se jmenuje VBELN. Příklady 100023451000234610002347 | |||
| Dodávka opožděna IsLateDelivery | Logická hodnota určující, zda dodavatel doručil zboží po požadovaném datu dodání. | ||
| Popis Tento vypočítaný příznak jednoduše udává, zda byla dodávka včas, nebo ne. Vychází z porovnání časového razítka aktivity „Příjem zboží pro nákupní objednávku zaúčtován“ s atributem „Požadované datum dodání“. Atribut usnadňuje vytváření dashboardů a KPI pro hodnocení dodavatelů. Umožňuje rychle filtrovat a agregovat data, vypočítat včasnost dodávek od dodavatelů a určit, u kterých dodavatelů, materiálů nebo regionů dochází ke zpožděním nejčastěji. Proč je to důležité Usnadňuje analýzu výkonnosti dodavatelů tím, že pro každou dodávku poskytuje jednoznačný výsledek. To je nezbytné pro KPI včasnosti dodávek. Kde data získat Jde o vypočítané pole. Logika: IF ('Goods Receipt For PO Posted'.EventTime > PurchaseOrder.RequestedDeliveryDate) THEN True ELSE False. Příklady truefalse | |||
| Množství v objednávce OrderQuantity | Množství materiálu v položce objednávky. | ||
| Popis Tento atribut udává počet jednotek materiálu požadovaných v položce prodejní nebo nákupní objednávky. Vyjadřuje objem jednotlivých transakcí. Analýza podle množství pomáhá zaměřit se na objednávky s velkým objemem, které mohou mít větší dopad na podnikání. Množství lze také použít k přepočtu dalších ukazatelů, například nákladů na jednotku, nebo ke zjištění, jak velikost objednávky ovlivňuje dobu zpracování. Proč je to důležité Poskytuje kontext o objemu transakcí a umožňuje analyzovat jejich dopad i rozdělit případy podle velikosti. Kde data získat Najdete jej v tabulkách položek, například v poli MENGE v EKPO (nákupní objednávka) nebo KWMENG ve VBAP (prodejní objednávka). Příklady 100500025 | |||
| Název dopravce CarrierName | Název přepravní společnosti nebo zasílatele, který zajišťuje přepravu zásilky. | ||
| Popis Název dopravce určuje poskytovatele logistických služeb odpovědného za přepravu zboží mezi místy, například ze skladu k zákazníkovi. Tento atribut je důležitý pro dashboard Analýza doby přepravního cyklu. Umožňuje porovnávat dobu přepravy, náklady a spolehlivost různých dopravců, a usnadňuje tak plánování logistiky a výběr dopravce. Proč je to důležité Umožňuje analyzovat výkonnost jednotlivých poskytovatelů přepravy, což pomáhá optimalizovat logistické náklady a dobu doručení. Kde data získat ID dopravce (zasílatele) je uloženo v dokladech přepravních zásilek, například v tabulce VTTK (hlavička přepravní zásilky). Název se načítá z kmenových tabulek, jako je LFA1. Příklady DHLFedExMaersk Logistics | |||
| Přepracování IsRework | Příznak určující, zda aktivita nebo posloupnost aktivit představuje přepracování. | ||
| Popis Tento logický atribut označuje aktivity, které opakují dřívější kroky procesu a představují přepracování nebo opravu. Pokud například po aktivitě „Kontrola kvality“ následuje krok „Výrobní zakázka vytvořena“ a poté další „Kontrola kvality“, lze druhou kontrolu označit jako přepracování. Odhalení přepracování je důležité pro pochopení neefektivity procesu a skrytých nákladů. Tento příznak pomáhá změřit četnost a dopad opakovaných kroků, podporuje výpočet KPI Míra chyb při zpracování objednávek a ukazuje, kde lze proces zlepšit. Proč je to důležité Pomáhá měřit neefektivitu procesu tím, že výslovně označuje a počítá aktivity, které jsou součástí opakovaného cyklu. Kde data získat Obvykle se vypočítává v nástroji process mining na základě opakovaných posloupností aktivit v rámci stejného případu. Příklady truefalse | |||
Aktivity v řízení dodavatelského řetězce
| Aktivita | Popis | ||
|---|---|---|---|
| Doručení potvrzeno | Označuje formální potvrzení zákazníka nebo dopravce, že zboží bylo převzato podle zadání. Často se zaznamenává aktualizací odchozí dodávky o údaje POD. | ||
| Proč je to důležité Tato aktivita představuje konec procesu vyřízení objednávky. Je důležitá pro správné fakturace, řešení sporů a měření závěrečné části doručení. Kde data získat Jde o explicitní událost. Datum doručení se zaznamenává v tabulce hlaviček dodávek (LIKP, pole PODAT) nebo v souvisejících tabulkách POD (VLPOD). Zachycení Použijte datum doručení (LIKP-PODAT) z dokladu dodávky. Typ události explicit | |||
| Výdej zboží zaúčtován | Tato aktivita představuje právní i fyzický odchod zboží ze skladu. Snižuje zásoby a zaúčtuje náklady na prodané zboží, čímž označuje oficiální odeslání objednávky. | ||
| Proč je to důležité Jde o důležitý milník, který označuje začátek přepravy. Je to okamžik, kdy zboží definitivně opustí majetek společnosti a je předáno k doručení. Kde data získat Jde o explicitní událost, při které vznikne materiálový doklad. Časové razítko se zaznamená v hlavičce materiálového dokladu (MKPF, pole BUDAT) a aktualizuje stav pohybu zboží v dokladu dodávky (LIKP, pole WBSTK). Zachycení Použijte datum zaúčtování (MKPF-BUDAT) z materiálového dokladu výdeje zboží přiřazeného k odchozí dodávce. Typ události explicit | |||
| Výroba zboží | Tato činnost potvrzuje dokončení výroby zboží. Obvykle se zaznamenává jako příjem zboží z výrobní zakázky, kterým se hotový výrobek převede na sklad. | ||
| Proč je to důležité Tímto končí výrobní cyklus. Doba od vytvoření výrobní zakázky do této události představuje dodací lhůtu výroby a je důležitým ukazatelem její efektivity. Kde data získat Událost lze zaznamenat přímo zaúčtováním materiálového dokladu (příjem zboží z výrobní zakázky) nebo ji odvodit z posledního potvrzení výrobní zakázky (tabulka AFRU) či ze změny stavu na „Dodáno“. Zachycení Odvoďte ji z data zaúčtování posledního materiálového dokladu o příjmu zboží z výrobní zakázky nebo ze změny stavu. Typ události inferred | |||
| Vystavení nákupní objednávky | Označuje formální vytvoření a vystavení nákupní objednávky externímu dodavateli na potřebný materiál. Tím se nákupní požadavek mění v právně závazný závazek vůči dodavateli. | ||
| Proč je to důležité Jako důležitý milník je tato činnost zásadní pro měření dodacích lhůt dodavatelů i délky nákupního cyklu. Slouží jako výchozí bod pro hodnocení včasnosti dodávek. Kde data získat Jde o konkrétní událost zaznamenanou při vytvoření nákupní objednávky. Čas vytvoření se ukládá v tabulce hlavičky nákupní objednávky (EKKO, pole AEDAT). Zachycení U nákupní objednávky použijte datum vytvoření dokladu (EKKO-AEDAT). Typ události explicit | |||
| Vytvoření zákaznické objednávky | Tato činnost označuje vytvoření nové zákaznické objednávky, která formálně zaznamenává požadavek zákazníka na zboží. Jde o konkrétní událost zaznamenanou při uložení nového dokladu zákaznické objednávky uživatelem. | ||
| Proč je to důležité Jde o hlavní počáteční bod procesu od objednávky po inkaso. Doba od této události k dalším událostem ukazuje celkovou dobu vyřízení objednávky a pomáhá odhalit počáteční zpoždění při zpracování. Kde data získat Tato událost se zaznamenává přímo. Najdete ji v dokumentech změn tabulek zákaznických objednávek (CDHDR/CDPOS) nebo použijte časové razítko vytvoření v tabulce hlavičky objednávky (VBAK, pole ERDAT). Zachycení U dokladu zákaznické objednávky použijte datum vytvoření (VBAK-ERDAT) a čas (VBAK-ERZET). Typ události explicit | |||
| Zaúčtování příjmu zboží k nákupní objednávce | Označuje fyzické převzetí surovin nebo zboží od dodavatele na základě nákupní objednávky. Událost se zaznamená při příjmu zboží ve skladu nebo závodě. | ||
| Proč je to důležité Tato činnost uzavírá část nákupního cyklu týkající se dodávky od dodavatele. Je důležitá pro výpočet podílu včasných dodávek a hodnocení výkonu příchozí logistiky. Kde data získat Jde o konkrétní událost zaznamenanou zaúčtováním materiálového dokladu. Čas události je v tabulce hlavičky materiálového dokladu (MKPF, pole BUDAT). Vazbu na nákupní objednávku najdete v tabulce položek (MSEG). Zachycení Použijte datum zaúčtování (MKPF-BUDAT) materiálového dokladu spojeného s nákupní objednávkou. Typ události explicit | |||
| Dokončení vychystávání | Tato činnost označuje dokončení fyzického vychystání položek ze skladu pro výstupní dodávku. V mnoha systémech se potvrzuje aktualizací stavu vychystávání v dodacím dokladu. | ||
| Proč je to důležité Efektivní vychystávání je zásadní pro průchodnost skladu. Sledování této činnosti pomáhá odhalit úzká místa v provozu skladu a měřit výkonnost vychystávání. Kde data získat Často nejde o jednu samostatnou událost, ale lze ji odvodit ze změn stavu. Zaznamená se, když se stav vychystání v tabulce položek dodávky (LIPS, pole KOSTA) nastaví na „C“ (zcela zpracováno). Zachycení Odvoďte událost z dokumentů změn, které zaznamenávají aktualizaci stavu vychystání (LIPS-KOSTA) na plně vychystáno. Typ události inferred | |||
| Kontrola dostupnosti zásob | Označuje systémovou nebo ruční kontrolu, která ověřuje, zda jsou požadované položky skladem a lze jimi vyřídit zákaznickou objednávku. Často jde o automatický krok při vytváření objednávky, nemusí se však zaznamenávat jako samostatná událost. | ||
| Proč je to důležité Doba mezi objednávkou a touto kontrolou i její výsledek pomáhají zjistit, jak stav zásob ovlivňuje dobu vyřízení. Zpoždění v této fázi často vedou k nákupu nebo výrobě. Kde data získat Obvykle nejde o samostatně zaznamenanou událost. Lze ji odvodit z vytvoření prvního potvrzeného řádku rozvrhu v tabulce položek zákaznické objednávky (VBEP) nebo ze změn stavu položky objednávky. Zachycení Odvoďte ji z aktualizace stavu potvrzení řádku rozvrhu zákaznické objednávky (tabulka VBEP). Typ události inferred | |||
| Přepravní zásilka vytvořena | Označuje vytvoření dokladu přepravní zásilky, který sdružuje jednu nebo více dodávek pro plánování přepravy. Doklad obsahuje údaje o dopravci, trase a způsobu přepravy. | ||
| Proč je to důležité Tato aktivita zahajuje formální plánování přepravy. Analýza doby od výdeje zboží do dokončení přepravy ukazuje efektivitu přepravního procesu. Kde data získat Jde o explicitní událost zaznamenanou v tabulce hlaviček přepravních zásilek (VTTK, pole ERDAT). Je součástí modulu LE-TRA, který nemusí používat všechny organizace. Zachycení Použijte datum vytvoření (VTTK-ERDAT) z hlavičky dokladu přepravní zásilky. Typ události explicit | |||
| Provedení kontroly kvality | Označuje dokončení kontroly kvality vyrobeného zboží. Výsledek kontroly, tedy vyhovující nebo nevyhovující, se zaznamenává v rozhodnutí o použití. | ||
| Proč je to důležité Tato činnost je důležitá pro sledování kvality výrobků a odhalování problémů ve výrobě. Vysoký podíl zamítnutí nebo dlouhá doba kontroly mohou představovat závažná úzká místa. Kde data získat Jde o konkrétní událost zaznamenanou při rozhodnutí o použití pro kontrolní dávku. Datum rozhodnutí je v tabulce QALS (pole PASTRTERM) nebo QAVE. Zachycení Použijte časové razítko zaznamenání rozhodnutí o použití pro kontrolní dávku (tabulky QALS/QAVE). Typ události explicit | |||
| Vytvoření nákupní požadavky | Tato činnost označuje vytvoření interního požadavku na nákup potřebného zboží nebo surovin. Často se spustí, když zásoby nestačí k vyřízení zákaznické objednávky nebo klesnou pod bod objednání. | ||
| Proč je to důležité Jde o první krok nákupního cyklu. Sledování jeho vytvoření pomáhá odhalit zpoždění při zahájení nákupu a analyzovat celý proces pořizování. Kde data získat Jde o konkrétní událost. Čas vytvoření se zaznamenává v tabulce hlavičky nákupní požadavky (EBAN, pole BADAT). Zachycení U dokladu nákupní požadavky použijte datum vytvoření (EBAN-BADAT). Typ události explicit | |||
| Vytvoření výrobní zakázky | Označuje vytvoření výrobní zakázky na výrobu hotových výrobků potřebných k vyřízení zákaznické objednávky. Jde o formální zahájení interní výroby. | ||
| Proč je to důležité Vytvořením výrobní zakázky začíná dodací lhůta výroby. Analýza této události pomáhá odhalit zpoždění mezi signálem poptávky a zahájením výroby. Kde data získat Jde o konkrétní událost. Datum vytvoření se zaznamenává v tabulce hlavičky výrobní zakázky (AUFK, pole ERDAT). Zachycení Použijte datum vytvoření (AUFK-ERDAT) z tabulky hlavičky zakázky. Typ události explicit | |||
| Vytvoření výstupní dodávky | Označuje vytvoření dodacího dokladu, který povoluje vychystání a odeslání zboží zákazníkovi. Tím proces přechází od správy objednávek k realizaci logistiky. | ||
| Proč je to důležité Tento důležitý krok zahajuje fyzické vyřízení objednávky. Zpoždění mezi vytvořením objednávky a dodávky může ukazovat na problémy s plánováním nebo dostupností. Kde data získat Jde o konkrétní událost. Čas vytvoření se zaznamenává v tabulce hlavičky dodávky (LIKP, pole ERDAT). Zachycení Použijte datum vytvoření (LIKP-ERDAT) a čas (LIKP-ERZET) z hlavičky dodacího dokladu. Typ události explicit | |||
| Zákaznická faktura vytvořena | Tato aktivita označuje vytvoření fakturačního dokladu zákazníkovi za dodané zboží nebo služby. Zahajuje závěrečné finanční vypořádání procesu. | ||
| Proč je to důležité Tato aktivita je důležitá pro analýzu doby fakturačního cyklu. Zpoždění mezi potvrzením dodávky a vystavením faktury může negativně ovlivnit cash flow. Kde data získat Jde o explicitní událost. Časové razítko vytvoření se zaznamenává v tabulce hlaviček fakturačních dokladů (VBRK, pole ERDAT). Zachycení Použijte datum vytvoření (VBRK-ERDAT) z hlavičky fakturačního dokladu. Typ události explicit | |||
| Zboží vyloženo v místě určení | Tato aktivita označuje fyzické vyložení zboží u zákazníka. SAP tuto událost nemusí výslovně zaznamenávat, často ji proto musíte odvodit z údajů dopravce nebo z následných událostí. | ||
| Proč je to důležité Tímto končí úsek přepravy. Doba od výdeje zboží do tohoto okamžiku představuje dobu přepravy, která je důležitá pro optimalizaci logistiky. Kde data získat V základním ERP jde jen zřídka o explicitní událost. Lze ji odvodit ze zpráv EDI od dopravce, z údajů modulu Transportation Management (TM) nebo z časového razítka dokladu o doručení, pokud je k dispozici. Zachycení Odvoďte událost z aktualizací stavu od dopravce (například EDI 214) nebo jako přibližný údaj použijte časové razítko dokladu o doručení. Typ události inferred | |||
Průvodci extrakcí
Kroky
- Předpoklady: Zajistěte, aby měl uživatel dostatečná oprávnění k přístupu k požadovaným CDS View (Core Data Services) v SAP S/4HANA. Obvykle je potřeba konkrétní role přidělená týmem zabezpečení SAP. Budete také potřebovat SQL klienta, například DBeaver nebo SAP HANA Studio, který se připojí k databázi SAP HANA.
- Připojení k databázi: Nastavte SQL klienta pro připojení k databázi SAP S/4HANA. Budete potřebovat hostitele databázového serveru, port (např. 3xx15, kde xx označuje číslo instance), uživatelské jméno databáze a heslo.
- Příprava SQL dotazu: Zkopírujte celý SQL dotaz z části s dotazem v tomto dokumentu do editoru SQL klienta. Dotaz získá všechny uvedené aktivity z různých logistických a prodejních modulů.
- Nastavení parametrů extrakce: Před spuštěním dotazu najděte zástupné podmínky v klauzulích
WHEREjednotlivých poddotazů. Nahraďte'YourCompanyCode'skutečným kódem společnosti, kterou analyzujete, a upravte zástupné hodnoty období, například'YYYY-MM-DD', podle požadovaného rozsahu dat. - Spuštění dotazu: Spusťte celý SQL skript. Doba zpracování závisí na zvoleném období a objemu dat v systému. Doporučujeme spouštět dotaz mimo špičku, abyste omezili zatížení systému.
- Kontrola prvních výsledků: Po dokončení dotazu zběžně zkontrolujte výstup v SQL klientovi. Ověřte, že počet řádků odpovídá očekávání, sloupce jako LogisticsOrder, ActivityName a EventTime obsahují hodnoty a zobrazují se různé názvy aktivit.
- Export dat do CSV: Exportujte celou sadu výsledků z SQL klienta do souboru CSV. Zvolte kódování UTF-8, aby se předešlo problémům se speciálními znaky.
- Příprava k nahrání: Zkontrolujte, že názvy sloupců ve výsledném souboru CSV přesně odpovídají názvům atributů požadovaným pro načtení, například
LogisticsOrder,ActivityNameaEventTime. Pokud použijete dodaný SQL dotaz, další úprava dat by neměla být potřeba.
Konfigurace
- Předpoklady: Je nutný přístup k podkladové databázi SAP HANA. Uživatel databáze musí mít oprávnění
SELECTpro všechna CDS View uvedená v dotazu, mimo jiné I_SalesOrderItem, I_PurchaseOrderItem, I_OutboundDeliveryItem, I_MaterialDocumentItem, I_ProductionOrder, I_QualityInspection, I_Shipment a I_BillingDocumentItem. - Filtrování podle období: Dodaný dotaz obsahuje zástupný filtr období, obvykle podle data vytvoření (
CreationDateneboDocumentDate). Pro první analýzu doporučujeme období 3 až 6 měsíců. Získáte tak reprezentativní data, aniž byste nadměrně zatížili systém. - Hlavní obchodní filtry: Aby byla data relevantní, je nutné filtrovat podle konkrétních organizačních jednotek. Dotaz obsahuje zástupnou hodnotu
CompanyCode. Podle rozsahu analýzy můžete přidat také filtrySalesOrganization,DistributionChannelneboPlant. - Dopad na výkon: Jde o složitý dotaz, který spojuje několik rozsáhlých CDS View. Jeho spuštění může výrazně zatížit systémové zdroje. Extrakci plánujte mimo pracovní dobu. U velmi rozsáhlých datových sad zvažte spuštění dotazu v menších navazujících dávkách po jednotlivých měsících.
Ukázkový dotaz sql
WITH SalesOrderLink AS (
SELECT DISTINCT
sd.SalesDocument AS SalesOrder,
pr.PurchaseRequisition AS PurchaseRequisition,
po.PurchaseOrder AS PurchaseOrder,
od.DeliveryDocument AS OutboundDelivery,
bd.BillingDocument AS BillingDocument
FROM I_SalesDocItemProcessFlow AS pf
LEFT JOIN I_SalesDocumentItem AS sd ON pf.PrecedingDocument = sd.SalesDocument AND pf.PrecedingDocumentItem = sd.SalesDocumentItem
LEFT JOIN I_PurchaseRequisitionItem AS pr ON pf.SubsequentDocument = pr.PurchaseRequisition AND pf.SubsequentDocumentItem = pr.PurchaseRequisitionItem
LEFT JOIN I_PurchaseOrderItem AS po ON pf.SubsequentDocument = po.PurchaseOrder AND pf.SubsequentDocumentItem = po.PurchaseOrderItem
LEFT JOIN I_OutboundDeliveryItem AS od ON pf.SubsequentDocument = od.DeliveryDocument AND pf.SubsequentDocumentItem = od.DeliveryDocumentItem
LEFT JOIN I_BillingDocumentItem AS bd ON pf.SubsequentDocument = bd.BillingDocument AND pf.SubsequentDocumentItem = bd.BillingDocumentItem
WHERE sd.SalesDocument IS NOT NULL
)
SELECT
so.SalesOrder AS "LogisticsOrder",
'Sales Order Created' AS "ActivityName",
so.CreationDate || ' ' || so.CreationTime AS "EventTime",
so.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
soi.Material AS "MaterialNumber",
soi.Plant AS "Plant",
soi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_SalesOrder AS so
JOIN I_SalesOrderItem AS soi ON so.SalesOrder = soi.SalesOrder
LEFT JOIN I_Customer AS cust ON so.SoldToParty = cust.Customer
WHERE so.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
so.SalesOrder AS "LogisticsOrder",
'Inventory Availability Checked' AS "ActivityName",
so.CreationDate || ' ' || so.CreationTime AS "EventTime",
so.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
soi.Material AS "MaterialNumber",
soi.Plant AS "Plant",
soi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_SalesOrder AS so
JOIN I_SalesOrderItem AS soi ON so.SalesOrder = soi.SalesOrder
LEFT JOIN I_Customer AS cust ON so.SoldToParty = cust.Customer
WHERE so.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Purchase Requisition Created' AS "ActivityName",
pr.CreationDate || ' ' || '00:00:00' AS "EventTime",
pr.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
pri.Material AS "MaterialNumber",
pri.Plant AS "Plant",
pri.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_PurchaseRequisition AS pr
JOIN I_PurchaseRequisitionItem AS pri ON pr.PurchaseRequisition = pri.PurchaseRequisition
JOIN SalesOrderLink sl ON pr.PurchaseRequisition = sl.PurchaseRequisition
WHERE pr.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND pr.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Purchase Order Issued' AS "ActivityName",
po.PurchaseOrderDate || ' ' || '00:00:00' AS "EventTime",
po.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
sup.SupplierName AS "SupplierName",
poi.Material AS "MaterialNumber",
poi.Plant AS "Plant",
poi.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_PurchaseOrder AS po
JOIN I_PurchaseOrderItem AS poi ON po.PurchaseOrder = poi.PurchaseOrder
LEFT JOIN I_Supplier AS sup ON po.Supplier = sup.Supplier
JOIN SalesOrderLink sl ON po.PurchaseOrder = sl.PurchaseOrder
WHERE po.PurchaseOrderDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND po.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Goods Receipt For PO Posted' AS "ActivityName",
md.DocumentDate || ' ' || md.CreationTime AS "EventTime",
md.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
sup.SupplierName AS "SupplierName",
mdi.Material AS "MaterialNumber",
mdi.Plant AS "Plant",
poi.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_MaterialDocumentHeader AS md
JOIN I_MaterialDocumentItem AS mdi ON md.MaterialDocument = mdi.MaterialDocument AND md.MaterialDocumentYear = mdi.MaterialDocumentYear
JOIN I_PurchaseOrderItem AS poi ON mdi.PurchaseOrder = poi.PurchaseOrder AND mdi.PurchaseOrderItem = poi.PurchaseOrderItem
LEFT JOIN I_Supplier AS sup ON poi.Supplier = sup.Supplier
JOIN SalesOrderLink sl ON poi.PurchaseOrder = sl.PurchaseOrder
WHERE md.DocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND mdi.GoodsMovementType = '101' AND mdi.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Production Order Created' AS "ActivityName",
po.CreationDate || ' ' || po.CreationTime AS "EventTime",
po.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
po.Material AS "MaterialNumber",
po.ProductionPlant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_ProductionOrder AS po
JOIN SalesOrderLink sl ON po.SalesOrder = sl.SalesOrder
WHERE po.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Goods Produced' AS "ActivityName",
md.DocumentDate || ' ' || md.CreationTime AS "EventTime",
md.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
mdi.Material AS "MaterialNumber",
mdi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_MaterialDocumentHeader AS md
JOIN I_MaterialDocumentItem AS mdi ON md.MaterialDocument = mdi.MaterialDocument AND md.MaterialDocumentYear = mdi.MaterialDocumentYear
JOIN I_ProductionOrder AS po ON mdi.ManufacturingOrder = po.ManufacturingOrder
JOIN SalesOrderLink sl ON po.SalesOrder = sl.SalesOrder
WHERE md.DocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND mdi.GoodsMovementType = '101'
UNION ALL
SELECT
qi.SalesOrder AS "LogisticsOrder",
'Quality Inspection Performed' AS "ActivityName",
qi.InspLotUsageDecisionDate || ' ' || qi.InspLotUsageDecisionTime AS "EventTime",
qi.InspLotUsageDecisionMadeByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
qi.Material AS "MaterialNumber",
qi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
qi.InspLotUsageDecisionCode AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_QualityInspection AS qi
WHERE qi.InspLotUsageDecisionDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND qi.SalesOrder IS NOT NULL
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Outbound Delivery Created' AS "ActivityName",
od.CreationDate || ' ' || od.CreationTime AS "EventTime",
od.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Picking Completed' AS "ActivityName",
od.PickingDate || ' ' || od.PickingTime AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.PickingDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallPickingStatus = 'C'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Goods Issue Posted' AS "ActivityName",
od.ActualGoodsMovementDate || ' ' || od.ActualGoodsMovementTime AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.ActualGoodsMovementDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallGoodsMovementStatus = 'C'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Shipment Created' AS "ActivityName",
sh.CreationDate || ' ' || sh.CreationTime AS "EventTime",
sh.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
NULL AS "MaterialNumber",
sh.ShippingPoint AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_Shipment AS sh
JOIN I_ShipmentDelivery AS sd ON sh.Shipment = sd.Shipment
JOIN SalesOrderLink sl ON sd.Delivery = sl.OutboundDelivery
WHERE sh.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Proof Of Delivery Confirmed' AS "ActivityName",
od.PODActualDate || ' ' || '00:00:00' AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.PODActualDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallPODStatus = 'C'
UNION ALL
SELECT
bdi.SalesDocument AS "LogisticsOrder",
'Customer Invoice Created' AS "ActivityName",
bd.BillingDocumentDate || ' ' || bd.CreationTime AS "EventTime",
bd.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
bdi.Material AS "MaterialNumber",
bdi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_BillingDocument AS bd
JOIN I_BillingDocumentItem AS bdi ON bd.BillingDocument = bdi.BillingDocument
LEFT JOIN I_Customer AS cust ON bd.SoldToParty = cust.Customer
WHERE bd.BillingDocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND bd.CompanyCode = 'YourCompanyCode' AND bdi.SalesDocument IS NOT NULL; Kroky
- Ověřte, že máte přímý přístup pro čtení schématu SAP HANA s příslušnými logistickými, prodejními, nákupními, skladovými, výrobními, kvalitativními, dodacími, přepravními, potvrzovacími a fakturačními daty. Název schématu, údaje pro připojení a oprávnění si vyžádejte od týmu SAP Basis nebo datové platformy. Do zdrojového systému nezapisujte.
- Ověřte přesný datový model S/4HANA v cílovém systému. Pro nákupní objednávky se používají EKKO a EKPO, pro odchozí dodávky LIKP a LIPS. Další objekty je nutné nastavit pro prodejní objednávky, nákupní požadavky, materiálové doklady, výrobní objednávky, výsledky kontroly kvality, zásilky, potvrzení o doručení a fakturaci. Každý zástupný název objektu nebo sloupce v hranatých závorkách nahraďte objektem ověřeným v datovém slovníku systému.
- Definujte pravidlo propojení pro LogisticsOrder. Přednost má ověřená vazba toku dokladů od prodejní objednávky k navazujícím dodávkám, materiálovým dokladům, výrobním či nákupním dokladům a fakturačním dokladům. Pokud přímá vazba není k dispozici, nastavte zdokumentovanou propojovací tabulku nebo mapování specifické pro danou firmu. Případy nepropojujte pouze podle čísla materiálu nebo data.
- Nastavte období extrakce pomocí [Start date parameter] a [End date parameter]. Období uplatněte jednotně na časová razítka událostí. Doklady vytvořené před začátkem období ponechte, pokud pomáhají vysvětlit události, které v tomto období nastaly.
- V označené části pro filtry nastavte kód společnosti, prodejní organizaci, závod, nákupní organizaci, typ dokladu a další obchodní filtry. Hodnoty filtrů nejprve ověřte v cílovém systému.
- Ve všech větvích aktivit nahraďte názvy tabulek a sloupců v hranatých závorkách ověřenými názvy. Každá větev musí vracet stejné sloupce a kompatibilní datové typy. Dotaz výslovně vytváří jeden řádek pro každou z 15 požadovaných aktivit, protože ProcessMind chybějící události nedoplňuje.
- Spusťte dotaz v SAP HANA Database Explorer, SQL Console v SAP HANA cockpit nebo schváleném SQL klientovi. Než spustíte celý dotaz s UNION ALL, otestujte každou větev aktivity samostatně. Zkontrolujte plány vykonávání a první test omezte na krátké období.
- Ověřte vazby mezi doklady, časová razítka, identifikátory uživatelů, údaje o dodavatelích a zákaznících, materiály a závody i výsledky kontroly kvality. Prověřte duplicitní řádky vzniklé spojením na úrovni položek a uplatněte nastavenou granularitu událostí, například jednu událost na doklad nebo položku dokladu.
- Výsledek exportujte do CSV v kódování UTF-8 nebo jiného tabulkového formátu podporovaného ProcessMind. Zachovejte přesné názvy výstupních sloupců: LogisticsOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ExecutingUser, SupplierName, CustomerName, MaterialNumber, Plant, RequestedDeliveryDate a QualityInspectionResult. Ověřte, že EventTime obsahuje časové razítko a LastDataUpdate se vyplňuje jednotně.
- Nahrajte soubor do ProcessMind a namapujte LogisticsOrder jako identifikátor případu, ActivityName jako aktivitu a EventTime jako časové razítko události. Ověřte, že všech 15 názvů aktivit systém zpracovává jako výslovně uvedené události. Po ověření chování přírůstkové extrakce naplánujte řízenou aktualizaci.
Konfigurace
- Období: Začněte s daty za 3 až 6 měsíců. Pro první test zvolte kratší období a prodlužte ho až po ověření výkonu a vazeb mezi doklady.
- Zdrojové schéma: Do pole [SAP HANA schema name] zadejte schéma s ověřenými tabulkami nebo pohledy S/4HANA. Nepředpokládejte, že klasická tabulka ERP bude mít ve všech nasazeních S/4HANA stejný název.
- Rozsah dokladů: Nastavte [Company Code filter], [Sales Organization filter], [Plant filter], [Purchasing Organization filter] a [Document Type filter] podle rozsahu procesu.
- Propojení: Nastavte [Your document flow or correlation object] tak, aby každá událost byla přiřazena k jednomu LogisticsOrder. Chybějící nebo nejednoznačné propojení nahlaste, nepřiřazujte ho bez upozornění.
- Granularita událostí: Zvolte jednu událost na doklad, položku dokladu nebo obchodně významnou změnu stavu. Stejné pravidlo uplatněte ve všech větvích a odstraňujte pouze technické duplicity.
- Přednost časových razítek: Pro každou aktivitu použijte ověřené časové razítko zaúčtování, vytvoření, potvrzení, změny stavu, kontroly, dodání, vykládky, POD nebo fakturace. Čas extrakce nepoužívejte místo času obchodní události.
- Označení zdrojového systému: Nastavte [Source system label] na stabilní hodnotu, například schválený identifikátor systému SAP S/4HANA.
- Časové razítko aktualizace: Nastavte [Last data update expression] na schválené časové razítko extrakce nebo aktualizace zdroje.
- Výkon: Filtry období a organizačních jednotek uplatněte co nejdříve, vybírejte pouze potřebné sloupce a vyhněte se neomezeným spojením na úrovni položek. Zkontrolujte plán vykonávání. U pravidelných načtení zvažte trvalý pohled pro extrakci nebo přípravnou tabulku.
- Oprávnění: Je potřeba oprávnění ke čtení příslušných objektů schématu SAP HANA a oprávnění ke spouštění SQL. Obchodní ověření vyžaduje přístup k příslušným datům z prodeje, nákupu, skladování, výroby, kvality, logistiky, přepravy a fakturace.
- Funkční rozsah: Ověřte, že nasazený systém zahrnuje obchodní procesy odpovídající požadovaným aktivitám. Data o zásilkách, vykládce, POD, kvalitě, výrobě a fakturaci mohou být uložena v samostatných aplikacích nebo rozšířeních.
- Zabezpečení: Dodržujte pravidla organizace pro práci s údaji o zákaznících, dodavatelích, materiálech, financích a uživatelích. V případě potřeby citlivá pole maskujte nebo omezte přístup k nim.
Ukázkový dotaz sql
WITH
parameters AS (
SELECT
CAST('[Start date parameter]' AS TIMESTAMP) AS start_ts,
CAST('[End date parameter]' AS TIMESTAMP) AS end_ts,
CAST('[Last data update expression]' AS TIMESTAMP) AS last_data_update,
CAST('[Source system label]' AS NVARCHAR(100)) AS source_system,
CAST('[Company Code filter]' AS NVARCHAR(20)) AS company_code_filter,
CAST('[Sales Organization filter]' AS NVARCHAR(20)) AS sales_org_filter,
CAST('[Plant filter]' AS NVARCHAR(20)) AS plant_filter,
CAST('[Purchasing Organization filter]' AS NVARCHAR(20)) AS purchasing_org_filter,
CAST('[Document Type filter]' AS NVARCHAR(20)) AS document_type_filter
FROM DUMMY
),
base_events AS (
SELECT
CAST('[Sales order correlation column]' AS NVARCHAR(100)) AS LogisticsOrder,
CAST('Sales Order Created' AS NVARCHAR(100)) AS ActivityName,
CAST('[Sales order creation timestamp]' AS TIMESTAMP) AS EventTime,
CAST('[Executing user column]' AS NVARCHAR(100)) AS ExecutingUser,
CAST('[Supplier name column]' AS NVARCHAR(255)) AS SupplierName,
CAST('[Customer name column]' AS NVARCHAR(255)) AS CustomerName,
CAST('[Material number column]' AS NVARCHAR(100)) AS MaterialNumber,
CAST('[Plant column]' AS NVARCHAR(100)) AS Plant,
CAST('[Requested delivery date column]' AS DATE) AS RequestedDeliveryDate,
CAST('[Quality inspection result column]' AS NVARCHAR(100)) AS QualityInspectionResult
FROM [Your sales order source object]
CROSS JOIN parameters p
WHERE CAST('[Sales order creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Sales order creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Sales order company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Sales order sales organization column]' AS NVARCHAR(20)) = p.sales_org_filter
AND CAST('[Sales order document type column]' AS NVARCHAR(20)) = p.document_type_filter
UNION ALL
SELECT
CAST('[Inventory check correlation column]' AS NVARCHAR(100)),
CAST('Inventory Availability Checked' AS NVARCHAR(100)),
CAST('[Inventory check timestamp]' AS TIMESTAMP),
CAST('[Inventory check user column]' AS NVARCHAR(100)),
CAST('[Inventory supplier name column]' AS NVARCHAR(255)),
CAST('[Inventory customer name column]' AS NVARCHAR(255)),
CAST('[Inventory material number column]' AS NVARCHAR(100)),
CAST('[Inventory plant column]' AS NVARCHAR(100)),
CAST('[Inventory requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your inventory availability source object]
CROSS JOIN parameters p
WHERE CAST('[Inventory check timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Inventory check timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Inventory company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Inventory sales organization column]' AS NVARCHAR(20)) = p.sales_org_filter
UNION ALL
SELECT
CAST('[Purchase requisition correlation column]' AS NVARCHAR(100)),
CAST('Purchase Requisition Created' AS NVARCHAR(100)),
CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP),
CAST('[Purchase requisition user column]' AS NVARCHAR(100)),
CAST('[Purchase requisition supplier name column]' AS NVARCHAR(255)),
CAST('[Purchase requisition customer name column]' AS NVARCHAR(255)),
CAST('[Purchase requisition material number column]' AS NVARCHAR(100)),
CAST('[Purchase requisition plant column]' AS NVARCHAR(100)),
CAST('[Purchase requisition requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your purchase requisition source object]
CROSS JOIN parameters p
WHERE CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Purchase requisition plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Purchase order correlation column]' AS NVARCHAR(100)),
CAST('Purchase Order Issued' AS NVARCHAR(100)),
CAST('[Purchase order issue timestamp]' AS TIMESTAMP),
CAST('[Purchase order user column]' AS NVARCHAR(100)),
CAST('[Purchase order supplier name column]' AS NVARCHAR(255)),
CAST('[Purchase order customer name column]' AS NVARCHAR(255)),
CAST('[Purchase order material number column]' AS NVARCHAR(100)),
CAST('[Purchase order plant column]' AS NVARCHAR(100)),
CAST('[Purchase order requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM EKKO po_header
INNER JOIN EKPO po_item
ON po_header.[Purchase order number column] = po_item.[Purchase order number column]
CROSS JOIN parameters p
WHERE CAST('[Purchase order issue timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Purchase order issue timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Purchase order company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Purchase order purchasing organization column]' AS NVARCHAR(20)) = p.purchasing_org_filter
AND CAST('[Purchase order document type column]' AS NVARCHAR(20)) = p.document_type_filter
UNION ALL
SELECT
CAST('[Goods receipt correlation column]' AS NVARCHAR(100)),
CAST('Goods Receipt For PO Posted' AS NVARCHAR(100)),
CAST('[Goods receipt posting timestamp]' AS TIMESTAMP),
CAST('[Goods receipt user column]' AS NVARCHAR(100)),
CAST('[Goods receipt supplier name column]' AS NVARCHAR(255)),
CAST('[Goods receipt customer name column]' AS NVARCHAR(255)),
CAST('[Goods receipt material number column]' AS NVARCHAR(100)),
CAST('[Goods receipt plant column]' AS NVARCHAR(100)),
CAST('[Goods receipt requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your material document header source object] material_header
INNER JOIN [Your material document item source object] material_item
ON material_header.[Material document number column] = material_item.[Material document number column]
AND material_header.[Material document year column] = material_item.[Material document year column]
CROSS JOIN parameters p
WHERE CAST('[Goods receipt posting timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Goods receipt posting timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Goods receipt plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Goods receipt movement type column]' AS NVARCHAR(20)) = '[Goods receipt movement type value]'
UNION ALL
SELECT
CAST('[Production order correlation column]' AS NVARCHAR(100)),
CAST('Production Order Created' AS NVARCHAR(100)),
CAST('[Production order creation timestamp]' AS TIMESTAMP),
CAST('[Production order user column]' AS NVARCHAR(100)),
CAST('[Production order supplier name column]' AS NVARCHAR(255)),
CAST('[Production order customer name column]' AS NVARCHAR(255)),
CAST('[Production order material number column]' AS NVARCHAR(100)),
CAST('[Production order plant column]' AS NVARCHAR(100)),
CAST('[Production order requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your production order source object]
CROSS JOIN parameters p
WHERE CAST('[Production order creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Production order creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Production order plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Production receipt correlation column]' AS NVARCHAR(100)),
CAST('Goods Produced' AS NVARCHAR(100)),
CAST('[Production receipt timestamp]' AS TIMESTAMP),
CAST('[Production receipt user column]' AS NVARCHAR(100)),
CAST('[Production receipt supplier name column]' AS NVARCHAR(255)),
CAST('[Production receipt customer name column]' AS NVARCHAR(255)),
CAST('[Production receipt material number column]' AS NVARCHAR(100)),
CAST('[Production receipt plant column]' AS NVARCHAR(100)),
CAST('[Production receipt requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your production receipt source object]
CROSS JOIN parameters p
WHERE CAST('[Production receipt timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Production receipt timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Production receipt plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Quality inspection correlation column]' AS NVARCHAR(100)),
CAST('Quality Inspection Performed' AS NVARCHAR(100)),
CAST('[Quality inspection completion timestamp]' AS TIMESTAMP),
CAST('[Quality inspection user column]' AS NVARCHAR(100)),
CAST('[Quality supplier name column]' AS NVARCHAR(255)),
CAST('[Quality customer name column]' AS NVARCHAR(255)),
CAST('[Quality material number column]' AS NVARCHAR(100)),
CAST('[Quality plant column]' AS NVARCHAR(100)),
CAST('[Quality requested delivery date column]' AS DATE),
CAST('[Quality inspection result column]' AS NVARCHAR(100))
FROM [Your quality inspection source object]
CROSS JOIN parameters p
WHERE CAST('[Quality inspection completion timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Quality inspection completion timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Quality plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Outbound delivery correlation column]' AS NVARCHAR(100)),
CAST('Outbound Delivery Created' AS NVARCHAR(100)),
CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP),
CAST('[Outbound delivery user column]' AS NVARCHAR(100)),
CAST('[Outbound delivery supplier name column]' AS NVARCHAR(255)),
CAST('[Outbound delivery customer name column]' AS NVARCHAR(255)),
CAST('[Outbound delivery material number column]' AS NVARCHAR(100)),
CAST('[Outbound delivery plant column]' AS NVARCHAR(100)),
CAST('[Outbound delivery requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM LIKP delivery_header
INNER JOIN LIPS delivery_item
ON delivery_header.[Delivery number column] = delivery_item.[Delivery number column]
CROSS JOIN parameters p
WHERE CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Outbound delivery plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Picking correlation column]' AS NVARCHAR(100)),
CAST('Picking Completed' AS NVARCHAR(100)),
CAST('[Picking completion timestamp]' AS TIMESTAMP),
CAST('[Picking user column]' AS NVARCHAR(100)),
CAST('[Picking supplier name column]' AS NVARCHAR(255)),
CAST('[Picking customer name column]' AS NVARCHAR(255)),
CAST('[Picking material number column]' AS NVARCHAR(100)),
CAST('[Picking plant column]' AS NVARCHAR(100)),
CAST('[Picking requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your picking status source object]
CROSS JOIN parameters p
WHERE CAST('[Picking completion timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Picking completion timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Picking plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Picking completion status column]' AS NVARCHAR(50)) = '[Picking completed status value]'
UNION ALL
SELECT
CAST('[Goods issue correlation column]' AS NVARCHAR(100)),
CAST('Goods Issue Posted' AS NVARCHAR(100)),
CAST('[Goods issue posting timestamp]' AS TIMESTAMP),
CAST('[Goods issue user column]' AS NVARCHAR(100)),
CAST('[Goods issue supplier name column]' AS NVARCHAR(255)),
CAST('[Goods issue customer name column]' AS NVARCHAR(255)),
CAST('[Goods issue material number column]' AS NVARCHAR(100)),
CAST('[Goods issue plant column]' AS NVARCHAR(100)),
CAST('[Goods issue requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your goods issue source object]
CROSS JOIN parameters p
WHERE CAST('[Goods issue posting timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Goods issue posting timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Goods issue plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Goods issue movement type column]' AS NVARCHAR(20)) = '[Goods issue movement type value]'
UNION ALL
SELECT
CAST('[Shipment correlation column]' AS NVARCHAR(100)),
CAST('Shipment Created' AS NVARCHAR(100)),
CAST('[Shipment creation timestamp]' AS TIMESTAMP),
CAST('[Shipment user column]' AS NVARCHAR(100)),
CAST('[Shipment supplier name column]' AS NVARCHAR(255)),
CAST('[Shipment customer name column]' AS NVARCHAR(255)),
CAST('[Shipment material number column]' AS NVARCHAR(100)),
CAST('[Shipment plant column]' AS NVARCHAR(100)),
CAST('[Shipment requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your shipment source object]
CROSS JOIN parameters p
WHERE CAST('[Shipment creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Shipment creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Shipment plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Unloading correlation column]' AS NVARCHAR(100)),
CAST('Goods Unloaded at Destination' AS NVARCHAR(100)),
CAST('[Unloading timestamp]' AS TIMESTAMP),
CAST('[Unloading user column]' AS NVARCHAR(100)),
CAST('[Unloading supplier name column]' AS NVARCHAR(255)),
CAST('[Unloading customer name column]' AS NVARCHAR(255)),
CAST('[Unloading material number column]' AS NVARCHAR(100)),
CAST('[Unloading plant column]' AS NVARCHAR(100)),
CAST('[Unloading requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your unloading or carrier event source object]
CROSS JOIN parameters p
WHERE CAST('[Unloading timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Unloading timestamp]' AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT
CAST('[POD correlation column]' AS NVARCHAR(100)),
CAST('Proof Of Delivery Confirmed' AS NVARCHAR(100)),
CAST('[POD confirmation timestamp]' AS TIMESTAMP),
CAST('[POD user column]' AS NVARCHAR(100)),
CAST('[POD supplier name column]' AS NVARCHAR(255)),
CAST('[POD customer name column]' AS NVARCHAR(255)),
CAST('[POD material number column]' AS NVARCHAR(100)),
CAST('[POD plant column]' AS NVARCHAR(100)),
CAST('[POD requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your proof of delivery source object]
CROSS JOIN parameters p
WHERE CAST('[POD confirmation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[POD confirmation timestamp]' AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT
CAST('[Billing correlation column]' AS NVARCHAR(100)),
CAST('Customer Invoice Created' AS NVARCHAR(100)),
CAST('[Billing creation timestamp]' AS TIMESTAMP),
CAST('[Billing user column]' AS NVARCHAR(100)),
CAST('[Billing supplier name column]' AS NVARCHAR(255)),
CAST('[Billing customer name column]' AS NVARCHAR(255)),
CAST('[Billing material number column]' AS NVARCHAR(100)),
CAST('[Billing plant column]' AS NVARCHAR(100)),
CAST('[Billing requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your billing document source object]
CROSS JOIN parameters p
WHERE CAST('[Billing creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Billing creation timestamp]' AS TIMESTAMP) < p.end_ts
)
SELECT
LogisticsOrder,
ActivityName,
EventTime,
parameters.source_system AS SourceSystem,
parameters.last_data_update AS LastDataUpdate,
ExecutingUser,
SupplierName,
CustomerName,
MaterialNumber,
Plant,
RequestedDeliveryDate,
QualityInspectionResult
FROM base_events
CROSS JOIN parameters
WHERE LogisticsOrder IS NOT NULL
AND ActivityName IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY LogisticsOrder, EventTime, ActivityName; Kroky
- Předpoklady: Zajistěte, abyste měli vývojářský klíč a potřebná oprávnění k vytváření a spouštění programů ABAP v systému SAP S/4HANA, včetně přístupu k transakci SE38 a oprávnění ke čtení tabulek dodavatelského řetězce, například VBAK, LIKP, EKKO a MKPF.
- Vytvoření programu: Otevřete editor ABAP pomocí transakčního kódu
SE38. Zadejte název nového programu, napříkladZ_PM_SCM_EXTRACTION, a klikněte na „Vytvořit“. Zadejte výstižný název a jako typ programu nastavte „Spustitelný program“. - Vložení kódu: Zkopírujte celý kód ABAP z níže uvedené části „Dotaz“ a vložte ho do editoru ABAP nového programu.
- Nastavení textových prvků: Přejděte na Go To > Text Elements > Selection Texts. Aktivujte všechny navržené popisky výběrové obrazovky, aby bylo uživatelské rozhraní srozumitelné.
- Aktivace programu: Uložte a aktivujte program stisknutím CTRL+S a poté CTRL+F3 nebo kliknutím na ikonu aktivace na panelu nástrojů. Opravte případné syntaktické chyby způsobené nastavením konkrétního systému.
- Spuštění programu: Spusťte program klávesou F8 nebo tlačítkem „Přímé zpracování“. Zobrazí se výběrová obrazovka, na které můžete nastavit filtry pro extrahovaná data.
- Nastavení parametrů extrakce: Na výběrové obrazovce zadejte období pro datum vytvoření prodejní objednávky. Doporučujeme také filtrovat podle konkrétních kódů společností nebo prodejních organizací, abyste omezili objem dat. Zadejte úplnou cestu k výstupnímu souboru na aplikačním serveru SAP.
- Spuštění na pozadí: U rozsáhlých datových sad za několik měsíců je nutné spustit program na pozadí, aby nedošlo k vypršení časového limitu transakce. V nabídce zvolte Program > Execute in Background a naplánujte úlohu.
- Stažení datového souboru: Po dokončení programu přejděte pomocí transakčního kódu
AL11do zadaného adresáře na aplikačním serveru. Najděte vytvořený soubor a stáhněte ho do počítače pomocí transakceCG3Y. - Příprava k nahrání: Ověřte, že stažený soubor je v prostém textovém formátu, například CSV s oddělovačem čárka nebo středník, a používá kódování UTF-8. Soubor je nyní připraven k nahrání do nástroje process mining.
Konfigurace
- Rozsah dat (S_ERDAT): Jde o nejdůležitější filtr. Určuje období pro počáteční výběr prodejních objednávek podle data jejich vytvoření (
VBAK-ERDAT). Začněte kratším obdobím, například posledními 3 až 6 měsíci, abyste udrželi objem dat na zvládnutelné úrovni. - Prodejní organizace (S_VKORG): Volitelný filtr, který omezí extrakci na konkrétní prodejní organizace. Hodí se, pokud chcete zaměřit analýzu na určitou obchodní jednotku nebo region.
- Kód společnosti (S_BUKRS): Volitelný filtr, který omezí data na konkrétní kódy společností. Doporučujeme ho použít ke zmenšení rozsahu dat a zlepšení výkonu.
- Cesta k výstupnímu souboru (P_FILE): Úplná cesta na aplikačním serveru SAP, kam se uloží výsledný soubor záznamu událostí. Uživatel spouštějící program musí mít do tohoto adresáře oprávnění k zápisu. Příklad:
/usr/sap/trans/tmp/scm_event_log.csv. - Režim spuštění: Program lze spustit v popředí, pokud jde o malou testovací extrakci. U většího objemu dat je nutné zpracování na pozadí, aby nedošlo k vypršení časového limitu a aby se systém během špičky méně zatěžoval.
- Oprávnění v systému: Uživatel spouštějící sestavu potřebuje přístup pro čtení všech podkladových tabulek, mimo jiné VBAK, VBAP, EKKO, EKPO, MSEG, MKPF, LIKP, LIPS, VBRK, AUFK, QAVE, KNA1 a LFA1.
Ukázkový dotaz abap
REPORT Z_PM_SCM_EXTRACTION.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
PARAMETERS: p_file TYPE string LOWER CASE DEFAULT '/usr/sap/trans/tmp/scm_event_log.csv'.
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_vkorg FOR vbak-vkorg,
s_bukrs FOR vbak-bukrs.
*&---------------------------------------------------------------------*
*& Data Type Definitions
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
LogisticsOrder TYPE vbeln_va,
ActivityName TYPE string,
EventTime TYPE string,
SourceSystem TYPE sysysid,
LastDataUpdate TYPE string,
ExecutingUser TYPE ernam,
SupplierName TYPE name1_gp,
CustomerName TYPE name1_gp,
MaterialNumber TYPE matnr,
Plant TYPE werks_d,
RequestedDeliveryDate TYPE vdatu,
QualityInspectionResult TYPE string,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log,
lv_sysid TYPE sysysid,
lv_last_update TYPE string.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
lv_sysid = sy-sysid.
CONCATENATE sy-datum sy-uzeit INTO lv_last_update.
" Select base data: Sales Orders
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~kunnr, h~bukrs, h~vdatu, i~posnr, i~matnr, i~werks
INTO TABLE @DATA(lt_so)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~vkorg IN @s_vkorg
AND h~bukrs IN @s_bukrs.
IF lt_so IS INITIAL.
MESSAGE 'No sales orders found for the given criteria.' TYPE 'I'.
RETURN.
ENDIF.
" Select related documents using Document Flow (VBFA)
SELECT *
INTO TABLE @DATA(lt_vbfa)
FROM vbfa
FOR ALL ENTRIES IN @lt_so
WHERE vbelv = @lt_so-vbeln
AND posnv = @lt_so-posnr.
" Collect all unique document numbers
DATA: lt_vbeln_pr TYPE RANGE OF banfn,
lt_vbeln_po TYPE RANGE OF ebeln,
lt_vbeln_dn TYPE RANGE OF vbeln_vl,
lt_vbeln_gi TYPE RANGE OF mblnr,
lt_vbeln_auf TYPE RANGE OF aufnr,
lt_vbeln_inv TYPE RANGE OF vbeln_vf,
lt_vbeln_shp TYPE RANGE OF tknum.
LOOP AT lt_vbfa INTO DATA(ls_vbfa).
CASE ls_vbfa-vbtyp_n.
WHEN 'H'. " Purchase Requisition
APPEND ls_vbfa-vbeln TO lt_vbeln_pr.
WHEN 'K'. " Purchase Order
APPEND ls_vbfa-vbeln TO lt_vbeln_po.
WHEN 'J'. " Delivery
APPEND ls_vbfa-vbeln TO lt_vbeln_dn.
WHEN 'R'. " Goods Movement (GI)
APPEND ls_vbfa-vbeln TO lt_vbeln_gi.
WHEN 'L'. " Production Order
APPEND ls_vbfa-vbeln TO lt_vbeln_auf.
WHEN 'M'. " Invoice
APPEND ls_vbfa-vbeln TO lt_vbeln_inv.
WHEN '8'. " Shipment
APPEND ls_vbfa-vbeln TO lt_vbeln_shp.
ENDCASE.
ENDLOOP.
SORT lt_vbeln_pr. DELETE ADJACENT DUPLICATES FROM lt_vbeln_pr.
SORT lt_vbeln_po. DELETE ADJACENT DUPLICATES FROM lt_vbeln_po.
SORT lt_vbeln_dn. DELETE ADJACENT DUPLICATES FROM lt_vbeln_dn.
SORT lt_vbeln_gi. DELETE ADJACENT DUPLICATES FROM lt_vbeln_gi.
SORT lt_vbeln_auf. DELETE ADJACENT DUPLICATES FROM lt_vbeln_auf.
SORT lt_vbeln_inv. DELETE ADJACENT DUPLICATES FROM lt_vbeln_inv.
SORT lt_vbeln_shp. DELETE ADJACENT DUPLICATES FROM lt_vbeln_shp.
" Select detailed data for each document type
SELECT banfn, badat, ernam FROM eban INTO TABLE @DATA(lt_eban) FOR ALL ENTRIES IN @lt_so WHERE bnfpo = @lt_so-posnr AND banfn IN @lt_vbeln_pr.
SELECT ebeln, aedat, ernam, lifnr FROM ekko INTO TABLE @DATA(lt_ekko) WHERE ebeln IN @lt_vbeln_po.
SELECT vbeln, erdat, erzet, ernam, kodat, wadat_ist, podat FROM likp INTO TABLE @DATA(lt_likp) WHERE vbeln IN @lt_vbeln_dn.
SELECT mblnr, mjahr, budat, usnam FROM mkpf INTO TABLE @DATA(lt_mkpf) WHERE mblnr IN @lt_vbeln_gi.
SELECT mblnr, mjahr, zeile, bwart, lfbnr, ebeln, aufnr FROM mseg INTO TABLE @DATA(lt_mseg) FOR ALL ENTRIES IN @lt_mkpf WHERE mblnr = @lt_mkpf-mblnr AND mjahr = @lt_mkpf-mjahr.
SELECT aufnr, erdat, ernam FROM aufk INTO TABLE @DATA(lt_aufk) WHERE aufnr IN @lt_vbeln_auf.
SELECT prueflos, vdatum, vcode FROM qave INTO TABLE @DATA(lt_qave) FOR ALL ENTRIES IN @lt_so WHERE aufnr IN @lt_vbeln_auf.
SELECT vbeln, erdat, erzet, ernam FROM vbrk INTO TABLE @DATA(lt_vbrk) WHERE vbeln IN @lt_vbeln_inv.
SELECT tknum, erdat, erzet FROM vttk INTO TABLE @DATA(lt_vttk) WHERE tknum IN @lt_vbeln_shp.
SELECT kunnr, name1 FROM kna1 INTO TABLE @DATA(lt_kna1) FOR ALL ENTRIES IN @lt_so WHERE kunnr = @lt_so-kunnr.
SELECT lifnr, name1 FROM lfa1 INTO TABLE @DATA(lt_lfa1) FOR ALL ENTRIES IN @lt_ekko WHERE lifnr = @lt_ekko-lifnr.
" Assemble Event Log
LOOP AT lt_so INTO DATA(ls_so).
CLEAR ls_event_log.
READ TABLE lt_kna1 INTO DATA(ls_kna1) WITH KEY kunnr = ls_so-kunnr BINARY SEARCH.
ls_event_log-LogisticsOrder = ls_so-vbeln.
ls_event_log-SourceSystem = lv_sysid.
ls_event_log-LastDataUpdate = lv_last_update.
ls_event_log-CustomerName = ls_kna1-name1.
ls_event_log-MaterialNumber = ls_so-matnr.
ls_event_log-Plant = ls_so-werks.
ls_event_log-RequestedDeliveryDate = ls_so-vdatu.
" 1. Sales Order Created
ls_event_log-ActivityName = 'Sales Order Created'.
CONCATENATE ls_so-erdat ls_so-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_so-ernam.
APPEND ls_event_log TO lt_event_log.
" 2. Inventory Availability Checked (proxy event)
ls_event_log-ActivityName = 'Inventory Availability Checked'.
CONCATENATE ls_so-erdat ls_so-erzet INTO ls_event_log-EventTime. " Using SO creation time as a proxy
ls_event_log-ExecutingUser = ls_so-ernam.
APPEND ls_event_log TO lt_event_log.
" Find related documents for this SO item
LOOP AT lt_vbfa INTO ls_vbfa WHERE vbelv = ls_so-vbeln AND posnv = ls_so-posnr.
CASE ls_vbfa-vbtyp_n.
WHEN 'H'. " 3. Purchase Requisition Created
READ TABLE lt_eban INTO DATA(ls_eban) WITH KEY banfn = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Purchase Requisition Created'.
CONCATENATE ls_eban-badat '000000' INTO ls_event_log-EventTime. " PR has no time field
ls_event_log-ExecutingUser = ls_eban-ernam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN 'K'. " 4. Purchase Order Issued
READ TABLE lt_ekko INTO DATA(ls_ekko) WITH KEY ebeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
READ TABLE lt_lfa1 INTO DATA(ls_lfa1) WITH KEY lifnr = ls_ekko-lifnr BINARY SEARCH.
ls_event_log-ActivityName = 'Purchase Order Issued'.
CONCATENATE ls_ekko-aedat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_ekko-ernam.
ls_event_log-SupplierName = ls_lfa1-name1.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN 'L'. " 6. Production Order Created
READ TABLE lt_aufk INTO DATA(ls_aufk) WITH KEY aufnr = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Production Order Created'.
CONCATENATE ls_aufk-erdat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_aufk-ernam.
APPEND ls_event_log TO lt_event_log.
" 8. Quality Inspection Performed
READ TABLE lt_qave INTO DATA(ls_qave) WITH KEY prueflos = ls_vbfa-vbeln. " Approximation linking lot to order
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Quality Inspection Performed'.
CONCATENATE ls_qave-vdatum '000000' INTO ls_event_log-EventTime.
ls_event_log-QualityInspectionResult = ls_qave-vcode.
APPEND ls_event_log TO lt_event_log.
CLEAR ls_event_log-QualityInspectionResult.
ENDIF.
ENDIF.
WHEN 'J'. " 9. Outbound Delivery Created
READ TABLE lt_likp INTO DATA(ls_likp) WITH KEY vbeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Outbound Delivery Created'.
CONCATENATE ls_likp-erdat ls_likp-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_likp-ernam.
APPEND ls_event_log TO lt_event_log.
" 10. Picking Completed
IF ls_likp-kodat IS NOT INITIAL.
ls_event_log-ActivityName = 'Picking Completed'.
CONCATENATE ls_likp-kodat '120000' INTO ls_event_log-EventTime. " Using Picking Date as proxy
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 14. Proof Of Delivery Confirmed
IF ls_likp-podat IS NOT INITIAL.
ls_event_log-ActivityName = 'Proof Of Delivery Confirmed'.
CONCATENATE ls_likp-podat '000000' INTO ls_event_log-EventTime.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDIF.
WHEN 'M'. " 15. Customer Invoice Created
READ TABLE lt_vbrk INTO DATA(ls_vbrk) WITH KEY vbeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Customer Invoice Created'.
CONCATENATE ls_vbrk-erdat ls_vbrk-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_vbrk-ernam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN '8'. " 12. Shipment Created
READ TABLE lt_vttk INTO DATA(ls_vttk) WITH KEY tknum = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Shipment Created'.
CONCATENATE ls_vttk-erdat ls_vttk-erzet INTO ls_event_log-EventTime.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDCASE.
ENDLOOP.
" Find material movements (MSEG) not directly in VBFA
" 5. Goods Receipt For PO Posted
LOOP AT lt_mseg INTO DATA(ls_mseg_po) WHERE ebeln IN (SELECT ebeln FROM ekpo WHERE banfn IN (SELECT banfn FROM eban WHERE vbeln = ls_so-vbeln) ) AND bwart = '101'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_po) WITH KEY mblnr = ls_mseg_po-mblnr mjahr = ls_mseg_po-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Receipt For PO Posted'.
CONCATENATE ls_mkpf_po-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_po-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 7. Goods Produced
LOOP AT lt_mseg INTO DATA(ls_mseg_pp) WHERE aufnr IN (SELECT aufnr FROM afpo WHERE kdauf = ls_so-vbeln) AND bwart = '101'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_pp) WITH KEY mblnr = ls_mseg_pp-mblnr mjahr = ls_mseg_pp-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Produced'.
CONCATENATE ls_mkpf_pp-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_pp-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 11. Goods Issue Posted
LOOP AT lt_mseg INTO DATA(ls_mseg_gi) WHERE lfbnr IN (SELECT vbeln FROM lips WHERE vgbel = ls_so-vbeln) AND bwart = '601'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_gi) WITH KEY mblnr = ls_mseg_gi-mblnr mjahr = ls_mseg_gi-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Issue Posted'.
CONCATENATE ls_mkpf_gi-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_gi-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDLOOP.
" Remove duplicate events for the same case
SORT lt_event_log BY LogisticsOrder ActivityName EventTime.
DELETE ADJACENT DUPLICATES FROM lt_event_log COMPARING LogisticsOrder ActivityName EventTime.
" Write data to file
DATA: lt_output TYPE TABLE OF string.
APPEND 'LogisticsOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate,ExecutingUser,SupplierName,CustomerName,MaterialNumber,Plant,RequestedDeliveryDate,QualityInspectionResult' TO lt_output.
LOOP AT lt_event_log INTO ls_event_log.
DATA(lv_line) = |
{ ls_event_log-LogisticsOrder },
{ ls_event_log-ActivityName },
{ ls_event_log-EventTime },
{ ls_event_log-SourceSystem },
{ ls_event_log-LastDataUpdate },
{ ls_event_log-ExecutingUser },
{ ls_event_log-SupplierName },
{ ls_event_log-CustomerName },
{ ls_event_log-MaterialNumber },
{ ls_event_log-Plant },
{ ls_event_log-RequestedDeliveryDate },
{ ls_event_log-QualityInspectionResult }|
.
REPLACE ALL OCCURRENCES OF ',' IN lv_line WITH ' '.
REPLACE ALL OCCURRENCES OF REGEX '\s+' IN lv_line WITH '' LEADING.
CONDENSE lv_line.
APPEND lv_line TO lt_output.
ENDLOOP.
cl_gui_frontend_services=>gui_download(
EXPORTING
filename = p_file
filetype = 'ASC'
CHANGING
data_tab = lt_output
EXCEPTIONS
OTHERS = 24
).
IF sy-subrc <> 0.
MESSAGE 'Error downloading file.' TYPE 'E'.
ELSE.
MESSAGE |File downloaded successfully to { p_file }| TYPE 'S'.
ENDIF. Chcete začít?
Pomocí této šablony připravte data a začněte zlepšovat výkonnost dodavatelského řetězce. Provedeme vás jednotlivými kroky.
Zlepšete řízení dodavatelského řetězce
Získejte přehled od začátku do konce a během několika dnů zvyšte přesnost prognóz na 90 %.
Zkušební verze na 14 dní zdarma, bez nutnosti zadávat platební kartu.