Ellátásilánc-menedzsment adatainak sablonja
Ellátásilánc-menedzsment adatainak sablonja
- Javasolt attribútumok
- Követendő fő tevékenységek
- Útmutató az adatok kinyeréséhez
Az ellátásilánc-menedzsment attribútumai
| Név | Leírás | ||
|---|---|---|---|
| Esemény időpontja EventTime | Az időbélyeg, amely megadja a tevékenység dátumát és időpontját. | ||
| Leírás Ez az attribútum pontos dátumot és időpontot rendel a folyamat minden tevékenységéhez. Az eseménynapló időrendi alapját adja, és a lépéseket a valós bekövetkezésük sorrendjébe rendezi. Az esemény időpontja minden időalapú elemzéshez szükséges. Ebből számítható ki a tevékenységek közötti átfutási idő és a folyamat teljes átfutási ideje, elemezhetők az időbeli teljesítménytrendek, és meghatározható, mikor alakulhatnak ki szűk keresztmetszetek. Miért fontos? Ez az időbélyeg szükséges az időtartamok és teljesítménymutatók kiszámításához, így elemezhetők a folyamat szűk keresztmetszetei és átfutási idejei. Hol szerezhető be? Az SAP alapvető tábláinak bizonylatlétrehozási vagy státuszváltozási időbélyeg-mezőiből nyerhető ki. Ilyen például a módosítási dokumentumok CDHDR/CDPOS táblája, illetve a fejlécet tartalmazó táblák ERDAT/ERZET dátum- és időmezői. Példák 2023-04-15T10:25:00Z2023-04-18T14:00:00Z2023-04-22T08:15:00Z | |||
| Logisztikai rendelés LogisticsOrder | Egy teljes, végpontok közötti ellátásilánc-folyamat egyedi azonosítója, a kezdeti igénytől a végső kiszállítás visszaigazolásáig. | ||
| Leírás A logisztikai rendelés az elsődleges esetazonosító. Összekapcsolja az ellátási láncban egy adott igényhez vagy teljesítési kéréshez tartozó összes tevékenységet. Így a termék teljes útja nyomon követhető a tervezéstől és beszerzéstől a gyártáson át az elosztásig, és a folyamat egésze áttekinthető. A process mining során a logisztikai rendelés szerinti elemzés megmutatja, milyen útvonalon teljesült az igény. Segít feltárni a gyakori változatokat, a szűk keresztmetszeteket és az eltéréseket a teljes ellátási láncban, ahelyett, hogy a beszerzést vagy az értékesítést különálló folyamatként vizsgálná. Miért fontos? Ez az alapvető azonosító kapcsolja össze az összes kapcsolódó eseményt egyetlen folyamatpéldánnyá, így lehetővé teszi az ellátási lánc végpontok közötti elemzését. Hol szerezhető be? Ez fogalmi azonosító, amelyet szükség lehet több bizonylatszám összekapcsolásával előállítani, például a vevői rendelés számának és az ahhoz tartozó későbbi beszerzési rendelés- és kiszállítási számoknak az összerendelésével. További információért tekintse meg az SAP S/4HANA Supply Chain dokumentációját, vagy kérdezzen meg egy szakértőt. Példák LO-4500078192LO-4500078193LO-4500078194 | |||
| Tevékenység neve ActivityName | Az ellátási lánc folyamatának egy adott pontján végrehajtott üzleti tevékenység vagy bekövetkezett esemény neve. | ||
| Leírás Ez az attribútum a logisztikai rendelés életciklusának egy adott lépését vagy mérföldkövét írja le, például „Beszerzési rendelés kiadva” vagy „Árukiadás könyvelve”. Ezek a tevékenységek alkotják a folyamat eseménysorát. A tevékenységek sorrendjének elemzése a process mining alapja. Segítségével feltárható a tényleges folyamatmenet, összevethető a standard működési eljárásokkal, és azonosíthatók a késedelmet vagy ismételt munkát okozó lépések. Miért fontos? Meghatározza a folyamat lépéseit, ami elengedhetetlen a folyamattérképek feltárásához, a változatok elemzéséhez és a tevékenységek közötti átfutási idők méréséhez. Hol szerezhető be? Az adatátalakítás során a különböző SAP-táblák tranzakciókódjait vagy státuszváltozásait (például EKKO, LIKP, VBUK) felhasználóbarát tevékenységnevekhez rendelik. Példák Beszerzési rendelés kiadvaBeszerzési rendeléshez tartozó áruátvétel könyvelveKimenő szállítás létrehozvaÁtvételi igazolás megerősítve | |||
| Forrásrendszer SourceSystem | A rendszer, ahonnan az adatok származnak. | ||
| Leírás Azonosítja azt a konkrét forrásrendszer-példányt, amelyben az eseményadatok keletkeztek. Összetett rendszerkörnyezetben egy vállalat több SAP S/4HANA-példányt is használhat különböző régiókban vagy üzletágakban. Ez az attribútum fontos az adatirányítás és az elemzések szegmentálása szempontjából. Segítségével összehasonlítható a folyamatok teljesítménye a különböző rendszerekben, vagy elkülöníthetők egyetlen hiteles forrás adatai. Miért fontos? Fontos kontextust ad az adatok eredetéről, ami segíti az adatok ellenőrzését és a folyamatok összehasonlítását a különböző rendszerkörnyezetekben. Hol szerezhető be? Ez általában egy statikus érték, amelyet az adatkinyerés során adnak hozzá az eredet azonosításához, például az SAP rendszerazonosítót (SAPSID). Példák S4H_PROD_EUS4H_PROD_NAS4H_DEV | |||
| Utolsó adatfrissítés LastDataUpdate | Az időpont, amikor az adatokat legutóbb frissítették vagy kinyerték a forrásrendszerből. | ||
| Leírás Ez az attribútum jelzi, mikor frissítették utoljára az eseménynapló adatait. Megmutatja az elemzett adatok aktualitását, így a felhasználók tudják, mennyire frissek az adatok. A megalapozott döntésekhez minden elemzésnél fontos tudni, mennyire frissek az adatok. Ez az időbélyeg segít megbízni az adatokban, és megmutatja, milyen időszakot fednek le a dashboardok és a KPI-k. Miért fontos? Átláthatóvá teszi az adatok frissességét, így a felhasználók tudják, mennyire aktuális a folyamatelemzés. Hol szerezhető be? Ez egy metaadatmező, amelyet rendszerint az adatkinyerő vagy ETL-eszköz hoz létre és tölt ki a sikeres adatfrissítés végén. Példák 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Anyagszám MaterialNumber | A feldolgozott termék vagy anyag egyedi azonosítója. | ||
| Leírás Az anyagszám, más néven SKU, egy adott termék egyedi kódja az SAP-ban. Összekapcsolja a folyamattevékenységeket a gyártott, beszerzett vagy kiszállított fizikai vagy digitális termékekkel. Ez az attribútum elengedhetetlen a termékközpontú elemzéshez. Segít feltárni, hogy bizonyos termékeknél gyakoribbak-e a minőségi problémák, a gyártási késedelmek vagy a készlethiányok. A dashboardok anyag szerint szűrhetők, így megvizsgálható az egyes termékvonalak teljesítménye. Miért fontos? Lehetővé teszi a termékszintű elemzést, így kiderül, hogy a késésekhez vagy minőségi hibákhoz hasonló folyamatproblémák bizonyos anyagokra összpontosulnak-e. Hol szerezhető be? A legtöbb bizonylat tételszintű táblájában megtalálható, például a vevői rendelések VBAP, a beszerzési rendelések EKPO és a kiszállítások LIPS táblájában. A mező neve általában MATNR. Példák FG-100-ARM-2034-BSA-5500 | |||
| Gyár Plant | Az a gyártó- vagy elosztóhely, ahol a tevékenység történt. | ||
| Leírás A gyár az SAP egyik szervezeti egysége, amely az áruk gyártásának, tárolásának vagy elosztásának helyét jelöli. Földrajzi vagy működési kontextust ad a folyamattevékenységekhez. A folyamat teljesítményének gyár szerinti elemzése gyakori igény. Lehetővé teszi a különböző telephelyek hatékonyságának, átbocsátásának és megfelelésének összehasonlítását, így feltárhatók a bevált gyakorlatok és a fejlesztésre szoruló helyszínek. Miért fontos? Földrajzi vagy szervezeti szempontot ad az elemzéshez, így összehasonlítható a különböző telephelyek teljesítménye. Hol szerezhető be? Számos bizonylat tételszintű táblájában megtalálható, például a VBAP (értékesítés), az EKPO (beszerzés) és a LIPS (kiszállítás) táblában. A mező neve általában WERKS. Példák 100021003500 | |||
| Kért szállítási dátum RequestedDeliveryDate | Az a dátum, amelyre a szállítótól az áru kiszállítását kérték. | ||
| Leírás Ez a beszerzési rendelésben megadott szállítási dátum, amely a szállítóval szembeni elvárást jelöli. Ehhez viszonyítva mérhető a tényleges szállítási teljesítmény. Ez a dátum szükséges a Szállítói határidőre történő szállítási arány KPI kiszámításához. A tényleges áruátvételi dátum és a kért dátum összehasonlításával objektíven mérhető, hogy a szállítók teljesítik-e vállalásaikat. Miért fontos? Ez az alapdátum a „Szállítói határidőre történő szállítási arány” KPI kiszámításához, ezért fontos a szállítói teljesítmény kezeléséhez. Hol szerezhető be? A beszerzési rendelés tételeit tartalmazó EKPO táblában található, EINDT (szállítási dátum) mezőnéven. Példák 2023-05-20T00:00:00Z2023-06-15T00:00:00Z2023-07-01T00:00:00Z | |||
| Minőségellenőrzés eredménye QualityInspectionResult | A minőségellenőrzés eredménye, például „Megfelelt” vagy „Nem felelt meg”. | ||
| Leírás Ez az attribútum a gyártott vagy átvett áruk minőségellenőrzésének eredményét rögzíti. Az eredmény határozza meg, hogy az áru továbbléphet-e a következő szakaszba, vagy javításra, visszaküldésre, esetleg selejtezésre van szükség. Ez az attribútum szükséges a Minőségellenőrzési elutasítási arány dashboardhoz és KPI-hoz. A hibák gyakoriságának és okainak elemzése segít feltárni az egyes termékekhez, szállítókhoz vagy gyártósorokhoz kapcsolódó, rendszeresen visszatérő minőségi problémákat. Miért fontos? Közvetlenül támogatja a minőségi KPI-k kiszámítását, és segít feltárni az ellátási lánc gyenge minőségének forrásait. Hol szerezhető be? Ezeket az adatokat általában a Quality Management (QM) modul tárolja. Származhatnak például az ellenőrzési tételeket tartalmazó QALS táblából és a QAVE táblában szereplő felhasználási döntési kódokból. Példák MegfeleltNem felelt megJavítás szükségesEltéréssel megfelelt | |||
| Szállító neve SupplierName | A beszerzési tevékenységekhez kapcsolódó szállító neve. | ||
| Leírás Ez az attribútum azonosítja, kitől szerzi be a vállalat az árut vagy a szolgáltatást. Jellemzően olyan tevékenységekhez kapcsolódik, mint a „Beszerzési igény létrehozva” és a „Beszerzési rendelés kiadva”. A szállító neve szükséges a Szállítói teljesítmény dashboardhoz. Segítségével szűrhetők és szegmentálhatók az adatok, így összehasonlítható a különböző szállítók határidőre történő szállítási aránya, átfutási ideje és minősége. Ez fontos a stratégiai beszerzéshez és a szállítói kapcsolatok kezeléséhez. Miért fontos? Lehetővé teszi a szállítónkénti teljesítményelemzést, ami segít optimalizálni a beszerzési folyamatot és értékelni a szállítók megbízhatóságát. Hol szerezhető be? A szállító száma (LIFNR) a beszerzési bizonylatokban, például az EKKN és az EBAN táblában szerepel. A név a központi szállítói törzstáblából (LFA1) kérdezhető le. Példák Global Components Inc.Advanced Materials LLCPrecision Parts Co. | |||
| Ügyfél neve CustomerName | Annak az ügyfélnek a neve, akinek a rendelést teljesítik. | ||
| Leírás Ez az attribútum azonosítja a vevői rendeléshez és az azt követő teljesítési tevékenységekhez tartozó végső ügyfelet. Kontextust ad az ellátási lánc keresleti oldalának elemzéséhez. A process mining során az ügyfél szerinti elemzés feltárja a különböző teljesítési mintákat és a kiemelt ügyfelekhez kapcsolódó teljesítményszinteket. Az Átvételi igazolás késedelmének elemzése dashboardon például megmutatja, hogy egyes ügyfelek rendszeresen későn igazolják-e vissza az átvételt. Miért fontos? Lehetővé teszi az elemzések ügyfél szerinti bontását, és feltárja az ügyfélspecifikus működést, a szűk keresztmetszeteket, valamint a szolgáltatási szintre vonatkozó megállapodások teljesülését. Hol szerezhető be? Az ügyfélszám (KUNNR) az értékesítési bizonylatokban, például a VBAK táblában szerepel. A név a központi ügyféltörzsből (KNA1) kérdezhető le. Példák Retail CorpInnovate SolutionsManufacturing Partners | |||
| Végrehajtó felhasználó ExecutingUser | A tevékenységet végrehajtó személy felhasználói azonosítója. | ||
| Leírás Ez az attribútum rögzíti annak a munkatársnak az SAP-felhasználónevét vagy -azonosítóját, aki végrehajtotta az adott tevékenységet, például létrehozott egy beszerzési rendelést vagy könyvelte az áruátvételt. Összekapcsolja a folyamatlépéseket a bennük részt vevő erőforrásokkal. A felhasználó szerinti elemzés segít megérteni a munkaterhelés eloszlását, feltárni a képzési igényeket, és észrevenni az egyének vagy csapatok közötti teljesítménykülönbségeket. A megfelelés vizsgálatakor azt is megmutatja, ki hajtotta végre a kritikus folyamatlépéseket. Miért fontos? Az egyes tevékenységeket konkrét felhasználókhoz rendeli, így elemezhető a munkaterhelés, összehasonlítható a teljesítmény, és kivizsgálhatók a szabályoknak nem megfelelő műveletek. Hol szerezhető be? Számos SAP-tábla „Létrehozta” vagy „Módosította” mezőjében található, például az EKKO (beszerzési rendelés fejléce) ERNAM mezőjében, valamint a LIKP (kiszállítás fejléce) és a VBRK (számla fejléce) táblában. Példák CBROWNJSMITHASINGH | |||
| Befejezés időpontja EndTime | Az időbélyeg, amely megadja, mikor fejeződött be egy tevékenység. A feldolgozási idő kiszámítására használható. | ||
| Leírás A befejezés időpontja jelzi egy adott tevékenység végét. A kezdési időpont (EventTime) mutatja, mikor indul a tevékenység, a befejezés időpontja pedig azt, mennyi ideig tartott, különösen a nem azonnal lezajló tevékenységeknél. A kezdési és befejezési időpont együttesen lehetővé teszi a feldolgozási és a várakozási idő pontos mérését. Így elkülöníthető a feladaton végzett munka ideje a következő lépésre való várakozástól, ami segít feltárni a hatékonyság javításának lehetőségeit. Miért fontos? Lehetővé teszi a tevékenységek feldolgozási idejének pontos kiszámítását, és segít elkülöníteni az értéket teremtő munkát a várakozási időtől. Hol szerezhető be? Az SAP státuszváltozásaiból is meghatározható. Például a kezdést a „Folyamatban” státusz, a befejezést pedig a „Befejezve” státusz jelzi a JEST/JCDS táblákban. Az azonnali eseményeknél az EndTime megegyezhet a StartTime értékével. Példák 2023-04-15T11:30:00Z2023-04-18T14:05:00Z2023-04-22T09:00:00Z | |||
| Beszerzési rendelés száma PurchaseOrderNumber | A beszerzési rendelés (PO) bizonylat egyedi azonosítója. | ||
| Leírás A beszerzési rendelés száma az a hivatalos bizonylatszám, amellyel a vállalat árut rendel a szállítótól. Az ellátási lánc beszerzési szakaszának egyik fő azonosítója. Ez az attribútum lehetővé teszi a beszerzési folyamat részletes elemzését. A Beszerzés végpontok közötti átfutási ideje dashboardon, valamint a Szállítói határidőre történő szállítási arány KPI kiszámításához használható. Összekapcsolja az igénylést, a rendelést, az áruátvételt és a fizetést. Miért fontos? A beszerzési részfolyamat részletes vizsgálatának egyik fő azonosítója, amely összekapcsolja a kapcsolódó beszerzési eseményeket. Hol szerezhető be? A beszerzési rendelés fejlécét tartalmazó EKKO és a tételeket tartalmazó EKPO táblában található. A mező neve EBELN. Példák 450007819245000781934500078194 | |||
| Fuvarozó neve CarrierName | A szállítmányt kezelő fuvarozó vagy szállítmányozó neve. | ||
| Leírás A fuvarozó neve azonosítja azt a logisztikai szolgáltatót, amely a helyszínek között szállítja az árut, például a raktárból az ügyfélhez. Ez az attribútum szükséges a Szállítási átfutási idő elemzése dashboardhoz. Lehetővé teszi a különböző fuvarozók szállítási idejének, költségeinek és megbízhatóságának összehasonlítását, így megalapozottabbá válik a logisztikai tervezés és a fuvarozó kiválasztása. Miért fontos? Lehetővé teszi a fuvarozónkénti teljesítményelemzést, ami segít optimalizálni a logisztikai költségeket és a szállítási időket. Hol szerezhető be? A fuvarozó azonosítója (szállítmányozó) a szállítmánybizonylatokban, például a VTTK (szállítmányfejléc) táblában szerepel. A név a törzsadatokat tartalmazó táblákból, például az LFA1-ből kérdezhető le. Példák DHLFedExMaersk Logistics | |||
| Javítási munka IsRework | Jelző, amely megmutatja, hogy egy tevékenység vagy tevékenységsorozat ismételt munkát jelent-e. | ||
| Leírás Ez a logikai attribútum megjelöli a folyamat korábbi lépéseinek ismétlését, ami javításra vagy korrekcióra utal. Ha például egy „Minőségellenőrzés” után „Gyártási rendelés létrehozva” lépés következik, majd ismét egy „Minőségellenőrzés”, a második ellenőrzés ismételt munkának jelölhető. Az ismételt munka feltárása segít megérteni a folyamat hatékonysági problémáit és rejtett költségeit. A jelzővel mérhető az ismétlődő munkafolyamatok gyakorisága és hatása, kiszámítható a Rendelésfeldolgozási hibaarány KPI, és kijelölhetők a folyamatfejlesztésre szoruló területek. Miért fontos? Segít számszerűsíteni a folyamat hatékonysági problémáit az ismételt munkafolyamatokhoz tartozó tevékenységek egyértelmű azonosításával és megszámlálásával. Hol szerezhető be? Ezt általában a process mining eszköz számítja ki azáltal, hogy azonosítja az ugyanazon esetben ismétlődő tevékenységsorozatokat. Példák truefalse | |||
| Késedelmes szállítás IsLateDelivery | Logikai jelző, amely megmutatja, hogy a szállító a kért szállítási dátum után szállította-e le az árut. | ||
| Leírás Ez a számított jelző egyszerű igen/nem értékkel mutatja, hogy a szállítás időben történt-e. A „Beszerzési rendelés áruátvétele könyvelve” tevékenység időbélyegének és a „Kért szállítási dátum” attribútumnak az összehasonlításával számítható ki. Ez az attribútum megkönnyíti a szállítói teljesítményhez kapcsolódó dashboardok és KPI-k létrehozását. Gyors szűrést és összesítést tesz lehetővé a Szállítói határidőre történő szállítási arány kiszámításához, valamint annak feltárásához, hogy mely szállítóknál, anyagoknál vagy régiókban fordul elő a legtöbb késés. Miért fontos? Egyértelmű, igen/nem eredményt ad minden szállításhoz, így egyszerűbb elemezni a szállítói teljesítményt és kiszámítani a határidőre történő szállítás KPI-t. Hol szerezhető be? Ez egy számított mező. A logika: IF ('Goods Receipt For PO Posted'.EventTime > PurchaseOrder.RequestedDeliveryDate) THEN True ELSE False. Példák truefalse | |||
| Rendelt mennyiség OrderQuantity | A rendelési tételben szereplő anyag mennyisége. | ||
| Leírás Ez az attribútum megadja, hány egységet kértek az adott anyagból egy vevői vagy beszerzési rendelés tételében. A tranzakció mennyiségét mutatja. A mennyiség szerinti elemzés segít előtérbe helyezni a nagy volumenű rendeléseket, amelyek nagyobb üzleti hatással járhatnak. Más mutatók normalizálására is használható, például az egységköltség kiszámítására, vagy annak vizsgálatára, hogyan befolyásolja a rendelés mérete a feldolgozási időt. Miért fontos? Megmutatja a tranzakciók volumenét, így elemezhető a hatásuk, és méret szerint csoportosíthatók az esetek. Hol szerezhető be? A tételszintű táblákban található, például az EKPO (beszerzési rendelés) MENGE vagy a VBAP (vevői rendelés) KWMENG mezőjében. Példák 100500025 | |||
| Vevői rendelés száma SalesOrderNumber | A vevői rendelés (SO) bizonylat egyedi azonosítója. | ||
| Leírás A vevői rendelés száma az értékesítés ügyféllel való hivatalos rögzítésére szolgáló bizonylatszám. Az ellátási lánc rendeléstől a pénz beérkezéséig tartó szakaszának egyik fő azonosítója. Ez az attribútum lehetővé teszi egy adott vevői rendelés teljesítésének nyomon követését. Összekapcsolja az ügyfél eredeti igényét a későbbi tevékenységekkel, például a kiszállítással és a számlázással, és támogatja a Rendelésteljesítés átfutási idejének elemzését. Miért fontos? A rendelésteljesítési részfolyamat fő azonosítójaként összekapcsolja az ügyféligényt a logisztikával és a pénzügyi elszámolással. Hol szerezhető be? A vevői rendelés fejlécét tartalmazó VBAK és a tételeket tartalmazó VBAP táblában található. A mező neve VBELN. Példák 100023451000234610002347 | |||
Az ellátásilánc-menedzsment tevékenységei
| Tevékenység | Leírás | ||
|---|---|---|---|
| Áru legyártva | Ez a tevékenység azt jelzi, hogy a gyártás befejeződött. Ezt rendszerint a termelési rendeléshez kapcsolódó áruátvétel rögzíti, amikor a késztermék bekerül a készletbe. | ||
| Miért fontos? Ez jelöli a gyártási ciklus végét. A termelési rendelés létrehozása és ez az esemény közötti idő a gyártási átfutási idő, amely a termelés hatékonyságának egyik fontos mutatója. Hol szerezhető be? Az esemény rögzíthető közvetlenül az anyagbizonylat könyvelésével, amikor a termelési rendelésből származó árut veszik át. Következtetni lehet rá a termelési rendelés végső visszaigazolásából (AFRU tábla) vagy a „Leszállítva” állapot beállításából is. Rögzítés A termelési rendeléshez tartozó végső áruátvételi anyagbizonylat könyvelési dátumából vagy egy állapotváltozásból következtessen rá. Eseménytípus inferred | |||
| Árukiszállítás könyvelése | Ez a tevékenység jelzi az áru jogi és fizikai távozását a raktárból. Csökkenti a készletet, könyveli az eladott áruk költségét, és hivatalossá teszi a rendelés kiszállítását. | ||
| Miért fontos? Ez fontos mérföldkő, amely jelzi a szállítási időszak kezdetét. Ekkor kerül ki az áru a vállalat birtokából, hogy eljusson a címzetthez. Hol szerezhető be? Ez egy konkrét esemény, amely anyagbizonylatot hoz létre. Az időbélyeg az anyagbizonylat fejlécében (MKPF, BUDAT mező) szerepel, és frissíti az áruforgalmi státuszt a kiszállítási bizonylatban (LIKP, WBSTK mező). Rögzítés A kimenő kiszállításhoz tartozó árukiadási anyagbizonylat könyvelési dátumát (MKPF-BUDAT) használja. Eseménytípus explicit | |||
| Átvételi igazolás megerősítve | Az ügyfél vagy a fuvarozó hivatalos visszaigazolását jelöli arról, hogy az árut a megadottak szerint átvették. Ezt gyakran úgy rögzítik, hogy az átvételi igazolás adataival frissítik a kimenő kiszállítást. | ||
| Miért fontos? Ez a tevékenység jelzi a teljesítési folyamat végét. A pontos számlázáshoz, a vitás ügyek rendezéséhez és a kiszállítás utolsó szakaszának méréséhez is szükséges. Hol szerezhető be? Ez egy konkrét esemény. Az átvételi igazolás dátuma a kiszállítás fejlécét tartalmazó táblában (LIKP, PODAT mező) vagy a kapcsolódó POD-táblákban (VLPOD) szerepel. Rögzítés A kiszállítási bizonylat átvételi igazolásának dátumát (LIKP-PODAT) használja. Eseménytípus explicit | |||
| Beszerzési rendelés kiadva | A szükséges anyagok beszerzésére külső beszállítónak kiadott beszerzési rendelés hivatalos létrehozását és kibocsátását jelöli. Ezzel a tevékenységgel a beszerzési igény a beszállítóval szemben jogilag kötelező vállalássá válik. | ||
| Miért fontos? Ez a fontos mérföldkő alapot ad a beszállítói átfutási idő és a beszerzési ciklusidő méréséhez. Kiindulópontként szolgál a beszállítói határidőtartás értékeléséhez. Hol szerezhető be? Ez kifejezetten naplózott esemény, amely a beszerzési rendelés létrehozásakor keletkezik. A létrehozás időbélyegét a beszerzési rendelés fejlécét tároló tábla (EKKO) AEDAT mezője tartalmazza. Rögzítés A beszerzési rendelés dokumentumának létrehozási dátumát használja (EKKO-AEDAT). Eseménytípus explicit | |||
| Beszerzési rendeléshez tartozó áruátvétel könyvelve | A beszerzési rendelés alapján a beszállítótól érkező alapanyagok vagy áruk fizikai átvételét jelöli. Az eseményt akkor rögzítik, amikor az áru megérkezik a raktárba vagy az üzembe. | ||
| Miért fontos? Ez a tevékenység zárja le a beszerzési ciklus beszállítói szállításhoz kapcsolódó részét. Nélkülözhetetlen a beszállítói határidőtartás méréséhez és a bejövő logisztika teljesítményének megértéséhez. Hol szerezhető be? Ez kifejezetten rögzített esemény, amelyet anyagbizonylat könyvelése hoz létre. Az esemény időbélyege az anyagbizonylat fejlécét tároló tábla (MKPF) BUDAT mezőjében található. A beszerzési rendeléshez az anyagbizonylat tételsorokat tartalmazó táblán (MSEG) keresztül kapcsolódik. Rögzítés A beszerzési rendeléshez kapcsolódó anyagbizonylat könyvelési dátumát használja (MKPF-BUDAT). Eseménytípus explicit | |||
| Vevői rendelés létrehozva | Ez a tevékenység egy új vevői rendelés létrehozását jelöli, amely rögzíti az ügyfél áruigényét. A rendszer akkor naplózza ezt az eseményt, amikor a felhasználó elmenti az új vevői rendelés dokumentumát. | ||
| Miért fontos? Ez a rendeléstől a pénz beérkezéséig tartó folyamat első lépése. Az esemény és a későbbi események közötti idő elemzésével meghatározható a rendelésteljesítés teljes átfutási ideje, és feltárhatók a kezdeti feldolgozási késések. Hol szerezhető be? Ez az esemény kifejezetten naplózva van. A vevői rendelés tábláinak módosítási dokumentumaiban (CDHDR/CDPOS) található meg, vagy a vevői rendelés fejlécét tároló tábla (VBAK) létrehozási időbélyegéből olvasható ki, az ERDAT mező alapján. Rögzítés A vevői rendelés dokumentumának létrehozási dátumát (VBAK-ERDAT) és időpontját (VBAK-ERZET) használja. Eseménytípus explicit | |||
| Áru lerakodása a célállomáson | Ez a tevékenység az áru fizikai lerakodását jelzi az ügyfél telephelyén. Előfordulhat, hogy az SAP nem rögzíti külön eseményként, ezért gyakran a fuvarozó adataiból vagy egy későbbi eseményből kell következtetni rá. | ||
| Miért fontos? Ez jelzi az út szállítási szakaszának végét. Az árukiadás és e pont közötti idő a szállítási idő, amely a logisztika optimalizálásához fontos adat. Hol szerezhető be? Az alap ERP-rendszerben ritkán szerepel külön eseményként. A fuvarozó EDI-üzeneteiből, a Transportation Management (TM) modul adataiból vagy, ha rendelkezésre áll, az átvételi igazolás időbélyegéből lehet következtetni rá. Rögzítés Következtessen a fuvarozó státuszfrissítéseiből (például EDI 214), vagy használja közelítő értékként az átvételi igazolás időbélyegét. Eseménytípus inferred | |||
| Áru-összekészítés befejezve | Ez a tevékenység jelöli, hogy befejeződött az áru fizikai összegyűjtése a raktárban a kimenő szállításhoz. Sok rendszerben ezt a szállítási bizonylat összekészítési állapotának frissítése rögzíti. | ||
| Miért fontos? A hatékony áru-összekészítés alapvető a raktár teljesítménye szempontjából. Ennek a tevékenységnek a nyomon követésével feltárhatók a raktári működés szűk keresztmetszetei, és mérhető az összekészítés teljesítménye. Hol szerezhető be? Ez gyakran nem egyetlen, jól körülhatárolható esemény, hanem az állapotváltozásokból következtethető ki. Akkor rögzül, amikor a kiszállítási tétel táblájában (LIPS, KOSTA mező) a komissiózási státusz értéke „C” (teljesen feldolgozva) lesz. Rögzítés A módosítási dokumentumokból következtessen arra az időpontra, amikor a komissiózási státusz (LIPS-KOSTA) teljesen komissiózott állapotra vált. Eseménytípus inferred | |||
| Beszerzési igény létrehozva | Ez a tevékenység a szükséges áruk vagy alapanyagok beszerzésére irányuló belső igény létrehozását jelzi. Gyakran akkor indul el, ha a készlet nem elegendő a vevői rendelés teljesítéséhez, vagy a készletszint az újrarendelési pont alá csökken. | ||
| Miért fontos? Ez a beszerzési ciklus első lépése. A létrehozás időpontjának nyomon követésével feltárhatók a beszerzés elindításának késései, és elemezhető a teljes beszerzési folyamat. Hol szerezhető be? Ez kifejezetten naplózott esemény. A létrehozás időbélyegét a beszerzési igény fejlécét tároló tábla (EBAN) BADAT mezője tartalmazza. Rögzítés A beszerzési igény dokumentumának létrehozási dátumát használja (EBAN-BADAT). Eseménytípus explicit | |||
| Készletelérhetőség ellenőrizve | Azt jelzi, hogy a rendszer vagy egy felhasználó ellenőrizte, rendelkezésre állnak-e készleten a vevői rendelés teljesítéséhez szükséges tételek. Ez gyakran automatikusan, a vevői rendelés létrehozásakor történik, de nem feltétlenül naplózzák külön eseményként. | ||
| Miért fontos? A rendelés és az ellenőrzés között eltelt idő, valamint az ellenőrzés eredménye megmutatja, hogyan hat a készletszint a teljesítési időre. Az itt jelentkező késés gyakran beszerzési vagy termelési tevékenységet tesz szükségessé. Hol szerezhető be? Ezt általában nem rögzítik külön eseményként. Következtetni lehet rá a vevői rendelés tételsorait tartalmazó táblában (VBEP) szereplő első visszaigazolt ütemezési sor létrehozásából vagy a rendeléstétel állapotának változásából. Rögzítés A vevői rendelés ütemezési sorának visszaigazolási állapotváltozásából következtessen rá (VBEP tábla). Eseménytípus inferred | |||
| Kimenő szállítás létrehozva | A szállítási bizonylat létrehozását jelzi, amely engedélyezi az áru összekészítését és vevőhöz szállítását. Ezzel a lépéssel a folyamat a rendeléskezelésből a logisztikai teljesítés szakaszába lép. | ||
| Miért fontos? Ez a fizikai rendelésteljesítés egyik fontos lépése. A rendelés létrehozása és a szállítási bizonylat létrehozása közötti késés tervezési vagy készletelérhetőségi problémára utalhat. Hol szerezhető be? Ez kifejezetten naplózott esemény. A létrehozás időbélyegét a szállítási bizonylat fejlécét tároló tábla (LIKP) ERDAT mezője tartalmazza. Rögzítés A szállítási bizonylat fejlécében szereplő létrehozási dátumot (LIKP-ERDAT) és időpontot (LIKP-ERZET) használja. Eseménytípus explicit | |||
| Minőségellenőrzés elvégezve | A legyártott áruk minőségellenőrzésének befejezését jelöli. Az ellenőrzés eredményét, vagyis hogy az áru megfelelt-e, felhasználási döntésben rögzítik. | ||
| Miért fontos? Ez a tevékenység fontos a termékminőség nyomon követéséhez és a gyártási problémák feltárásához. A magas elutasítási arány vagy a hosszú ellenőrzési idő jelentős szűk keresztmetszetet okozhat. Hol szerezhető be? Ez kifejezetten naplózott esemény, amely akkor keletkezik, amikor felhasználási döntés születik egy minőségellenőrzési tételről. A döntés dátuma a QALS tábla PASTRTERM mezőjében vagy a QAVE táblában található. Rögzítés A minőségellenőrzési tételhez tartozó felhasználási döntés rögzítésének időbélyegét használja (QALS/QAVE táblák). Eseménytípus explicit | |||
| Szállítmány létrehozása | Szállítmánybizonylat létrehozását jelöli. Ez a bizonylat egy vagy több kiszállítást fog össze a fuvartervezéshez, és tartalmazza a fuvarozó, az útvonal és a szállítási mód adatait. | ||
| Miért fontos? Ezzel kezdődik a hivatalos fuvartervezés. Az árukiadás és a szállítmány teljesítése közötti idő elemzésével felmérhető a szállítási folyamat hatékonysága. Hol szerezhető be? Ez a szállítmány fejlécét tartalmazó táblában (VTTK, ERDAT mező) rögzített konkrét esemény. A LE-TRA modulhoz tartozik, amelyet nem minden vállalat használ. Rögzítés A szállítmánybizonylat fejlécében szereplő létrehozási dátumot (VTTK-ERDAT) használja. Eseménytípus explicit | |||
| Termelési rendelés létrehozva | Azt jelzi, hogy létrehoztak egy termelési rendelést a vevői rendeléshez szükséges késztermékek előállítására. Ez a saját gyártási folyamat hivatalos kezdete. | ||
| Miért fontos? A termelési rendelés létrehozása jelöli a gyártási átfutási idő kezdetét. Ennek elemzésével feltárhatók a keresleti jelzés és a termelés indulása közötti késések. Hol szerezhető be? Ez kifejezetten naplózott esemény. A létrehozás dátumát a termelési rendelés fejlécét tároló tábla (AUFK) ERDAT mezője tartalmazza. Rögzítés A rendelés fejlécét tároló tábla létrehozási dátumát használja (AUFK-ERDAT). Eseménytípus explicit | |||
| Ügyfélszámla létrehozása | Ez a tevékenység jelzi, hogy a leszállított árukról vagy szolgáltatásokról létrejött az ügyfél számlázási bizonylata. Ezzel megkezdődik a folyamat végső pénzügyi elszámolása. | ||
| Miért fontos? Ez a tevékenység fontos a számlázási átfutási idő elemzéséhez. A kiszállítás visszaigazolása és a számlázás közötti késedelem ronthatja a pénzforgalmat. Hol szerezhető be? Ez egy konkrét esemény. A létrehozás időbélyege a számlázási bizonylat fejlécét tartalmazó táblában (VBRK, ERDAT mező) szerepel. Rögzítés A számlázási bizonylat fejlécében szereplő létrehozási dátumot (VBRK-ERDAT) használja. Eseménytípus explicit | |||
Útmutatók az adatok kinyeréséhez
Lépések
- Előfeltételek: Gondoskodjon arról, hogy rendelkezzen megfelelő jogosultságú felhasználóval a szükséges SAP S/4HANA Core Data Services (CDS) nézetek eléréséhez. Ehhez általában az SAP biztonsági csapatának kell hozzárendelnie egy megfelelő szerepkört. Szüksége lesz továbbá egy SQL-kliensre, például a DBeaverre vagy az SAP HANA Studio-ra, amely csatlakozni tud az SAP HANA-adatbázishoz.
- Adatbázis-kapcsolat létrehozása: Állítsa be az SQL-klienst az SAP S/4HANA-adatbázishoz való csatlakozásra. Szüksége lesz az adatbázis-kiszolgáló címére, a portra (például 3xx15, ahol az xx a példányszám), egy adatbázis-felhasználónévre és egy jelszóra.
- Az SQL-lekérdezés előkészítése: Másolja a dokumentum lekérdezési részében található teljes SQL-lekérdezést az SQL-kliens szerkesztőjébe. A lekérdezés a különböző logisztikai és értékesítési modulokban szereplő összes megadott tevékenység kinyerésére szolgál.
- A kinyerési paraméterek beállítása: A lekérdezés futtatása előtt keresse meg az egyes allekérdezések
WHEREfeltételeiben szereplő helyőrzőket. Cserélje le a'YourCompanyCode'értéket az elemzett vállalatkódra, a dátumtartomány helyőrzőit, például a'YYYY-MM-DD'értéket pedig állítsa be a kívánt időszakra. - A lekérdezés futtatása: Futtassa a teljes SQL-szkriptet. A futási idő a kiválasztott dátumtartománytól és a rendszerben tárolt adatok mennyiségétől függ. A rendszerterhelés csökkentése érdekében célszerű csúcsidőn kívül futtatni.
- Az első eredmények áttekintése: A lekérdezés lefutása után gyorsan ellenőrizze az eredményeket az SQL-kliensben. Nézze meg, hogy a sorok száma ésszerű-e, a LogisticsOrder, ActivityName és EventTime oszlopok tartalmaznak-e adatot, és többféle tevékenységnév is megjelenik-e.
- Adatok exportálása CSV-fájlba: Exportálja az SQL-kliens teljes eredményhalmazát CSV-fájlba. Az ékezetes karakterek megőrzéséhez válassza az UTF-8 kódolást.
- Formázás feltöltéshez: Ellenőrizze, hogy a végleges CSV-fájl oszlopfejlécei pontosan megegyeznek-e a betöltéshez szükséges attribútumnevekkel, például
LogisticsOrder,ActivityNameésEventTime. Ha a megadott SQL-lekérdezést használja, további adatátalakításra nincs szükség.
Konfiguráció
- Előfeltételek: Hozzáférés szükséges az SAP HANA-adatbázishoz. Az adatbázis-felhasználónak
SELECTjogosultsággal kell rendelkeznie a lekérdezésben hivatkozott összes CDS nézethez, többek között az I_SalesOrderItem, I_PurchaseOrderItem, I_OutboundDeliveryItem, I_MaterialDocumentItem, I_ProductionOrder, I_QualityInspection, I_Shipment és I_BillingDocumentItem nézethez. - Dátumtartomány szűrése: A megadott lekérdezésben helyőrző jelöli a dátumtartomány-szűrőt, jellemzően egy létrehozási dátum mezőn (
CreationDatevagyDocumentDate). Első elemzéshez 3–6 hónapos időszak ajánlott, így reprezentatív adathalmazt kap, miközben elkerülhető a túlzott rendszerterhelés. - Fontos üzleti szűrők: Az eredmények relevanciája érdekében szűrje az adatokat a megfelelő szervezeti egységekre. A lekérdezésben a
CompanyCodehelyőrzője már szerepel. Az elemzés céljától függően aSalesOrganization,DistributionChannelvagyPlantmezőkre is beállíthat szűrőt. - Teljesítménnyel kapcsolatos tudnivalók: Ez az összetett lekérdezés több nagy CDS nézetet kapcsol össze, ezért jelentős rendszererőforrást használhat. Az adatkinyerést ütemezze munkaidőn kívülre. Nagy adathalmaz esetén érdemes a lekérdezést kisebb, egymást követő, havi kötegekben futtatni.
Példa-lekérdezés 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; Lépések
- Ellenőrizze, hogy rendelkezésre áll-e közvetlen, csak olvasási hozzáférés a releváns logisztikai, értékesítési, beszerzési, készletgazdálkodási, termelési, minőségügyi, kiszállítási, szállítmányozási, kézbesítési igazolási és számlázási adatokat tartalmazó SAP HANA-sémához. Az SAP Basis vagy az adatplatformért felelős csapattól kérje el a séma nevét, a kapcsolódási adatokat és a jogosultságokat. Ne írjon a forrásrendszerbe.
- Ellenőrizze a célrendszer pontos S/4HANA-adatmodelljét. A beszerzési rendelésekhez az EKKO és EKPO, a kimenő szállításokhoz a LIKP és LIPS használható. Az értékesítési rendelésekhez, beszerzési igényekhez, anyagbizonylatokhoz, termelési rendelésekhez, minőségellenőrzési eredményekhez, szállítmányokhoz, kézbesítési igazolásokhoz és számlázáshoz további objektumokat kell beállítani. A lekérdezés minden szögletes zárójelben megadott objektum- vagy oszlophelyőrzőjét cserélje le a rendszer adatjegyzékében ellenőrzött objektumra.
- Határozza meg a LogisticsOrder korrelációs szabályát. Elsősorban ellenőrzött bizonylatfolyam-kapcsolatot használjon az értékesítési rendeléstől a kapcsolódó kiszállítási, anyag-, termelési vagy beszerzési, illetve számlázási bizonylatokig. Ha nincs közvetlen kapcsolat, állítson be dokumentált korrelációs táblát vagy üzletspecifikus megfeleltetést. Ne kapcsolja össze az eseteket kizárólag az anyagszám vagy a dátum alapján.
- Állítsa be a kinyerési időszakot a [Start date parameter] és [End date parameter] értékekkel. Az időszakot következetesen alkalmazza az események időbélyegeire, de tartsa meg az időszak előtt létrehozott bizonylatokat is, ha azok segítenek megmagyarázni az időszakban történt eseményeket.
- A megjelölt szűrőszakaszban állítsa be a vállalatkódot, az értékesítési szervezetet, a telephelyet, a beszerzési szervezetet, a bizonylattípust és az egyéb üzleti szűrőket. Csak azután használja a szűrőket, hogy ellenőrizte az értékeiket a célrendszerben.
- Cserélje le az egyes tevékenységágakban szereplő szögletes zárójelbe tett táblázat- és oszlophivatkozásokat ellenőrzött nevekre. Minden ágnak ugyanazokat az oszlopokat és egymással kompatibilis adattípusokat kell visszaadnia. A lekérdezés kifejezetten 15 kötelező tevékenység mindegyikéhez külön sort hoz létre, mert a ProcessMind nem következtet ki hiányzó eseményeket.
- Futtassa a lekérdezést az SAP HANA Database Explorerben, az SAP HANA cockpit SQL Console-ban vagy a jóváhagyott SQL-kliensben. A teljes UNION ALL lekérdezés futtatása előtt külön tesztelje az egyes tevékenységágakat. Ellenőrizze a végrehajtási terveket, és az első tesztet korlátozza rövid dátumtartományra.
- Ellenőrizze a bizonylatok közötti kapcsolatokat, az időbélyegeket, a felhasználói azonosítókat, a beszállítói és ügyféladatokat, az anyag- és telephelyadatokat, valamint a minőségi eredményeket. Vizsgálja meg a tételszintű összekapcsolásokból eredő duplikált sorokat, és alkalmazza a beállított eseményszintet, például bizonylatonként vagy bizonylattételenként egy eseményt.
- Exportálja az eredményt UTF-8 kódolású CSV-fájlba vagy a ProcessMind által támogatott más táblázatos formátumba. Őrizze meg pontosan a következő kimeneti oszlopneveket: LogisticsOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ExecutingUser, SupplierName, CustomerName, MaterialNumber, Plant, RequestedDeliveryDate és QualityInspectionResult. Az EventTime mező legyen időbélyeg, a LastDataUpdate mezőt pedig következetesen töltse ki.
- Töltse fel a fájlt a ProcessMindba, majd rendelje hozzá a LogisticsOrder mezőt az esetazonosítóhoz, az ActivityName mezőt a tevékenységhez, az EventTime mezőt pedig az esemény időbélyegéhez. Ellenőrizze, hogy mind a 15 tevékenységcímke önálló eseményként szerepel-e, majd az inkrementális adatkinyerés működésének ellenőrzése után ütemezze be a szabályozott frissítést.
Konfiguráció
- Dátumtartomány: Kezdje 3–6 hónapnyi adattal. Az első teszthez használjon rövidebb időszakot, és csak a teljesítmény, valamint a bizonylatok közötti kapcsolatok ellenőrzése után bővítse.
- Forrásséma: A [SAP HANA schema name] értékét állítsa be az ellenőrzött S/4HANA-táblákat vagy nézeteket tartalmazó sémára. Ne feltételezze, hogy minden S/4HANA-telepítésben azonos néven érhető el a klasszikus ERP-tábla.
- Bizonylatok köre: A folyamat hatókörének megfelelően állítsa be a [Company Code filter], [Sales Organization filter], [Plant filter], [Purchasing Organization filter] és [Document Type filter] értékét.
- Korreláció: Állítsa be a [Your document flow or correlation object] értékét úgy, hogy minden esemény egy LogisticsOrder rendeléshez tartozzon. A hiányzó vagy nem egyértelmű kapcsolatot jelezni kell, nem szabad csendben hozzárendelni.
- Eseményszint: Válassza ki, hogy bizonylatonként, bizonylattételenként vagy üzletileg releváns állapotváltozásonként szerepeljen egy esemény. Minden ágban ugyanazt a szabályt alkalmazza, és csak a technikai duplikátumokat távolítsa el.
- Időbélyegek elsőbbsége: Minden tevékenységhez az ellenőrzött könyvelési, létrehozási, visszaigazolási, állapotváltozási, minőségellenőrzési, kiszállítási, kirakodási, POD- vagy számlázási időbélyeget használja. Ne helyettesítse az üzleti esemény idejét az adatkinyerés időpontjával.
- Forrás megnevezése: A [Source system label] értékeként adjon meg egy állandó azonosítót, például a jóváhagyott SAP S/4HANA-rendszerazonosítót.
- Frissítés időbélyege: A [Last data update expression] értékeként használja a jóváhagyott adatkinyerési időpontot vagy a forrás frissítési időbélyegét.
- Teljesítmény: Korán alkalmazza a dátum- és szervezeti szűrőket, csak a szükséges oszlopokat válassza ki, kerülje a korlátozás nélküli tételszintű összekapcsolásokat, ellenőrizze a végrehajtási tervet, és ismétlődő betöltésekhez fontolja meg állandó adatkinyerési nézet vagy átmeneti tábla használatát.
- Jogosultságok: Olvasási hozzáférés szükséges a releváns SAP HANA-sémaobjektumokhoz, valamint jogosultság az SQL-lekérdezések futtatásához. Az üzleti ellenőrzéshez hozzá kell férnie az érintett értékesítési, beszerzési, készletgazdálkodási, termelési, minőségügyi, logisztikai végrehajtási, szállítmányozási és számlázási adatokhoz.
- Funkcionális hatókör: Ellenőrizze, hogy a telepített rendszerben megtalálhatók-e a kért tevékenységekhez tartozó üzleti folyamatok. A szállítmányozási, kirakodási, POD-, minőségügyi, termelési és számlázási adatok külön alkalmazásokban vagy bővítményekben is tárolhatók.
- Biztonság: Tartsa be a szervezet ügyfél-, beszállító-, anyag-, pénzügyi és felhasználói adatokra vonatkozó szabályait. Szükség esetén maszkolja vagy korlátozza az érzékeny mezőket.
Példa-lekérdezés 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; Lépések
- Előfeltételek: Gondoskodjon fejlesztői kulcsról és a szükséges SAP S/4HANA-jogosultságokról ABAP-programok létrehozásához és futtatásához (hozzáférés az SE38 tranzakcióhoz), valamint az olyan ellátásilánc-táblák olvasásához, mint a VBAK, LIKP, EKKO és MKPF.
- Program létrehozása: Nyissa meg az ABAP Editort az
SE38tranzakciókóddal. Adjon nevet az új programnak, példáulZ_PM_SCM_EXTRACTION, majd kattintson a „Create” gombra. Adjon meg egy leíró címet, és válassza az „Executable Program” programtípust. - Kód beillesztése: Másolja ki az alábbi „query” szakaszban található teljes ABAP-kódot, majd illessze be az új program ABAP Editorába.
- Szövegelemek megadása: Válassza a Go To > Text Elements > Selection Texts menüpontot. Aktiválja az összes felkínált kiválasztóképernyő-feliratot, hogy a felület egyértelmű és könnyen használható legyen.
- Program aktiválása: Mentse és aktiválja a programot a CTRL+S, majd a CTRL+F3 billentyűkombinációval, vagy az eszköztár aktiválás ikonjával. Javítsa ki a rendszerbeállítások miatt esetlegesen felmerülő szintaktikai hibákat.
- Program futtatása: Futtassa a programot az F8 billentyűvel vagy a „Direct Processing” gombbal. Megjelenik egy kiválasztóképernyő, ahol megadhatja a kinyerendő adatok szűrési feltételeit.
- Kinyerési paraméterek beállítása: A kiválasztóképernyőn adja meg az értékesítési rendelés létrehozási dátumának tartományát. Az adatmennyiség kezelése érdekében erősen ajánlott vállalatkódra vagy értékesítési szervezetre is szűrni. Adja meg a kimeneti fájl teljes elérési útját az SAP alkalmazáskiszolgálón.
- Háttérben futtatás: Több hónapnyi adat esetén a tranzakció időtúllépésének elkerülése érdekében a programot háttérben kell futtatni. A menüben válassza a Program > Execute in Background lehetőséget, majd ütemezze be a feladatot.
- Adatfájl letöltése: A program futásának befejezése után az
AL11tranzakcióval keresse meg az alkalmazáskiszolgálón megadott könyvtárat. Keresse meg a létrehozott fájlt, és aCG3Ytranzakcióval töltse le a helyi gépére. - Feltöltés előkészítése: Ellenőrizze, hogy a letöltött fájl egyszerű szöveges formátumú, például vesszővel vagy pontosvesszővel tagolt CSV, és UTF-8 kódolású. Ezután feltöltheti a process mining eszközbe.
Konfiguráció
- Kiválasztási dátumtartomány (S_ERDAT): Ez a legfontosabb szűrő. Az értékesítési rendelések kezdeti kiválasztásának időszakát határozza meg a létrehozási dátumuk (
VBAK-ERDAT) alapján. Kezdjen egy jól körülhatárolt időszakkal, például az elmúlt 3–6 hónappal, hogy kezelhető mennyiségű adatot kapjon. - Értékesítési szervezet (S_VKORG): Nem kötelező szűrő, amellyel meghatározott értékesítési szervezetekre korlátozhatja az adatkinyerést. Hasznos, ha egy adott üzleti egységre vagy régióra szeretné összpontosítani az elemzést.
- Vállalatkód (S_BUKRS): Nem kötelező szűrő, amellyel meghatározott vállalatkódokra korlátozhatja az adatokat. Használata erősen ajánlott az adatok körének szűkítéséhez és a teljesítmény javításához.
- Kimeneti fájl elérési útja (P_FILE): Az SAP alkalmazáskiszolgálón található teljes elérési út, ahová a végleges eseménynapló kerül. A programot futtató felhasználónak írási jogosultsággal kell rendelkeznie ehhez a könyvtárhoz. Példa:
/usr/sap/trans/tmp/scm_event_log.csv. - Futtatási mód: Kis mennyiségű tesztadat esetén a program előtérben is futtatható. Jelentősebb adatmennyiségnél kötelező a háttérfeldolgozás, így elkerülhetők az időtúllépések, és csúcsidőben kisebb lesz a rendszer terhelése.
- Rendszerjogosultságok: A jelentést futtató felhasználónak olvasási hozzáférésre van szüksége az összes érintett táblához, többek között a VBAK, VBAP, EKKO, EKPO, MSEG, MKPF, LIKP, LIPS, VBRK, AUFK, QAVE, KNA1 és LFA1 táblához.
Példa-lekérdezés 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. Készen áll a kezdésre?
Használja ezt a sablont az adatok előkészítéséhez, és kezdje el még ma fejleszteni az ellátási lánc teljesítményét. Minden lépésnél számíthat a segítségünkre.
Fejlessze most az ellátásilánc-menedzsmentet
Lássa át a teljes folyamatot, és akár napok alatt javítsa 90%-ra az előrejelzések pontosságát.
14 napos ingyenes próbaverzió, bankkártya megadása nélkül.