Datatemplate voor voorraadbeheer
Datatemplate voor voorraadbeheer
- Aanbevolen attributen om te verzamelen
- Belangrijke activiteiten om vast te leggen voor procesontdekking
- Extractie-instructies voor SAP S/4HANA
Attributen voor voorraadbeheer
| Naam | Beschrijving | ||
|---|---|---|---|
| Tijdstip van gebeurtenis EventTime | De exacte datum en tijd waarop de voorraadactiviteit in het systeem is geregistreerd. | ||
| Beschrijving Tijdstip van gebeurtenis is de timestamp die precies vastlegt wanneer een activiteit plaatsvond. Dit datapunt is nodig om gebeurtenissen chronologisch te ordenen en zo de processtroom van elke voorraadbatch te reconstrueren. Het vormt de basis voor alle tijdsanalyses met process mining. Een nauwkeurig tijdstip van de gebeurtenis is belangrijk voor het berekenen van prestatie-indicatoren, zoals doorlooptijden en tijdsduur. Je kunt de procesprestaties over verschillende perioden analyseren, zien wanneer bottlenecks optreden en vertragingen onderbouwen met feiten. Zo kun je bijvoorbeeld meten hoelang een batch in kwaliteitscontrole blijft voordat deze wordt vrijgegeven. Waarom dit belangrijk is Deze timestamp ordent gebeurtenissen chronologisch en vormt de basis voor alle berekeningen van tijdsduur en prestaties. Waar vind je dit? Dit is meestal een combinatie van de boekingsdatum (MKPF-BUDAT) en de invoertijd (MKPF-CPUTM) uit de kopteksttabel MKPF van het materiaaldocument. Voorbeelden 2023-10-26T09:00:00Z2023-11-15T14:35:10Z2024-01-05T23:15:00Z | |||
| Voorraadbatch/lot InventoryBatchLot | De unieke identificatiecode voor een specifieke hoeveelheid van een product. Deze dient als case-ID om de levenscyclus te volgen. | ||
| Beschrijving Het voorraadbatch- of lotnummer is de belangrijkste case-ID. Hiermee groepeer je alle activiteiten rond een specifieke, afgebakende hoeveelheid van een product. Zo kun je de volledige chronologische route van een hoeveelheid voorraad volgen: vanaf de eerste ontvangst in het magazijn, via interne verplaatsingen en statuswijzigingen, tot de uitgifte voor verkoop of productie, of de afvoer. Dit attribuut is essentieel voor procesanalyse. Je kunt de volledige processtroom van elke batch volgen, doorlooptijden nauwkeurig meten, procesvarianten herkennen en zien hoe verschillende batches worden behandeld. Analyse op batchniveau is belangrijk in sectoren waar traceerbaarheid, kwaliteitscontrole en beheer van vervaldatums zwaar wegen, zoals de farmaceutische industrie, de voedingsmiddelen- en drankenindustrie en de chemische industrie. Waarom dit belangrijk is Dit is de belangrijkste identificatiecode die alle bijbehorende voorraadgebeurtenissen aan één case koppelt. Zo wordt end-to-end procesanalyse mogelijk. Waar vind je dit? Dit is meestal het batchnummer, te vinden in SAP-tabellen zoals MCHA (batchstamgegevens) of MCH1 (batches), in het veld CHARG. Voorbeelden B001-A452023L202405-XYZ789456123BATCH-05-24 | |||
| Activiteit ActivityName | De naam van de bedrijfsgebeurtenis die op een bepaald moment in het voorraadbeheerproces plaatsvond. | ||
| Beschrijving Het attribuut Activiteit beschrijft één stap of gebeurtenis in de levenscyclus van de voorraadbatch. Het gaat om belangrijke bedrijfsactiviteiten, zoals goederen ontvangen, voorraad verplaatsen, een kwaliteitscontrole uitvoeren of materiaal uitgeven. Elke activiteit registreert wat er op een bepaald moment met de voorraadbatch is gebeurd. Activiteiten analyseren is de basis van process mining. Je kunt de processtroom visualiseren, veelvoorkomende en zeldzame routes herkennen, bottlenecks opsporen waar activiteiten vertraging oplopen en herstelwerk analyseren. Door de volgorde en frequentie van activiteiten zoals 'Voorraad afgeboekt' of 'Kwaliteitscontrole' te begrijpen, kunnen bedrijven verbeterpunten in hun processen en bedrijfsvoering vinden. Waarom dit belangrijk is Dit attribuut bepaalt de stappen in het proces en maakt visualisatie en analyse van de levenscyclus van de voorraad mogelijk. Waar vind je dit? Dit is een afgeleid attribuut, vaak gebaseerd op SAP-bewegingstypen (MSEG-BWART) of transactiecodes (MKPF-TCODE2), die worden omgezet naar begrijpelijke namen. Voorbeelden Goederenontvangst geboektOverboeking voor het wegzetten van goederen geboektGoederenuitgifte voor levering geboektVoorraad afgeboekt | |||
| Bewegingstype MovementType | Een sleutel van drie cijfers in SAP die bepaalt hoe een goederenbeweging wordt geboekt. | ||
| Beschrijving Het bewegingstype is een belangrijke controlesleutel in SAP Inventory Management en bepaalt de kenmerken van een materiaalbeweging. Het geeft aan welke rekeningen worden bijgewerkt, hoe het transactiescherm wordt weergegeven en welke velden voor hoeveelheden of waarden worden bijgewerkt. Zo staat '101' voor goederenontvangst, '311' voor een overboeking en '551' voor een afboeking. Dit attribuut wordt vaak gebruikt om de begrijpelijke naam van de activiteit af te leiden. Door processen per bewegingstype te analyseren, krijg je een gedetailleerd technisch beeld van de voorraadstromen. Dit is belangrijk om de nauwkeurigheid van de proceskaart te controleren en specifieke transacties op te sporen die bottlenecks of afwijkingen kunnen veroorzaken. Waarom dit belangrijk is Dit attribuut geeft elke voorraadgebeurtenis een nauwkeurige technische classificatie. Dat is belangrijk om activiteiten af te leiden en de data gedetailleerd te analyseren. Waar vind je dit? Te vinden in de tabel MSEG met materiaaldocumentregels, in veld BWART (bewegingstype). Voorbeelden 101311261551601 | |||
| Gebruikersnaam UserName | De gebruikers-ID van de persoon die de transactie in SAP heeft uitgevoerd. | ||
| Beschrijving Dit attribuut bevat de SAP-gebruikers-ID van de medewerker die het document heeft geboekt of de activiteit heeft uitgevoerd. Zo kun je nagaan wie verantwoordelijk is voor specifieke handelingen in het voorraadbeheerproces. Analyse per gebruiker is belangrijk om prestaties, compliance en opleidingsbehoeften te begrijpen. Zo gebruikt het dashboard 'Oorzaken van handmatige voorraadcorrecties' dit attribuut om te zien wie de meeste correcties uitvoert. Je kunt hiermee gebruikers vinden die extra training nodig hebben, onbevoegde activiteiten opsporen of goed presterende medewerkers herkennen. Waarom dit belangrijk is Dit attribuut maakt verantwoordelijkheden inzichtelijk en helpt gedrag, opleidingsbehoeften of complianceproblemen per gebruiker te herkennen. Waar vind je dit? Te vinden in de kopteksttabel MKPF van het materiaaldocument, in veld USNAM (gebruikersnaam). Voorbeelden JSMITHMBROWNWAREHOUSE_OPS | |||
| Hoeveelheid Quantity | De hoeveelheid materiaal die bij de voorraadmutatie betrokken is. | ||
| Beschrijving Dit attribuut geeft aan hoeveel materiaal bij een activiteit is verplaatst, ontvangen, uitgegeven of gecorrigeerd. De hoeveelheid wordt vastgelegd in de basiseenheid van het materiaal. Met de hoeveelheid zie je hoe groot de voorraadprocessen zijn en wat de impact ervan is. Je kunt dashboards maken die het volume van verwerkte goederen tonen, zoals ‘Doorvoer van goederenuitgifte per SKU’. Ook kun je KPI’s berekenen, zoals de verhouding afgeboekte of afgevoerde voorraad. Zo krijgt de procesanalyse een kwantitatieve dimensie, naast het aantal gebeurtenissen. Waarom dit belangrijk is Dit kwantificeert de hoeveelheid materiaal per activiteit en maakt analyses mogelijk van doorvoer, afgeboekte voorraad en de impact van correcties. Waar vind je dit? Te vinden in de tabel met materiaaldocumentposities MSEG, veld MENGE (hoeveelheid). Voorbeelden 10012.55000-10 | |||
| Materiaalnummer MaterialNumber | De unieke identificatiecode van het product of materiaal dat wordt beheerd. | ||
| Beschrijving Het materiaalnummer, ook wel SKU (Stock Keeping Unit) genoemd, is de unieke code voor een specifiek product. Het is een belangrijk stamgegeven voor voorraadbeheer en wordt gebruikt om hoeveelheden, waarden en goederenbewegingen bij te houden. Met process mining kun je voorraadprocessen per materiaalnummer analyseren. Zo zie je welke producten de langste kwaliteitscontroles hebben, het vaakst worden afgeboekt of de meeste interne verplaatsingen kennen. Deze uitsplitsing helpt productspecifieke problemen te vinden en de voorraadstrategie voor verschillende soorten goederen te verbeteren. Waarom dit belangrijk is Hiermee kun je de analyse per product uitsplitsen en patronen en problemen voor specifieke artikelen herkennen. Waar vind je dit? Te vinden in de tabel MSEG met materiaaldocumentregels, in veld MATNR. De stamgegevens staan in tabel MARA. Voorbeelden RM-1001FG-2050-B100-400-A | |||
| Opslaglocatie StorageLocation | Een specifieke locatie binnen een Plant waar voorraad fysiek wordt opgeslagen. | ||
| Beschrijving Een opslaglocatie is een organisatie-eenheid waarmee je materiaalvoorraden binnen een Plant van elkaar kunt onderscheiden. Een Plant kan bijvoorbeeld aparte opslaglocaties hebben voor grondstoffen, gereed product en voorraad die op kwaliteitscontrole wacht. Dit attribuut geeft een gedetailleerder beeld van de locatie dan Plant. Je gebruikt het in analyses om verplaatsingen tussen voorraadgebieden te volgen, zoals de doorlooptijd van verplaatsingen van de ontvangstzone naar het hoofdmagazijn. Door opslagbenutting en verplaatsingsfrequentie per opslaglocatie te analyseren, kun je de magazijnindeling en interne logistiek verbeteren. Waarom dit belangrijk is Dit geeft een gedetailleerd beeld van de voorraadlocatie binnen een Plant en helpt interne verplaatsingen en de efficiëntie van opslag te analyseren. Waar vind je dit? Te vinden in de tabel met materiaaldocumentposities MSEG, veld LGORT (opslaglocatie). Voorbeelden 0001RM01FG01QI01 | |||
| Redencode voor goederenbeweging MovementReasonCode | Een code die de reden voor een voorraadmutatie aangeeft. | ||
| Beschrijving De reden voor goederenbeweging geeft extra context over waarom een goederenbeweging is uitgevoerd. De code wordt vaak gebruikt om ongeplande bewegingen toe te lichten, zoals voorraadcorrecties, retouren of afboekingen. Dit attribuut is waardevol voor oorzaakanalyse. In het dashboard ‘Redenen voor handmatige voorraadcorrecties’ kan een analyse per redencode laten zien waarom verschillen ontstaan, bijvoorbeeld door schade, diefstal of invoerfouten. Zo kunnen bedrijven het onderliggende probleem aanpakken in plaats van alleen de gevolgen te corrigeren. Waarom dit belangrijk is Dit verklaart waarom ongeplande voorraadmutaties plaatsvinden en maakt gerichte oorzaakanalyse mogelijk. Waar vind je dit? Te vinden in de tabel met materiaaldocumentposities MSEG, veld GRUND (reden voor goederenbeweging). Voorbeelden 00010005102 | |||
| Vestiging Plant | De organisatie-eenheid voor een locatie waar voorraad wordt opgeslagen, zoals een fabriek of distributiecentrum. | ||
| Beschrijving Een Plant is een centrale organisatie-eenheid in SAP. Deze kan staan voor een productielocatie, een centraal magazijn of het hoofdkantoor. Alle voorraad bevindt zich fysiek of administratief binnen een Plant. Door processen per Plant te analyseren, kun je de prestaties op verschillende locaties vergelijken. Zo krijg je antwoord op vragen als: ‘Bij welke Plant duurt het wegzetten van goederen het langst?’ en ‘Is het percentage voorraadverschillen bij Plant A hoger dan bij Plant B?’ Deze geografische of organisatorische indeling helpt om locatiegebonden problemen te vinden en goede werkwijzen binnen de organisatie te delen. Waarom dit belangrijk is Hiermee kun je voorraadprocessen en prestaties op verschillende bedrijfslocaties vergelijken. Waar vind je dit? Te vinden in de tabel met materiaaldocumentposities MSEG, veld WERKS (Plant). Voorbeelden 10001710DE01US01 | |||
| Bronsysteem SourceSystem | Geeft aan uit welk bronsysteem de data is opgehaald. | ||
| Beschrijving Dit attribuut geeft aan uit welk registratiesysteem de data over voorraadbeheer afkomstig is. In dit geval gaat het om een specifieke SAP S/4HANA-instantie. Deze informatie is belangrijk wanneer data uit meerdere ERP-systemen, magazijnbeheersystemen of oudere platforms komt. Bij een analyse van één systeem lijkt dit attribuut misschien onveranderlijk. Het wordt belangrijk zodra je data uit verschillende bronnen samenvoegt voor een volledig beeld van het proces. Het helpt bij datagovernance, het oplossen van problemen met data-extractie en het vastleggen van de herkomst van data. Waarom dit belangrijk is Dit attribuut geeft context over de herkomst van de data en is belangrijk voor datagovernance en analyses van meerdere systemen. Waar vind je dit? Dit is meestal een vaste waarde die tijdens de datatransformatie wordt ingesteld om de specifieke SAP S/4HANA-instantie aan te duiden. Voorbeelden S4H_PROD_100SAP_S4_FINANCES4HANA_GLOBAL | |||
| Doorlooptijd van orderafhandeling OrderFulfillmentCycleTime | De totale tijd vanaf het begin van het verzamelen tot het boeken van de goederenuitgifte voor levering. | ||
| Beschrijving Dit is een berekende metriek die de totale tijd meet tussen de activiteit ‘Verzamelen gestart’ en ‘Goederenuitgifte voor levering geboekt’. De metriek geeft aan hoelang het magazijn nodig heeft om een klantorder klaar te maken en te verzenden nadat het proces is gestart. Dit attribuut meet rechtstreeks de KPI ‘Doorlooptijd van orderafhandeling’. Met een analyse van deze duur zie je hoe snel het bedrijf op de klantvraag reageert. Je kunt de doorlooptijd uitsplitsen naar product, magazijn of klant om vertragingen bij het verzamelen, verpakken en verzenden te vinden. Die vertragingen hebben direct invloed op de klanttevredenheid en de efficiëntie van de logistiek. Waarom dit belangrijk is Dit meet de snelheid en efficiëntie van de goederenuitstroom uit het magazijn, een belangrijke factor voor klanttevredenheid. Waar vind je dit? Dit is een berekend attribuut. Het wordt per batch bepaald door het tijdsverschil te berekenen tussen de gebeurtenissen ‘Verzamelen gestart’ en ‘Goederenuitgifte voor levering geboekt’. Voorbeelden 7200144003600 | |||
| Laatste data-update LastDataUpdate | De timestamp die aangeeft wanneer de data voor dit record voor het laatst vanuit het bronsysteem is bijgewerkt. | ||
| Beschrijving Dit attribuut registreert de datum en tijd van de meest recente data-extractie of update vanuit het bronsysteem. Het geeft belangrijke informatie over hoe actueel de geanalyseerde data is. Zo kun je zien of je naar data kijkt die bijna realtime is of naar een momentopname uit een eerdere periode. Om relevante en nauwkeurige conclusies te trekken, moet je weten hoe actueel de data is. Met dit veld kunnen analisten en zakelijke gebruikers controleren of de data up-to-date is. Vaak wordt het ook in dashboards getoond om context te geven bij de inzichten. Waarom dit belangrijk is Dit attribuut laat zien hoe actueel de data is, zodat gebruikers weten of de analyse op recente informatie is gebaseerd. Waar vind je dit? Deze timestamp wordt aangemaakt en toegevoegd tijdens het proces voor data-extractie, transformatie en laden (ETL). Voorbeelden 2024-05-21T08:00:00Z2024-05-20T08:00:00Z | |||
| Magazijnlocatie StorageBin | De meest gedetailleerde opslaglocatie in een magazijn, waar materialen fysiek liggen. | ||
| Beschrijving Een magazijnlocatie is een specifieke plek in een magazijn, zoals een locatie in een stelling. Dit detailniveau wordt meestal gebruikt wanneer SAP Warehouse Management (WM) of Extended Warehouse Management (EWM) is geïmplementeerd. Dit attribuut is belangrijk voor het dashboard ‘Benutting van magazijnruimte’. Je kunt ermee analyseren hoe efficiënt de magazijnruimte wordt gebruikt, mogelijke opstoppingen vinden en inefficiënte routes voor het wegzetten of verzamelen van goederen opsporen. Door verplaatsingen tussen magazijnlocaties te analyseren, kun je de magazijnindeling verbeteren en de looptijd voor medewerkers verkorten. Waarom dit belangrijk is Dit geeft de meest gedetailleerde locatiegegevens en maakt analyse van ruimtebenutting en operationele efficiëntie in het magazijn mogelijk. Waar vind je dit? Bij gebruik van WM vind je dit mogelijk in transferordertabellen zoals LTAK/LTAP. Voor voorraadocumenten kan het veld MSEG-LGPBE worden gebruikt. Raadpleeg de documentatie van SAP S/4HANA. Voorbeelden A-01-01-AB-05-10-CONTVANGSTZONE-01 | |||
| Materiaaldocumentnummer MaterialDocumentNumber | Het unieke nummer van het materiaaldocument waarin de goederenbeweging is vastgelegd. | ||
| Beschrijving Wanneer een goederenbeweging in SAP wordt geboekt, maakt het systeem een materiaaldocument aan als bewijs van de beweging. Dit attribuut is de unieke identificatie van dat document. Eén materiaaldocument kan meerdere posities of activiteiten bevatten. Bij process mining is het materiaaldocumentnummer een belangrijke transactie-identificatie. Je kunt het gebruiken om gebeurtenissen te groeperen die samen zijn geboekt. Het is ook nodig voor controles en om vanuit de procesanalyse in te zoomen op het bronsysteem en specifieke transacties te onderzoeken. Waarom dit belangrijk is Dit is een transactiesleutel voor controles en maakt het mogelijk activiteiten te groeperen die samen zijn uitgevoerd. Waar vind je dit? Te vinden in de tabellen MKPF (kop) en MSEG (positie), veld MBLNR (materiaaldocumentnummer). Voorbeelden 490000123450000056784900002345 | |||
| Meeteenheid UnitOfMeasure | De eenheid waarin de hoeveelheid materiaal wordt gemeten, bijvoorbeeld stuks of kilogram. | ||
| Beschrijving De meeteenheid geeft aan in welke eenheid het attribuut ‘Hoeveelheid’ is uitgedrukt. Veelgebruikte voorbeelden zijn stuks (PC), kilogram (KG), liter (L) en dozen (BOX). Zo krijgt de hoeveelheid de juiste context. Dit attribuut lijkt soms alleen een omschrijving, maar is belangrijk voor de datakwaliteit en voor analyses waarin verschillende eenheden naar een standaard moeten worden omgerekend. Om bijvoorbeeld de totale waarde van afgeboekte voorraad te berekenen, moeten hoeveelheden in verschillende eenheden correct worden geïnterpreteerd en eventueel omgerekend. Waarom dit belangrijk is Dit geeft het attribuut ‘Hoeveelheid’ de nodige context, zodat je materiaalvolumes correct kunt interpreteren. Waar vind je dit? Te vinden in de tabel met materiaaldocumentposities MSEG, veld MEINS (basiseenheid). Voorbeelden StuksKGStuksMeter | |||
| Vervaldatum ExpirationDate | De datum waarop een partij materiaal verloopt en niet meer bruikbaar is. | ||
| Beschrijving De uiterste houdbaarheidsdatum (SLED) is belangrijke stamdata voor bederfelijke of tijdgevoelige goederen. De datum wordt op batchniveau beheerd en bepaalt wanneer een product niet meer verkocht of gebruikt mag worden. Dit attribuut is nodig voor het dashboard ‘Analyse van verouderde en verlopen voorraad’. Door activiteiten te analyseren in relatie tot de vervaldatum, kunnen bedrijven batches vinden die dreigen te verlopen en op tijd maatregelen nemen. Zo kun je nagaan hoe goed het voorraadrotatiebeleid First-Expired-First-Out (FEFO) werkt en de verliezen door afgeboekte verlopen voorraad berekenen. Waarom dit belangrijk is Dit maakt analyse van verouderde en verlopen voorraad mogelijk en helpt verspilling en financiële verliezen te beperken. Waar vind je dit? Te vinden in de batchstamdatatabel MCH1 of MCHA, veld VFDAT (uiterste houdbaarheidsdatum). Voorbeelden 2024-12-312025-06-302024-09-01 | |||
| Voorraadtype StockType | Geeft de status van de voorraad aan, bijvoorbeeld vrij beschikbaar, in kwaliteitscontrole of geblokkeerd. | ||
| Beschrijving Het voorraadtype deelt voorraad in op basis van de bruikbaarheid. De belangrijkste typen zijn vrij beschikbare voorraad, voorraad in kwaliteitscontrole en geblokkeerde voorraad. Bij goederenbewegingen verandert het voorraadtype vaak. Door veranderingen in het voorraadtype te volgen, krijg je inzicht in de beschikbaarheid van voorraad. Dit ondersteunt activiteiten als ‘Voorraad geboekt voor kwaliteitscontrole’ en ‘Voorraadstatus gewijzigd naar geblokkeerd’. Door te analyseren hoelang voorraad in elk type blijft, vooral in kwaliteitscontrole, kun je vertragingen vinden die de beschikbaarheid voor verkoop of productie beïnvloeden. Waarom dit belangrijk is Dit volgt de bruikbaarheidsstatus van de voorraad en helpt vertragingen bij kwaliteitscontrole en voorraadbeschikbaarheid te analyseren. Waar vind je dit? Te vinden in de tabel met materiaaldocumentposities MSEG, veld INSMK (voorraadtype). Voorbeelden Vrij beschikbaarKwaliteitscontroleGeblokkeerde voorraad | |||
Activiteiten in voorraadbeheer
| Activiteit | Beschrijving | ||
|---|---|---|---|
| Goederenontvangst geboekt | Legt vast dat een voorraadbatch voor het eerst het magazijn binnenkomt, meestal van een leverancier of uit de productie. SAP S/4HANA registreert deze gebeurtenis expliciet wanneer bij ontvangst van de goederen een materiaaldocument wordt aangemaakt. | ||
| Waarom dit belangrijk is Dit is de belangrijkste startgebeurtenis in de levenscyclus van de voorraad. De tijd tussen deze activiteit en bijvoorbeeld het wegzetten van goederen is belangrijk om de efficiëntie van de ontvangstzone te meten. Waar vind je dit? Vastgelegd in de tabel MATDOC. Herkenbaar aan specifieke bewegingstypen (BWART), zoals 101 voor ontvangst van een inkooporder of 103 voor goederenontvangst in geblokkeerde voorraad. Vastleggen Af te leiden uit materiaaldocumenten in MATDOC met de bijbehorende bewegingstypen voor goederenontvangst. Gebeurtenistype explicit | |||
| Goederenuitgifte voor levering geboekt | Legt de laatste stap van het uitgaande proces vast, waarbij het eigendom van de batch overgaat naar een klant of vervoerder. Dit is een expliciete transactie die de voorraad verlaagt en in de boekhouding wordt verwerkt. | ||
| Waarom dit belangrijk is Dit is een belangrijke afrondende gebeurtenis in de orderafhandeling. Je hebt deze nodig om tijdige levering te meten en de totale doorlooptijd van orderafhandeling te berekenen. Waar vind je dit? Vastgelegd in de tabel MATDOC. Herkenbaar aan het bewegingstype (BWART) voor goederenuitgifte bij een verkooporderlevering, meestal 601. Vastleggen Af te leiden uit materiaaldocumenten in MATDOC met bewegingstype 601. Gebeurtenistype explicit | |||
| Goederenuitgifte voor productie geboekt | Geeft het verbruik van een voorraadbatch voor een productie- of procesorder weer. Deze transactie verlaagt de voorraad en boekt de materiaalkosten toe aan de productieorder. | ||
| Waarom dit belangrijk is Dit is een belangrijke verbruiksgebeurtenis en markeert het einde van de levenscyclus van onderdelen in de voorraad. De gebeurtenis is belangrijk om de beschikbaarheid van materialen voor productie en verbruikspatronen te analyseren. Waar vind je dit? Vastgelegd in de tabel MATDOC. Herkenbaar aan bewegingstypen (BWART) voor goederenuitgifte bij een order, zoals 261. Vastleggen Af te leiden uit materiaaldocumenten in MATDOC met bewegingstype 261. Gebeurtenistype explicit | |||
| Overboeking voor het wegzetten van goederen geboekt | Geeft de fysieke verplaatsing van een batch weer, van de ontvangst- of bufferzone naar de uiteindelijke opslaglocatie of opslagpositie. In SAP wordt dit vastgelegd als een materiaaldocument voor een overboeking. | ||
| Waarom dit belangrijk is Hiermee is het inkomende ontvangstproces afgerond. De tijd die hiervoor nodig is, de tijd voor het wegzetten van goederen, is een belangrijke KPI voor de efficiëntie van het magazijn. Waar vind je dit? Vastgelegd als overboeking in de tabel MATDOC, vaak tussen opslaglocaties (bijvoorbeeld bewegingstype 311). De specifieke beweging hangt af van de magazijnindeling. Vastleggen Herkenbaar aan overboekingsdocumenten in MATDOC die voorraad van een tijdelijke of ontvangstlocatie (SLoc) naar de uiteindelijke opslaglocatie (SLoc) verplaatsen. Gebeurtenistype explicit | |||
| Voorraad afgeboekt | Markeert de definitieve afvoer van een voorraadbatch, die permanent uit de voorraadregistratie wordt verwijderd. Dit gebeurt meestal bij verlopen, beschadigde of verouderde voorraad. | ||
| Waarom dit belangrijk is Dit is een eindgebeurtenis die financieel verlies vertegenwoordigt. Door afboekingen te analyseren, kun je problemen met veroudering van voorraad, behandelingsprocedures of vraagprognoses opsporen. Waar vind je dit? Vastgelegd in de tabel MATDOC. Herkenbaar aan bewegingstypen (BWART) voor afboekingen, zoals 551 (uit onbeperkt bruikbare voorraad), 553 (uit kwaliteitscontrole) of 555 (uit geblokkeerde voorraad). Vastleggen Af te leiden uit materiaaldocumenten in MATDOC met bewegingstypen voor afboekingen (bijvoorbeeld 551). Gebeurtenistype explicit | |||
| Voorraad vrijgegeven na kwaliteitscontrole | Geeft aan dat een batch de kwaliteitscontrole heeft doorstaan en beschikbaar is voor gebruik of om te worden weggezet. Dit wordt vastgelegd als een expliciete overboeking van kwaliteitsvoorraad naar een ander voorraadtype, zoals onbeperkt bruikbare voorraad. | ||
| Waarom dit belangrijk is Deze mijlpaal markeert het einde van het kwaliteitsproces en maakt de voorraad beschikbaar. Vertraging kan hier grote gevolgen hebben voor de productie of orderafhandeling. Waar vind je dit? Vastgelegd als overboeking in de tabel MATDOC. Meestal herkenbaar aan bewegingstype (BWART) 321, waarmee voorraad van 'kwaliteitscontrole' naar 'onbeperkt bruikbaar' wordt verplaatst. Vastleggen Af te leiden uit materiaaldocumenten in MATDOC met bewegingstype 321. Gebeurtenistype explicit | |||
| Voorraadcorrectie geboekt | Legt een wijziging in de voorraadhoeveelheid vast na een fysieke inventarisatie of een ander vastgesteld verschil. Met deze gebeurtenis wordt de boekvoorraad aangepast aan de getelde voorraad. | ||
| Waarom dit belangrijk is Deze correcties zijn belangrijk voor een nauwkeurige voorraadadministratie. Veel correcties kunnen wijzen op onderliggende problemen met voorraadbeheer, beveiliging of gegevensinvoer. Waar vind je dit? Vastgelegd in de tabel MATDOC. Herkenbaar aan bewegingstypen (BWART) voor fysieke inventarisaties, zoals 701 (voorraadtoename) of 702 (voorraadafname). Vastleggen Af te leiden uit materiaaldocumenten in MATDOC met bewegingstypen voor voorraadcorrecties na een fysieke inventarisatie (bijvoorbeeld 701, 702). Gebeurtenistype explicit | |||
| Batchstatus gewijzigd | Geeft een wijziging in het stamrecord van de batch weer, bijvoorbeeld een statuswijziging van 'onbeperkt bruikbaar' naar 'beperkt bruikbaar'. Dit is geen materiaalverplaatsing, maar een wijziging in stamgegevens die wordt geregistreerd. | ||
| Waarom dit belangrijk is Wijzigingen in de batchstatus hebben direct invloed op het gebruik van de batch voor verkoop of productie. Door deze wijzigingen te analyseren, kun je problemen met voorraad die bijna verloopt of met kwaliteitscontrole opsporen, ook als er geen fysieke verplaatsing plaatsvindt. Waar vind je dit? Af te leiden uit wijzigingslogboeken voor de batchstamtabellen (MCH1, MCHA). De tabellen CDHDR en CDPOS registreren wijzigingen in het batchstatusveld (MCH1-ZUSTD). Vastleggen Af te leiden uit wijzigingsdocumenten in CDHDR/CDPOS voor het statusveld in het batchstamrecord (MCH1-ZUSTD). Gebeurtenistype inferred | |||
| Interne voorraadverplaatsing geboekt | Legt de verplaatsing vast van een voorraadbatch tussen verschillende opslaglocaties of opslagposities binnen dezelfde vestiging. Dit is een expliciete transactie waarbij een materiaaldocument wordt aangemaakt. | ||
| Waarom dit belangrijk is Door interne verplaatsingen te volgen, kun je de efficiëntie van het magazijn analyseren, onnodige verplaatsingen opsporen en de doorlooptijd van voorraadbevoorrading tussen locaties meten. Waar vind je dit? Vastgelegd in de tabel MATDOC. Voor verplaatsingen tussen opslaglocaties wordt vaak bewegingstype (BWART) 311 gebruikt. Vastleggen Af te leiden uit materiaaldocumenten in MATDOC met bewegingstypen voor interne voorraadverplaatsingen (bijvoorbeeld 311). Gebeurtenistype explicit | |||
| Picken gestart | Markeert het begin van de orderafhandeling. Er wordt een magazijnopdracht aangemaakt om een batch uit de opslagpositie te picken. Dit wordt vaak vastgelegd wanneer een transferorder of magazijnopdracht wordt aangemaakt. | ||
| Waarom dit belangrijk is Deze activiteit start het pickproces. Door de tijd tussen deze gebeurtenis en het afronden van het picken te analyseren, kun je de efficiëntie van magazijnmedewerkers meten en vertragingen opsporen. Waar vind je dit? Dit staat doorgaans niet in MATDOC. In systemen met Warehouse Management (WM/EWM) is dit af te leiden uit de aanmaaktimestamp van een transferorder (tabel LTAK) of magazijnopdracht. Vastleggen Af te leiden uit de aanmaakregistratie van een transferorder (in WM) of magazijnopdracht (in EWM) die aan de materiaalbatch is gekoppeld. Gebeurtenistype inferred | |||
| Retour van klant ontvangen | Legt vast dat een eerder uitgegeven batch door een klant is geretourneerd naar het magazijn. Dit is een expliciete transactie die de voorraad verhoogt. | ||
| Waarom dit belangrijk is Retouren volgen is belangrijk om problemen met productkwaliteit en ontevreden klanten te begrijpen. Ook de afhandeling en bestemming van retouren kunnen inefficiënt zijn. Waar vind je dit? Vastgelegd in de tabel MATDOC. Herkenbaar aan bewegingstypen (BWART) voor verkoopretouren, zoals 651 (naar onbeperkt bruikbare voorraad) of 653 (naar kwaliteitscontrole). Vastleggen Af te leiden uit materiaaldocumenten in MATDOC met bewegingstypen voor verkoopretouren (bijvoorbeeld 651, 653). Gebeurtenistype explicit | |||
| Voorraad geboekt voor kwaliteitscontrole | Geeft aan dat een ontvangen batch naar de status voor kwaliteitscontrole is verplaatst en niet beschikbaar is totdat deze is vrijgegeven. Dit is een expliciete transactie in SAP die het voorraadtype van de batch wijzigt. | ||
| Waarom dit belangrijk is Deze activiteit start het kwaliteitscontroleproces. De tijd tussen deze stap en de vrijgave uit de kwaliteitscontrole is een belangrijke metriek om vertragingen door kwaliteitscontroles te begrijpen. Waar vind je dit? Vastgelegd in de tabel MATDOC. Dit kan een goederenontvangst zijn (bijvoorbeeld 101) met voorraadtype (INSMK) ingesteld op 'Q' (kwaliteitscontrole), of een overboeking (bijvoorbeeld 322). Vastleggen Herkenbaar aan materiaaldocumenten in MATDOC die voorraad naar het voorraadtype 'kwaliteitscontrole' verplaatsen. Gebeurtenistype explicit | |||
| Voorraadstatus gewijzigd naar geblokkeerd | Geeft een statuswijziging van de batch weer, waardoor deze niet meer kan worden uitgegeven. Dit gebeurt bijvoorbeeld bij schade, een blokkering of om andere redenen. In SAP wordt dit vastgelegd als een expliciete overboeking. | ||
| Waarom dit belangrijk is Maakt onderbrekingen in de beschikbaarheid van voorraad zichtbaar. Veel blokkeringen kunnen wijzen op problemen met de behandeling, opslagomstandigheden of leverancierskwaliteit. Waar vind je dit? Vastgelegd als overboeking in de tabel MATDOC. Bewegingstype (BWART) 344 wordt vaak gebruikt om voorraad van 'geblokkeerd' naar 'onbeperkt bruikbaar' te verplaatsen, en 343 voor de omgekeerde beweging. Deze activiteit hoort bij bewegingstype 343. Vastleggen Herkenbaar aan materiaaldocumenten in MATDOC met bewegingstype 343. Gebeurtenistype explicit | |||
| Voorraadstatus gewijzigd naar onbeperkt bruikbaar | Geeft een statuswijziging van de batch weer, waarbij deze wordt vrijgegeven uit een blokkering of kwaliteitsblokkade en weer beschikbaar komt voor gebruik. Dit wordt vastgelegd als een expliciete overboeking. | ||
| Waarom dit belangrijk is Deze activiteit markeert het opheffen van een voorraadblokkade. Je kunt analyseren hoelang voorraad geblokkeerd blijft om het afhandelingsproces te verbeteren. Waar vind je dit? Vastgelegd als overboeking in de tabel MATDOC. Bewegingstype (BWART) 344 verplaatst voorraad van 'geblokkeerd' naar 'onbeperkt bruikbaar'. Vastleggen Herkenbaar aan materiaaldocumenten in MATDOC met bewegingstype 344. Gebeurtenistype explicit | |||
Extractiegidsen
Stappen
- Toegang tot het systeem regelen: Zorg dat je een gebruiker hebt met de juiste autorisaties om Core Data Services (CDS)-views in SAP S/4HANA op te vragen. Hiervoor moet een systeembeheerder doorgaans toegang verlenen.
- Een SQL-client kiezen: Kies een SQL-client die verbinding kan maken met de SAP HANA-database. Veelgebruikte opties zijn SAP HANA Studio, SAP HANA Database Explorer en tools van derden, zoals DBeaver.
- De databaseverbinding instellen: Maak in de SQL-client een nieuwe databaseverbinding aan. Je hebt de hostnaam van de HANA-database, het poortnummer (meestal 3<instance_number>15) en de inloggegevens van de databasegebruiker nodig.
- De SQL-query voorbereiden: Kopieer de volledige SQL-query uit het gedeelte ‘query’ van dit document naar de editor van je SQL-client.
- Queryparameters instellen: Zoek de tijdelijke waarden in de query. Vervang
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'door de gewenste datums, bijvoorbeeldBETWEEN '20230101' AND '20230630'. Pas ook filters voor bedrijf of Plant aan, zoalsMaterialDocumentItem.Plant IN ('Plant1', 'Plant2'), zodat ze aansluiten op de organisatiestructuur. - De query uitvoeren: Voer de aangepaste SQL-query uit op de S/4HANA-database. De uitvoeringstijd hangt af van de gekozen periode en de hoeveelheid voorraaddata in het systeem.
- De data controleren: Controleer na afloop in de SQL-client of de resultaten volledig en correct lijken. Kijk of de verschillende activiteiten aanwezig zijn en of de belangrijke attributen zijn ingevuld.
- Het event log exporteren: Exporteer de volledige resultatenset vanuit de SQL-client naar een CSV-bestand. Gebruik UTF-8-codering om problemen met tekens te voorkomen.
- De upload voorbereiden: Geef de kolommen in het CSV-bestand exact dezelfde namen als de aliassen in de query, bijvoorbeeld
InventoryBatchLot,ActivityName,EventTimeenzovoort. Het bestand is nu klaar om naar een process mining-tool te uploaden.
Configuratie
- Autorisaties: De gebruiker die de query uitvoert, heeft
SELECT-rechten nodig voor de volgende CDS-views:I_MaterialDocumentItem,I_BatchChangeDocumentenI_WarehouseTask. Ook is toegang nodig tot het onderliggende databaseschema waarin deze views staan. - Filteren op datumbereik: Pas een datumfilter toe op de velden
PostingDate,ChangeDocumentCreationDateofWarehouseTaskCreationDate. Voor een analyse is een periode van 3 tot 12 maanden gebruikelijk. Een query over meerdere jaren kan de prestaties flink verslechteren. - Organisatiefilters: Voeg voor betere prestaties en een gerichte analyse
WHERE-clausules toe om te filteren opPlantofCompanyCode. Zo beperk je de hoeveelheid data en richt je de extractie op relevante delen van de bedrijfsvoering. - Hoeveelheid data: Houd er rekening mee dat voorraadbeheersystemen veel data genereren. Een lange periode kan miljoenen rijen opleveren en zowel het bronsysteem tijdens de extractie als de prestaties van de clienttool beïnvloeden.
- Extended Warehouse Management (EWM): De activiteit ‘Verzamelen gestart’ is gebaseerd op de CDS-view
I_WarehouseTask. Deze view bevat alleen data als je SAP Extended Warehouse Management gebruikt. Gebruikt de organisatie de oudere module Warehouse Management (WM) of alleen Inventory Management (IM), dan wordt deze activiteit niet geëxtraheerd.
a Voorbeeldquery sql
SELECT
mat_doc.Batch AS "InventoryBatchLot",
CASE
WHEN mat_doc.MovementType = '101' AND mat_doc.InventoryStockType = '2' THEN 'Stock Posted to Quality Inspection'
WHEN mat_doc.MovementType = '101' THEN 'Goods Receipt Posted'
WHEN mat_doc.MovementType = '321' THEN 'Quality Inspection Stock Released'
WHEN mat_doc.MovementType = '311' THEN 'Internal Stock Transfer Posted'
WHEN mat_doc.MovementType = '344' THEN 'Stock Status Changed to Blocked'
WHEN mat_doc.MovementType IN ('343', '322') THEN 'Stock Status Changed to Unrestricted'
WHEN mat_doc.MovementType IN ('701', '702') THEN 'Inventory Adjustment Posted'
WHEN mat_doc.MovementType = '601' THEN 'Goods Issue for Delivery Posted'
WHEN mat_doc.MovementType = '261' THEN 'Goods Issue for Production Posted'
WHEN mat_doc.MovementType IN ('651', '653') THEN 'Sales Return Received'
WHEN mat_doc.MovementType = '551' THEN 'Stock Scrapped'
WHEN mat_doc.MovementType = '313' THEN 'Put-Away Transfer Posted' -- Example for two-step transfers
ELSE 'Unknown Material Movement'
END AS "ActivityName",
TO_TIMESTAMP(mat_doc.PostingDate || LPAD(mat_doc.CreationTime, 6, '0'), 'YYYYMMDDHH24MISS') AS "EventTime",
mat_doc.Material AS "MaterialNumber",
mat_doc.CreatedByUser AS "UserName",
mat_doc.MovementType AS "MovementType",
mat_doc.Plant AS "Plant",
mat_doc.StorageLocation AS "StorageLocation",
mat_doc.QuantityInEntryUnit AS "Quantity",
mat_doc.ReasonForMovement AS "MovementReasonCode"
FROM
I_MaterialDocumentItem AS mat_doc
WHERE
mat_doc.Batch IS NOT NULL AND mat_doc.Batch <> ''
AND mat_doc.PostingDate BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
-- AND mat_doc.Plant IN ('Plant1', 'Plant2') -- Placeholder: Add filters for relevant plants
UNION ALL
SELECT
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 3) AS "InventoryBatchLot",
'Batch Status Changed' AS "ActivityName",
change_doc.ChangeDocumentCreationDateTime AS "EventTime",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 1) AS "MaterialNumber",
change_doc.ChangedByUser AS "UserName",
NULL AS "MovementType",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 2) AS "Plant",
NULL AS "StorageLocation",
NULL AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_BatchChangeDocument AS change_doc
WHERE
change_doc.ChangeDocumentTable = 'MCHA' AND change_doc.ChangeDocumentTableFieldName = 'ZUSTD'
AND TO_VARCHAR(change_doc.ChangeDocumentCreationDate) BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
UNION ALL
SELECT
wh_task.Batch AS "InventoryBatchLot",
'Picking Initiated' AS "ActivityName",
wh_task.WarehouseTaskCreationDateTime AS "EventTime",
wh_task.Product AS "MaterialNumber",
wh_task.CreatedByUser AS "UserName",
NULL AS "MovementType",
wh_task.Plant AS "Plant",
wh_task.SourceStorageLocation AS "StorageLocation",
wh_task.TargetQuantity AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_WarehouseTask AS wh_task
WHERE
wh_task.Batch IS NOT NULL AND wh_task.Batch <> ''
AND wh_task.WarehouseProcessType IN ('P210', 'P220') -- Placeholder: Adjust process types based on your picking configuration
AND TO_VARCHAR(wh_task.WarehouseTaskCreationDate) BETWEEN '20230101' AND '20231231'; -- Placeholder: Set your date range Stappen
- Controleer of rechtstreekse toegang via SAP HANA SQL is goedgekeurd en of de extractiegebruiker leestoegang heeft tot MATDOC en de batchstamdatatabellen die het systeem nodig heeft. Controleer wie eigenaar is van het fysieke schema en vervang [Your SAP HANA schema] door de goedgekeurde schemanaam.
- Controleer welke velden beschikbaar zijn in de MATDOC- en batchtabellen van de gebruikte SAP S/4HANA-release. De query hieronder gebruikt veelvoorkomende velden uit MATDOC en MCHA, maar de beschikbaarheid en naamgeving kunnen per release, implementatie en geactiveerde scope verschillen. Vervang vóór uitvoering elk veld met de aanduiding [Configure based on your system].
- Bepaal de extractieperiode door [Start timestamp] en [End timestamp] te vervangen door ISO-timestampwaarden. Begin met een periode van drie tot zes maanden en verleng die nadat je het volume en de prestaties hebt gecontroleerd.
- Voer de query uit in een goedgekeurde SQL-client, SAP HANA Database Explorer of een vergelijkbare geautoriseerde databasetool. Beperk de resultaten tot de benodigde bedrijfscodes, Plants, documenttypen of mutatietypen door de bijbehorende filterwaarden in te vullen.
- Controleer de koppeling van mutatietypen in de activiteit-CTE. De betekenis van mutatietypen hangt af van de systeem- en bedrijfsconfiguratie. Vervang de voorbeeldlijsten door de mutatietypen die in het doelsysteem zijn ingesteld voor goederenontvangst, kwaliteitscontrole, vrijgave, wegzetten, interne verplaatsing, geblokkeerde voorraad, vrij beschikbare voorraad, voorraadcorrectie, verzamelen, goederenuitgifte voor levering, goederenuitgifte voor productie, retouren van klanten en afboekingen.
- Controleer of elke uitvoerrij
InventoryBatchLot,ActivityNameenEventTimebevat. Bevestig dat de batch-ID stabiel genoeg is om als case-ID in ProcessMind te gebruiken. Als materiaal, Plant of opslaglocatie nodig is om dezelfde batchwaarden binnen verschillende organisatie-eenheden van elkaar te onderscheiden, gebruik dan de ingestelde samengestelde case-ID in plaats van alleen de batchwaarde. - Controleer de volgorde van gebeurtenissen, dubbele rijen, tegenboekingen, geannuleerde documenten en tijdzone-instellingen. MATDOC legt documentboekingen vast. Tegenboekingen en annuleringen kunnen daarom als aparte gebeurtenissen verschijnen, tenzij je ze expliciet uitsluit of anders in kaart brengt.
- Exporteer de queryresultaten als een plat bestand met één rij per gebeurtenis en de kolommen InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity en MovementReasonCode. Gebruik een consistente ISO 8601-notatie voor timestamps en behoud voorloopnullen in materiaal-, batch-, Plant- en opslaglocatiewaarden.
- Upload het event log naar ProcessMind en koppel InventoryBatchLot aan de case-ID, ActivityName aan de activiteit en EventTime aan de timestamp van de gebeurtenis. Ga er niet van uit dat ProcessMind activiteiten afleidt, records samenvoegt of ontbrekende gebeurtenissen aanvult.
Configuratie
- Extractiemethode: Rechtstreekse SQL-query op voorraad- en batchdata in SAP HANA. De query leest MATDOC en koppelt batchstamdata uit MCHA. Voeg MCH1 of een andere batchtabel pas toe nadat je de relevante velden en het batchniveau in het doelsysteem hebt gecontroleerd.
- Datumbereik: Begin met drie tot zes maanden. Gebruik voor EventTime de boekingsdatum en -tijd van het materiaaldocument die in MATDOC beschikbaar zijn. Gebruik bij incrementele ladingen een gecontroleerde overlapperiode om late boekingen mee te nemen. Verwijder daarna dubbele records op basis van de ingestelde document- en positie-ID’s.
- Vereiste filters: Stel bedrijfscode, Plant, materiaaldocumenttype, mutatietype, aanwezigheid van een batch en boekingsdatum in op basis van de processcope. Controleer of de velden voor bedrijfscode en documenttype beschikbaar zijn in de geïnstalleerde release voordat je ze aan de query toevoegt.
- Activiteiten in kaart brengen: De betekenis van mutatietypen hangt af van de configuratie. Beheer een goedgekeurde koppeltabel of vervang de mutatietypelijsten in de query door de waarden die het bedrijf gebruikt. Beschouw de voorbeeldlijsten niet als universele SAP-betekenissen.
- Batchscope: De query sluit rijen zonder batchwaarde uit, omdat InventoryBatchLot als case-ID wordt gebruikt. Als je de batch uit een andere bron moet afleiden, stel die bron dan vóór de extractie expliciet in.
- Detailniveau van gebeurtenissen: Elke in aanmerking komende MATDOC-positie wordt als één gebeurtenisrij opgenomen. De query leidt geen activiteiten af voor verzamelen, kwaliteitsbeslissingen, batchstatuswijzigingen of andere activiteiten op basis van latere records.
- Wijzigingen in batchstamdata: Batchstatuswijzigingen zijn niet betrouwbaar af te leiden uit alleen MATDOC. Stel voor de activiteit Batch Status Changed een bron voor wijzigingsdocumenten of batchhistorie in. De query bevat een tijdelijke vertakking die vóór uitvoering aan een gecontroleerde bron moet worden gekoppeld.
- Verzamelen: Het starten van het verzamelen staat doorgaans in magazijnuitvoeringsdata en niet in een MATDOC-boeking. Stel een gecontroleerde bron voor magazijntaken of transferorders in en vervang de tijdelijke vertakking vóór uitvoering.
- Prestaties: Filter op boekingstimestamp of boekingsdatum, Plant, bedrijfscode en relevante mutatietypen. Selecteer alleen de benodigde kolommen, vermijd onbeperkte historische scans en voer de query uit binnen een goedgekeurd tijdvenster. Voor grote MATDOC-volumes wordt extractie in delen of in stappen aanbevolen.
- Autorisaties en vereisten: Regel goedgekeurde databaseverbinding, schematoegang, leesrechten en toegang tot voorraaddata in SAP S/4HANA. Regel ook toegang tot eventuele bronnen voor magazijnuitvoering of wijzigingshistorie die voor de twee activiteiten buiten MATDOC worden gebruikt. Controleer of rechtstreekse databasetoegang past binnen het SAP-beheer- en ondersteuningsbeleid van de organisatie.
- Tijdzones: Controleer de tijdzones van de database en de applicatie. Zet EventTime vóór het uploaden naar ProcessMind op een consistente manier om.
- Gegevensbescherming: Volg de maatregelen van de organisatie voor gebruikers-ID’s, materiaaldata, klantgerelateerde data en databasegegevens. Zet inloggegevens niet in de querytekst.
a Voorbeeldquery sql
WITH
params AS (
SELECT
TO_TIMESTAMP('[Start timestamp]') AS start_ts,
TO_TIMESTAMP('[End timestamp]') AS end_ts
FROM DUMMY
),
movement_map AS (
SELECT '101' AS movement_type, 'Goods Receipt Posted' AS activity_name FROM DUMMY
UNION ALL SELECT '105', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '107', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '109', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '321', 'Stock Posted to Quality Inspection' FROM DUMMY
UNION ALL SELECT '322', 'Quality Inspection Stock Released' FROM DUMMY
UNION ALL SELECT '343', 'Stock Status Changed to Unrestricted' FROM DUMMY
UNION ALL SELECT '344', 'Stock Status Changed to Blocked' FROM DUMMY
UNION ALL SELECT '311', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '301', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '311', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '701', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '702', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '703', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '704', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '705', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '706', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '601', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '602', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '261', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '262', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '651', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '653', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '654', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '551', 'Stock Scrapped' FROM DUMMY
UNION ALL SELECT '552', 'Stock Scrapped' FROM DUMMY
),
matdoc_events AS (
SELECT
m.MATNR AS MaterialNumber,
m.CHARG AS InventoryBatchLot,
COALESCE(m.BUDAT_MKPF, m.BUDAT) AS EventTime,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(m.BWART AS NVARCHAR(3)) AS MovementType,
m.WERKS AS Plant,
m.LGORT AS StorageLocation,
m.MENGE AS Quantity,
m.GRUND AS MovementReasonCode,
mm.activity_name AS ActivityName,
m.MBLNR AS MaterialDocumentNumber,
m.MJAHR AS MaterialDocumentYear,
m.ZEILE AS MaterialDocumentItem
FROM [Your SAP HANA schema].MATDOC m
INNER JOIN movement_map mm
ON CAST(m.BWART AS NVARCHAR(3)) = mm.movement_type
CROSS JOIN params p
WHERE m.CHARG IS NOT NULL
AND TRIM(m.CHARG) <> ''
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) >= p.start_ts
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) < p.end_ts
AND m.WERKS IN ([Configure based on your system])
),
batch_enriched_events AS (
SELECT
e.InventoryBatchLot,
e.ActivityName,
e.EventTime,
e.MaterialNumber,
e.UserName,
e.MovementType,
e.Plant,
e.StorageLocation,
e.Quantity,
e.MovementReasonCode,
e.MaterialDocumentNumber,
e.MaterialDocumentYear,
e.MaterialDocumentItem,
c.CUOBJ_BM AS BatchObjectNumber
FROM matdoc_events e
LEFT JOIN [Your SAP HANA schema].MCHA c
ON c.MATNR = e.MaterialNumber
AND c.CHARG = e.InventoryBatchLot
AND c.WERKS = e.Plant
),
verified_batch_status_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Batch Status Changed' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
verified_picking_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
all_events AS (
SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM batch_enriched_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_batch_status_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_picking_events
)
SELECT
InventoryBatchLot,
ActivityName,
EventTime,
MaterialNumber,
UserName,
MovementType,
Plant,
StorageLocation,
Quantity,
MovementReasonCode
FROM all_events
WHERE InventoryBatchLot IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY InventoryBatchLot, EventTime, MaterialDocumentYear, MaterialDocumentNumber, MaterialDocumentItem, ActivityName; Stappen
- Open de ABAP Editor: Meld je aan bij je SAP S/4HANA-systeem. Open de ABAP Editor met transactiecode
SE38. - Maak een nieuw programma: Voer in het veld 'Program' een naam in voor het nieuwe programma, bijvoorbeeld
Z_PM_INVENTORY_EXTRACT, en klik op de knop 'Create'. Geef het programma een duidelijke titel, stel 'Type' in op 'Executable Program' en sla het op in een package. - Stel de programmaparameters in: Definieer in de programma-editor het selectiescherm dat als gebruikersinterface voor de extractie dient. Zo kunnen gebruikers parameters opgeven, zoals het datumbereik en de Plant waarvoor je data wilt extraheren.
- Voeg de extractielogica toe: Kopieer de volledige ABAP-code uit het gedeelte 'Query' en plak deze in de ABAP Editor. De code selecteert data voor alle 14 vereiste voorraadactiviteiten uit verschillende SAP-tabellen.
- Bekijk de kernlogica: Het programma selecteert voor elke afzonderlijke voorraadactiviteit data uit de bijbehorende brontabellen. Voor materiaalbewegingen zijn dat bijvoorbeeld
MKPFenMSEG; voor wijzigingen in stamgegevensCDHDRenCDPOS. Vervolgens worden de selecties metUNION ALLsamengevoegd in één interne tabel die het event log vormt. - Stel de bestandsuitvoer in: Het laatste deel van de code schrijft de samengevoegde data uit de interne tabel naar een bestand. Met de instructie
OPEN DATASETwordt een bestand op de SAP application server aangemaakt. Geef een geldig serverpad op waar de SAP-systeemgebruiker schrijfrechten heeft. - Voer het programma uit: Sla het ABAP-programma op en activeer het met Ctrl+F3. Druk op F8 om het uit te voeren. Voer op het selectiescherm het gewenste datumbereik en eventuele andere filters in, zoals Plant of Company Code.
- Voer het programma uit als achtergrondtaak: Bij grote hoeveelheden data is het belangrijk het programma als achtergrondtaak uit te voeren om time-outs van de sessie te voorkomen. Ga vanuit het uitvoerscherm (F8) naar
Program -> Execute in Background. Plan de taak buiten de piekuren. - Haal het uitvoerbestand op: Zoek het uitvoerbestand op de SAP application server zodra de taak is afgerond. Gebruik transactiecode
AL11om de servermappen te bekijken en het bestand te vinden. Download het bestand met transactieCG3Yvan de application server naar je computer. - Bereid het bestand voor op upload: Open het gedownloade bestand in een teksteditor of spreadsheetprogramma. Controleer of het een CSV-bestand is met een kopregel, komma's als scheidingsteken en dubbele aanhalingstekens als tekstmarkering. Controleer vóór het uploaden of de kolomnamen overeenkomen met de vereisten van de process mining-tool.
Configuratie
- Boekingsdatumbereik: Dit is de belangrijkste parameter. We raden aan de data in behapbare delen te extraheren, bijvoorbeeld telkens voor 3 tot 6 maanden. Zo blijven de prestaties goed en voorkom je time-outs van het systeem.
- Plant-filter: We raden sterk aan te filteren op een of meer specifieke Plants (
WERKS). De extractie voor alle Plants tegelijk uitvoeren kan veel systeembronnen vergen. - Company Code-filter: Je kunt optioneel filteren op Company Code (
BUKRS) om het bereik verder te beperken als je organisatie meerdere company codes in hetzelfde systeem gebruikt. - Bestandspad op de application server: Het ABAP-programma heeft een vooraf ingesteld, geldig mappad op de SAP application server nodig. Controleer of de SAP-systeemgebruiker (
SY-UNAME) op besturingssysteemniveau schrijfrechten heeft voor deze map. - Autorisaties: De gebruiker die de extractie uitvoert, heeft autorisaties nodig voor transactie
SE38(om het programma te maken en uit te voeren), weergavetoegang tot de tabellenMKPF,MSEG,MCH1,CDHDR,CDPOS,LTAKenLTAP, en de mogelijkheid om achtergrondtaken in te plannen (SM36/SM37).
a Voorbeeldquery abap
REPORT Z_PM_INVENTORY_EXTRACT.
" ====================================================================
" SELECTION SCREEN
" ====================================================================
SELECT-OPTIONS: s_budat FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: s_werks FOR mseg-werks.
PARAMETERS: p_fpath TYPE string DEFAULT '/usr/sap/trans/tmp/inventory_log.csv' OBLIGATORY.
" ====================================================================
" DATA STRUCTURES
" ====================================================================
TYPES: BEGIN OF ty_event_log,
InventoryBatchLot TYPE charg,
ActivityName TYPE string,
EventTime TYPE string,
MaterialNumber TYPE matnr,
UserName TYPE xubname,
MovementType TYPE bwart,
Plant TYPE werks_d,
StorageLocation TYPE lgort_d,
Quantity TYPE menge_d,
MovementReasonCode TYPE grund,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log.
" ====================================================================
" DATA SELECTION
" ====================================================================
START-OF-SELECTION.
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Receipt Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('101', '103', '105', '501', '521', '561')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~shkzg
WHEN 'H' THEN 'Stock Posted to Quality Inspection'
WHEN 'S' THEN 'Quality Inspection Stock Released'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '321' " For QI to Unrestricted
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Put-Away Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '311' AND mseg~shkzg = 'H' " Assume put-away is the credit side
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Internal Stock Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('301', '311', '313', '315')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~bwart
WHEN '343' THEN 'Stock Status Changed to Blocked'
WHEN '344' THEN 'Stock Status Changed to Unrestricted'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('343', '344')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Inventory Adjustment Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('701', '702', '711', '712')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Delivery Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '601'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Production Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '261'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Sales Return Received' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('651', '653')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Stock Scrapped' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '551'
UNION ALL
SELECT
ltap~charg AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CONCAT( ltak~bdatu, ltak~bzeit ) AS EventTime,
ltap~matnr AS MaterialNumber,
ltak~bname AS UserName,
ltak~bwart AS MovementType,
ltap~werks AS Plant,
ltap~lgort AS StorageLocation,
ltap~nista AS Quantity,
'' AS MovementReasonCode
FROM ltap
JOIN ltak ON ltak~tanum = ltap~tanum
WHERE ltak~bdatu IN s_budat
AND ltap~werks IN s_werks
AND ltap~charg IS NOT NULL AND ltap~charg <> ''
UNION ALL
SELECT
SUBSTRING( cdhdr~objectid, 5, 18 ) AS InventoryBatchLot, " Object ID for BATCH is MATNR+WERKS+CHARG
'Batch Status Changed' AS ActivityName,
CONCAT( cdhdr~udate, cdhdr~utime ) AS EventTime,
SUBSTRING( cdhdr~objectid, 1, 4 ) AS MaterialNumber,
cdhdr~username AS UserName,
'' AS MovementType,
'' AS Plant,
'' AS StorageLocation,
0 AS Quantity,
'' AS MovementReasonCode
FROM cdhdr
JOIN cdpos ON cdpos~objectclas = cdhdr~objectclas
AND cdpos~objectid = cdhdr~objectid
AND cdpos~changenr = cdhdr~changenr
WHERE cdhdr~udate IN s_budat
AND cdhdr~objectclas = 'BATCH'
AND cdpos~tabname = 'MCH1'
AND cdpos~fname = 'ZUSTD'
INTO TABLE @lt_event_log.
" ====================================================================
" WRITE OUTPUT FILE
" ====================================================================
DATA: lv_string TYPE string.
DATA: lo_conv TYPE REF TO cl_abap_conv_out_ce.
lo_conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
OPEN DATASET p_fpath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
RETURN.
ENDIF.
" Write Header
lv_string = 'InventoryBatchLot,ActivityName,EventTime,MaterialNumber,UserName,MovementType,Plant,StorageLocation,Quantity,MovementReasonCode'.
TRANSFER lv_string TO p_fpath.
" Write Data
LOOP AT lt_event_log ASSIGNING FIELD-SYMBOL(<fs_log>).
CONCATENATE
<fs_log>-InventoryBatchLot
<fs_log>-ActivityName
<fs_log>-EventTime
<fs_log>-MaterialNumber
<fs_log>-UserName
<fs_log>-MovementType
<fs_log>-Plant
<fs_log>-StorageLocation
<fs_log>-Quantity
<fs_log>-MovementReasonCode
INTO lv_string
SEPARATED BY ','.
TRANSFER lv_string TO p_fpath.
ENDLOOP.
CLOSE DATASET p_fpath.
WRITE: 'Extraction complete. File written to:', p_fpath. Klaar om te beginnen?
Gebruik deze template om je data met zekerheid voor te bereiden en waardevolle inzichten in de bedrijfsvoering rond voorraadbeheer te krijgen. Begin vandaag met efficiënter werken en kosten besparen.
Optimaliseer het voorraadbeheer in SAP S/4HANA
Spoor inefficiënties op, verkort de doorlooptijd met 30% en bespaar kosten.
Geen creditcard nodig • Binnen enkele minuten ingesteld