Šablona dat pro zpracování vrácení zboží a refundací
Šablona dat pro zpracování vrácení zboží a refundací
- Doporučené atributy ke sběru
- Aktivity, které je vhodné sledovat
- Pokyny k extrakci
Atributy procesu vrácení zboží a refundace
| Název | Popis | ||
|---|---|---|---|
| Čas události EventTime | Přesné datum a čas, kdy aktivita proběhla. | ||
| Popis Toto časové razítko označuje přesný okamžik, kdy obchodní událost nastala. Zaznamenává se u každé aktivity procesu a určuje chronologické pořadí událostí v rámci případu. Čas události je nezbytný pro veškerou časovou analýzu, například pro výpočet doby mezi aktivitami, hledání úzkých míst, kde se čeká, a měření celkové doby trvání případu. Umožňuje analyzovat výkonnost a kontrolovat dodržování dohod o úrovni služeb (SLA). Proč je to důležité Toto časové razítko je nezbytné pro výpočet dob trvání, analýzu výkonnosti procesu, hledání úzkých míst a pochopení časového průběhu každého případu vratky. Kde data získat Získává se z různých polí data a času v tabulkách SAP. U událostí vytvoření jde často o pole ERDAT a ERZET (například ve VBAK). U událostí změn se používají UDATE a UTIME v tabulce CDHDR. Příklady 2023-04-15T10:22:05Z2023-04-16T14:01:30Z2023-04-18T09:15:00Z | |||
| ID případu vratky ReturnCaseId | Jedinečný identifikátor požadavku zákazníka na vrácení, který propojuje všechny související aktivity a doklady. | ||
| Popis ID případu vratky slouží jako primární klíč pro sledování celého procesu vrácení od zahájení až po uzavření. Každé ID odpovídá konkrétní vratce zákazníka a zahrnuje všechny související události, například vytvoření objednávky, dodání, kontrolu a zpracování dobropisu. Při analýze procesů je tento atribut základem pro sestavení procesní mapy. Umožňuje systému seskupit jednotlivé události do průběhů případů od začátku do konce a analyzovat varianty procesu, dobu zpracování i úzká místa u každé vratky. Proč je to důležité Jde o základní identifikátor případu, který propojuje všechny kroky vyřizování vratky a umožňuje analyzovat celý průběh procesu i jeho výkonnost. Kde data získat Obvykle jde o číslo vratkové objednávky z modulu Sales and Distribution (SD). Najdete ho v tabulce VBAK (data hlavičky prodejního dokladu), v poli VBELN. Kategorie dokladu (VBAK-VBTYP) má pro vratky hodnotu 'H'. Příklady 600001236000045660000789 | |||
| Název aktivity ActivityName | Název konkrétní obchodní události nebo kroku, který proběhl v procesu vrácení. | ||
| Popis Tento atribut popisuje jednu konkrétní akci nebo změnu stavu v průběhu vratky, například „Vratková objednávka vytvořena“, „Příjem zboží zaúčtován“ nebo „Dobropis vytvořen“. Tyto aktivity tvoří základní stavební prvky procesní mapy. Analýza pořadí a četnosti aktivit pomáhá odhalit nejčastější cesty procesem, odchylky a opakované zpracování. Je zásadní pro pochopení toho, co se v případu děje a v jakém pořadí, a tvoří základ veškeré analýzy process mining. Proč je to důležité Aktivity určují jednotlivé kroky procesu. Analýza jejich pořadí, délky a četnosti je základem process mining a ukazuje, jak práce skutečně probíhá. Kde data získat Odvozuje se ze změn stavů v tabulkách, jako jsou VBUK/VBUP, z událostí vytvoření dokladů (například v VBAK, LIKP, VBRK) nebo ze záznamů změn v tabulkách CDHDR/CDPOS. Příklady Vytvoření objednávky na vráceníZaúčtování příjmu zbožíVytvoření dobropisuPoložka vratkové objednávky dokončena | |||
| Poslední aktualizace dat LastDataUpdate | Časové razítko, které udává, kdy byla data pro tento proces naposledy aktualizována. | ||
| Popis Tento atribut zaznamenává datum a čas poslední extrakce nebo aktualizace dat. Ukazuje, jak aktuální jsou analyzovaná data. Při analýze je důležitý pro posouzení aktuálnosti získaných poznatků. Uživatelé vidí, jak čerstvá data jsou, což ovlivňuje relevanci zjištění, zejména při sledování probíhajícího provozu. Proč je to důležité Ukazuje aktuálnost dat, takže uživatelé vědí, jak současná je analýza procesu a kdy lze očekávat další aktualizaci. Kde data získat Jde o atribut metadat, do kterého se ukládá časové razítko spuštění úlohy extrakce dat. Příklady 2023-05-20T02:00:00Z2023-05-21T02:00:00Z | |||
| Zdrojový systém SourceSystem | Systém, ze kterého byla data extrahována. | ||
| Popis Tento atribut určuje původ dat, což je důležité v prostředí s více systémy. Poskytuje kontext a pomáhá zajistit dohledatelnost a integritu dat. Při analýze slouží k rozdělení nebo filtrování dat při spojování procesů z různých zdrojových systémů. Potvrzuje, že události pocházejí z očekávané aplikace, v tomto případě SAP ECC. Proč je to důležité Určuje původ dat, což je důležité pro správu dat i analýzy napříč podnikovými systémy. Kde data získat Jde o statickou hodnotu nastavenou při extrakci dat, která určuje konkrétní instanci SAP ECC (například 'ECC_PROD_100'). Příklady SAP_ECC_PRODSAPECC_FINANCE_200 | |||
| Číslo materiálu MaterialNumber | Jedinečný identifikátor vraceného produktu. | ||
| Popis Číslo materiálu neboli SKU označuje konkrétní položku, které se vratka týká. Díky tomu lze provádět podrobnou analýzu na úrovni produktů. Analýza vratek podle čísla materiálu pomáhá odhalit produkty s vysokou mírou vrácení, což může ukazovat na problémy s kvalitou, nepřesné popisy nebo výrobní vady. Tento atribut je důležitý pro dashboardy, jako je „Dopad vratek na zásoby“, i pro pochopení toho, jak různé produkty procházejí procesem vrácení. Proč je to důležité Určuje, které produkty se vracejí, a pomáhá odhalit možné problémy s kontrolou kvality nebo nepřesné popisy produktů. Kde data získat Najdete ho v tabulce položek prodejního dokladu VBAP, v poli MATNR. Příklady RM-1025FG-2050-BACC-5591 | |||
| Důvod vrácení ReturnReason | Kód důvodu, který zákazník uvedl při vrácení položky. | ||
| Popis Tento atribut uvádí důvod vrácení produktu pomocí předdefinovaných kódů v SAP. Příklady: „Poškozeno při přepravě“, „Odeslán nesprávný produkt“ nebo „Nesedí“. Jde o důležitý rozměr analýzy hlavních příčin. Filtrováním procesní mapy nebo KPI podle důvodu vrácení mohou analytici zjistit, zda některé důvody souvisejí s delší dobou zpracování, vyšší mírou neúspěšných kontrol nebo konkrétními odchylkami v procesu. Tato zjištění mohou vést ke zlepšení kvality produktů, logistiky nebo prodejních procesů. Proč je to důležité Ukazuje, proč zákazníci zboží vracejí. Analýza hlavních příčin pomáhá snížit počet vratek řešením problémů s kvalitou produktů, dopravou nebo popisem zboží. Kde data získat Najdete ho v tabulce položek prodejního dokladu VBAP, v poli ABGRU (důvod zamítnutí prodejního dokladu). Příklady 001 - Poškozený produkt002 - Nesprávný produkt005 - Dorazilo příliš pozdě | |||
| Kanál vrácení ReturnChannel | Kanál, kterým bylo vrácení zahájeno, například online, na prodejně nebo přes call centrum. | ||
| Popis Tento atribut určuje, odkud požadavek na vrácení přišel nebo jakým způsobem byl přijat. Rozlišuje například požadavky z webového portálu, kamenné prodejny nebo od pracovníka zákaznického servisu. Rozdělení procesu podle kanálu vrácení je důležité pro pochopení rozdílů v provozu a rozdělení zdrojů. Kontrola vratek na prodejně může být například rychlejší, ale může vyžadovat jiné doklady než vrácení zboží objednaného online. Jde o důležitý rozměr dashboardu „Trendy průchodnosti procesu vrácení“. Proč je to důležité Rozlišuje, jakým způsobem se vrácení zahajuje. Jednotlivé kanály často ovlivňují průběh procesu, potřebné zdroje i dobu zpracování. Kde data získat V SAP ECC často nejde o standardní pole. Údaj může být nutné získat z vlastního pole (například ve VBAK) nebo odvodit z jiných dat, jako jsou prodejní organizace (VKORG) či distribuční kanál (VTWEG). Konkrétní implementaci ověřte v dokumentaci SAP ECC. Příklady Online portálProdejnaCall centrum | |||
| Požadovaná částka refundace RequestedRefundAmount | Očekávaná výše refundace, obvykle podle čisté hodnoty vracené položky nebo položek. | ||
| Popis Tento atribut představuje původní peněžní hodnotu vratky zaznamenanou ve vratkové objednávce. Slouží jako základ pro finanční analýzu a odsouhlasení. Tato částka se porovnává se „Skutečnou částkou refundace“, aby bylo možné sledovat rozdíly. Jde o důležitou metriku dashboardu „Sledování rozdílů v částkách refundací“. Analýza pomáhá sledovat finanční dopad vratek a odhalit možné problémy s cenami nebo výpočtem dobropisu. Proč je to důležité Stanovuje počáteční finanční hodnotu vratky, která je důležitá pro sledování finančních rozdílů a pochopení celkové hodnoty vráceného zboží. Kde data získat Obvykle jde o čistou hodnotu na úrovni položky vratkové objednávky. Najdete ji v tabulce VBAP, v poli NETWR. Příklady 150.0049.991250.75 | |||
| Skutečná částka refundace ActualRefundAmount | Konečná částka připsaná zákazníkovi podle zaúčtovaných finančních dokladů. | ||
| Popis Tento atribut představuje konečnou potvrzenou částku refundace, která byla zpracována a zaúčtována v účetním systému. Může se lišit od požadované částky například kvůli poplatkům za naskladnění, úpravám podle stavu zboží nebo uplatnění jiných pravidel. Jde o důležitý atribut dashboardu „Sledování rozdílů v částkách refundací“. Porovnání se požadovanou částkou pomáhá odhalit systémové problémy ve výpočtu a schvalování refundací a zajistit správnost finančních údajů. Proč je to důležité Představuje konečný finanční výsledek vratky. Porovnání s požadovanou částkou pomáhá ověřit správnost a odhalit finanční ztráty. Kde data získat Získává se z finančního dokladu souvisejícího s dobropisem. Obvykle jde o tabulku BSEG (položky účetního dokladu), pole WRBTR (částka v měně dokladu) pro příslušné zaúčtování na účet hlavní knihy. Příklady 150.0045.001200.75 | |||
| Zpracovávající uživatel ProcessingAgent | ID uživatele, který provedl danou aktivitu. | ||
| Popis Tento atribut zachycuje uživatelské jméno osoby odpovědné za konkrétní krok procesu, například vytvoření vratkové objednávky nebo zaúčtování příjmu zboží. Často se označuje jako uživatel „Změnil“ nebo „Vytvořil“. Analýza podle zpracovávajícího uživatele je důležitá pro řízení výkonnosti a analýzu zdrojů. Pomáhá určit nejvýkonnější pracovníky, uživatele, kteří mohou potřebovat další školení, i rozložení pracovní zátěže v týmu. Používá se v dashboardech, jako je „Výkonnost pracovníků při zpracování vratek“, kde lze porovnávat dobu zpracování a průchodnost. Proč je to důležité Sleduje zapojení uživatelů a umožňuje analyzovat výkonnost týmu, rozložení pracovní zátěže i potřebu školení a sdílení osvědčených postupů. Kde data získat Obvykle se nachází v polích ERNAM (vytvořil) nebo AENAM (změnil) v tabulkách hlaviček, jako jsou VBAK, LIKP a VBRK. U událostí změn jde o pole USERNAME v CDHDR. Příklady CBURNSDSCRANTONJHALPERT | |||
| Cílové datum refundace podle SLA RefundSLATargetDate | Datum, do kterého má být refundace zpracována podle dohod o úrovni služeb. | ||
| Popis Tento atribut určuje termín dokončení refundace pro konkrétní případ vratky. Obvykle se vypočítává podle obchodních pravidel, například „do 5 pracovních dnů od příjmu zboží“. Toto cílové datum slouží jako měřítko skutečné výkonnosti. Je základem dashboardu „Dodržování SLA při zpracování refundací“, který umožňuje sledovat plnění závazků vůči zákazníkům a odhalit případy, u nichž hrozí nedodržení SLA. Proč je to důležité Stanovuje cílovou dobu zpracování refundací. Organizace tak může měřit a vykazovat dodržování SLA a upřednostnit případy po termínu. Kde data získat Obvykle nejde o standardní pole SAP, proto je nutné hodnotu odvodit podle obchodních pravidel. Lze ji vypočítat z důležitého data, například data příjmu zboží z MKPF, a nastavené doby. Podrobnosti ověřte v dokumentaci SAP ECC nebo v obchodních požadavcích. Příklady 2023-04-25T23:59:59Z2023-04-28T23:59:59Z2023-05-02T23:59:59Z | |||
| Číslo dobropisu CreditMemoNumber | Jedinečný identifikátor dobropisu vystaveného pro refundaci. | ||
| Popis Dobropis je oficiální fakturační doklad v SAP, který stanovuje refundaci vyplácenou zákazníkovi. Toto číslo jednoznačně identifikuje daný finanční doklad. Tento atribut je důležitý pro finanční odsouhlasení a sledování procesu od provozního zpracování vratky až po finanční vyrovnání. Představuje důležitý milník procesu a slouží k vyhledání souvisejících účetních dokladů pro atributy, jako je „Skutečná částka refundace“. Proč je to důležité Přímo odkazuje na finanční doklad, který schvaluje refundaci zákazníkovi. Je důležitý pro finanční audit a odsouhlasení. Kde data získat Dobropis je fakturační doklad. Jeho číslo najdete v tabulce VBRK (fakturační doklad: data hlavičky), v poli VBELN. Propojení zjistíte z toku dokladů vratkové objednávky. Příklady 900011229000334490005566 | |||
| Dodržení SLA IsSLACompliant | Příznak, který udává, zda byla refundace zpracována v dohodnuté lhůtě SLA. | ||
| Popis Jde o vypočítávaný booleovský atribut, který porovnává skutečné datum aktivity „Refundace zpracována“ s „Cílovým datem refundace podle SLA“. Nabývá hodnoty true, pokud byla refundace dokončena včas, a false v opačném případě. Tento atribut zjednodušuje analýzu a vykazování, protože pro každý případ poskytuje jasný výsledek dodržení SLA. Používá se k výpočtu celkové míry dodržování SLA při zpracování refundací a umožňuje snadno filtrovat případy, u kterých SLA dodrženo nebylo. Proč je to důležité Poskytuje jasný binární ukazatel plnění SLA pro každý případ a zjednodušuje jeho sledování i vykazování. Kde data získat Jde o vypočítávaný atribut. Logika: čas události „Refundace zpracována“ <= RefundSLATargetDate. Příklady truefalse | |||
| Dodržování pravidel pro vrácení ReturnPolicyAdherence | Příznak, který udává, zda vratka splňuje všechna stanovená obchodní pravidla a zásady. | ||
| Popis Tento vypočítávaný booleovský atribut udává, zda případ vratky proběhl podle standardních pravidel společnosti. Logika může ověřovat několik podmínek, například zda bylo vrácení zahájeno v povolené lhůtě, zda je kód důvodu platný pro daný produkt nebo zda byla u výjimky získána souhlasná autorizace vedoucího. Tento atribut využívá dashboard „Dodržování pravidel pro schvalování vratek“. Umožňuje přímo měřit míru dodržování pravidel a zjistit, která pravidla se nejčastěji obcházejí. Na základě toho lze cíleně zlepšovat proces nebo školit zaměstnance. Proč je to důležité Měří dodržování obchodních pravidel, pomáhá zajistit jejich jednotné uplatňování a odhalit případy vyžadující zvláštní kontrolu nebo schválení. Kde data získat Jde o odvozený atribut založený na souboru obchodních pravidel. Příklad: (Return Initiation Date - Original Purchase Date) <= 30 days AND ReturnReason IS NOT NULL. Příklady truefalse | |||
| ID zákazníka CustomerId | Jedinečný identifikátor zákazníka, který zahájil vrácení. | ||
| Popis Tento atribut označuje konkrétního zákazníka, který produkt vrací, v terminologii SAP „Sold-to Party“. Propojuje vratku s kmenovými daty zákazníka. Analýza podle ID zákazníka pomáhá odhalit zákazníky, kteří často vracejí zboží, což může signalizovat nespokojenost nebo možné zneužívání pravidel pro vrácení. V kombinaci s údaji o segmentech zákazníků lze také zjistit, zda se různé skupiny zákazníků liší v chování při vracení zboží nebo ve zkušenosti s procesem. Proč je to důležité Propojuje vratky s konkrétními zákazníky a umožňuje analyzovat jejich chování, odhalit opakované vratky a posoudit dopad na vztahy se zákazníky. Kde data získat Najdete ho v tabulce hlavičky prodejního dokladu VBAK, v poli KUNNR (Sold-to party). Příklady CUST-100432CUST-203991CUST-831102 | |||
| Kód společnosti CompanyCode | Právní subjekt nebo společnost odpovědná za transakci. | ||
| Popis Kód společnosti představuje v SAP samostatnou účetní jednotku. Všechny finanční transakce, včetně vratek a refundací, se účtují pod konkrétním kódem společnosti. Tento atribut je důležitý pro finanční výkaznictví a rozdělení procesu v nadnárodních organizacích nebo společnostech s více právními subjekty. Analýza podle kódu společnosti umožňuje porovnat výkonnost procesu vrácení mezi jednotlivými právními subjekty. Proč je to důležité Umožňuje filtrovat a porovnávat procesy vrácení mezi různými právními subjekty v organizaci, což je důležité pro finanční analýzu. Kde data získat Najdete ho v tabulce hlavičky prodejního dokladu VBAK, v poli BUKRS_VF (kód společnosti pro fakturaci). Příklady 10002000US01 | |||
| Původní prodejní doklad OriginalSalesDocument | Číslo původní prodejní objednávky, ke které se vratka vztahuje. | ||
| Popis Tento atribut přímo odkazuje na původní nákup zákazníka. Jde o referenční doklad, který propojuje vratku s údaji o původní transakci. Toto propojení je velmi užitečné pro podrobnější analýzu. Analytici mohou zkoumat, proč se vrací zboží z určitých objednávek, ověřit původní ceny a podmínky a sledovat celý průběh od objednávky zákazníka až po vrácení. Lze tak například zjistit, zda se častěji vracejí produkty prodávané v rámci konkrétních kampaní nebo kanálů. Proč je to důležité Propojuje vratku s původním prodejem a umožňuje sledovat celou zákaznickou transakci i podrobněji analyzovat její příčiny. Kde data získat Tento odkaz je uložen na úrovni položky vratkové objednávky. Najdete ho v tabulce VBAP, v poli VGBEL (číslo referenčního dokladu). Příklady 100034561000987110012345 | |||
| Rozdíl v částce refundace RefundAmountDiscrepancy | Vypočítaný rozdíl mezi skutečnou a požadovanou částkou refundace. | ||
| Popis Tato vypočítaná metrika vyjadřuje peněžní rozdíl mezi částkou původně požadovanou ve vratkové objednávce a částkou nakonec vystavenou v dobropisu. Kladná hodnota může znamenat částečnou refundaci. Záporná hodnota je neobvyklá, ale může ukazovat na přeplatek. Tento atribut je hlavní metrikou dashboardu „Sledování rozdílů v částkách refundací“. Pomáhá rychle najít a analyzovat případy s finančními odchylkami, které mohou souviset s posouzením stavu položky, poplatky za naskladnění nebo chybami. Sledování těchto rozdílů podporuje finanční kontrolu a dodržování pravidel. Proč je to důležité Přímo měří finanční odchylky v procesu refundace a pomáhá odhalit nedodržování pravidel, chyby při zpracování nebo finanční ztráty. Kde data získat Vypočítané pole: ActualRefundAmount - RequestedRefundAmount. Příklady 0.00-4.99-50.00 | |||
| Stav vratkové objednávky ReturnOrderStatus | Celkový stav zpracování případu vratkové objednávky. | ||
| Popis Tento atribut poskytuje přehled o aktuálním stavu případu vratky, například „Otevřený“, „Probíhá“ nebo „Dokončený“. Odvozuje se z kombinace stavů na úrovni hlavičky nebo položek prodejního dokladu. Při analýze se hodí k filtrování otevřených nebo dokončených vratek. Pomáhá sledovat celkovou pracovní zátěž a průběh otevřených případů a poskytuje souhrnný výsledek každého případu vratky. Proč je to důležité Poskytuje přehled o tom, v jaké fázi se případ nachází, a umožňuje filtrovat a analyzovat otevřené, rozpracované nebo uzavřené vratky. Kde data získat Odvozuje se z polí stavu v tabulkách VBUK (stav hlavičky) a VBUP (stav položky). Například VBUK-GBSTK představuje celkový stav zpracování dokladu. Příklady OtevřenýProbíháDokončený | |||
| Závod Plant | Fyzické místo nebo provozovna, kde se vrácená položka přijímá a zpracovává. | ||
| Popis Závod v SAP označuje fyzické místo, například sklad nebo distribuční centrum, kde se manipuluje se zbožím. U vratek jde obvykle o místo, kde je položka přijata a zkontrolována. Analýza procesu podle závodu pomáhá odhalit rozdíly ve výkonnosti jednotlivých provozoven. Může ukázat, které sklady kontrolují položky efektivněji nebo dosahují vyšší průchodnosti. Tato data využívá dashboard „Průchodnost a efektivita kontroly položek“. Proč je to důležité Určuje fyzické místo, kde se vratka zpracovává, a umožňuje porovnat výkonnost různých skladů nebo distribučních center. Kde data získat Najdete ho na úrovni položky vratkové objednávky v tabulce VBAP, v poli WERKS. Příklady PL01WH02DC05 | |||
Aktivity při zpracování vrácení zboží a refundací
| Aktivita | Popis | ||
|---|---|---|---|
| Dobropis zaúčtován do FI | Dobropis se předá do finančního účetnictví a stane se oficiální položkou pohledávek. Tím se spustí samotný proces vrácení peněz zákazníkovi. | ||
| Proč je to důležité Tato aktivita označuje okamžik, kdy společnost finančně uzná refundaci. Zpoždění mezi vytvořením a zaúčtováním dobropisu může prodloužit dobu, než zákazník peníze skutečně obdrží. Kde data získat Jde o odvozenou událost, která se zaznamená při změně stavu zaúčtování v hlavičce fakturačního dokladu (VBRK-RFBSK) na hodnotu 'C' (zaúčtovací doklad byl vytvořen). Skutečné datum vytvoření účetního dokladu je v tabulce BKPF. Zachycení Určete časové razítko, kdy se VBRK-RFBSK nastaví na 'C', nebo použijte datum vytvoření (CPUDT) propojeného účetního dokladu BKPF. Typ události inferred | |||
| Rozhodnutí o použití | Po kontrole vydá technik kvality nebo inspektor formální rozhodnutí o stavu vráceného zboží. Toto rozhodnutí určuje další postup, například návrat do zásob, likvidaci nebo opravu. | ||
| Proč je to důležité Tato činnost je důležitá pro pochopení efektivity kontroly a jejích výsledků. Rozhodnutí přímo ovlivňuje částku refundace i správu zásob. Kde data získat Pokud používáte SAP QM, jde o explicitní událost zaznamenanou v tabulce QAVE (rozhodnutí o použití při zpracování kontroly). Čas rozhodnutí je uložen v poli QAVE-VDATUM. Vazbu na dodávku najdete v tabulce QALS. Zachycení Použijte datum rozhodnutí o použití (VDATUM) z tabulky QAVE, propojené prostřednictvím čísla kontrolní dávky (QALS-PRUEFLOS). Typ události explicit | |||
| Vratková objednávka dokončena | Tato aktivita označuje konec procesu vrácení z pohledu prodeje a distribuce. Nastane, když jsou všechny položky vratkové objednávky plně zpracovány a uzavřeny. | ||
| Proč je to důležité Jde o hlavní koncovou událost procesu. Doba od aktivity „Vratková objednávka vytvořena“ do této aktivity představuje celkovou dobu zpracování vratky. Kde data získat Jde o odvozenou událost ze stavových tabulek. Zaznamená se, když se celkový stav hlavičky prodejního dokladu (VBUK-GBSTK) změní na 'C' (zcela zpracováno). Zachycení Určete časové razítko záznamů změn (CDHDR/CDPOS), kdy se pole stavu hlavičky VBUK-GBSTK změní na 'C'. Typ události inferred | |||
| Vytvoření dobropisu | Vygeneruje se fakturační doklad (dobropis), který schvaluje finanční dobropis zákazníkovi. Jde o oficiální finanční doklad, který stanovuje výši refundace. | ||
| Proč je to důležité Jde o významný finanční milník procesu. Analýza doby potřebné k vytvoření dobropisu pomáhá odhalit zpoždění při zpracování finančních dokladů po příjmu a kontrole zboží. Kde data získat Jde o explicitní událost zaznamenanou v tabulce VBRK (hlavička fakturačního dokladu). Datum vytvoření je uloženo v poli VBRK-ERDAT. Dobropis je v toku dokladů propojen s vratkovou objednávkou nebo požadavkem na dobropis. Zachycení Použijte časové razítko vytvoření (ERDAT) z tabulky VBRK pro příslušný fakturační doklad. Typ události explicit | |||
| Vytvoření objednávky na vrácení | Tato činnost označuje začátek procesu vrácení, kdy zákazník požádá o vrácení produktu. Zaznamená se při vytvoření nového prodejního dokladu typu „Vrácení“ (například RE) v SAP ECC. | ||
| Proč je to důležité Jde o hlavní počáteční událost procesu vrácení. Analýza doby od této činnosti k dalším krokům pomáhá měřit celkovou dobu procesu a odhalit počáteční prodlevy při zpracování. Kde data získat Jde o explicitní událost zaznamenanou v tabulce VBAK (hlavička prodejního dokladu). Časové údaje o vytvoření jsou u příslušného čísla prodejního dokladu (VBAK-VBELN) uloženy v polích VBAK-ERDAT a VBAK-ERZET. Typ objednávky VBAK-AUART má hodnotu „RE“. Zachycení Použijte časové údaje o vytvoření (ERDAT, ERZET) z tabulky VBAK pro prodejní doklad typu „RE“. Typ události explicit | |||
| Zaúčtování příjmu zboží | K této činnosti dojde, když je vrácené zboží fyzicky přijato ve skladu nebo zpracovatelském centru. Zaznamená se zaúčtováním dokladu o pohybu zboží k dodávce pro vrácení. | ||
| Proč je to důležité Důležitý milník, který potvrzuje, že firma převzala vrácené zboží. Je výchozím bodem fyzické kontroly a ovlivňuje přesnost evidence zásob. Kde data získat Tuto událost lze odvodit ze stavu pohybu zboží u položky dodávky pro vrácení v tabulce VBUP (například WBSTA = „C“). Přesný časový údaj je v hlavičce materiálového dokladu (MKPF-BUDAT) pro příslušný příjem zboží. Zachycení V tabulce MKPF najděte datum zaúčtování (BUDAT) materiálového dokladu propojeného s dodávkou pro vrácení. Typ události inferred | |||
| Dobropis vyrovnán | Otevřená položka dobropisu v pohledávkách se vyrovná, obvykle odchozí platbou zákazníkovi. Tato událost označuje konečné finanční uzavření refundace. | ||
| Proč je to důležité Tato aktivita potvrzuje odchozí platbu a dokončuje finanční část procesu. Z pohledu zákazníka jde o skutečný konec vyřizování refundace. Kde data získat Jde o explicitní událost z modulu FI. Datum vyrovnání účetního dokladu je pro příslušnou zákaznickou položku uloženo v tabulce BSEG (BSEG-AUGDT). Zachycení Použijte datum vyrovnání (AUGDT) z tabulky BSEG nebo BSAD pro účetní doklad propojený s dobropisem. Typ události explicit | |||
| Odstranění blokace objednávky na vrácení | Označuje schválení žádosti o vrácení, které umožní pokračovat do další fáze. Obvykle se zaznamená při změně stavu dokladu nebo odstranění blokace dodávky či fakturace. | ||
| Proč je to důležité Tato činnost představuje důležitý milník schvalování. Měření doby do jejího dosažení pomáhá odhalit úzká místa při autorizaci a schvalování vrácení. Kde data získat Jde o odvozenou událost zjištěnou ze záznamů změn prodejního dokladu. Změny polí blokace v tabulkách VBAK nebo VBAP, případně polí stavu v tabulkách VBUK/VBUP, ověřte v tabulkách CDHDR a CDPOS. Zachycení V tabulkách změnových dokladů (CDHDR/CDPOS) zjistěte časový údaj, kdy byla odstraněna příslušná blokace. Typ události inferred | |||
| Položka vratkové objednávky dokončena | Jednotlivá položka vratkové objednávky je označena jako plně zpracovaná. Obvykle k tomu dojde po dokončení všech navazujících logistických a finančních dokladů pro danou položku. | ||
| Proč je to důležité Sledování na úrovni položek pomáhá zjistit, u kterých produktů nebo důvodů vrácení dochází k nejdelším prodlevám. Poskytuje podrobnější přehled o dokončení procesu. Kde data získat Jde o odvozenou událost ze stavových tabulek. Zaznamená se, když se celkový stav položky prodejního dokladu (VBUP-GBSTK) změní na 'C' (zcela zpracováno). Zachycení Určete časové razítko záznamů změn (CDHDR/CDPOS), kdy se pole stavu položky VBUP-GBSTK změní na 'C'. Typ události inferred | |||
| Položka vratkové objednávky zamítnuta | Konkrétní položka vratkové objednávky je zamítnuta, ať už při úvodním posouzení, nebo po kontrole. Pro tuto položku se pak neprovádějí žádné další kroky, například refundace. | ||
| Proč je to důležité Analýza zamítnutí pomáhá odhalit neoprávněné požadavky na vrácení a může přispět k lepší komunikaci pravidel se zákazníky. Jde o důležitou větev procesu, která nevede k refundaci. Kde data získat Jde o odvozenou událost. Obvykle se zaznamená, když je pro položku v tabulce VBAP vyplněn jedinečný kód „Důvod zamítnutí“ (VBAP-ABGRU). Časové razítko je nutné získat ze záznamů změn. Zachycení Určete časové razítko ze záznamů změn (CDHDR/CDPOS), kdy se pro položku vratky vyplní pole VBAP-ABGRU. Typ události inferred | |||
| Vytvoření dodávky pro vrácení | Vytvoří se dodací doklad pro evidenci fyzického převzetí vráceného zboží. Tato událost označuje zahájení logistického procesu vrácení. | ||
| Proč je to důležité Zachycuje přechod od administrativního zpracování k fyzické logistice. Prodlevy v této fázi mohou ovlivnit plánování skladu i celkovou dobu procesu vrácení. Kde data získat Jde o explicitní událost zaznamenanou v tabulce LIKP (hlavička dodávky). Časový údaj o vytvoření je v poli LIKP-ERDAT. Vazbu na zdrojovou objednávku na vrácení najdete v tabulce LIPS (LIPS-VGBEL). Zachycení Použijte časový údaj o vytvoření (ERDAT) z tabulky LIKP pro dodávku přiřazenou k objednávce na vrácení. Typ události explicit | |||
| Vytvoření žádosti o dobropis | Žádost o dobropis se vytvoří jako formální doklad potřeby refundace. V mnoha konfiguracích slouží jako žádost o dobropis přímo objednávka na vrácení. | ||
| Proč je to důležité Jde o formální začátek finančního vypořádání v procesu vrácení. Tato událost spouští následná finanční schválení a vytváření dokladů. Kde data získat Může jít o explicitní událost v tabulce VBAK pro prodejní doklad typu „Žádost o dobropis“ (například CR). Pokud je typ objednávky nastaven na fakturaci podle objednávky, může jít o stejnou událost jako „Vytvoření objednávky na vrácení“. Zachycení Použijte časový údaj o vytvoření (ERDAT) z tabulky VBAK pro typ dokladu „CR“, případně znovu použijte událost vytvoření objednávky na vrácení. Typ události explicit | |||
Návody k extrakci
Kroky
- Vytvořte program ABAP: Pomocí transakčního kódu
SE38vytvořte nový spustitelný program ABAP, napříkladZ_PM_RETURN_EXTRACTION. Zadejte výstižný název a uložte program jako lokální objekt nebo do vývojového balíčku. - Definujte výběrovou obrazovku: V programu vytvořte výběrovou obrazovku, na které budou uživatelé filtrovat data. Mezi hlavní filtry patří období vytvoření objednávek na vrácení (
S_ERDAT), typ prodejního dokladu pro vrácení (S_AUART, například 'RE') a kód společnosti (P_BUKRS). - Definujte datové struktury: Vytvořte lokální typ struktury odpovídající požadovanému formátu záznamu událostí. Struktura má obsahovat pole
ReturnCaseId,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProcessingAgent,ReturnReasona další požadované atributy. - Naprogramujte výběr dat: Napište hlavní logiku ABAP pro výběr dat pro všech 12 požadovaných aktivit. Budete dotazovat různé tabulky SAP, například VBAK, VBAP, LIKP, VBRK, BKPF, CDHDR a CDPOS. Pomocí tabulky toku dokladů (VBFA) propojte související doklady, například dodávky a dobropisy, s původní objednávkou na vrácení.
- Extrahujte událost „Vytvoření objednávky na vrácení“: Vyberte záznamy z tabulek
VBAKaVBAPpodle kritérií na výběrové obrazovce. Číslo prodejního dokladu (VBAK-VBELN) použijte jakoReturnCaseId. - Extrahujte změny stavu a důležité události: U aktivit, jako je „Odebrání blokace objednávky na vrácení“ nebo „Zamítnutí položky objednávky na vrácení“, dotazujte tabulky změnových dokladů (
CDHDR,CDPOS) nebo pole stavu v tabulkách, napříkladVBAP(ABGRU). U navazujících logistických a finančních aktivit vybírejte data z tabulek jakoLIKP,MKPF,VBRKaBKPF. PomocíVBFAověřte jejich vazbu na původní objednávky na vrácení. - Naplňte tabulku záznamu událostí: Pro každou nalezenou aktivitu vytvořte nový záznam v interní tabulce definované podle struktury záznamu událostí. Namapujte data ze zdrojových tabulek SAP do odpovídajících polí. Například namapujte
VBAK-ERNAMnaProcessingAgentaVBAK-ERDATspolu sVBAK-ERZETnaEventTime. - Spojte data aktivit: Zajistěte, aby každý příkaz SELECT pro danou aktivitu připojil výsledky do jedné hlavní interní tabulky. Vznikne tak výsledný plochý soubor, v němž každý řádek představuje jednu událost.
- Zpracujte časová razítka a informace o systému: Pro vyplnění časového razítka
LastDataUpdatev každém řádku použijte systémová poleSY-DATUMaSY-UZEIT. PoleSourceSystemnaplňte hodnotouSY-SYSID. - Přidejte výstupní funkci: Přidejte možnost zobrazit výsledky v mřížce ALV (SAP List Viewer) pro online analýzu, například pomocí funkčních modulů
REUSE_ALV_GRID_DISPLAY. Umožněte také stáhnout výslednou interní tabulku do počítače uživatele jako soubor CSV nebo prostý textový soubor. - Spusťte program a exportujte data: Spusťte program přes
SE38. Zadejte požadovaná kritéria výběru a program spusťte. Po zobrazení nebo zpracování dat použijte funkci exportu a uložte soubor záznamu událostí. Uložte jej ve formátu kompatibilním s ProcessMind, obvykle jako CSV se záhlavím.
Konfigurace
- Rozsah dat: Na výběrové obrazovce zadejte období pro datum vytvoření objednávky na vrácení. Pro první analýzu doporučujeme 3 až 6 měsíců, abyste vyvážili objem dat a přínos analýzy.
- Typ dokladu pro vrácení: Filtrujte podle konkrétního typu prodejního dokladu používaného ve vašem systému pro vrácení, například 'RE' pro vrácení nebo 'CR' pro žádost o dobropis. Tento filtr je důležitý pro výběr správného procesu. Hodnoty zadejte do výběrového pole
S_AUART. - Kód společnosti: Zadejte příslušný kód společnosti (
P_BUKRS), abyste omezili data na konkrétní právní subjekt. To je důležité zejména v prostředí s více společnostmi. - Předpoklady: Uživatel spouštějící program potřebuje oprávnění k transakci
SE38(spuštění programu) a přístup k příslušným tabulkám SD, MM a FI (například VBAK, LIKP, VBRK, BKPF, CDHDR). Vývoj vyžaduje roli vývojáře ABAP. - Výkon: Při zpracování velmi rozsáhlých datových sad pokrývajících několik let může program běžet dlouho. Zvažte jeho spuštění jako úlohy na pozadí (
SM36) a uložení výstupu do souborového systému aplikačního serveru namísto online zobrazení.
Ukázkový dotaz abap
REPORT Z_PM_RETURN_EXTRACTION.
" =======================================================================
" DATA DECLARATIONS
" =======================================================================
TYPES: BEGIN OF ty_event_log,
returncaseid TYPE vbeln_va,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE sysysid,
lastdataupdate TYPE timestamp,
processingagent TYPE ernam,
returnreason TYPE augru,
materialnumber TYPE matnr,
returnchannel TYPE string, " Placeholder, needs custom logic
requestedrefundamount TYPE netwr,
actualrefundamount TYPE netwr,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log.
DATA: lv_timestamp TYPE timestamp,
lv_last_update TYPE timestamp.
" =======================================================================
" SELECTION SCREEN
" =======================================================================
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_auart FOR vbak-auart.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
" =======================================================================
" MAIN LOGIC
" =======================================================================
START-OF-SELECTION.
" Set static values for the extraction run
GET TIME STAMP FIELD lv_last_update.
" 1. Return Order Created & 6. Credit Memo Request Created
" Note: In many SAP standard processes, the Return Order itself acts as the Credit Memo Request.
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~augru, i~matnr, i~netwr
INTO TABLE @DATA(lt_return_orders)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~auart IN @s_auart
AND h~bukrs_vf = @p_bukrs.
LOOP AT lt_return_orders INTO DATA(ls_return_order).
" Activity: Return Order Created
ls_event_log-returncaseid = ls_return_order-vbeln.
ls_event_log-activityname = 'Return Order Created'.
CONVERT DATE ls_return_order-erdat TIME ls_return_order-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_return_order-ernam.
ls_event_log-returnreason = ls_return_order-augru.
ls_event_log-materialnumber = ls_return_order-matnr.
ls_event_log-requestedrefundamount = ls_return_order-netwr.
APPEND ls_event_log TO lt_event_log.
" Activity: Credit Memo Request Created
ls_event_log-activityname = 'Credit Memo Request Created'.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
IF lt_return_orders IS NOT INITIAL.
" 2. Return Order Block Removed (Example for Delivery Block)
SELECT objectid, udate, utime, username
FROM cdhdr
INTO TABLE @DATA(lt_block_changes)
FOR ALL ENTRIES IN @lt_return_orders
WHERE objectclas = 'VERKBELEG'
AND objectid = @lt_return_orders-vbeln
AND tcode = 'VA02'.
IF sy-subrc = 0.
SELECT objectid, fname, value_new
INTO TABLE @DATA(lt_cdpos_block)
FROM cdpos
FOR ALL ENTRIES IN @lt_block_changes
WHERE objectclas = @lt_block_changes-objectclas
AND objectid = @lt_block_changes-objectid
AND changenr = @lt_block_changes-changenr
AND tabname = 'VBAK'
AND fname = 'LIFSK' " Delivery Block field
AND value_new = ''.
LOOP AT lt_cdpos_block INTO DATA(ls_cdpos_block).
READ TABLE lt_block_changes INTO DATA(ls_block_change) WITH KEY objectid = ls_cdpos_block-objectid.
IF sy-subrc = 0.
ls_event_log-returncaseid = ls_cdpos_block-objectid.
ls_event_log-activityname = 'Return Order Block Removed'.
CONVERT DATE ls_block_change-udate TIME ls_block_change-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_block_change-username.
CLEAR: ls_event_log-returnreason, ls_event_log-materialnumber, ls_event_log-requestedrefundamount, ls_event_log-actualrefundamount.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDIF.
" Get subsequent documents from flow
SELECT vbelv, vbtyp_n, vbeln, rfbsk
INTO TABLE @DATA(lt_doc_flow)
FROM vbfa
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbelv = @lt_return_orders-vbeln
AND vbtyp_n IN ('J', 'R', 'M'). " J=Delivery, R=Goods Mvmt, M=Invoice
" 3. Return Delivery Created
SELECT vbeln, erdat, erzet, ernam FROM likp
INTO TABLE @DATA(lt_deliveries)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'J'.
LOOP AT lt_deliveries INTO DATA(ls_delivery).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_del) WITH KEY vbeln = ls_delivery-vbeln.
ls_event_log-returncaseid = ls_doc_flow_del-vbelv.
ls_event_log-activityname = 'Return Delivery Created'.
CONVERT DATE ls_delivery-erdat TIME ls_delivery-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_delivery-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 4. Goods Receipt Posted
SELECT mblnr, mjahr, budat, cputm, usnam FROM mkpf
INTO TABLE @DATA(lt_goods_receipt)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE xblnr = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'R'.
LOOP AT lt_goods_receipt INTO DATA(ls_goods_receipt).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_gr) WITH KEY vbeln = ls_goods_receipt-mblnr.
ls_event_log-returncaseid = ls_doc_flow_gr-vbelv.
ls_event_log-activityname = 'Goods Receipt Posted'.
CONVERT DATE ls_goods_receipt-budat TIME ls_goods_receipt-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_goods_receipt-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 5. Usage Decision Made (Requires QM Module implementation)
SELECT q~prueflos, q~vdatu, q~vzeit, q~vname
FROM qals AS q
INNER JOIN qave AS v ON q~prueflos = v~prueflos
INTO TABLE @DATA(lt_usage_decisions)
FOR ALL ENTRIES IN @lt_deliveries
WHERE q~kdauf = @lt_deliveries-vbeln.
LOOP AT lt_usage_decisions INTO DATA(ls_ud).
SELECT SINGLE vbelv FROM vbfa INTO @DATA(lv_vbelv_ud) WHERE vbeln = @ls_ud-prueflos.
ls_event_log-returncaseid = lv_vbelv_ud.
ls_event_log-activityname = 'Usage Decision Made'.
CONVERT DATE ls_ud-vdatu TIME ls_ud-vzeit INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_ud-vname.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 7. Credit Memo Created
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, i~netwr, i~vgbel
INTO TABLE @DATA(lt_cred_memos)
FROM vbrk AS h
INNER JOIN vbrp AS i ON h~vbeln = i~vbeln
FOR ALL ENTRIES IN @lt_doc_flow
WHERE h~vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'M'.
LOOP AT lt_cred_memos INTO DATA(ls_cred_memo).
ls_event_log-returncaseid = ls_cred_memo-vgbel.
ls_event_log-activityname = 'Credit Memo Created'.
CONVERT DATE ls_cred_memo-erdat TIME ls_cred_memo-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_cred_memo-ernam.
ls_event_log-actualrefundamount = ls_cred_memo-netwr.
APPEND ls_event_log TO lt_event_log.
" 8. Credit Memo Posted To FI
SELECT SINGLE budat, cputime, usnam FROM bkpf
INTO @DATA(ls_bkpf_post)
WHERE awkey = @ls_cred_memo-vbeln AND awtyp = 'VBRK'.
IF sy-subrc = 0.
ls_event_log-activityname = 'Credit Memo Posted To FI'.
CONVERT DATE ls_bkpf_post-budat TIME ls_bkpf_post-cputime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-processingagent = ls_bkpf_post-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 12. Credit Memo Cleared
SELECT SINGLE augdt FROM bseg
INTO @DATA(lv_augdt)
WHERE bukrs = @p_bukrs
AND belnr = @ls_cred_memo-vbeln
AND augdt IS NOT NULL.
IF sy-subrc = 0 AND lv_augdt IS NOT INITIAL.
ls_event_log-activityname = 'Credit Memo Cleared'.
CONVERT DATE lv_augdt INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
CLEAR: ls_event_log-processingagent.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 9. Return Order Item Completed
SELECT vbeln, erdat, erzet, ernam, abgru FROM vbap
INTO TABLE @DATA(lt_items_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_items_completed INTO DATA(ls_item_completed).
ls_event_log-returncaseid = ls_item_completed-vbeln.
ls_event_log-activityname = 'Return Order Item Completed'.
CONVERT DATE ls_item_completed-erdat TIME ls_item_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 10. Return Order Completed
SELECT vbeln, erdat, erzet, ernam FROM vbak
INTO TABLE @DATA(lt_orders_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_orders_completed INTO DATA(ls_order_completed).
ls_event_log-returncaseid = ls_order_completed-vbeln.
ls_event_log-activityname = 'Return Order Completed'.
CONVERT DATE ls_order_completed-erdat TIME ls_order_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_order_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 11. Return Order Item Rejected
SELECT vbeln, erdat, erzet, ernam FROM vbap
INTO TABLE @DATA(lt_items_rejected)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND abgru IS NOT NULL AND abgru <> ''.
LOOP AT lt_items_rejected INTO DATA(ls_item_rejected).
ls_event_log-returncaseid = ls_item_rejected-vbeln.
ls_event_log-activityname = 'Return Order Item Rejected'.
CONVERT DATE ls_item_rejected-erdat TIME ls_item_rejected-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_rejected-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
ENDIF.
" =======================================================================
" OUTPUT
" =======================================================================
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_alv)
CHANGING
t_table = lt_event_log ).
lo_alv->display( ). Kroky
- Předpoklady: Zajistěte, aby databázový uživatel měl přístup pro čtení požadovaných tabulek SAP ECC. Patří sem tabulky z modulů Sales and Distribution (SD), Materials Management (MM) a Financial Accounting (FI). K připojení k databázi budete potřebovat vhodný klientský nástroj SQL, například DBeaver, SAP HANA Studio nebo Oracle SQL Developer.
- Zjistěte specifika systému: Před spuštěním dotazu zjistěte, jaké typy dokladů se ve vaší organizaci používají pro vrácení zboží. Dotaz obsahuje zástupný symbol
[YOUR_RETURN_ORDER_TYPES], který nahraďte skutečnými hodnotami, například 'RE' pro standardní vrácení. - Připravte dotaz: Zkopírujte celý dotaz SQL z části „query“ do svého klienta SQL.
- Nastavte parametry: Na začátku dotazu najděte výraz Common Table Expression (CTE) s názvem
BaseReturnOrders. Upravte klauzuliWHEREa zadejte požadované období nahrazením hodnot[START_DATE]a[END_DATE]. Aktualizujte seznam typů objednávek na vrácení a v případě potřeby přidejte filtr pro konkrétní kód společnosti (BUKRS_VF). - Spusťte dotaz: Spusťte upravený dotaz nad databází SAP ECC. Doba zpracování se může lišit podle zvoleného období a velikosti databáze.
- Zkontrolujte nezpracovaná data: Po dokončení dotazu rychle zkontrolujte výstup. Ověřte, že jsou vyplněné sloupce
ReturnCaseId,ActivityNameaEventTimea že data obsahují více aktivit. - Exportujte do CSV: Exportujte celou sadu výsledků z klienta SQL do souboru CSV. Použijte kódování UTF-8, aby se správně zachovaly všechny znaky.
- Připravte data k nahrání: Otevřete soubor CSV a ověřte, že záhlaví sloupců přesně odpovídají požadovaným atributům:
ReturnCaseId,ActivityName,EventTime,SourceSystematd. Pokud klient SQL záhlaví při exportu změnil, upravte je. - Nahrajte soubor: Nahrajte připravený soubor CSV do platformy ProcessMind k analýze.
Konfigurace
- Typy dokladů pro vrácení: Dotaz je třeba nastavit podle konkrétních typů prodejních dokladů, které ve vašem systému SAP označují objednávky na vrácení. Nahraďte zástupný symbol
[YOUR_RETURN_ORDER_TYPES]. Běžné hodnoty jsou například 'RE' nebo vlastní typy začínající na 'Z'. - Rozsah dat: Pro extrakci je důležité zvolit vhodné období. Pro první analýzu se obvykle doporučuje 3 až 6 měsíců dat. Zadejte je pomocí zástupných symbolů
[START_DATE]a[END_DATE]ve formátu 'YYYYMMDD'. - Kód společnosti: Pokud má organizace více kódů společností, filtrujte data, abyste se zaměřili na požadovaný rozsah. Do počátečního CTE můžete přidat například filtr
VBAK.BUKRS_VF = '[YOUR_COMPANY_CODE]'. - Dialekt databáze: Dodaný dotaz používá běžné funkce SQL. Převod data a času, například pomocí
TO_TIMESTAMP, a spojování řetězců (CONCAT) však může vyžadovat drobné úpravy syntaxe podle použité databáze, například Oracle, HANA nebo DB2. - Požadovaná oprávnění: Databázový uživatel potřebuje přístup pro čtení těchto důležitých tabulek: VBAK, VBAP, VBFA, LIKP, LIPS, VBRK, VBRP, MKPF, MSEG, BKPF, BSAD, QALS, QAVE, CDHDR a CDPOS.
Ukázkový dotaz sql
WITH BaseReturnOrders AS (
SELECT
VBAK.VBELN AS ReturnOrderNumber,
VBAP.POSNR AS ReturnOrderItemNumber
FROM VBAK
JOIN VBAP ON VBAK.VBELN = VBAP.VBELN
WHERE VBAK.AUART IN ('[YOUR_RETURN_ORDER_TYPES]') -- e.g., 'RE'
AND VBAK.ERDAT BETWEEN '[START_DATE]' AND '[END_DATE]' -- e.g., '20230101' and '20231231'
)
-- 1. Return Order Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBAK.ERDAT, VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
UNION ALL
-- 2. Return Order Block Removed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Block Removed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAK'
AND CDPOS.FNAME IN ('LIFSK', 'FAKSK')
AND CDPOS.VALUE_NEW = ''
AND CDPOS.VALUE_OLD <> ''
UNION ALL
-- 3. Return Delivery Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(LIKP.ERDAT, LIKP.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
LIKP.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIKP ON VBFA.VBELN = LIKP.VBELN
UNION ALL
-- 4. Goods Receipt Posted
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Goods Receipt Posted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(MKPF.CPUDT, MKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
MKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIPS ON VBFA.VBELN = LIPS.VBELN AND VBFA.POSNN = LIPS.POSNR
JOIN MSEG ON LIPS.VBELN = MSEG.LFBNR AND LIPS.POSNR = MSEG.LFPOS
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART IN ('651', '653', '655') -- Standard returns movement types
UNION ALL
-- 5. Usage Decision Made
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Usage Decision Made' AS "ActivityName",
TO_TIMESTAMP(CONCAT(QAVE.ADAT, QAVE.ATIM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
QAVE.AENAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN QALS ON VBFA.VBELN = QALS.VBELN AND VBFA.POSNN = QALS.POSNR -- Linking inspection lot to delivery item
JOIN QAVE ON QALS.PRUEFLOS = QAVE.PRUEFLOS
UNION ALL
-- 6. Credit Memo Request Created (assumes a separate doc, or can be the return order itself)
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CMR_VBAK.ERDAT, CMR_VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CMR_VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'K' -- 'K' is Credit Memo Request
JOIN VBAK AS CMR_VBAK ON VBFA.VBELN = CMR_VBAK.VBELN
UNION ALL
-- 7. Credit Memo Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBRK.ERDAT, VBRK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBRK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
WHERE VBRK.FKART IN ('[YOUR_CREDIT_MEMO_TYPES]') -- e.g., 'G2'
UNION ALL
-- 8. Credit Memo Posted To FI
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Posted To FI' AS "ActivityName",
TO_TIMESTAMP(CONCAT(BKPF.CPUDT, BKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
BKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BKPF ON VBRK.VBELN = BKPF.AWKEY AND BKPF.AWTYP = 'VBRK'
UNION ALL
-- 9. Return Order Item Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUP'
AND CDPOS.FNAME = 'GBSTA'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 10. Return Order Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUK'
AND CDPOS.FNAME = 'GBSTK'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 11. Return Order Item Rejected
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Rejected' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
CDPOS.VALUE_NEW AS "ReturnReason", -- Using rejection reason for this specific event
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAP'
AND CDPOS.FNAME = 'ABGRU'
AND CDPOS.VALUE_NEW <> ''
UNION ALL
-- 12. Credit Memo Cleared
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Cleared' AS "ActivityName",
TO_TIMESTAMP(BSAD.AUGDT, 'YYYYMMDD') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CLEAR_DOC.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BSAD ON VBRK.VBELN = BSAD.VBELN
JOIN BKPF AS CLEAR_DOC ON BSAD.AUGBL = CLEAR_DOC.BELNR AND BSAD.BUKRS = CLEAR_DOC.BUKRS AND BSAD.GJAHR_AUGL = CLEAR_DOC.GJAHR; Chcete začít?
Začněte tuto šablonu používat ještě dnes. Zjednodušíte sběr dat a získáte užitečný přehled o procesu vrácení zboží a refundací.
Zlepšete zpracování vrácení zboží a refundací
Zjednodušte zpracování vrácení zboží v SAP ECC a zkraťte dobu průchodu o 30 %. Začněte ještě dnes.
Bez platební karty, nastavení zabere jen několik minut