Adatsablon a beszerzéstől a fizetésig tartó, megrendelési folyamathoz
Adatsablon a beszerzéstől a fizetésig tartó, megrendelési folyamathoz
- Javasolt attribútumok a részletes elemzéshez
- A folyamatban nyomon követendő fő tevékenységek
- Lépésről lépésre bemutatott útmutató az adatok kinyeréséhez
A beszerzéstől a fizetésig tartó, megrendelési folyamat attribútumai
| Név | Leírás | ||
|---|---|---|---|
| Beszerzési rendelés PurchaseOrderNumber | A beszerzési rendelés (PO) egyedi azonosítója, amely a beszerzési folyamat nyomon követésének elsődleges esetazonosítója. | ||
| Leírás A beszerzési rendelés száma az a központi azonosító, amely összekapcsolja a kapcsolódó tevékenységeket a kezdeti létrehozástól az áruátvételig és a lezárásig. Ez szolgál esetazonosítóként a process mining elemzésben. Az elemzés során az események e szám szerinti csoportosításával rekonstruálható az egyes rendelések folyamata. Ez szükséges az átfutási idők kiszámításához, a folyamatváltozatok elemzéséhez, valamint az egyes rendelésekhez kapcsolódó szűk keresztmetszetek és eltérések azonosításához. Miért fontos? Ez a nélkülözhetetlen azonosító kapcsolja össze az összes beszerzési eseményt egyetlen, teljes folyamatban, így részletesen elemezhető minden beszerzési rendelés életciklusa. Hol szerezhető be? Ez az attribútum a SAP S/4HANA EKKO táblájának EBELN mezőjében található. Példák 450001712345000171244500017125 | |||
| Esemény időpontja EventTime | Az időbélyeg, amely megmutatja, mikor történt a tevékenység. | ||
| Leírás Ez az attribútum rögzíti a folyamat egyes tevékenységeinek pontos dátumát és időpontját. A process mining minden időalapú elemzésének ez az alapja. Az esemény időpontja alapján időrendbe állíthatók a tevékenységek, és felépíthető a folyamat menete. Emellett ez az alapja az időtartam-alapú mutatók, például a tevékenységek közötti átfutási idők, a várakozási idők és a feldolgozási idők kiszámításának. Ezek szükségesek a teljesítmény elemzéséhez és a szűk keresztmetszetek azonosításához. Miért fontos? Ez az időbélyeg szükséges az események helyes sorrendbe állításához és az összes teljesítménymutató, köztük az átfutási, a beszállítói átfutási és a várakozási idők kiszámításához. Hol szerezhető be? Az egyes tevékenységekhez tartozó időbélyegmezők, például a létrehozási dátum (módosításoknál EKKO-AEDAT) vagy a könyvelési dátum (áruátvételnél MKPF-BUDAT). Az adatok kinyeréséhez gyakran több táblát kell összekapcsolni. Példák 2023-04-15T10:00:00Z2023-04-15T14:30:00Z2023-05-01T09:15:00Z | |||
| Tevékenység ActivityName | A beszerzési rendelési folyamatban végrehajtott üzleti esemény vagy lépés neve. | ||
| Leírás Ez az attribútum a beszerzési rendelés életciklusának egy adott műveletét vagy állapotváltozását írja le, például a „Beszerzési rendelés létrehozása”, a „Beszerzési rendelés jóváhagyása” vagy az „Áruátvétel könyvelése” eseményt. Ezek a tevékenységek alkotják a folyamat menetét. A tevékenységek sorrendjének és gyakoriságának elemzése a process mining alapja. Segít feltárni a tényleges folyamatot, összevetni a megtervezett modellel, azonosítani a szűk keresztmetszeteket, például a „Számla beérkezése” utáni hosszú várakozást, és mérni az újramunkát, például az ismétlődő „Beszerzési rendelés módosítása” tevékenységeket. Miért fontos? Meghatározza a folyamat lépéseit, így megjeleníthető és elemezhető a teljes folyamatmenet, a folyamatváltozatok és a szűk keresztmetszetek. Hol szerezhető be? Általában több tábla és mező adataiból áll elő, például az EKKO/EKPO állapotmezőiből vagy a CDHDR/CDPOS módosítási dokumentumaiból, amelyek a fontos üzleti mérföldköveket rögzítik. Példák Beszerzési rendelés létrehozásaBeszerzési rendelés jóváhagyásaÁruátvétel könyveléseSzámla beérkezése | |||
| Forrásrendszer SourceSystem | Azonosítja azt a forrásrendszert, amelyből az adatokat kinyerték. | ||
| Leírás Ez az attribútum megadja az eseményadatok forrásrendszerét, például „SAP S/4HANA Production” vagy „SAP ECC”. Több rendszert használó környezetben ez a mező nélkülözhetetlen az adatok eredetének nyomon követéséhez, a hibakereséshez és a különböző forrásokból származó adatok helyes értelmezéséhez. Segít megérteni az adatok hátterét, és lehetővé teszi az elemzés szűrését egy adott rendszerkörnyezetre. Miért fontos? Fontos információt ad az adatok eredetéről, ami több rendszer használatakor szükséges az adatirányításhoz, az ellenőrzéshez és az elemzéshez. Hol szerezhető be? Ez általában az adatok kinyerése, átalakítása és betöltése (ETL) során hozzáadott állandó érték, amely megjelöli az adathalmaz forrását. Példák S4H_PROD_100ECC_EU_200S4H_US_300 | |||
| 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 az elemzett adatok frissességét. Megmutatja, mikor történt a legutóbbi adatkinyerés a SAP S/4HANA rendszerből. Az utolsó adatfrissítés időpontja segít megítélni, mennyire naprakész az elemzés. Így egyértelmű, hogy valós idejű adatokról vagy egy adott időpontban készült pillanatképről van-e szó. Ez befolyásolja az elemzés alapján meghozott intézkedések relevanciáját. Miért fontos? Tájékoztatja a felhasználókat az adatok aktualitásáról, így értelmezhető az elemzési eredmények háttere és relevanciája. Hol szerezhető be? Ez az adatok kinyerése, átalakítása és betöltése (ETL) során hozzáadott metaadat-időbélyeg. Példák 2024-05-21T02:00:00Z2024-05-20T02:00:00Z2024-05-19T02:00:00Z | |||
| Beszállítóazonosító VendorId | Az árut vagy szolgáltatást nyújtó beszállító egyedi azonosítója. | ||
| Leírás A beszállítóazonosító olyan törzsadat, amely a beszerzési rendelést egy adott beszállítóhoz kapcsolja. A beszerzési folyamat során kommunikációra, szállításra és kifizetésre használják. A process mining elemzésben ez az attribútum lehetővé teszi a beszállítónkénti teljesítményelemzést. Nélkülözhetetlen például a „Beszállítói átfutási idő teljesítménye” és a „Visszaküldött áruk aránya beszállítónként” dashboardokhoz. Segít azonosítani a legmegbízhatóbb beszállítókat, valamint azokat, akik késéseket vagy minőségi problémákat okozhatnak. Miért fontos? Lehetővé teszi a beszállítók szerinti elemzést, így felmérhető a teljesítményük, azonosíthatók a jól és gyengén teljesítők, és fejleszthető az ellátási lánc. Hol szerezhető be? Ez az attribútum a SAP S/4HANA EKKO táblájának LIFNR mezőjében található. Példák 100023100045100088 | |||
| Beszerzési igény PurchaseRequisitionNumber | A beszerzési rendelést elindító beszerzési igény (PR) azonosítója. | ||
| Leírás Ez az attribútum összekapcsolja a beszerzési rendelést az azt elindító beszerzési igénnyel. A közvetlenül létrehozott rendelésekhez nem mindig tartozik beszerzési igény. Ez a kapcsolat szükséges a teljes beszerzési folyamat elemzéséhez, a kezdeti igénytől kezdve. Támogatja például a „Beszerzési igény jóváhagyási ideje” KPI mérését, és segít azonosítani a nem jóváhagyott beszerzéseket, amikor a rendelés előzetesen jóváhagyott igény nélkül jön létre. Miért fontos? Összekapcsolja a rendelést a kezdeti igénnyel, így elemezhető a teljes folyamat, és azonosíthatók a szabályoktól eltérő, nem jóváhagyott beszerzések. Hol szerezhető be? Ez az attribútum a SAP S/4HANA EKPO táblájának (beszerzésirendelés-tétel) BANFN mezőjében található. Példák 1001005110010052 | |||
| Beszerzésirendelés-dokumentumtípus DocumentType | A beszerzési rendelések különböző típusait különbözteti meg, például a normál rendeléseket, a szolgáltatásrendeléseket és a készletáthelyezési rendeléseket. | ||
| Leírás A dokumentumtípus a SAP egyik fontos konfigurációs eleme. Meghatározza a beszerzési rendelés folyamatát, számtartományát és mezőit, így a vállalatok az eltérő helyzetekhez igazíthatják a beszerzést. A folyamat dokumentumtípus szerinti elemzése segít megérteni a folyamatváltozatokat. Egy normál árubeszerzési rendelés folyamata például jelentősen eltérhet egy szolgáltatásrendelésétől vagy egy készletáthelyezési rendelésétől. Ez az attribútum lehetővé teszi az eltérő folyamatok szűrését és összehasonlítását, így feltárhatók a célzott fejlesztési lehetőségek. Miért fontos? Kategorizálja a beszerzési rendeléseket, így összehasonlíthatók a különböző beszerzési folyamatok, és megérthetők a folyamatmenet és az átfutási idők eltérései. Hol szerezhető be? Ez az attribútum a SAP S/4HANA EKKO táblájának BSART mezőjében található. Példák Normál beszerzési rendelésRendeléskeret-megállapodásKészletáthelyezési rendelés | |||
| Felhasználó UserName | Az adott tevékenységet végrehajtó felhasználó azonosítója. | ||
| Leírás Ez az attribútum rögzíti annak a SAP-felhasználónak az azonosítóját, aki létrehozott, módosított vagy jóváhagyott egy dokumentumot. Segítségével nyomon követhetők a rendszerben végrehajtott műveletek. A felhasználók szerinti elemzés feltárhatja a képzési igényeket, a munkaterhelés eloszlását és az egyéni teljesítményt. Például megmutathatja, hogy egyes felhasználókhoz rendszeresen hosszú jóváhagyási idők vagy gyakori, jóváhagyás utáni módosítások kapcsolódnak-e. Ez segíti az erőforrások kezelését és a folyamatfejlesztést. Miért fontos? Biztosítja az elszámoltathatóságot, és lehetővé teszi az egyéni vagy csapatszintű teljesítmény elemzését. Segít feltárni a képzési lehetőségeket és az erőforráshiányt. Hol szerezhető be? Ez az információ például az EKKO ERNAM (létrehozta) mezőjében vagy a módosítási dokumentumok felhasználómezőjében (CDHDR-USERNAME) található. Példák CB9980000012JSMITHRROE | |||
| Kért szállítási dátum RequestedDeliveryDate | Az a dátum, amelyre a vállalat az áru vagy szolgáltatás beszállítótól történő szállítását kérte. | ||
| Leírás Ez az attribútum a beszerzési rendelésben meghatározott célként kitűzött szállítási dátumot jelöli. Ez az alap a beszállítói szállítási teljesítmény méréséhez. A process mining elemzésben ezt a dátumot a tényleges áruátvétel dátumával, vagyis az „Áruátvétel könyvelése” időbélyegével vetik össze a „Beszállítói pontos szállítási arány” KPI kiszámításához. Az eltérések elemzése segít felmérni a beszállítók megbízhatóságát és kezelni az ellátási lánc kockázatait. Miért fontos? Ez az alap a beszállítói szállítási pontosság méréséhez, amely az ellátásilánc-kezelés és a működés tervezésének fontos KPI-ja. Hol szerezhető be? Az EKET szállítási ütemezési sorokat tartalmazó tábla EINDT mezőjében található. Példák 2023-06-012023-06-152023-07-01 | |||
| Teljes nettó összeg TotalNetAmount | A beszerzési rendelés teljes értéke adók és szállítási költségek nélkül. | ||
| Leírás Ez az attribútum a beszerzési rendelés nettó pénzértékét mutatja. Fontos pénzügyi adat, amely jelzi a beszerzési tranzakció nagyságát. Az összeg pénzügyi elemzésre használható, például a rendelések érték szerinti csoportosítására, hogy kiderüljön, eltér-e a nagy és a kis értékű rendelések folyamata. Az elemzés rangsorolására is alkalmas: előtérbe helyezhetők a nagy értékű rendelések, amelyek nagyobb pénzügyi kockázatot hordozhatnak vagy jelentősebb üzleti hatással járhatnak. Miért fontos? Lehetővé teszi a pénzügyi szempontú elemzést, a rendelések érték szerinti csoportosítását, valamint a folyamatfejlesztés előtérbe helyezését a nagyobb költéssel járó területeken. Hol szerezhető be? Ez az attribútum a SAP S/4HANA EKKO táblájának NETWR mezőjében található. Példák 1500.0025000.50125.75 | |||
| Anyagszám MaterialNumber | A beszerzett anyag vagy termék azonosítója. | ||
| Leírás Az anyagszám az SAP-ban minden anyagtörzsrekordhoz rendelt egyedi kód. Az adott anyaghoz kapcsolódó tranzakciókban használják, többek között a beszerzés, a készletgazdálkodás és az értékesítés során. Az anyagszám vagy anyagcsoport szerinti elemzés lehetővé teszi az árucsoportok szerinti vizsgálatot. Segít feltárni, ha bizonyos anyagok beszerzése kevésbé hatékony, hosszabb átfutási idejű vagy gyakrabban jár visszáruval. Az eredmények az árucsoport-kezelést is támogathatják. Miért fontos? Lehetővé teszi az árucsoportok szerinti elemzést, és segít feltárni az egyes termékekhez vagy anyagokhoz kapcsolódó folyamatproblémákat és beszállítói teljesítménygondokat. Hol szerezhető be? Ez az attribútum az SAP S/4HANA EKPO táblájának MATNR mezőjében található. Példák RM100-100FG210SERV-CONSULT | |||
| Beszállítói határidőre szállítás SupplierOnTimeDelivery | Számított jelző, amely azt mutatja, hogy az áruátvételt a kért szállítási napon vagy az előtt könyvelték-e. | ||
| Leírás Ez a logikai attribútum a „Goods Receipt Posted” tevékenység időbélyegének és a „Requested Delivery Date” értékének összehasonlításával számítható ki. Értéke 'true', ha az áruátvétel a kért napon vagy korábban történt. Ez az attribútum közvetlenül támogatja a „Beszállítói határidőre szállítási arány” KPI-t. Egyszerűen szűrhetők vele a határidőre és késve érkező szállítmányok. Ez elengedhetetlen a beszállítói teljesítményt bemutató dashboardokhoz és a beszállítók értékeléséhez. Miért fontos? Közvetlenül méri a beszállítók megbízhatóságát. Alapul szolgál a határidőre szállítási KPI-hoz, és támogatja a beszállítói teljesítmény hatékony kezelését. Hol szerezhető be? A „Goods Receipt Posted” tevékenység időbélyegének és a 'RequestedDeliveryDate' attribútum értékének összehasonlításával számítható ki. Példák truefalse | |||
| Beszerzési csoport PurchasingGroup | Az adott beszerzési tevékenységekért felelős beszerzők csoportja. | ||
| Leírás A beszerzési csoport egy beszerzőt vagy olyan beszerzők csoportját jelöli, akik meghatározott beszerzési tevékenységekért, anyagokért vagy beszállítókért felelnek. Ők tartják a kapcsolatot a beszállítókkal. Ez az attribútum a beszerzési szervezetnél részletesebb képet ad a munkaterhelésről és a teljesítményről. Segítségével azonosíthatók a túlterhelt csapatok, mérhető a különböző beszerzői csoportok hatékonysága, és feltárható, mely csoportoknál gyakoribbak a folyamateltérések, például a szabályozatlan beszerzések. Miért fontos? Részletes képet ad a beszerzői csoportok teljesítményéről, így csapatszinten elemezhető a munkaterhelés, a hatékonyság és a folyamatok betartása. Hol szerezhető be? Ez az attribútum az SAP S/4HANA EKKO táblájának EKGRP mezőjében található. Példák 001002N00 | |||
| Beszerzési szervezet PurchasingOrganization | Az az szervezeti egység, amely az anyagok és szolgáltatások beszerzéséért, valamint a beszállítókkal folytatott tárgyalásokért felel. | ||
| Leírás A beszerzési szervezet a beszerzés egyik meghatározó szervezeti egysége. Működhet vállalati, cég- vagy telephelyi szinten, és a beszerzési tevékenységek egészéért felel. A beszerzési szervezet szerinti elemzés segít felmérni a különböző beszerzési csapatok vagy régiók hatékonyságát és teljesítményét. Rávilágíthat a beszállítói tárgyalások, a folyamatoknak való megfelelés vagy a jóváhagyási idők közötti különbségekre. Miért fontos? Lehetővé teszi a különböző beszerzési osztályok vagy régiók teljesítményének összehasonlítását, és segít azonosítani a bevált gyakorlatokat, valamint a fejlesztendő területeket. Hol szerezhető be? Ez az attribútum az SAP S/4HANA EKKO táblájának EKORG mezőjében található. Példák 10101710US01 | |||
| Szabályozatlan beszerzés IsMaverickSpend | Számított jelző, amely azt mutatja, hogy a megrendelés jóváhagyott beszerzési igény nélkül készült-e. | ||
| Leírás Ez a logikai jelző az adatok feldolgozásakor keletkezik. Értéke 'true', ha a megrendeléshez nem tartozik beszerzési igény, vagy ha a megrendelés létrehozásakor megkerülték a szokásos jóváhagyási munkafolyamatot. Ez az attribútum közvetlenül támogatja a „Szabályozatlan beszerzések azonosítása” dashboardot és a kapcsolódó KPI-kat. Segít számszerűsíteni a szabályoknak nem megfelelő beszerzéseket, így a vállalat célzottan erősítheti a beszerzési szabályokat és kontrollokat az érintett osztályoknál vagy felhasználói csoportoknál. Miért fontos? Közvetlenül azonosítja a szabályoknak nem megfelelő beszerzéseket, segít számszerűsíteni a folyamateltéréseket, és támogatja a pénzügyi kontrollok, valamint a beszerzési szabályok betartását. Hol szerezhető be? Számított mező, amely meghatározott dokumentumtípusoknál a 'PurchaseRequisitionNumber' értékének hiányán vagy az eseménysor elemzésén alapul. Példák truefalse | |||
| Tételkategória ItemCategory | A beszerzési rendelés tételét sorolja kategóriába, például normál, bizományosi, alvállalkozói vagy szolgáltatási tételként. | ||
| Leírás A tételkategória határozza meg, hogyan történik az adott anyag vagy szolgáltatás beszerzésének kezelése és feldolgozása. Befolyásolja a későbbi lépéseket, például az áruátvételt és a számlaellenőrzést. Ez az attribútum fontos a beszerzés tárgya szerinti folyamatváltozatok elemzéséhez. A szolgáltatási tételhez például szolgáltatási teljesítésigazolás szükséges, ezért a folyamata jelentősen eltér egy normál készlettételétől. A tételkategória szerinti elemzés segít megérteni ezeket az eltéréseket, és célzott folyamatfejlesztést tesz lehetővé. Miért fontos? A folyamat eltéréseit a beszerzés típusa szerint mutatja be, például árubeszerzés, szolgáltatásvásárlás vagy alvállalkozói teljesítés esetén. Hol szerezhető be? Ez az attribútum az SAP S/4HANA EKPO táblájának PSTYP mezőjében található. Példák 093 | |||
| Utómunka történt IsRework | Számított jelző, amely azt mutatja, hogy a megrendelésen kellett-e utómunkát végezni, például jóváhagyás utáni módosítás vagy áru-visszáru miatt. | ||
| Leírás Ez a logikai attribútum a megrendeléshez tartozó tevékenységek sorrendjének elemzésével számítható ki. Értéke 'true', ha a „Purchase Order Approved” esemény után „Purchase Order Changed” esemény következik, vagy ha szerepel „Goods Returned” esemény. Ez a jelző egyszerűbbé teszi az „Egyenes feldolgozási arány” KPI kiszámítását. Segítségével könnyen szűrhetők és megjeleníthetők azok a megrendelések, amelyek kézi beavatkozást vagy javítást igényeltek. Így az utómunka költsége és gyakorisága is számszerűsíthető. Miért fontos? Segít számszerűsíteni a folyamat hatékonyságvesztését az utómunkát igénylő esetek jelölésével. Ez fontos az egyenes feldolgozási arány kiszámításához és az eltérések kiváltó okainak feltárásához. Hol szerezhető be? A tevékenységek sorrendje alapján számított mező. A logika ellenőrzi, hogy a „Purchase Order Changed” esemény jóváhagyás után következik-e, illetve szerepel-e „Goods Returned” esemény. Példák truefalse | |||
| Üzem Plant | Az a telephely vagy helyszín, ahová az árut szállítják, vagy ahol a szolgáltatást nyújtják. | ||
| Leírás Az SAP-ban az üzem az a fizikai helyszín, ahol árut gyártanak vagy tárolnak, illetve szolgáltatást nyújtanak. A logisztika és a tervezés egyik alapvető eleme. Az üzemenkénti elemzés feltárhatja a beszerzési folyamat regionális vagy telephelyspecifikus eltéréseit. Megmutathatja például, ha egyes üzemekben hosszabb a szállítási idő, vagy gyakoribb az áru-visszáru. Ez helyi logisztikai vagy minőségellenőrzési problémákra utalhat. Miért fontos? Lehetővé teszi a helyszín szerinti elemzést, és megmutatja a folyamat teljesítményének eltéréseit a különböző telephelyek, üzemek és raktárak között. Hol szerezhető be? Ez az attribútum az SAP S/4HANA EKPO táblájának WERKS mezőjében található. Példák 10101710DE01 | |||
| Vállalatkód CompanyCode | Annak a jogi személynek vagy vállalatnak az azonosítója, amelynek nevében a megrendelés készül. | ||
| Leírás A vállalatkód a szervezeten belüli önálló számviteli egységet jelöli. A megrendeléshez kapcsolódó pénzügyi tranzakciókat egy adott vállalatkódra könyvelik. Ez az alapvető szervezeti attribútum lehetővé teszi, hogy a beszerzési folyamatokat különböző jogi személyek szerint szűrje és összehasonlítsa. A vállalatkód szerinti elemzés feltárhatja a folyamatvégrehajtás eltéréseit, a hatékonyság különbségeit vagy a megfelelési arányok változásait a szervezeten belül. Miért fontos? Lehetővé teszi a folyamatok jogi személyenkénti elemzését, így összehasonlítható a teljesítmény és a megfelelés az üzlet különböző részei között. Hol szerezhető be? Ez az attribútum az SAP S/4HANA EKKO táblájának BUKRS mezőjében található. Példák 101017102000 | |||
A beszerzéstől a fizetésig tartó, megrendelési folyamat tevékenységei
| Tevékenység | Leírás | ||
|---|---|---|---|
| Áruátvétel könyvelése | A beszállítótól érkező áruk fizikai átvételét és annak rendszerbeli rögzítését jelzi. Ez a tranzakció frissíti a beszerzési rendelés előzményeit. | ||
| Miért fontos? Fontos mérföldkő: lezárja a beszállítói átfutási időt, és elindítja a számla belső ellenőrzését. Az esemény szükséges a pontos szállítási arányok nyomon követéséhez. Hol szerezhető be? Anyagbizonylatként az MKPF (fejléc) és az MSEG (tétel) táblában kerül rögzítésre, a beszerzési rendelés előzményeit tartalmazó EKBE táblához pedig meghatározott mozgásnemmel, például 101-gyel kapcsolódik. Rögzítés A kapcsolódó anyagbizonylat könyvelési dátuma (BUDAT) az MKPF táblából, az EKBE kapcsolaton keresztül. Eseménytípus explicit | |||
| Beszerzési igény jóváhagyása | A beszerzési igény vezető vagy kijelölt jóváhagyó általi hivatalos jóváhagyását jelzi. Ez általában az igény dokumentumának állapotváltozásából következtethető ki, amely azt mutatja, hogy az igény készen áll a beszerzési rendeléssé alakításra. | ||
| Miért fontos? Ez fontos mérföldkő a jóváhagyási ciklusidő méréséhez és a szűk keresztmetszetek azonosításához. Az itt jelentkező késés közvetlenül befolyásolja, milyen gyorsan hozható létre és küldhető el a beszerzési rendelés a beszállítónak. Hol szerezhető be? Az EBAN tábla jóváhagyási állapotmezőiből következtethető ki, például az FRGZU (jóváhagyásjelző) mezőből. Az időbélyeg a CDHDR/CDPOS módosítási dokumentumokból származik, amelyek rögzítik a végső jóváhagyási állapot beállításának idejét. Rögzítés Az EBAN tábla jóváhagyási állapotmezőinek módosítási naplóiból (CDHDR/CDPOS) következtethető ki. Eseménytípus inferred | |||
| Beszerzési igény létrehozása | Ez a tevékenység rögzíti az árukra vagy szolgáltatásokra vonatkozó hivatalos igényt, és ezzel elindítja a beszerzési folyamatot. Az esemény akkor kerül rögzítésre, amikor a felhasználó elment egy új beszerzési igényt tartalmazó dokumentumot, például az ME51N tranzakcióval. | ||
| Miért fontos? Sok beszerzésirendelés-életciklus kiindulópontja. Az esemény és a rendelés létrehozása közötti idő elemzésével feltárhatók a beszerzésben és a belső feldolgozásban jelentkező késések. Hol szerezhető be? Az EBAN (beszerzési igény) táblában található. A létrehozási esemény időbélyege az EBAN objektum CDHDR és CDPOS módosítási előzményeiből nyerhető ki. Rögzítés Az esemény az EBAN táblában szereplő dokumentum létrehozásakor kerül rögzítésre. Eseménytípus explicit | |||
| Beszerzési rendelés jóváhagyása | Azt jelzi, hogy a beszerzési rendelés megkapta az összes szükséges belső jóváhagyást, és elküldhető a beszállítónak. Az esemény a rendelés jóváhagyási stratégiájának állapotváltozásából következtethető ki. | ||
| Miért fontos? Fontos mérföldkő a jóváhagyás hatékonyságának és a jóváhagyás utáni újramunkának a méréséhez. A rendelés létrehozása és jóváhagyása közötti idő elemzése feltárja a belső folyamat késéseit. Hol szerezhető be? Az EKKO tábla jóváhagyásjelzőjéből (FRGKE) következtethető ki. Az időbélyeg meghatározásához a módosítási előzményekben (CDHDR/CDPOS) kell megkeresni, mikor állították a mezőt „jóváhagyva” állapotba. Rögzítés Az EKKO tábla jóváhagyásjelző mezőjének (FRGKE) módosítási naplóiból következtethető ki. Eseménytípus inferred | |||
| Beszerzési rendelés létrehozása | A hivatalos beszerzésirendelés-dokumentum létrehozását jelzi. A rendelés beszerzési igényre hivatkozva vagy anélkül is létrehozható. Az esemény akkor kerül rögzítésre, amikor a rendelési dokumentumot először elmentik a rendszerben. | ||
| Miért fontos? Ez a tevékenység a folyamat alternatív kiindulópontja lehet, különösen a jóváhagyott csatornákon kívüli beszerzések elemzésénél. Alapvető esemény a rendelés teljes feldolgozási idejének méréséhez. Hol szerezhető be? Az EKKO beszerzésirendelés-fejléc táblában található. A dokumentum létrehozási dátuma (AEDAT) és időpontja közvetlenül ebben a táblában szerepel. Rögzítés A beszerzésirendelés-dokumentum létrehozási időbélyege (AEDAT) az EKKO táblában. Eseménytípus explicit | |||
| Beszerzési rendelés lezárása | Ez a tevékenység azt jelzi, hogy logisztikai szempontból lezártnak tekinthető a beszerzési rendelés tétele. Erre akkor lehet következtetni, ha a „Szállítás befejezve” és a „Végszámla” jelző is be van állítva. | ||
| Miért fontos? Ez a beszerzésirendelés-életciklus elemzésének végpontja. Az eseményig eltelt idő mérése megadja a beszerzési folyamat teljes átfutási idejét. Hol szerezhető be? Az EKPO beszerzésirendelés-tétel tábla állapotjelzőiből következtethető ki. Az esemény akkor következik be, ha a „Szállítás befejezve” (ELIKZ) és a „Végszámla” (EREKZ) jelző is igaz értékre van állítva. Rögzítés A módosítási naplókból következtethető ki, amikor az EKPO tábla ELIKZ és EREKZ mezője egyaránt teljesítettként van megjelölve. Eseménytípus inferred | |||
| Számla beérkezése | A beszállítói számla SAP-rendszerben történő rögzítését jelzi, a megfelelő beszerzési rendeléshez kapcsolva. Ez a pénzügyi könyvelés létrehozásával járó tranzakció. | ||
| Miért fontos? Fontos mérföldkő, amely összeköti a beszerzési folyamatot a szállítói számlák kezelésével. Segítségével elemezhető az áruátvétel és a számlafeldolgozás közötti idő. Hol szerezhető be? A könyvelési bizonylat fejléce a BKPF táblában, tételei pedig a BSEG vagy az univerzális napló, az ACDOCA táblában találhatók. A bizonylat az RSEG táblán keresztül kapcsolódik a beszerzési rendeléshez. Rögzítés A könyvelési bizonylat fejlécének rögzítési dátuma (CPUDT) a BKPF táblából. Eseménytípus explicit | |||
| Áru visszaküldése | Azt jelzi, hogy a korábban átvett árut visszaküldték a beszállítónak, jellemzően minőségi probléma, sérülés vagy hibás szállítás miatt. Az eseményt az áru mozgásának visszafordító könyvelése rögzíti. | ||
| Miért fontos? Ez a tevékenység újramunkára, illetve a beszállítói minőséggel vagy a rendelés pontosságával kapcsolatos problémákra hívja fel a figyelmet. Ha egy adott beszállítónál vagy anyagnál gyakori a visszaküldés, az problémát jelez. Hol szerezhető be? Anyagbizonylatként, meghatározott visszáru-mozgásnemmel, például 122-vel kerül rögzítésre. Az esemény az MKPF/MSEG táblákban szerepel, és az EKBE előzménytáblán keresztül kapcsolódik a beszerzési rendeléshez. Rögzítés A visszáru-mozgásnemmel rögzített anyagbizonylat könyvelési dátuma az EKBE táblában. Eseménytípus explicit | |||
| Beszerzési rendelés elküldése a beszállítónak | Azt az időpontot jelzi, amikor a beszerzési rendelést eljuttatják a beszállítóhoz, például EDI-n, e-mailben vagy nyomtatott formában. Az eseményt gyakran a rendszer kimenetkezelési naplói rögzítik. | ||
| Miért fontos? Ezzel indul a beszállítói átfutási idő. Ez az esemény szükséges a beszállítói teljesítmény pontos méréséhez, attól a pillanattól kezdve, hogy a beszállító megkapja a rendelést. Hol szerezhető be? A beszerzési dokumentumhoz küldött üzeneteket rögzítő NAST kimenetvezérlési táblából nyerhető ki. A megfelelő kimenettípus, például az EDI vagy az e-mail dátuma és időpontja használható. Rögzítés A rendeléshez tartozó első sikeres kimenő üzenet időbélyege a NAST táblában. Eseménytípus inferred | |||
| Beszerzési rendelés módosítása | Ez a tevékenység azt jelzi, hogy a beszerzési rendelés létrehozása után módosítás történt, például megváltozott a mennyiség, az ár vagy a szállítási dátum. A rendszer módosítási naplói közvetlenül rögzítik. | ||
| Miért fontos? A módosítások, különösen a jóváhagyás utániak nyomon követése segít feltárni a folyamat hatékonysági problémáit, az újramunkát és a lehetséges megfelelési hiányosságokat. A gyakori módosítások pontatlan kezdeti specifikációra utalhatnak. Hol szerezhető be? A beszerzésirendelés-objektumok (EINKBELEG) módosítási dokumentumokat tartalmazó CDHDR (fejléc) és CDPOS (tétel) tábláiban található. Minden módosításról részletes naplóbejegyzés készül. Rögzítés Az EKKO vagy EKPO táblák fontos mezőinek módosításakor rögzített esemény a CDHDR/CDPOS táblákban. Eseménytípus explicit | |||
| Beszerzési rendelés törlése | A beszerzési rendelés egyik tételének vagy a teljes dokumentumnak a törlését, illetve logikai törlését jelzi. Akkor kerül rögzítésre, amikor a felhasználó törlési jelzőt állít be a dokumentumon. | ||
| Miért fontos? Ez a tevékenység a folyamat alternatív végpontja, amely sikertelen folyamatra vagy megszakításra utal. A rendelések törlésének okait elemezve feltárhatók a kereslettervezési vagy igénymeghatározási problémák. Hol szerezhető be? A beszerzésirendelés-fejléc (EKKO) vagy -tétel (EKPO) táblában szereplő törlési jelzőből (LOEKZ) nyerhető ki. Az időbélyeg a módosítási dokumentumokból (CDHDR/CDPOS) származik. Rögzítés Az időbélyeg a módosítási dokumentumokból (CDHDR/CDPOS) származik, amikor beállítják a törlési jelzőt (LOEKZ). Eseménytípus explicit | |||
| Számla kifizetése | A beszállítói számla végső kiegyenlítését jelzi, akár fizetési futtatással, akár kézi kifizetéssel. Ez a pénzügyi tranzakció kiegyenlítési bizonylatot hoz létre. | ||
| Miért fontos? Bár technikailag a fizetési folyamat része, ennek a tevékenységnek a bevonásával teljes képet kaphat a beszerzéstől a kifizetésig tartó folyamatról. Fontos a fizetési feltételek és a teljesítmény elemzéséhez. Hol szerezhető be? A kifizetés kiegyenlítési bizonylatként kerül rögzítésre a BKPF/ACDOCA táblában. A számlatétel kiegyenlítési dátuma (AUGDT) a BSEG vagy az ACDOCA táblában jelzi a kifizetés eseményét. Rögzítés A számlabizonylat kiegyenlítési dátuma (AUGDT) a BSEG vagy az ACDOCA táblában. Eseménytípus explicit | |||
| Szolgáltatás teljesítésének rögzítése | Ez a tevékenység azt rögzíti, hogy a beszerzési rendelésben meghatározott szolgáltatást teljesítették. Az eseményt a szolgáltatási teljesítésigazolás létrehozása rögzíti. | ||
| Miért fontos? Szolgáltatás beszerzése esetén ez felel meg az áruátvételnek. Az esemény fontos a szolgáltatás teljesítési idejének nyomon követéséhez és a beszállító időben történő kifizetéséhez. Hol szerezhető be? A szolgáltatási teljesítésigazolás létrehozásakor kerül rögzítésre. Az adatok az ESSR (fejléc) és ESLL (sorok) táblákban találhatók. Az időbélyeg a létrehozás dátuma. Rögzítés Az ESSR táblában szereplő szolgáltatási teljesítésigazolás-dokumentum létrehozási dátuma. Eseménytípus explicit | |||
Adatkinyerési útmutatók
Lépések
- Előfeltételek és hozzáférés: Gondoskodjon róla, hogy rendelkezzen megfelelő jogosultságokkal rendelkező felhasználóval az SAP S/4HANA rendszer Core Data Services (CDS) nézeteinek lekérdezéséhez. A hozzáférés történhet SAP HANA Studio, az Eclipse-hez készült ABAP Development Tools (ADT), vagy olyan külső adatkinyerő eszköz segítségével, amely támogatja az SQL-kapcsolatot az SAP HANA-adatbázishoz.
- A rendszerkapcsolat adatainak megadása: Szerezze be az SAP S/4HANA rendszerhez szükséges kapcsolati adatokat, többek között a gazdagép nevét, a példányszámot és a hitelesítési adatokat.
- Kapcsolódás az adatbázishoz: A választott SQL-klienssel kapcsolódjon az SAP S/4HANA-adatbázishoz, amely a CDS nézeteket tartalmazza.
- Az SQL-lekérdezés előkészítése: Másolja a dokumentum lekérdezéseket tartalmazó részében megadott teljes SQL-lekérdezést az SQL-szerkesztőbe. A lekérdezés kinyeri az összes szükséges tevékenységet és attribútumot.
- Szűrési paraméterek beállítása: Keresse meg a lekérdezésben a helyőrző értékeket. Cserélje le a _start_date és _end_date értékeket az elemzéshez kívánt időszakra, például '20230101' és '20231231' értékre. Módosítsa a poh.CompanyCode szűrőt, hogy az elemzésbe bevonni kívánt vállalatkódokat tartalmazza.
- A lekérdezés futtatása: Futtassa a módosított SQL-lekérdezést az S/4HANA-adatbázison. A futtatás az adatmennyiségtől és a megadott időszaktól függően eltarthat egy ideig.
- Az előzetes eredmények ellenőrzése: A lekérdezés lefutása után gyorsan ellenőrizze az eredményt az SQL-kliensben. Nézze meg, hogy szerepelnek-e benne a különböző tevékenységek, helyesen töltődtek-e ki az időbélyegek, és egységes-e az esetazonosító (PurchaseOrderNumber).
- Az adatok exportálása: Exportálja az SQL-eszköz teljes eredményhalmazát CSV-fájlba (vesszővel elválasztott értékek). A karakterkódolási problémák elkerülése érdekében UTF-8 kódolást használjon.
- Feltöltés előtti ellenőrzés: A ProcessMindbe való feltöltés előtt nyissa meg a CSV-fájlt, és ellenőrizze, hogy az oszlopfejlécek pontosan megegyeznek-e az adatkövetelményekben megadott attribútumokkal (PurchaseOrderNumber, ActivityName, EventTime stb.). Ha az exportáló eszköz módosította az oszlopneveket, javítsa őket.
- Feltöltés a ProcessMindbe: Töltse fel a végleges CSV-fájlt a ProcessMind-projektjébe. Az importálás során rendelje hozzá a fájl oszlopait a megfelelő esetazonosító-, tevékenység- és időbélyegmezőkhöz.
Konfiguráció
- Felhasznált CDS nézetek: Az adatkinyerés szabványos, szemantikailag gazdag CDS nézetekre épül. A legfontosabb nézetek:
- I_PurchaseOrderItemAPI01: A beszerzési rendelés tételeinek alapadataihoz.
- I_PurchaseRequisitionItemAPI01: A beszerzési igény részleteihez.
- I_MaterialDocumentItem: Az anyagmozgásokhoz, például az áruátvételhez és a visszáruhoz.
- I_ServiceEntrySheetAPI01: A szolgáltatás teljesítését igazoló eseményekhez.
- I_SupplierInvoiceAPI01: A beszállítói számlák adataihoz.
- I_OperationalAcctgDocItem: A számlák és a pénzügyi bizonylatok összekapcsolásához, a kifizetések nyomon követésére.
- I_ChangeDocument: A beszerzési rendelés módosításainak rögzítéséhez.
- Időszak szerinti szűrés: A teljesítmény és az adatmennyiség kezelése érdekében elengedhetetlen az időszak szerinti szűrés. A lekérdezés a beszerzési rendelés létrehozásának dátumára (PurchaseOrderDate) vonatkozó _start_date és _end_date helyőrzőket használja. Kezdésként 3–6 hónapnyi adat feldolgozása javasolt.
- Szervezeti szűrés: A lekérdezést mindig szűrje CompanyCode szerint, hogy csak a releváns üzleti egységek adatai kerüljenek be. A további szűkítéshez a PurchaseOrderType vagy a PurchasingOrganization mezőre vonatkozó szűrőket is hozzáadhatja a fő PO_base közös táblakifejezéshez.
- Előfeltételek: A lekérdezést futtató felhasználónak SELECT jogosultsággal kell rendelkeznie a fent felsorolt összes CDS nézethez. Ezekhez a nézetekhez általában meghatározott üzleti vagy elemzési szerepkörökön keresztül adnak hozzáférést az S/4HANA rendszerben. Megfelelő jogosultságok nélkül a lekérdezés hibára fut.
Példa-lekérdezés sql
WITH PO_base AS (
SELECT
poh.PurchaseOrder AS PurchaseOrderNumber,
poi.PurchaseOrderItem AS PurchaseOrderItem,
poh.CompanyCode,
poh.PurchaseOrderType AS DocumentType,
poh.Supplier AS VendorId,
poh.PurchaseOrderDate,
poi.PurchaseRequisition AS PurchaseRequisitionNumber,
poi.NetPriceAmount * poi.OrderQuantity AS TotalNetAmount, -- Note: This is item-level net amount
poh.CreationDate AS POCreationDate,
poh.CreationTime AS POCreationTime,
poh.LastChangeDateTime AS POLastChangeDateTime,
poi.IsDeleted,
poi.DeliveryIsCompleted,
poi.FinalInvoiceIsExpected,
poi.GoodsReceiptIsExpected,
poi.LastGoodsReceiptDate,
poi.LastInvoiceReceiptDate
FROM I_PurchaseOrderAPI01 poh
JOIN I_PurchaseOrderItemAPI01 poi
ON poh.PurchaseOrder = poi.PurchaseOrder
WHERE
poh.PurchaseOrderDate BETWEEN '_start_date' AND '_end_date' -- Placeholder: e.g., '20230101' and '20230630'
AND poh.CompanyCode IN ('[YourCompanyCode]') -- Placeholder: e.g., '1010'
)
-- 1. Purchase Requisition Created
SELECT
po.PurchaseOrderNumber,
'Purchase Requisition Created' AS ActivityName,
CAST(CONCAT(pr.CreationDate, 'T', pr.CreationTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem, -- Placeholder
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
pr.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate, -- Available in PR, add if needed
po.DocumentType
FROM I_PurchaseRequisitionItemAPI01 pr
JOIN PO_base po
ON pr.PurchaseRequisition = po.PurchaseRequisitionNumber AND pr.PurchaseRequisitionItem = po.PurchaseOrderItem
UNION ALL
-- 2. Purchase Requisition Approved
SELECT
po.PurchaseOrderNumber,
'Purchase Requisition Approved' AS ActivityName,
CAST(CONCAT(pr.PurReqnReleaseDate, 'T', '000000') AS TIMESTAMP) AS EventTime, -- Time is not available in this view
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
NULL AS UserName, -- Approver info requires complex joins
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_PurchaseRequisitionItemAPI01 pr
JOIN PO_base po
ON pr.PurchaseRequisition = po.PurchaseRequisitionNumber AND pr.PurchaseRequisitionItem = po.PurchaseOrderItem
WHERE
pr.PurReqnReleaseDate IS NOT NULL
UNION ALL
-- 3. Purchase Order Created
SELECT
po.PurchaseOrderNumber,
'Purchase Order Created' AS ActivityName,
CAST(CONCAT(po.POCreationDate, 'T', po.POCreationTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
poh.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
poi.RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
JOIN I_PurchaseOrderAPI01 poh ON po.PurchaseOrderNumber = poh.PurchaseOrder
JOIN I_PurchaseOrderItemAPI01 poi ON po.PurchaseOrderNumber = poi.PurchaseOrder AND po.PurchaseOrderItem = poi.PurchaseOrderItem
UNION ALL
-- 4. Purchase Order Approved
SELECT DISTINCT
po.PurchaseOrderNumber,
'Purchase Order Approved' AS ActivityName,
CAST(poh.ReleaseDate AS TIMESTAMP) AS EventTime, -- Assuming ReleaseDate reflects final approval
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
NULL AS UserName, -- Approver info requires complex joins
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
poi.RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
JOIN I_PurchaseOrderAPI01 poh ON po.PurchaseOrderNumber = poh.PurchaseOrder
JOIN I_PurchaseOrderItemAPI01 poi ON po.PurchaseOrderNumber = poi.PurchaseOrder AND po.PurchaseOrderItem = poi.PurchaseOrderItem
WHERE poh.ReleaseDate IS NOT NULL
UNION ALL
-- 5. Purchase Order Sent to Vendor
SELECT DISTINCT
po.PurchaseOrderNumber,
'Purchase Order Sent to Vendor' AS ActivityName,
CAST(poh.ReleaseDate AS TIMESTAMP) AS EventTime, -- Using ReleaseDate as a proxy for sending time
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
NULL AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
poi.RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
JOIN I_PurchaseOrderAPI01 poh ON po.PurchaseOrderNumber = poh.PurchaseOrder
JOIN I_PurchaseOrderItemAPI01 poi ON po.PurchaseOrderNumber = poi.PurchaseOrder AND po.PurchaseOrderItem = poi.PurchaseOrderItem
WHERE poh.ReleaseDate IS NOT NULL
UNION ALL
-- 6. Purchase Order Changed
SELECT DISTINCT
ch.OBJECTID AS PurchaseOrderNumber,
'Purchase Order Changed' AS ActivityName,
CAST(CONCAT(ch.ChangeDocumentDate, 'T', ch.ChangeDocumentTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
ch.UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_ChangeDocument ch
JOIN PO_base po ON ch.OBJECTID = po.PurchaseOrderNumber
WHERE
ch.ObjectClassName = 'EINKBELEG' -- Object Class for Purchase Documents
AND CAST(CONCAT(ch.ChangeDocumentDate, 'T', ch.ChangeDocumentTime) AS TIMESTAMP) > CAST(CONCAT(po.POCreationDate, 'T', po.POCreationTime) AS TIMESTAMP)
UNION ALL
-- 7. Goods Receipt Posted
SELECT
po.PurchaseOrderNumber,
'Goods Receipt Posted' AS ActivityName,
CAST(CONCAT(md.PostingDate, 'T', md.CreationTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
md.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_MaterialDocumentItem md
JOIN PO_base po
ON md.PurchaseOrder = po.PurchaseOrderNumber AND md.PurchaseOrderItem = po.PurchaseOrderItem
WHERE
md.GoodsMovementType = '101'
UNION ALL
-- 8. Services Confirmation Entered
SELECT
po.PurchaseOrderNumber,
'Services Confirmation Entered' AS ActivityName,
CAST(se.PostingDate AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
se.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_ServiceEntrySheetAPI01 se
JOIN PO_base po
ON se.PurchaseOrder = po.PurchaseOrderNumber AND se.PurchaseOrderItem = po.PurchaseOrderItem
UNION ALL
-- 9. Goods Returned
SELECT
po.PurchaseOrderNumber,
'Goods Returned' AS ActivityName,
CAST(CONCAT(md.PostingDate, 'T', md.CreationTime) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
md.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_MaterialDocumentItem md
JOIN PO_base po
ON md.PurchaseOrder = po.PurchaseOrderNumber AND md.PurchaseOrderItem = po.PurchaseOrderItem
WHERE
md.GoodsMovementType = '122'
UNION ALL
-- 10. Invoice Received
SELECT
po.PurchaseOrderNumber,
'Invoice Received' AS ActivityName,
CAST(inv.PostingDate AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
inv.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_SupplierInvoiceAPI01 inv
JOIN PO_base po
ON inv.PurchaseOrderReference = po.PurchaseOrderNumber
WHERE
inv.DebitCreditCode = 'H' -- 'H' for Credit (Supplier Invoice)
UNION ALL
-- 11. Invoice Paid
SELECT
po.PurchaseOrderNumber,
'Invoice Paid' AS ActivityName,
CAST(doc.ClearingDate AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
doc.CreatedByUser AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM I_SupplierInvoiceAPI01 inv
JOIN I_OperationalAcctgDocItem doc
ON inv.AccountingDocument = doc.AccountingDocument
JOIN PO_base po
ON inv.PurchaseOrderReference = po.PurchaseOrderNumber
WHERE
doc.IsCleared = 'X' AND doc.ClearingDate IS NOT NULL
UNION ALL
-- 12. Purchase Order Completed
SELECT
po.PurchaseOrderNumber,
'Purchase Order Completed' AS ActivityName,
CAST(GREATEST(po.LastGoodsReceiptDate, po.LastInvoiceReceiptDate) AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
'SYSTEM' AS UserName,
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
WHERE
po.DeliveryIsCompleted = 'X'
AND (po.FinalInvoiceIsExpected = 'X' OR po.GoodsReceiptIsExpected = '') -- Logic for completion
AND GREATEST(po.LastGoodsReceiptDate, po.LastInvoiceReceiptDate) IS NOT NULL
UNION ALL
-- 13. Purchase Order Deleted
SELECT
po.PurchaseOrderNumber,
'Purchase Order Deleted' AS ActivityName,
CAST(po.POLastChangeDateTime AS TIMESTAMP) AS EventTime,
'[Your S/4HANA System ID]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
po.VendorId,
NULL AS UserName, -- User who set the flag is in change docs
po.TotalNetAmount,
po.PurchaseRequisitionNumber,
NULL AS RequestedDeliveryDate,
po.DocumentType
FROM PO_base po
WHERE
po.IsDeleted = 'X' Lépések
- Ellenőrizze, hogy rendelkezésre áll-e közvetlen SQL-hozzáférés az EKKO és EKPO táblákat tartalmazó SAP HANA-sémához, és szerezze be a szükséges olvasási jogosultságokat. Cserélje le a séma- és kapcsolati helyőrzőket a rendszerében beállított értékekre.
- Adja meg az adatkinyerés időszakát a [Kezdő időbélyeg] és [Záró időbélyeg] mezőkkel. Első betöltéskor 3–6 hónapos időszak javasolt. Vállalatkódra és bizonylattípusra csak akkor szűrjön, ha ezt a jelentés hatóköre megköveteli.
- Azonosítsa a beszerzési rendeléseket az EKKO és EKPO táblákban, és tartsa meg a rendelés számát, a beszállítót, a bizonylattípust, a vállalatkódot, a létrehozás dátumát és időpontját, valamint a tételszintű attribútumokat. Összesítse az EKPO nettó értékeit, hogy rendelésenként kiszámítsa a TotalNetAmount értékét.
- Nyerje ki a beszerzési igény létrehozásának és jóváhagyásának eseményeit az EBAN táblából. Az igényeket az EKPO-ban elérhető beszerzésiidény-szám és tételhivatkozás alapján kapcsolja a beszerzési rendelésekhez. Mivel az igény jóváhagyási jelzői és időbélyegei a kiadás konfigurációjától függően eltérnek, a jóváhagyási állapot és az időbélyeg kifejezéseit az aktív SAP-jóváhagyási stratégia alapján állítsa be a [Konfigurálás a rendszernek megfelelően] helyen.
- Nyerje ki a beszerzési rendelések létrehozásának, jóváhagyásának, módosításának, törlésének és lezárásának eseményeit. A létrehozás dátumát és időpontját az EKKO-ból vegye. A jóváhagyáshoz, módosításhoz és törléshez jóváhagyási vagy módosítási előzményekre van szükség. Ha a kiválasztott séma nem tartalmazza a megfelelő előzményeket, a forráskifejezéseket a [Saját táblanév] és [Saját oszlopnév] helyőrzők használatával állítsa be.
- Nyerje ki a beszállítói kommunikáció, az áruátvétel, a szolgáltatás teljesítésének visszaigazolása, az áruvisszaküldés, a számlabeérkezés és a számlakifizetés eseményeit a megfelelő kimeneti, anyagbizonylat-, szolgáltatásbejegyzési, számla-, könyvelési és kiegyenlítési forrásokból. A lekérdezés rendszerfüggő forrásobjektumokhoz tartozó helyőrzőket tartalmaz, mivel ezek az adatok nem nyerhetők ki kizárólag az EKKO és EKPO táblákból.
- Alakítsa az összes forráseseményt egységes eseménynapló-struktúrára. Minden sornak tartalmaznia kell a PurchaseOrderNumber, ActivityName, EventTime, SourceSystem, LastDataUpdate, VendorId, UserName, TotalNetAmount, PurchaseRequisitionNumber, RequestedDeliveryDate és DocumentType mezőt. Ha a forrás több érvényes eseményt tartalmaz, őrizze meg a tevékenység összes előfordulását.
- Ellenőrizze az időbélyegeket, és csak a pontosan egyező forrássorokat távolítsa el. Ne következtessen olyan tevékenységre, amelyhez nincs forrásrekord. A ProcessMind változtatás nélkül olvassa be az eseménynaplót, ezért a folyamatábrán megjelenő minden tevékenységnek külön sorban kell szerepelnie.
- Exportálja az eredményt tagolt fájlként vagy adatbázis-lekérdezés eredményeként, egy fejlécsorral és állandó oszlopnevekkel. A ProcessMind feltöltési beállításaiban támogatott időbélyeg-formátumot használjon, a PurchaseOrderNumber mezőt szövegként tartsa meg, majd a beállított ProcessMind-adatkapcsolaton keresztül töltse fel a teljes eseménynaplót.
Konfiguráció
- Forrásobjektumok: Az EKKO és EKPO a beszerzési rendelések fejlécének és tételeinek megerősített forrásai. Az igényekhez, jóváhagyási állapotokhoz, módosítási előzményekhez, kimenetekhez, anyagmozgásokhoz, szolgáltatásbejegyzésekhez, számlákhoz, kifizetésekhez és kiegyenlítésekhez szükséges további objektumokat az SAP S/4HANA kiadásának és aktív adatmodelljének megfelelően kell beállítani.
- Esetazonosító: Esetazonosítóként a PurchaseOrderNumber mezőt használja. A tételszintű eseményeket a beszerzési rendelés számához kapcsolja, a tételhivatkozásokat pedig szükség esetén tartsa meg egy további, forrásspecifikus oszlopban.
- Időszak: Kezdje 3–6 hónapnyi adattal. Korábbi adatok betöltésekor kisebb időszakokat dolgozzon fel, és egyeztesse az átfedő határokat az adatok kihagyásának elkerülésére.
- Szűrők: A szükséges hatókörnek megfelelően állítsa be a Company Code, Document Type, VendorId, beszerzési szervezet, beszerzési csoport és eseménydátum szűrőket. A vállalatkód- és bizonylattípus-szűrőkhöz a célrendszerben érvényes értékeket használjon.
- Események értelmezése: A létrehozás és a törlés egyértelműen rögzíthető, ha rendelkezésre állnak a megfelelő bizonylatmezők vagy naplók. A jóváhagyás és a lezárás állapotváltozáson alapuló esemény, ezért beállított állapot-időbélyegek szükségesek hozzá. Ne hozzon létre eseménysort kizárólag az aktuális állapot alapján, ha nincs megbízható esemény-időbélyeg.
- Teljesítmény: Korán szűrjön eseménydátum és szervezeti hatókör szerint, lehetőség szerint az eseményforrásokkal való összekapcsolás előtt összesítse az EKPO adatait, a nagyobb múltbeli betöltéseket pedig bontsa időszakokra. Gondoskodjon az adatbázis-statisztikák megfelelő beállításáról, és kerülje a tétel-, könyvelési és módosítási előzményforrások korlátozás nélküli összekapcsolását.
- Frissítés időpontja: Minden sor LastDataUpdate értékeként az adott futtatás adatkinyerési időpontját adja meg.
- Előfeltételek: Szükség van SAP HANA-kapcsolatra, az összes beállított forrásobjektum olvasási jogosultságára, a beszerzési, készletgazdálkodási, szolgáltatásbeszerzési, számlaellenőrzési és szállítói tartozáskezelési adatokhoz való hozzáférésre, valamint olyan ProcessMind-kapcsolatra, amely képes a kiválasztott fájl vagy eredményhalmaz importálására.
- Rendszerspecifikus beállítások: A lekérdezés minden szögletes zárójelbe tett forráshelyőrzőjét cserélje le a cél SAP S/4HANA rendszerben jóváhagyott táblára, nézetre, oszlopra vagy kifejezésre. Ne szerepeltessen hitelesítési adatokat a lekérdezésben vagy az adatkinyerés beállításaiban.
Példa-lekérdezés sql
WITH
params AS (
SELECT
CAST('[Start timestamp]' AS TIMESTAMP) AS start_ts,
CAST('[End timestamp]' AS TIMESTAMP) AS end_ts,
CAST(CURRENT_TIMESTAMP AS TIMESTAMP) AS last_data_update,
CAST('[Source system]' AS NVARCHAR(100)) AS source_system
FROM DUMMY
),
po_base AS (
SELECT
h.MANDT,
h.EBELN AS PurchaseOrderNumber,
h.LIFNR AS VendorId,
h.BSART AS DocumentType,
h.BUKRS AS CompanyCode,
CAST(h.AEDAT AS DATE) AS POChangedDate,
CAST(h.AEDAT AS TIMESTAMP) AS POChangedTimestamp,
CAST(h.ERNAM AS NVARCHAR(100)) AS POCreatedBy,
CAST(h.BEDAT AS DATE) AS PODate,
CAST(h.EBELN AS NVARCHAR(20)) AS PurchaseOrderKey,
CAST(SUM(COALESCE(i.NETWR, 0)) AS DECIMAL(23, 2)) AS TotalNetAmount,
CAST(MIN(i.BEDNR) AS NVARCHAR(20)) AS PurchaseRequisitionNumber,
CAST(MIN(i.EINDT) AS DATE) AS RequestedDeliveryDate
FROM EKKO h
INNER JOIN EKPO i
ON i.MANDT = h.MANDT
AND i.EBELN = h.EBELN
WHERE h.AEDAT >= (SELECT start_ts FROM params)
AND h.AEDAT < (SELECT end_ts FROM params)
AND h.BUKRS IN ([Company Code filter])
AND h.BSART IN ([Document Type filter])
GROUP BY
h.MANDT,
h.EBELN,
h.LIFNR,
h.BSART,
h.BUKRS,
h.AEDAT,
h.ERNAM,
h.BEDAT
),
po_items AS (
SELECT
i.MANDT,
i.EBELN AS PurchaseOrderNumber,
i.EBELP,
i.BANFN AS PurchaseRequisitionNumber,
i.BEDNR,
i.EINDT AS RequestedDeliveryDate
FROM EKPO i
),
events AS (
SELECT
p.PurchaseOrderNumber,
'Purchase Requisition Created' AS ActivityName,
CAST(r.[Purchase requisition creation timestamp] AS TIMESTAMP) AS EventTime,
s.source_system AS SourceSystem,
s.last_data_update AS LastDataUpdate,
p.VendorId,
CAST(r.[Purchase requisition created by] AS NVARCHAR(100)) AS UserName,
p.TotalNetAmount,
CAST(r.[Purchase requisition number] AS NVARCHAR(20)) AS PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your requisition source table or view] r
ON r.[Client] = p.MANDT
AND r.[Purchase requisition number] = p.PurchaseRequisitionNumber
CROSS JOIN params s
WHERE r.[Purchase requisition creation timestamp] >= s.start_ts
AND r.[Purchase requisition creation timestamp] < s.end_ts
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Requisition Approved' AS ActivityName,
CAST(r.[Purchase requisition approval timestamp] AS TIMESTAMP) AS EventTime,
s.source_system,
s.last_data_update,
p.VendorId,
CAST(r.[Purchase requisition approver] AS NVARCHAR(100)),
p.TotalNetAmount,
CAST(r.[Purchase requisition number] AS NVARCHAR(20)),
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your requisition approval history table or view] r
ON r.[Client] = p.MANDT
AND r.[Purchase requisition number] = p.PurchaseRequisitionNumber
CROSS JOIN params s
WHERE r.[Purchase requisition approval timestamp] >= s.start_ts
AND r.[Purchase requisition approval timestamp] < s.end_ts
AND r.[Approval status] = '[Approved status value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Created',
CAST(p.PODate AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
p.POCreatedBy,
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
CROSS JOIN params s
WHERE p.PODate >= CAST(s.start_ts AS DATE)
AND p.PODate < CAST(s.end_ts AS DATE)
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Approved',
CAST(a.[Purchase order approval timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(a.[Approver] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order release history table or view] a
ON a.[Client] = p.MANDT
AND a.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE a.[Purchase order approval timestamp] >= s.start_ts
AND a.[Purchase order approval timestamp] < s.end_ts
AND a.[Release status] = '[Approved release status value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Sent to Vendor',
CAST(o.[Output timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(o.[Output user] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order output source table or view] o
ON o.[Client] = p.MANDT
AND o.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE o.[Output timestamp] >= s.start_ts
AND o.[Output timestamp] < s.end_ts
AND o.[Output status] = '[Successfully processed output status]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Changed',
CAST(c.[Change timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(c.[Changed by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order change history table or view] c
ON c.[Client] = p.MANDT
AND c.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE c.[Change timestamp] >= s.start_ts
AND c.[Change timestamp] < s.end_ts
AND c.[Change indicator] = '[Changed indicator value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Goods Receipt Posted',
CAST(g.[Goods movement timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(g.[Posted by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your goods movement source table or view] g
ON g.[Client] = p.MANDT
AND g.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE g.[Goods movement timestamp] >= s.start_ts
AND g.[Goods movement timestamp] < s.end_ts
AND g.[Movement type] IN ([Goods receipt movement types])
AND g.[Reversal indicator] IS NULL
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Services Confirmation Entered',
CAST(v.[Service entry timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(v.[Entered by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your service entry sheet source table or view] v
ON v.[Client] = p.MANDT
AND v.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE v.[Service entry timestamp] >= s.start_ts
AND v.[Service entry timestamp] < s.end_ts
AND v.[Service entry status] = '[Accepted service entry status]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Goods Returned',
CAST(g.[Goods movement timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(g.[Posted by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your goods movement source table or view] g
ON g.[Client] = p.MANDT
AND g.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE g.[Goods movement timestamp] >= s.start_ts
AND g.[Goods movement timestamp] < s.end_ts
AND g.[Movement type] IN ([Goods return movement types])
AND g.[Reversal indicator] IS NULL
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Invoice Received',
CAST(i.[Invoice posting timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(i.[Posted by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your supplier invoice source table or view] i
ON i.[Client] = p.MANDT
AND i.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE i.[Invoice posting timestamp] >= s.start_ts
AND i.[Invoice posting timestamp] < s.end_ts
AND i.[Invoice status] = '[Posted invoice status]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Invoice Paid',
CAST(i.[Clearing timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(i.[Cleared by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your supplier invoice clearing source table or view] i
ON i.[Client] = p.MANDT
AND i.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE i.[Clearing timestamp] >= s.start_ts
AND i.[Clearing timestamp] < s.end_ts
AND i.[Clearing status] = '[Cleared status value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Completed',
CAST(x.[Completion timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(x.[Completion user] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order item status source table or view] x
ON x.[Client] = p.MANDT
AND x.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE x.[Completion timestamp] >= s.start_ts
AND x.[Completion timestamp] < s.end_ts
AND x.[Delivery completed indicator] = '[Set indicator value]'
AND x.[Final invoice indicator] = '[Set indicator value]'
UNION ALL
SELECT
p.PurchaseOrderNumber,
'Purchase Order Deleted',
CAST(d.[Deletion timestamp] AS TIMESTAMP),
s.source_system,
s.last_data_update,
p.VendorId,
CAST(d.[Deleted by] AS NVARCHAR(100)),
p.TotalNetAmount,
p.PurchaseRequisitionNumber,
p.RequestedDeliveryDate,
p.DocumentType
FROM po_base p
INNER JOIN [Your purchase order deletion history table or view] d
ON d.[Client] = p.MANDT
AND d.[Purchase order number] = p.PurchaseOrderNumber
CROSS JOIN params s
WHERE d.[Deletion timestamp] >= s.start_ts
AND d.[Deletion timestamp] < s.end_ts
AND d.[Deletion indicator] = '[Set deletion indicator value]'
)
SELECT
PurchaseOrderNumber,
ActivityName,
EventTime,
SourceSystem,
LastDataUpdate,
VendorId,
UserName,
TotalNetAmount,
PurchaseRequisitionNumber,
RequestedDeliveryDate,
DocumentType
FROM events
WHERE PurchaseOrderNumber IS NOT NULL
AND ActivityName IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY PurchaseOrderNumber, EventTime, ActivityName; Lépések
- Specifikáció és tervezés: Határozza meg az eseménynapló-fájl végleges adatszerkezetét, a szükséges és ajánlott attribútumokkal együtt. Dokumentálja, hogy a 13 szükséges tevékenység adataihoz mely SAP-táblákat használja, például az EKKO, EKPO, EKBE, CDHDR és CDPOS táblákat.
- A program létrehozása: Az SAP GUI-ban nyissa meg az ABAP-szerkesztőt az SE38 vagy SE80 tranzakciókóddal. Hozzon létre egy új futtatható programot, például Z_PM_PO_EXTRACT néven.
- Kiválasztási képernyő beállítása: Kódolja a jelentés kiválasztási képernyőjét, amelyen a felhasználók szűrhetik a kinyerni kívánt adatokat. Adjon meg paramétereket a beszerzési rendelés létrehozási dátumához (P_AEDAT), a vállalatkódhoz (P_BUKRS) és a beszerzési bizonylat típusához (P_BSART).
- Adatdeklarációk: Határozza meg a programhoz szükséges belső táblákat és adatszerkezeteket. Ezek között szerepeljen a specifikációban meghatározott szerkezetű, végleges eseménynaplót tároló belső tábla.
- Az adatlekérdezési logika megvalósítása: Írja meg a 13 tevékenység adatainak kiválasztásához szükséges ABAP-logikát. Ehhez a megfelelő SAP-táblákon kell SELECT utasításokat futtatni, szükség esetén összekapcsolva őket. A módosításokhoz kapcsolódó eseményekhez olvassa be a CDHDR és CDPOS módosításnapló-táblákat.
- Adatok átalakítása és hozzárendelése: Minden beolvasott rekord SAP-táblamezőit rendelje hozzá a végleges eseménynapló belső táblájának megfelelő oszlopaihoz. Állítsa be az ActivityName értékét a feldolgozott eseménynek megfelelően, például 'Purchase Order Created'. A dátum- és időmezőket alakítsa át az EventTime egységes időbélyeg-formátumára.
- Eseményadatok egyesítése: A 13 tevékenységtípus feldolgozása után gyűjtse össze az összes adatot egyetlen, egységes belső táblába. Ez a tábla tartalmazza a kiválasztott beszerzési rendelések teljes eseménynaplóját.
- Fájlba írás beállítása: Adjon hozzá funkciót a végleges belső tábla fájlba írásához. Javasolt a cl_gui_frontend_services=>gui_download metódus használata, amellyel a felhasználók CSV-fájlként menthetik az adatokat a saját gépükre. Háttérfeldolgozáshoz az OPEN DATASET utasítással mentheti a fájlt az SAP alkalmazáskiszolgálójára.
- Tranzakciókód létrehozása (nem kötelező): Ha azt szeretné, hogy az üzleti felhasználók könnyen elérjék a programot, az SE93 tranzakciókóddal hozzon létre egy egyedi tranzakciókódot, például ZPM_PO_EXTRACT néven, amely elindítja az ABAP-programot.
- Háttérfeladat ütemezése: Nagy adatmennyiség vagy automatizált adatkinyerés esetén az SM36 tranzakciókóddal ütemezze a program háttérfeladatként való futtatását. A kimeneti fájl a programlogikában megadott alkalmazáskiszolgáló-útvonalra kerül.
Konfiguráció
- Kiválasztási feltételek: A programban szerepeljenek az adatok hatékony szűréséhez szükséges kiválasztási paraméterek. A legfontosabb szűrők:
- Időszak: Kötelező megadni a beszerzési rendelés létrehozási dátumának (EKKO-AEDAT) időszakát. Az adatmennyiség és a jelentés teljesítményének kezelése érdekében kezdésként 3–6 hónapnyi időszak javasolt.
- Vállalatkód (BUKRS): Több jogi személlyel rendelkező szervezeteknél ezzel szűkíthető az adatkinyerés hatóköre.
- Beszerzési bizonylat típusa (BSART): Ezzel szűrhetők az egyes rendeléstípusok, például a normál beszerzési rendelés, a keretszerződéses rendelés vagy a készletáthelyezési rendelés.
- A módosításnapló beolvasása: Az olyan tevékenységek adatainak kinyerése, mint a 'Purchase Order Approved' vagy a 'Purchase Order Changed', az SAP módosításnapló-tábláinak (CDHDR, CDPOS) beolvasásán alapul. Ez jelentős erőforrásokat igényelhet. Az ABAP-logikát úgy optimalizálja, hogy csak a szükséges objektumosztályokat (EINKBELEG, BANF), valamint a megfelelő tábla- és mezőkombinációkat kérdezze le.
- Jogosultságok: A jelentést futtató felhasználónak vagy technikai fióknak kiterjedt olvasási jogosultságokra van szüksége több SAP-modul, köztük az anyaggazdálkodás (MM), a pénzügyi számvitel (FI) és a rendszerszintű táblák esetében. Ide tartoznak például az EKKO, EKPO, EBAN, EKBE, BKPF, BSAK, RBKP, NAST, CDHDR és CDPOS táblák.
- Háttérben történő futtatás: Ha az adatkinyerés több hónapnyi adatot érint, vagy nagy tranzakcióforgalmú rendszerben fut, mindig háttérben futtassa a programot, hogy elkerülje a párbeszédes folyamat időtúllépését.
Példa-lekérdezés abap
REPORT z_pm_po_extract.
" ====================================================================
" SELECTION SCREEN
" ====================================================================
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_aedat FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: s_bukrs FOR ekko-bukrs.
SELECT-OPTIONS: s_bsart FOR ekko-bsart.
PARAMETERS: p_sysid TYPE string DEFAULT '[Your SAP System ID]'.
SELECTION-SCREEN END OF BLOCK b1.
" ====================================================================
" DATA DECLARATIONS
" ====================================================================
TYPES: BEGIN OF ty_event_log,
purchaseordernumber TYPE ebeln,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE string,
lastdataupdate TYPE timestamp,
vendorid TYPE lifnr,
username TYPE ernam,
totalnetamount TYPE netwr,
purchaserequisitionnumber TYPE banfn,
requesteddeliverydate TYPE eedat,
documenttype TYPE bsart,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log.
DATA: lt_ekko TYPE TABLE OF ekko,
lt_ekpo TYPE TABLE OF ekpo.
" ====================================================================
" START OF SELECTION
" ====================================================================
START-OF-SELECTION.
" Get current timestamp for LastDataUpdate
GET TIME STAMP FIELD ls_event_log-lastdataupdate.
ls_event_log-sourcesystem = p_sysid.
" --- Initial Data Selection: Purchase Orders in Scope ---
SELECT * FROM ekko INTO TABLE lt_ekko
WHERE aedat IN s_aedat
AND bukrs IN s_bukrs
AND bsart IN s_bsart.
IF lt_ekko IS INITIAL.
MESSAGE 'No Purchase Orders found for the given criteria.' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
SELECT * FROM ekpo INTO TABLE lt_ekpo
FOR ALL ENTRIES IN lt_ekko
WHERE ebeln = lt_ekko-ebeln.
" --- 1. Purchase Requisition Created ---
SELECT ban.banfn, ban.erdat, ban.erzet, ban.ernam,
ekpo.ebeln, ekpo.netwr, ekpo.eindt, ekpo.bsart, ekpo.lifnr, ekko.bukrs
FROM eban AS ban
INNER JOIN ekpo AS ekpo ON ban.banfn = ekpo.banfn AND ban.bnfpo = ekpo.bnfpo
INNER JOIN ekko AS ekko ON ekpo.ebeln = ekko.ebeln
WHERE ekko.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_pr_created).
LOOP AT lt_pr_created INTO DATA(ls_pr_created).
ls_event_log-purchaseordernumber = ls_pr_created-ebeln.
ls_event_log-activityname = 'Purchase Requisition Created'.
CONVERT DATE ls_pr_created-erdat TIME ls_pr_created-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-vendorid = ls_pr_created-lifnr.
ls_event_log-username = ls_pr_created-ernam.
ls_event_log-totalnetamount = ls_pr_created-netwr.
ls_event_log-purchaserequisitionnumber = ls_pr_created-banfn.
ls_event_log-requesteddeliverydate = ls_pr_created-eindt.
ls_event_log-documenttype = ls_pr_created-bsart.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 2. Purchase Requisition Approved (via Change Docs on Release Indicator) ---
SELECT h.objectid, h.udate, h.utime, h.username
FROM cdhdr AS h
INNER JOIN cdpos AS p ON h.objectclas = p.objectclas AND h.objectid = p.objectid AND h.changenr = p.changenr
INNER JOIN ekpo AS ekpo ON h.objectid = ekpo.banfn
INNER JOIN ekko AS ekko ON ekpo.ebeln = ekko.ebeln
WHERE h.objectclas = 'BANF'
AND p.tabname = 'EBAN'
AND p.fname = 'FRGZU'
AND p.value_new = 'X' "Configure based on your system release indicator for 'Approved'
AND ekko.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_pr_approved).
LOOP AT lt_pr_approved INTO DATA(ls_pr_approved).
SELECT SINGLE ebeln FROM ekpo INTO ls_event_log-purchaseordernumber WHERE banfn = ls_pr_approved-objectid.
ls_event_log-activityname = 'Purchase Requisition Approved'.
CONVERT DATE ls_pr_approved-udate TIME ls_pr_approved-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_pr_approved-username.
" Other attributes can be populated with another SELECT if needed.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 3. Purchase Order Created ---
LOOP AT lt_ekko INTO DATA(ls_ekko_created).
ls_event_log-purchaseordernumber = ls_ekko_created-ebeln.
ls_event_log-activityname = 'Purchase Order Created'.
CONVERT DATE ls_ekko_created-aedat TIME ls_ekko_created-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-vendorid = ls_ekko_created-lifnr.
ls_event_log-username = ls_ekko_created-ernam.
ls_event_log-totalnetamount = ls_ekko_created-rlwrt.
ls_event_log-purchaserequisitionnumber = ''. "Can be enriched later if needed
ls_event_log-requesteddeliverydate = ''. "Can be enriched from EKPO
ls_event_log-documenttype = ls_ekko_created-bsart.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 4. Purchase Order Approved (via Change Docs on Release Indicator) ---
SELECT h.objectid, h.udate, h.utime, h.username
FROM cdhdr AS h
INNER JOIN cdpos AS p ON h.objectclas = p.objectclas AND h.objectid = p.objectid AND h.changenr = p.changenr
WHERE h.objectclas = 'EINKBELEG'
AND p.tabname = 'EKKO'
AND p.fname = 'FRGKE'
AND p.value_new = 'R' "R for Released
AND h.objectid IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_po_approved).
LOOP AT lt_po_approved INTO DATA(ls_po_approved).
ls_event_log-purchaseordernumber = ls_po_approved-objectid.
ls_event_log-activityname = 'Purchase Order Approved'.
CONVERT DATE ls_po_approved-udate TIME ls_po_approved-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_po_approved-username.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 5. Purchase Order Sent to Vendor ---
SELECT n.objky, n.vstat, n.datvr, n.uhrvr, e.ernam
FROM nast AS n
INNER JOIN ekko AS e ON n.objky = e.ebeln
WHERE n.kappl = 'EF' "Application for Purchasing
AND n.kschl = '[Your PO Output Type]' "e.g. NEU
AND n.vstat = '1' "Successfully processed
AND n.objky IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_po_sent).
LOOP AT lt_po_sent INTO DATA(ls_po_sent).
ls_event_log-purchaseordernumber = ls_po_sent-objky.
ls_event_log-activityname = 'Purchase Order Sent to Vendor'.
CONVERT DATE ls_po_sent-datvr TIME ls_po_sent-uhrvr INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_po_sent-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 6. Purchase Order Changed ---
SELECT objectid, udate, utime, username FROM cdhdr
WHERE objectclas = 'EINKBELEG'
AND tcode IN ('ME22', 'ME22N')
AND objectid IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_po_changed).
LOOP AT lt_po_changed INTO DATA(ls_po_changed).
ls_event_log-purchaseordernumber = ls_po_changed-objectid.
ls_event_log-activityname = 'Purchase Order Changed'.
CONVERT DATE ls_po_changed-udate TIME ls_po_changed-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_po_changed-username.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 7. Goods Receipt Posted & 9. Goods Returned ---
SELECT e.ebeln, m.budat, m.cpudt, m.cputm, m.usnam, b.shkzg, b.bwart
FROM mkpf AS m
INNER JOIN mseg AS s ON m.mblnr = s.mblnr AND m.mjahr = s.mjahr
INNER JOIN t156 AS t ON s.bwart = t.bwart
INNER JOIN ekbe AS e ON s.ebeln = e.ebeln AND s.ebelp = e.ebelp AND s.mblnr = e.belnr AND s.mjahr = e.gjahr
WHERE e.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
AND e.bwart IN ('101', '102', '122', '123') "GR, GR Reversal, Return
INTO TABLE @DATA(lt_goods_mvmt).
LOOP AT lt_goods_mvmt INTO DATA(ls_goods_mvmt).
ls_event_log-purchaseordernumber = ls_goods_mvmt-ebeln.
IF ls_goods_mvmt-bwart = '101'.
ls_event_log-activityname = 'Goods Receipt Posted'.
ELSE.
ls_event_log-activityname = 'Goods Returned'.
ENDIF.
CONVERT DATE ls_goods_mvmt-cpudt TIME ls_goods_mvmt-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_goods_mvmt-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 8. Services Confirmation Entered ---
SELECT h.erdat, h.erzeit, h.ernam, l.ebeln
FROM essr AS h
INNER JOIN esll AS l ON h.lblni = l.lblni
WHERE l.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_services).
LOOP AT lt_services INTO DATA(ls_services).
ls_event_log-purchaseordernumber = ls_services-ebeln.
ls_event_log-activityname = 'Services Confirmation Entered'.
CONVERT DATE ls_services-erdat TIME ls_services-erzeit INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_services-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 10. Invoice Received ---
SELECT r.ebeln, r.cpudt, r.cputm, r.usnam
FROM rbkp AS r
WHERE r.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_invoice_rcvd).
LOOP AT lt_invoice_rcvd INTO DATA(ls_invoice_rcvd).
ls_event_log-purchaseordernumber = ls_invoice_rcvd-ebeln.
ls_event_log-activityname = 'Invoice Received'.
CONVERT DATE ls_invoice_rcvd-cpudt TIME ls_invoice_rcvd-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_invoice_rcvd-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 11. Invoice Paid ---
SELECT b.ebeln, s.augdt, s.augbl, b.usnam
FROM rbkp AS b
INNER JOIN bseg AS e ON b.belnr = e.belnr AND b.gjahr = e.gjahr
INNER JOIN bsak AS s ON e.bukrs = s.bukrs AND e.belnr = s.belnr AND e.gjahr = s.gjahr AND e.buzei = s.buzei
WHERE b.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
AND s.augdt IS NOT NULL
INTO TABLE @DATA(lt_invoice_paid).
LOOP AT lt_invoice_paid INTO DATA(ls_invoice_paid).
ls_event_log-purchaseordernumber = ls_invoice_paid-ebeln.
ls_event_log-activityname = 'Invoice Paid'.
CONVERT DATE ls_invoice_paid-augdt INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_invoice_paid-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- 12. Purchase Order Completed & 13. Purchase Order Deleted (via Change Docs) ---
SELECT h.objectid, h.udate, h.utime, h.username, p.fname
FROM cdhdr AS h
INNER JOIN cdpos AS p ON h.changenr = p.changenr
INNER JOIN ekpo AS ekpo ON h.objectid = |{ ekpo.ebeln }{ ekpo.ebelp }|
WHERE h.objectclas = 'EINKBELEG'
AND p.tabname = 'EKPO'
AND p.fname IN ('ELIKZ', 'EREKZ', 'LOEKZ')
AND p.value_new = 'X'
AND ekpo.ebeln IN @( VALUE #( FOR ls_ekko IN lt_ekko ( ls_ekko-ebeln ) ) )
INTO TABLE @DATA(lt_po_status_change).
LOOP AT lt_po_status_change INTO DATA(ls_po_status_change).
ls_event_log-purchaseordernumber = substring( val = ls_po_status_change-objectid, off = 0, len = 10 ).
CASE ls_po_status_change-fname.
WHEN 'LOEKZ'.
ls_event_log-activityname = 'Purchase Order Deleted'.
WHEN 'ELIKZ' OR 'EREKZ'.
"This logic may need refinement to check if both are now set.
ls_event_log-activityname = 'Purchase Order Completed'.
ENDCASE.
CONVERT DATE ls_po_status_change-udate TIME ls_po_status_change-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-username = ls_po_status_change-username.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" --- Final Output to CSV ---
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = 'C:\temp\po_event_log.csv'
filetype = 'ASC'
CHANGING
data_tab = lt_event_log. Készen áll a kezdésre?
Ez a sablon biztos alapot ad a process mining használatának megkezdéséhez. Használja ki SAP S/4HANA-adatait, tárja fel a hatékonyságnövelési lehetőségeket, és fejlessze tovább beszerzéstől a fizetésig tartó folyamatát.
Rövidítse le a P2P-beszerzési rendelések ciklusidejét
Szüntesse meg a hatékonysági problémákat, és csökkentse 30%-kal a P2P-beszerzési rendelések ciklusidejét.
Nincs szükség bankkártyára. Néhány perc alatt beállíthatja.