Datatemplate voor magazijnbeheer
Datatemplate voor magazijnbeheer
- Aanbevolen attributen voor een volledige analyse
- Belangrijke activiteiten om in het proces te volgen
- Aanwijzingen voor data-extractie uit SAP EWM
Attributen voor magazijnbeheer
| Naam | Beschrijving | ||
|---|---|---|---|
| Warehouse Order WarehouseOrder | De unieke identificatiecode van een magazijnorder, waarin een groep magazijntaken is gebundeld die door een medewerker of ander middel worden uitgevoerd. | ||
| Beschrijving De Warehouse Order is de belangrijkste case-ID om het volledige proces van goederenverwerking in het magazijn te volgen. De order staat voor een werkpakket, zoals artikelen picken voor een uitgaande levering of ontvangen goederen wegzetten. Elke Warehouse Order bevat een of meer magazijntaken. Door in process mining op Warehouse Order te analyseren, krijg je een volledig beeld van de levenscyclus van een werkpakket. Zo spoor je bottlenecks op, meet je de totale doorlooptijd van aanmaak tot afronding en zie je welke activiteiten bij één logistieke instructie horen. Waarom dit belangrijk is Deze hoofdidentificatiecode verbindt alle bijbehorende magazijnactiviteiten. Zo kun je het volledige proces analyseren en de doorlooptijd van één werkeenheid meten. Waar vind je dit? Deze identificatiecode staat meestal in de kopgegevenstabel voor magazijnorders in SAP EWM, zoals /SCWM/WHO. Voorbeelden 200000145200000146200000147 | |||
| Activiteitsnaam ActivityName | De naam van de specifieke magazijnactiviteit of het event dat heeft plaatsgevonden, zoals ‘Picktaak aangemaakt’ of ‘Goederenafgifte geboekt’. | ||
| Beschrijving Dit attribuut beschrijft één stap of event in het magazijnproces. Deze activiteiten vormen de bouwstenen van de proceskaart en staan voor taken zoals aanmaken, bevestigen, inpakken, laden en goederen verplaatsen. De volgorde en frequentie van deze activiteiten analyseren is essentieel voor process mining. Zo breng je de processtroom in beeld, herken je veelvoorkomende en zeldzame routes, spoor je afwijkingen van de standaardwerkwijze op en zie je welke stappen vertraging of herstelwerk veroorzaken. Waarom dit belangrijk is Dit attribuut bepaalt welke stappen het proces bevat. Daarmee vormt het de basis van de proceskaart en kun je de processtroom, afwijkingen en bottlenecks analyseren. Waar vind je dit? Afgeleid uit statuswijzigingen, eventberichten of transactielogs voor magazijnorders en taken in tabellen zoals /SCWM/ORDIM_C (bevestigingen), of door statusvelden in /SCWM/WHO en /SCWM/ORDIM_O te interpreteren. Voorbeelden Picktaak bevestigdWegzettak aangemaaktGoederenontvangst geboektWarehouse Order voltooid | |||
| Bronsysteem SourceSystem | Geeft aan uit welk bronsysteem de data is gehaald, bijvoorbeeld de productieomgeving van SAP EWM. | ||
| Beschrijving Dit attribuut geeft aan uit welk registratiesysteem de magazijndata afkomstig is. In een bedrijfsomgeving met meerdere systemen is het belangrijk de herkomst van de data vast te leggen, zodat die traceerbaar is en de juiste context heeft. Voor analyses kun je hiermee processen onderscheiden die meerdere systemen omvatten, of processen uit verschillende omgevingen vergelijken, bijvoorbeeld systemen voor verschillende regio’s. Zo blijft de herkomst van de data duidelijk en controleerbaar. Waarom dit belangrijk is Dit zorgt voor traceerbaarheid en context, vooral in omgevingen met meerdere SAP-instanties of gekoppelde systemen. Zo blijft de herkomst van de data duidelijk. Waar vind je dit? Dit is meestal een vaste waarde die tijdens het ETL-proces (data-extractie, transformatie en laden) wordt toegevoegd. De waarde geeft aan om welke SAP S/4HANA- of EWM-instantie het gaat. Voorbeelden SAP_EWM_PROD_EUS4H_US_100EWM_APAC_PRD | |||
| 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 wanneer de data voor het laatst uit het bronsysteem is gehaald. Zo zie je hoe actueel de data is die je analyseert. Bij analyses en dashboards is het belangrijk te weten hoe recent de data is, zodat je beslissingen kunt nemen op basis van de juiste informatie. Deze timestamp laat zien of je realtime-informatie bekijkt of een momentopname. Zo weet je hoe actueel de data is. Waarom dit belangrijk is Dit geeft aan hoe actueel de data is, zodat je weet hoe recent de procesanalyse is. Waar vind je dit? Dit metadataveld wordt meestal tijdens het data-extractieproces (ETL) aangemaakt en toegevoegd. Het bevat de timestamp van het laden van de data. Voorbeelden 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| Starttijd EventTime | De timestamp die aangeeft wanneer de activiteit of het event is gestart. | ||
| Beschrijving Dit attribuut registreert de exacte datum en tijd waarop een specifieke magazijnactiviteit plaatsvond. Het is het belangrijkste tijdgegeven om events op volgorde te zetten en de tijd ertussen te berekenen. In process mining gebruik je de starttijd om per case de chronologische volgorde van events op te bouwen. Je berekent er doorlooptijden, wachttijden en verwerkingstijden mee. Die zijn belangrijk voor prestatieanalyses, het opsporen van bottlenecks en SLA-bewaking. Waarom dit belangrijk is Deze timestamp is nodig om events chronologisch te ordenen en tijdgebonden prestatiemaatstaven te berekenen, zoals doorlooptijden en tijdsduur. Waar vind je dit? Deze staat meestal in event- of bevestigingstabellen zoals /SCWM/ORDIM_C (bijvoorbeeld in veld CONF_TIMESTAMP), of in logs van statuswijzigingen voor magazijnorders en taken. Voorbeelden 2023-10-26T10:00:00Z2023-10-26T10:15:30Z2023-10-26T11:20:00Z | |||
| Eindtijd EventEndTime | De timestamp die aangeeft wanneer een activiteit of event is voltooid. | ||
| Beschrijving Dit attribuut registreert de datum en tijd waarop een specifieke magazijnactiviteit is afgerond. Bij afzonderlijke events is dit vaak hetzelfde als de starttijd. Bij activiteiten met een meetbare duur, zoals inpakken of laden, kan de eindtijd verschillen. Met een aparte eindtijd bereken je de verwerkingstijd van afzonderlijke activiteiten nauwkeurig. Dat is belangrijk voor procesdashboards die de duur van specifieke stappen analyseren, zoals ‘Efficiëntie van picken en inpakken’. Zo zie je welke taken de meeste tijd kosten. Waarom dit belangrijk is Hiermee bereken je de duur van afzonderlijke activiteiten nauwkeurig. Dat helpt om tijdrovende stappen en taken die veel middelen vragen op te sporen. Waar vind je dit? Bij afzonderlijke events is dit vaak dezelfde timestamp als de starttijd. Bij taken die langer duren, kan het een apart veld zijn in tabellen zoals /SCWM/ORDIM_C, of worden afgeleid uit een latere statuswijziging. Voorbeelden 2023-10-26T10:05:00Z2023-10-26T10:25:45Z2023-10-26T11:20:00Z | |||
| Gebruikers-ID User | De identificatiecode van de magazijnmedewerker of gebruiker die de activiteit heeft bevestigd of uitgevoerd. | ||
| Beschrijving Dit attribuut bevat de gebruikers-ID van degene die een magazijntaak uitvoert. Dat kan de orderpicker zijn die een pick bevestigt, de medewerker bij een inpakstation of de heftruckchauffeur die het wegzetten bevestigt. Deze data is belangrijk voor het dashboard ‘Inzet van medewerkers en materieel’. Je kunt de prestaties van individuele medewerkers en teams analyseren, opleidingsbehoeften opsporen en de werkdruk onder magazijnmedewerkers beter verdelen. Waarom dit belangrijk is Dit koppelt werk aan een specifieke medewerker. Zo kun je prestaties per gebruiker of team analyseren en de inzet van middelen en de verdeling van de werkdruk verbeteren. Waar vind je dit? Meestal te vinden in de bevestigingsgegevens van een magazijntaak, bijvoorbeeld in veld UNAME van tabel /SCWM/ORDIM_C. Voorbeelden JSMITHARODRIGUEZOPERATOR_05 | |||
| Materiaalnummer MaterialNumber | De unieke identificatiecode van het product of materiaal dat bij de magazijntaak wordt verwerkt. | ||
| Beschrijving Dit attribuut geeft aan welk materiaal wordt verplaatst, gepickt, ingepakt of ontvangen. Het is een belangrijke dimensie om magazijnprestaties op basis van productkenmerken te segmenteren en analyseren. Met analyses op materiaalnummer zie je bijvoorbeeld welke producten de langste wegzettijden hebben, het vaakst betrokken zijn bij pickfouten of een kwaliteitscontrole nodig hebben. Dit is belangrijk voor de dashboards ‘Prestaties van goederenontvangst en wegzetten’ en ‘Doorlooptijd van kwaliteitscontrole’. Waarom dit belangrijk is Hiermee kun je procesdata per product filteren en segmenteren. Zo spoor je productspecifieke problemen op bij verwerking, opslag of kwaliteitscontrole. Waar vind je dit? Deze informatie staat meestal in magazijntaaktabellen zoals /SCWM/ORDIM_O en is gekoppeld aan de materiaalstamgegevens. Voorbeelden FIN-1001RAW-2050SFIN-300-A | |||
| Prioriteit Priority | De prioriteit van de magazijnorder, die aangeeft hoe dringend deze is (bijvoorbeeld hoog, gemiddeld of laag). | ||
| Beschrijving Dit attribuut deelt magazijnorders in op basis van hun belang voor de bedrijfsvoering of de urgentie. Orders met hoge prioriteit kunnen bijvoorbeeld spoedzendingen of kritieke productieleveringen betreffen en moeten sneller worden afgehandeld. Prioriteit is een belangrijke dimensie voor het dashboard en de KPI 'Naleving van de afhandeling van prioriteitsorders'. Je kunt de prestaties ermee filteren en uitsplitsen, zodat de meest urgente orders binnen de verwachte termijn worden verwerkt en de magazijnprocessen aansluiten op de bedrijfsdoelen. Waarom dit belangrijk is Hiermee kun je analyses en monitoring richten op urgente orders, zodat deze aan de afgesproken serviceniveaus voldoen. Dat heeft direct invloed op de klanttevredenheid. Waar vind je dit? De prioriteit kan worden ingesteld op het onderliggende leveringsdocument en vervolgens worden overgenomen in de magazijnorder. Je vindt deze mogelijk in tabellen zoals /SCWM/WHO. Voorbeelden HoogGemiddeldLaag | |||
| Status van Warehouse Order WarehouseOrderStatus | De huidige of uiteindelijke status van de magazijnorder, zoals ‘Voltooid’ of ‘Geannuleerd’. | ||
| Beschrijving Dit attribuut geeft aan wat het eindresultaat van een magazijnorder is. Als je weet of een order is afgerond of geannuleerd, kun je het succespercentage van het proces analyseren en achterhalen waarom orders niet zijn afgerond. Dit is een belangrijk filter voor veel analyses. Bij de berekening van de end-to-enddoorlooptijd van magazijnorders worden bijvoorbeeld meestal alleen afgeronde orders meegenomen. Je kunt hiermee ook nagaan hoe vaak orders worden geannuleerd en wat daarvan de oorzaken zijn. Waarom dit belangrijk is Geeft de uitkomst van een case aan. Zo kun je afgeronde en geannuleerde orders van elkaar onderscheiden en de doorlooptijd en doorvoer nauwkeurig analyseren. Waar vind je dit? Het statusveld staat meestal in de kopgegevenstabel voor magazijnorders: /SCWM/WHO. Voorbeelden AfgerondIn behandelingGeannuleerd | |||
| Type Warehouse Order WarehouseOrderType | Deelt magazijnorders in naar hun doel, zoals wegzetten, picken of interne aanvulling. | ||
| Beschrijving Het type Warehouse Order deelt orders in op basis van hun logistieke functie. Dat onderscheid is belangrijk, omdat verschillende ordertypen andere procesroutes volgen en andere prestatieverwachtingen hebben. Bij analyses gebruik je dit attribuut vooral om te filteren en te vergelijken. Het dashboard ‘Doorvoer en volume van Warehouse Orders’ gebruikt het bijvoorbeeld om inkomende processen (wegzetten) te onderscheiden van uitgaande processen (picken). Zo krijg je een bruikbaarder beeld van de bedrijfsvoering in het magazijn. Waarom dit belangrijk is Hiermee kun je analyses indelen naar procescategorie, bijvoorbeeld inkomend of uitgaand. Zo zijn vergelijkingen en inzichten relevanter. Waar vind je dit? Dit wordt bepaald door het magazijnprocestype, dat vaak te vinden is in de kopgegevenstabel voor magazijnorders /SCWM/WHO. Voorbeelden PICKPUTWREPLSTGE | |||
| Gebruikt materieel EquipmentUsed | De identificatie van het materieel, zoals een heftruck of palletwagen, waarmee de magazijnopdracht wordt uitgevoerd. | ||
| Beschrijving Dit attribuut geeft het intern transportmaterieel aan dat aan een magazijnopdracht is toegewezen of ervoor wordt gebruikt. Het kan bijvoorbeeld gaan om een specifieke heftruck, een automatisch geleid voertuig (AGV) of een bepaald type kar. Deze data vormt de basis voor het dashboard 'Inzet van medewerkers en materieel' en de KPI 'Materieelbenutting'. Door bij te houden welk materieel voor welke opdrachten en hoelang wordt gebruikt, kunnen managers gebruikspatronen analyseren, onderhoud plannen en onderbouwde keuzes maken over de omvang en samenstelling van het wagenpark. Waarom dit belangrijk is Hiermee kun je het gebruik en de efficiëntie van materieel analyseren, het wagenpark beter beheren en beperkingen in de beschikbare middelen opsporen. Waar vind je dit? Deze informatie kan zijn opgeslagen bij de gegevens van de magazijnopdracht of -order, als resourcebeheer is ingesteld in SAP EWM. Raadpleeg de documentatie van SAP Extended Warehouse Management. Voorbeelden HEFTRUCK-07AGV-02KAR-15 | |||
| Gepland vertrektijdstip PlannedDepartureTime | Het geplande tijdstip waarop de zending uit het magazijn vertrekt. | ||
| Beschrijving Dit attribuut geeft het beoogde vertrektijdstip van een zending aan, nadat alle pick-, inpak- en laadactiviteiten zijn afgerond. Het is de maatstaf voor de tijdige afhandeling van de laatste fase van het uitgaande proces. Dit timestamp is belangrijk voor het dashboard 'Tijdige verzending'. Door het werkelijke vertrektijdstip met het geplande tijdstip te vergelijken, kun je vertragingen bij het laden, de afstemming met vervoerders of de documentatie opsporen. Zo krijg je zicht op de efficiëntie van de logistieke en transportplanning. Waarom dit belangrijk is Dient als uitgangspunt om te meten of zendingen op tijd vertrekken. Dat is belangrijk voor de logistieke planning en het halen van de afspraken met vervoerders. Waar vind je dit? Deze informatie staat meestal in het transport- of verzenddocument dat aan de magazijnorders is gekoppeld. Raadpleeg de documentatie van SAP Extended Warehouse Management. Voorbeelden 2023-10-27T18:00:00Z2023-10-28T14:00:00Z | |||
| Geplande hoeveelheid PlannedQuantity | De verwachte hoeveelheid van een materiaal voor een bepaalde magazijnopdracht. | ||
| Beschrijving Dit attribuut geeft de beoogde hoeveelheid materiaal aan die volgens de magazijnopdracht moet worden verplaatst, gepickt of ontvangen. De werkelijke uitgevoerde hoeveelheid wordt hiermee vergeleken. De geplande hoeveelheid is belangrijk voor het dashboard 'Analyse van voorraadverschillen' en de KPI 'Voorraadnauwkeurigheid'. Door deze te vergelijken met de werkelijke hoeveelheid kan het systeem verschillen signaleren die kunnen wijzen op pickfouten, fouten bij ontvangst of invoerproblemen. Zo kun je de voorraadnauwkeurigheid verbeteren. Waarom dit belangrijk is Dient als uitgangspunt om de voorraadnauwkeurigheid te berekenen en verschillen op te sporen. Zo houd je de voorraadniveaus correct. Waar vind je dit? Te vinden in de gegevens van magazijnopdrachten, bijvoorbeeld in tabel /SCWM/ORDIM_O, vaak in een veld als NISTA (doelhoeveelheid). Voorbeelden 10050250 | |||
| Gewenste afrondingsdatum RequestedCompletionDate | De datum waarop een magazijnorder met hoge prioriteit uiterlijk afgerond moet zijn. | ||
| Beschrijving Dit attribuut geeft de service level agreement (SLA) of beoogde afrondingsdatum van een magazijnorder aan. De deadline wordt vergeleken met het werkelijke afrondingstijdstip om te bepalen of de order op tijd is afgehandeld. Deze datum is nodig om de KPI 'Afhandelingspercentage van prioriteitsorders' te berekenen. Door het werkelijke afrondingstijdstip te vergelijken met de gewenste datum, kun je meten of de serviceniveaus worden gehaald en zien welke orders dreigen te laat te komen of al vertraagd zijn. Waarom dit belangrijk is Geeft de SLA voor een order aan en dient als maatstaf voor tijdige afhandeling, vooral bij artikelen met hoge prioriteit. Waar vind je dit? Deze datum is vaak afgeleid van de geplande goederenuitgifte- of leverdatum op de uitgaande leveringsorder die de magazijnorder heeft aangemaakt. Raadpleeg de documentatie van SAP Extended Warehouse Management. Voorbeelden 2023-10-27T17:00:00Z2023-10-28T12:00:00Z | |||
| Hoeveelheidsverschil QuantityVariance | Het verschil tussen de geplande hoeveelheid en de werkelijk bevestigde hoeveelheid voor een opdracht. | ||
| Beschrijving Deze berekende metriek geeft aan hoe groot het verschil bij een magazijnopdracht is. Een waarde anders dan nul betekent dat de fysieke situatie niet overeenkomt met de registratie in het systeem. Dit kan wijzen op een pickfout, een fout bij ontvangst of een beschadigd artikel. Dit attribuut ondersteunt het dashboard 'Analyse van voorraadverschillen' door de omvang van fouten zichtbaar te maken. Door te analyseren hoe vaak verschillen voorkomen en hoe groot ze zijn, kun je structurele problemen in het voorraadbeheer en de uitvoering opsporen en de nauwkeurigheid verbeteren. Waarom dit belangrijk is Maakt onnauwkeurigheden in de voorraad en de bedrijfsvoering meetbaar, zodat je verschillen eenvoudig kunt opsporen en analyseren. Waar vind je dit? Berekend door voor elke relevante opdracht de PlannedQuantity af te trekken van de ActualQuantity. Voorbeelden 0-15 | |||
| Magazijntaak WarehouseTask | De unieke identificatiecode van één magazijntaak, die deel uitmaakt van een magazijnorder. | ||
| Beschrijving Een magazijntaak is de instructie om een specifieke goederenverplaatsing uit te voeren, bijvoorbeeld een product van een opslaglocatie naar een inpakstation verplaatsen. Een magazijnorder groepeert een of meer van deze taken. Door op taakniveau te analyseren, krijg je een gedetailleerder beeld van de bedrijfsvoering in het magazijn. Je ziet hoe middelen presteren bij specifieke verplaatsingen, welke opslaglocaties lastig bereikbaar zijn en hoe efficiënt afzonderlijke pick- en wegzetactiviteiten verlopen. Waarom dit belangrijk is Dit geeft meer detail voor analyses. Zo kun je afzonderlijke verplaatsingen en stappen binnen een grotere magazijnorder onderzoeken. Waar vind je dit? Te vinden in magazijntaaktabellen zoals /SCWM/ORDIM_O (taakgegevens) en /SCWM/ORDIM_C (bevestigingsgegevens). Voorbeelden 300000451300000452300000453 | |||
| Op tijd afgerond IsOnTime | Een booleaanse indicator die aangeeft of een magazijnorder uiterlijk op de gewenste afrondingsdatum is afgerond. | ||
| Beschrijving Deze indicator geeft in één oogopslag aan of aan de SLA is voldaan. Er wordt gecontroleerd of de laatste afrondingsactiviteit van een magazijnorder op of vóór de opgegeven gewenste afrondingsdatum plaatsvond. Dit attribuut is belangrijk voor het dashboard 'Naleving van de afhandeling van prioriteitsorders'. Je kunt er eenvoudig KPI's en visualisaties mee maken en orders filteren op tijdige of te late afronding. Zo zie je snel hoe de prestaties zich verhouden tot de serviceniveaus, zonder complexe datumberekeningen in de analyselaag. Waarom dit belangrijk is Vereenvoudigt de analyse van SLA-prestaties met een duidelijke ja/nee-indicator voor tijdige of te late afhandeling van elke order. Waar vind je dit? Dit is een berekend attribuut. De logica vergelijkt het timestamp van de activiteit 'Magazijnorder afgerond' met het attribuut 'RequestedCompletionDate'. Voorbeelden truefalse | |||
| Opslaglocatie StorageLocation | De specifieke locatie in het magazijn, zoals een opslagvak, waar goederen vandaan komen of naartoe gaan. | ||
| Beschrijving Dit attribuut geeft de fysieke locatie aan die bij een magazijnopdracht hoort, bijvoorbeeld het bronvak voor een pickopdracht of het bestemmingsvak voor het wegzetten. De locatie kan een algemeen gebied zijn of een specifiek schap met coördinaten. Met een analyse per opslaglocatie kun je bijvoorbeeld zien welke zones veel worden gebruikt voor picking en waar vaak vertragingen of fouten optreden. Ook kun je dit gebruiken voor een analyse van de naleving van pickroutes, zodat je ziet hoe orderpickers zich door het magazijn bewegen. Waarom dit belangrijk is Geeft aan waar in het magazijn een activiteit plaatsvindt. Zo kun je de efficiëntie van verplaatsingen, de bereikbaarheid van opslagvakken en de optimalisatie van pickroutes analyseren. Waar vind je dit? Meestal te vinden in magazijnopdrachtentabellen zoals /SCWM/ORDIM_O, met informatie over het bronvak (VLPLA) en bestemmingsvak (NLPLA). Voorbeelden 01-02-03INPAKSTATION-01GOEDERENUITGIFTEZONE-A | |||
| Totale doorlooptijd EndToEndCycleTime | De totale tijd vanaf het aanmaken van de magazijnorder tot de uiteindelijke afronding. | ||
| Beschrijving Deze KPI meet de volledige duur van een magazijnorder, van aanmaak tot afronding. Het is een belangrijke indicator voor de algehele efficiëntie en snelheid van de magazijnprocessen. Deze metriek vormt de basis van het dashboard 'Doorlooptijd van magazijnorders'. Door de KPI in de tijd te volgen en uit te splitsen naar bijvoorbeeld ordertype of materiaal, kun je structurele inefficiënties opsporen en meten wat verbeterinitiatieven voor het hele proces opleveren. Waarom dit belangrijk is Dit is een belangrijke KPI om de algehele efficiëntie van het magazijnproces te meten en geeft op hoofdlijnen inzicht in de prestaties van de bedrijfsvoering. Waar vind je dit? Berekend op caseniveau door het timestamp van de eerste activiteit ('Magazijnorder aangemaakt') af te trekken van het timestamp van de laatste activiteit ('Magazijnorder afgerond'). Voorbeelden 8640017280043200 | |||
| Werkelijke hoeveelheid ActualQuantity | De werkelijke hoeveelheid materiaal die de gebruiker voor een magazijnopdracht heeft bevestigd. | ||
| Beschrijving Dit attribuut geeft de hoeveelheid aan die de magazijnmedewerker fysiek heeft verwerkt en bevestigd. Het kan gaan om de hoeveelheid die uit een opslagvak is gepickt, is weggezet of tijdens een goederenontvangst is geteld. De werkelijke hoeveelheid vergelijken met de geplande hoeveelheid is essentieel voor de 'Analyse van voorraadverschillen'. Een verschil tussen beide waarden wijst op een procesafwijking die onderzocht moet worden. Dit is een directe maatstaf voor de nauwkeurigheid van de bedrijfsvoering en een belangrijke invoer voor de KPI's 'Voorraadnauwkeurigheid' en 'Pickfoutpercentage'. Waarom dit belangrijk is Dit is de feitelijke hoeveelheid die fysiek is verwerkt. Door deze met de geplande hoeveelheid te vergelijken, meet je de nauwkeurigheid van de bedrijfsvoering en spoor je fouten op. Waar vind je dit? Te vinden in de bevestigingsgegevens van magazijnopdrachten, bijvoorbeeld in tabel /SCWM/ORDIM_C, vaak in een veld als NDIFF (hoeveelheidsverschil) of afgeleid van bevestigde hoeveelheden. Voorbeelden 10049250 | |||
Activiteiten in het magazijnbeheer
| Activiteit | Beschrijving | ||
|---|---|---|---|
| Goederenafgifte geboekt | Dit is de laatste logistieke en financiële stap in het systeem. De goederen worden hiermee formeel uit de magazijnvoorraad verwijderd. Dit betekent dat de juridische eigendom is overgedragen en de zending officieel is vertrokken. | ||
| Waarom dit belangrijk is Dit is een belangrijk eindpunt van het uitgaande proces en leidt tot facturering en voorraadupdates. De activiteit is ook van belang voor het meten van tijdige verzending en de KPI voor de tijd tussen laden en verzenden. Waar vind je dit? Leid dit af uit de boeking van een uitgaande levering die aan de Warehouse Order is gekoppeld. Controleer de documentstroom of statusvelden, zoals DGI_STAT, in de tabel /SCDL/DB_PROCH_O. Vastleggen Bepaal de timestamp waarop de status van de goederenafgifte voor de gekoppelde uitgaande levering op ‘Voltooid’ wordt gezet. Gebeurtenistype explicit | |||
| Inpakken voltooid | Deze activiteit geeft aan dat alle artikelen voor een zending in een handling unit zijn verpakt en dat deze is gesloten en gelabeld. De verpakte goederen zijn klaar voor de volgende stap, zoals klaarzetten of laden. | ||
| Waarom dit belangrijk is Deze mijlpaal sluit de inpakfase af. Inpakken moet klaar zijn voordat de goederen worden klaargezet en verzonden. Vertragingen hebben daarom direct invloed op de totale doorlooptijd en de KPI voor de doorlooptijd van inpakken en klaarzetten. Waar vind je dit? Dit kan worden vastgelegd wanneer de status van de handling unit (HU) op ‘Gesloten’ wordt gezet of wanneer de laatste inpakgerelateerde magazijntaak voor de WO is bevestigd. De tabel /SCWM/HUHDR bevat statusinformatie over de HU. Vastleggen Bepaal de timestamp waarop de laatste verzend-handling unit van de order wordt gesloten of voltooid. Gebeurtenistype inferred | |||
| Picktaak bevestigd | Een magazijnmedewerker bevestigt dat de picktaak is voltooid. Dat betekent dat de goederen fysiek uit hun opslaglocatie zijn gehaald. Dit gebeurt meestal met een RF-scanner. | ||
| Waarom dit belangrijk is Dit is een belangrijke mijlpaal in de orderafhandeling en heeft direct invloed op de doorlooptijd van order tot verzending. Door deze activiteit te analyseren, meet je de productiviteit van orderpickers en spoor je bottlenecks bij het picken op. Waar vind je dit? Dit wordt vastgelegd aan de hand van de bevestigingstimestamp (veld CONFIRMED_AT) in de Warehouse Task-tabel /SCWM/WT. De taakstatus (STAT) wordt bijgewerkt naar ‘Bevestigd’. Vastleggen Gebruik de bevestigingstimestamp uit de tabel /SCWM/WT voor picktaken die aan de Warehouse Order zijn gekoppeld. Gebeurtenistype explicit | |||
| Warehouse Order aangemaakt | Deze activiteit markeert het aanmaken van een Warehouse Order (WO), een werkpakket met meerdere magazijntaken. Het systeem maakt een WO aan om werk voor magazijnmedewerkers te bundelen en te organiseren, bijvoorbeeld op basis van activiteitsgebied, wachtrij of product. | ||
| Waarom dit belangrijk is Dit is het belangrijkste startevent van het uitvoeringsproces in het magazijn. Door de tijd tussen het aanmaken en de eerste actie te analyseren, spoor je vertragingen op bij de werktoewijzing en de inzet van middelen. Waar vind je dit? Dit event wordt vastgelegd aan de hand van de aanmaaktimestamp (veld CREATED_AT) in de kopgegevenstabel voor Warehouse Orders, /SCWM/WHO. Vastleggen Haal voor elk Warehouse Order-nummer (WHO) de aanmaaktimestamp op uit de tabel /SCWM/WHO. Gebeurtenistype explicit | |||
| Warehouse Order voltooid | De status van de Warehouse Order wordt op ‘Voltooid’ gezet nadat alle bijbehorende magazijntaken zijn bevestigd. Daarmee is het werkpakket vanuit uitvoeringsoogpunt afgerond. | ||
| Waarom dit belangrijk is Dit is het belangrijkste succesvolle eindevent van het proces. Het is nodig om de end-to-end-doorlooptijd in het magazijn te berekenen en de totale doorvoer te meten. Waar vind je dit? Dit wordt vastgelegd door de wijziging van het statusveld (STAT) naar ‘Voltooid’ te volgen in de kopgegevenstabel voor Warehouse Orders, /SCWM/WHO. Hiervoor kun je het wijzigingslogboek van deze tabel (DBTABLOG) of een speciaal timestampveld gebruiken. Vastleggen Bepaal de timestamp waarop de status in /SCWM/WHO op ‘C’ (Voltooid) wordt gezet. Gebeurtenistype inferred | |||
| Wegzettak bevestigd | Een magazijnmedewerker bevestigt dat de Warehouse Task voor het wegzetten is voltooid. De goederen zijn dan fysiek op de aangewezen opslaglocatie geplaatst. Deze bevestiging werkt de voorraadlocatie realtime bij. | ||
| Waarom dit belangrijk is Deze activiteit is een belangrijke mijlpaal in het inkomende proces en bevestigt dat de voorraad beschikbaar is om te picken. Vertragingen hebben direct invloed op de KPI voor de doorlooptijd van goederenontvangst tot wegzetten. Waar vind je dit? Dit wordt vastgelegd aan de hand van de bevestigingstimestamp (veld CONFIRMED_AT) in de Warehouse Task-tabel /SCWM/WT. Ook de taakstatus (STAT) verandert in ‘Bevestigd’. Vastleggen Gebruik de bevestigingstimestamp uit de tabel /SCWM/WT voor wegzettaken die aan de Warehouse Order zijn gekoppeld. Gebeurtenistype explicit | |||
| Goederenontvangst geboekt | Dit markeert de formele ontvangst van goederen in de magazijnvoorraad, afkomstig van een externe leverancier of uit productie. Deze belangrijke financiële en voorraadboeking maakt de voorraad zichtbaar en beschikbaar voor vervolgstappen, zoals het wegzetten. | ||
| Waarom dit belangrijk is Dit is een belangrijke mijlpaal in het inkomende proces. De tijd tussen aankomst van de goederen en deze boeking kan wijzen op achterstanden bij de ontvangst, waardoor voorraad later beschikbaar komt. Waar vind je dit? Leid dit af uit de boeking van een inkomende levering die aan de Warehouse Order is gekoppeld. Controleer de documentstroom of statusvelden, zoals DGRSTAT, in de tabel /SCDL/DB_PROCH_I. Vastleggen Bepaal de timestamp waarop de status van de goederenontvangst voor de gekoppelde inkomende levering op ‘Voltooid’ wordt gezet. Gebeurtenistype inferred | |||
| Inpakken gestart | Dit markeert het begin van het inpakken. De gepickte artikelen worden samengevoegd en in verzendverpakkingen of handling units geplaatst. Dit is vaak de eerste stap bij een inpakwerkplek. | ||
| Waarom dit belangrijk is Dit markeert het begin van de fase met diensten die waarde toevoegen. Door de inpakduur te meten, kun je de indeling, personeelsbezetting en materialen van de werkplek verbeteren. Waar vind je dit? Mogelijk moet je dit event afleiden. Dat kan aan de hand van de eerste scan van een artikel of handling unit bij een inpakstation, vaak vastgelegd in logs van de werkplek of handling unit. Tabellen zoals /SCWM/PACKSPEC en bijbehorende uitvoeringslogs kunnen als bron dienen. Vastleggen Gebruik de timestamp van de eerste bevestiging van een inpakgerelateerde Warehouse Task voor de levering, of de aanmaaktijd van de uiteindelijke verzend-HU. Gebeurtenistype inferred | |||
| Klaarzettak bevestigd | Een magazijnmedewerker bevestigt dat een verpakte handling unit van een inpakstation of verzamelzone naar een aangewezen verzendbuffer is verplaatst. De goederen staan nu klaar om te worden geladen. | ||
| Waarom dit belangrijk is Dit markeert de overgang van interne verwerking naar uitgaande logistiek. Vertragingen bij het klaarzetten kunnen leiden tot wanorde bij de laadperrons en gemiste ophaaltijden van vervoerders. Waar vind je dit? Dit wordt vastgelegd aan de hand van de bevestigingstimestamp (veld CONFIRMED_AT) van een Warehouse Task (/SCWM/WT) met een procestype voor verplaatsingen naar de verzendbuffer. Vastleggen Bepaal de bevestigingstimestamp van de magazijntaak voor het klaarzetten die aan de handling unit of levering is gekoppeld. Gebeurtenistype explicit | |||
| Laden gestart | Deze activiteit markeert het begin van het fysiek laden van goederen vanuit de verzendbuffer op een vrachtwagen of transporteenheid. Vaak start dit met een gebruikersactie in het systeem. | ||
| Waarom dit belangrijk is Dit is het begin van de laatste fysieke stap in het magazijn. Door de laadduur te analyseren, kun je het gebruik van laadperrons en de doorlooptijd van vervoerders verbeteren. Waar vind je dit? Leid dit af uit de statuswijziging van de gekoppelde Transportation Unit (TU) of uitgaande leveringsorder naar ‘Laden gestart’. Je kunt de tabel /SCWM/TU_STATUS controleren. Vastleggen Leg de timestamp vast waarop de status van de TU of leveringsorder wordt bijgewerkt om het begin van het laden aan te geven. Gebeurtenistype inferred | |||
| Laden voltooid | Dit geeft aan dat alle goederen voor een zending fysiek op de transporteenheid zijn geladen. Dit moet gebeuren voordat de goederenafgifte wordt geboekt en het voertuig vertrekt. | ||
| Waarom dit belangrijk is Een belangrijke mijlpaal vóór verzending. Vertragingen tussen het afronden van het laden en de goederenafgifte kunnen wijzen op documentatie- of systeemproblemen die vervoerders ophouden. Waar vind je dit? Leid dit af uit de statuswijziging van de gekoppelde Transportation Unit (TU) of uitgaande leveringsorder naar ‘Laden voltooid’. De statussen in de tabellen /SCWM/TU en /SCDL/DB_PROCH_O zijn relevant. Vastleggen Leg de timestamp vast waarop de status van de TU of leveringsorder wordt bijgewerkt om aan te geven dat het laden is voltooid. Gebeurtenistype inferred | |||
| Picktaak aangemaakt | Het systeem maakt een Warehouse Task (WT) aan om goederen uit een opslaglocatie te picken voor een uitgaande levering. Dit is de systeeminstructie voor een medewerker om een product op te halen. | ||
| Waarom dit belangrijk is Dit is het begin van het fysieke uitgaande proces. De tijd tussen het aanmaken en bevestigen van picktaken is belangrijk om de pickefficiëntie en beschikbaarheid van middelen te analyseren. Waar vind je dit? Dit wordt vastgelegd aan de hand van de aanmaaktimestamp (veld CREATED_AT) van de betreffende Warehouse Task in tabel /SCWM/WT. Het procestype geeft aan dat het om picken gaat. Vastleggen Filter op Warehouse Tasks met een pickprocestype die aan de Warehouse Order zijn gekoppeld en gebruik de aanmaaktimestamp. Gebeurtenistype explicit | |||
| Warehouse Order geannuleerd | De Warehouse Order wordt geannuleerd voordat alle taken zijn voltooid, zodat verdere uitvoering stopt. Dit kan gebeuren door een voorraadtekort, wijzigingen in klantorders of andere uitzonderingen. | ||
| Waarom dit belangrijk is Dit is een fout- of uitzonderingspad. Door het aantal annuleringen en de redenen ervoor te analyseren, spoor je problemen op in de planning, voorraadnauwkeurigheid of orderverwerking. Waar vind je dit? Dit wordt vastgelegd door de wijziging van het statusveld (STAT) naar ‘Geannuleerd’ te volgen in de kopgegevenstabel voor Warehouse Orders, /SCWM/WHO. Vastleggen Bepaal de timestamp waarop de status in /SCWM/WHO wordt ingesteld op een waarde voor annulering. Gebeurtenistype inferred | |||
| Wegzettak aangemaakt | Het systeem maakt een specifieke instructie aan, een Warehouse Task (WT), om ontvangen goederen van de ontvangstzone naar een definitieve opslaglocatie te verplaatsen. Deze activiteit geeft aan dat het systeem klaar is om het wegzetten uit te voeren. | ||
| Waarom dit belangrijk is De tijd tussen het aanmaken en bevestigen van de taak laat zien hoelang het duurt voordat magazijnmedewerkers de wegzetinstructie oppakken en uitvoeren. Zo worden mogelijke tekorten aan personeel of materieel zichtbaar. Waar vind je dit? Dit wordt vastgelegd aan de hand van de aanmaaktimestamp (veld CREATED_AT) van de betreffende Warehouse Task in tabel /SCWM/WT. Het procestype geeft aan dat het om wegzetten gaat. Vastleggen Filter op Warehouse Tasks met een wegzetprocestype die aan de Warehouse Order zijn gekoppeld en gebruik de aanmaaktimestamp. Gebeurtenistype explicit | |||
Extractiegidsen
Stappen
- Voorwaarde: CDS-views identificeren of aanmaken: De belangrijkste databronnen zijn de standaard SAP S/4HANA-CDS-views voor magazijnbeheer. De belangrijkste views zijn
I_WarehouseOrdervoor events op orderniveau enI_WarehouseTaskvoor events op taakniveau. Voor gerelateerde logistieke events zijn ook views nodig zoalsI_OutboundDeliveryItem,I_InboundDeliveryItemenI_EWMTransportationUnit. Controleer of deze views actief zijn in je systeem. - Een aangepaste CDS-view aanmaken: Maak een aangepaste CDS-view om data uit meerdere bronnen samen te voegen tot één event log. Gebruik ABAP Development Tools (ADT) in Eclipse om een nieuwe Data Definition aan te maken. Met
UNION ALLvoegt deze view records uit verschillende bronnen samen, waarbij elk record een afzonderlijke bedrijfsactiviteit vertegenwoordigt. - De structuur van het event log definiëren: Bepaal in de aangepaste CDS-view welke velden de kolommen van het event log vormen. Neem in elk geval
WarehouseOrder,ActivityName,EventTimeen de overige vereiste en aanbevolen attributen op. Koppel deze velden aan de onderliggende standaard-CDS-views. - Events voor magazijnorders modelleren: Voeg de eerste
SELECT-statements toe aan de union. Selecteer gegevens uitI_WarehouseOrderom het event 'Warehouse Order Created' aan te maken op basis van de aanmaaktimestamp. Voeg daarnaSELECT-statements toe voor 'Warehouse Order Completed' en 'Warehouse Order Canceled'. Filter hiervoor op de orderstatus en gebruik de juiste bevestigings- of wijzigingstimestamps. - Events voor magazijntaken modelleren: Voeg
SELECT-statements toe op basis vanI_WarehouseTask. Maak de events 'Putaway Task Created' en 'Putaway Task Confirmed' aan door te filteren op magazijnprocescategorieën voor putaway. Maak op dezelfde manier de events 'Picking Task Created', 'Picking Task Confirmed' en 'Staging Task Confirmed' aan op basis van de bijbehorende procescategorieën en aanmaak- en bevestigingstimestamps. - Goederenbewegingen modelleren: Koppel leveringsgerelateerde views aan magazijntaken om goederenbewegingen vast te leggen. Selecteer voor 'Goods Receipt Posted' gegevens uit
I_InboundDeliveryItemmetActualGoodsMovementDateTime. Gebruik voor 'Goods Issue Posted' hetzelfde veld uitI_OutboundDeliveryItemen koppel dit aan de bijbehorende magazijnorder of -taak. - Laad- en inpakevents modelleren: Selecteer gegevens uit
I_EWMTransportationUnitom de events 'Loading Started' en 'Loading Completed' vast te leggen met de daarvoor bestemde timestamps. Inpakken kan ingewikkeld zijn. Gebruik hiervoor eventueel een Handling Unit-view als benadering: de aanmaaktijd kan staan voor 'Packing Started' en een statuswijzigingstijd voor 'Packing Completed'. Mogelijk moet je dit aanpassen aan je specifieke inpakproces. - Annotaties toevoegen om de CDS-view beschikbaar te maken: Voeg de annotatie
@OData.publish: truetoe aan de definitie van de aangepaste CDS-view. SAP genereert dan automatisch een OData-service op basis van de structuur van de view. - De CDS-view en OData-service activeren: Activeer de nieuwe Data Definition in ADT. Ga daarna naar het SAP Gateway-hubsysteem en gebruik transactie
/IWFND/MAINT_SERVICEom de nieuw gegenereerde OData-service op te zoeken en te activeren. De data is daarna beschikbaar via een REST API-endpoint. - De data extraheren: Maak met je dataplatform of ETL-tool verbinding met het geactiveerde OData-service-endpoint. Pas filters rechtstreeks toe in de OData-URI, bijvoorbeeld een filter op
EventTimeom de periode te beperken (?$filter=EventTime ge datetime'2023-01-01T00:00:00'). - De data geschikt maken voor process mining: Sla de geëxtraheerde data op als een plat bestand, bijvoorbeeld CSV, met kolomkoppen die overeenkomen met de vereiste attributen voor ProcessMind (
WarehouseOrder,ActivityName,EventTime, enzovoort). Upload het bestand naar de process mining-tool.
Configuratie
- Aangepaste CDS-view: Maak een speciale CDS-view, bijvoorbeeld
Z_C_EWM_EVENTLOG_CDS, om de eventdata samen te brengen. Dit is het centrale object voor de extractie. - OData-service: Activeer de OData-service die vanuit de aangepaste CDS-view is gegenereerd. De servicenaam is meestal de naam van de CDS-view met het achtervoegsel
_CDS. - Filter op datumbereik: Stel bij API-aanroepen via OData een datumfilter in voor het veld
EventTime. Voor een eerste analyse is een periode van 3 tot 6 maanden gebruikelijk. Zonder filter kan de query vastlopen of prestatieproblemen veroorzaken. - Filter op entiteit: Beperk de hoeveelheid data verder met filters op attributen zoals magazijnnummer (
Magazijn), magazijnordertype (WarehouseOrderType) of specifieke materialen (MaterialNumber). - Systeemautorisaties: De gebruiker die de CDS-view maakt, heeft SAP-ontwikkelaarstoegang in ADT nodig. De gebruiker of het serviceaccount dat de OData API aanroept, moet rechten hebben voor de onderliggende magazijnbeheergegevens.
a Voorbeeldquery sql
DEFINE VIEW Z_C_EWM_EVENTLOG_CDS
WITH PARAMETERS
P_StartDate : abap.dats,
P_EndDate : abap.dats
AS SELECT FROM I_WarehouseOrder AS WO
{
-- Required Attributes
WO.WarehouseOrder AS WarehouseOrder,
CAST('Warehouse Order Created' AS abap.char(40)) AS ActivityName,
WO.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
-- Recommended Attributes
CAST(NULL AS abap.tstp) AS EventEndTime,
CAST(NULL AS abap.char(40)) AS MaterialNumber,
WO.CreationUser AS User,
WO.WarehouseOrderType AS WarehouseOrderType,
WO.WarehouseOrderStatus AS WarehouseOrderStatus,
WO.Priority AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
CAST(WO.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseOrder AS WO
{
WO.WarehouseOrder,
CAST('Warehouse Order Completed' AS abap.char(40)) AS ActivityName,
WO.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
CAST(NULL AS abap.char(40)) AS MaterialNumber,
WO.ConfirmationUser AS User,
WO.WarehouseOrderType,
WO.WarehouseOrderStatus,
WO.Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WO.WarehouseOrderStatus = 'C' AND
CAST(WO.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseOrder AS WO
{
WO.WarehouseOrder,
CAST('Warehouse Order Canceled' AS abap.char(40)) AS ActivityName,
WO.LastChangeDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
CAST(NULL AS abap.char(40)) AS MaterialNumber,
WO.LastChangeUser AS User,
WO.WarehouseOrderType,
WO.WarehouseOrderStatus,
WO.Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WO.WarehouseOrderStatus = 'X' AND
CAST(WO.LastChangeDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
LEFT JOIN I_InboundDeliveryItem AS IBD ON WT.DeliveryDocument = IBD.InboundDelivery AND WT.DeliveryDocumentItem = IBD.InboundDeliveryItem
{
WT.WarehouseOrder,
CAST('Goods Receipt Posted' AS abap.char(40)) AS ActivityName,
IBD.ActualGoodsMovementDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
IBD.LastChangedByUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '1' AND -- Putaway
IBD.GoodsMovementStatus = 'C' AND -- Completed
CAST(IBD.ActualGoodsMovementDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Putaway Task Created' AS abap.char(40)) AS ActivityName,
WT.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
WT.ConfirmationDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
WT.CreationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '1' AND -- Putaway
CAST(WT.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Putaway Task Confirmed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '1' AND -- Putaway
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Picking Task Created' AS abap.char(40)) AS ActivityName,
WT.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
WT.ConfirmationDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
WT.CreationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '2' AND -- Stock Removal
CAST(WT.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Picking Task Confirmed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '2' AND -- Stock Removal
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Packing Started' AS abap.char(40)) AS ActivityName,
WT.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
WT.ConfirmationDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
WT.CreationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '5' AND -- Packing
CAST(WT.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Packing Completed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '5' AND -- Packing
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Staging Task Confirmed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '4' AND -- Staging
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_EWMTransportationUnit AS TU
INNER JOIN I_WarehouseTask AS WT ON TU.TransportationUnit = WT.ShipmentOrTransportationUnit
{
WT.WarehouseOrder,
CAST('Loading Started' AS abap.char(40)) AS ActivityName,
TU.LoadingStartDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
TU.LoadingEndDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
TU.LastChangeUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
TU.LoadingStartDateTime IS NOT NULL AND
CAST(TU.LoadingStartDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_EWMTransportationUnit AS TU
INNER JOIN I_WarehouseTask AS WT ON TU.TransportationUnit = WT.ShipmentOrTransportationUnit
{
WT.WarehouseOrder,
CAST('Loading Completed' AS abap.char(40)) AS ActivityName,
TU.LoadingEndDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
TU.LastChangeUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
TU.LoadingEndDateTime IS NOT NULL AND
TU.LoadingStatus = 'C' AND
CAST(TU.LoadingEndDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
LEFT JOIN I_OutboundDeliveryItem AS OBD ON WT.DeliveryDocument = OBD.OutboundDelivery AND WT.DeliveryDocumentItem = OBD.OutboundDeliveryItem
{
WT.WarehouseOrder,
CAST('Goods Issue Posted' AS abap.char(40)) AS ActivityName,
OBD.ActualGoodsMovementDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
OBD.LastChangedByUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '2' AND -- Stock Removal
OBD.GoodsMovementStatus = 'C' AND -- Completed
CAST(OBD.ActualGoodsMovementDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate Stappen
- Controleer of rechtstreekse leestoegang tot het SAP EWM-databaseschema is goedgekeurd. Bepaal welke fysieke databaseobjecten de kopgegevens van magazijnorders, magazijntaken, de statusgeschiedenis van magazijnorders, boekingen van goederenontvangst en goederenafgifte, inpakken, staging en laden bevatten. De logische verwijzingen /SCWM/WHO en /SCWM/WT zijn gangbare startpunten, maar controleer in je systeem welke objecten, velden, statuscodes, timestampbetekenissen en databaseschema’s daadwerkelijk worden gebruikt.
- Vraag de gecontroleerde veldmapping op bij de technische eigenaar van SAP EWM of raadpleeg het datadictionary. Koppel de magazijnorder-ID, het magazijnordertype, de status, prioriteit, magazijntaak-ID, taakcategorie of procestype, materiaal, gebruiker, aanmaaktimestamp, bevestigingstimestamp, inpaktimestamps, stagingtimestamps, laadtimestamps, timestamp van goederenontvangst, timestamp van goederenafgifte, bronsysteem en laatste ververstimestamp. Ga er niet van uit dat een veld in dezelfde tabel staat of dat een statuscode in elke implementatie hetzelfde betekent.
- Configureer de extractieverbinding met een databaseaccount met alleen-lezenrechten, het productie- of rapportageschema en parameters voor de startdatum en einddatum van de extractie, de naam van het bronsysteem en eventuele bedrijfsspecifieke filters. Pas het datumfilter toe op de relevante eventtimestamp, niet alleen op de aanmaaktimestamp van de magazijnorder. Zo sluit je events die later in de levenscyclus van de order plaatsvinden niet uit.
- Bouw de eventregels op door voor elke expliciet vereiste activiteit één regel te selecteren. Gebruik voor elke activiteit de gecontroleerde bronvelden. Laat ProcessMind de events niet afleiden. Staat een activiteit in een statusgeschiedenis of aanvraaglogboek in plaats van in een actueel kopveld, gebruik dan die geschiedenis of dat logboek en behoud de eventtimestamp en uitvoerende gebruiker.
- Zet alle activiteitstimestamps om naar één tijdzone, bij voorkeur UTC, of documenteer de tijdzone van de SAP-applicatieserver. Zet bronspecifieke status- en procescodes om naar de exacte activiteitnamen die het event log vereist: Warehouse Order Created, Goods Receipt Posted, Putaway Task Created, Putaway Task Confirmed, Picking Task Created, Picking Task Confirmed, Packing Started, Packing Completed, Staging Task Confirmed, Loading Started, Loading Completed, Goods Issue Posted, Warehouse Order Completed en Warehouse Order Canceled.
- Zorg dat elke uitvoerregel de velden WarehouseOrder, ActivityName, EventTime, SourceSystem en LastDataUpdate bevat. Vul EventEndTime in als er een betrouwbare eindtijd beschikbaar is. Koppel events op taakniveau aan de magazijnorder. Bevat een magazijnorder meerdere relevante taken, behoud dan één eventregel per taakevent en gebruik de magazijnorder als case-ID. Gebruik een stabiele tie-breaker, zoals de taak-ID of bron-event-ID, als het importformaat dat ondersteunt.
- Controleer het resultaat voordat je het exporteert. Ga na of alle 14 activiteitnamen voorkomen wanneer de brondata de bijbehorende bedrijfsactiviteiten bevat, of de timestamps binnen de gevraagde periode vallen, of magazijnorders niet onverwacht leeg zijn en of dubbele regels verklaarbaar zijn door meerdere taken of herhaalde statuswijzigingen. Vergelijk de aantallen met SAP-operationele rapporten of een onafhankelijk goedgekeurde extractie.
- Exporteer het resultaat als een ProcessMind-compatibel bestand met scheidingstekens of als databasequeryresultaat, met één event per regel. Behoud de exacte vereiste kolomnamen, gebruik een eenduidige timestampnotatie zoals ISO 8601, plaats tekstwaarden tussen aanhalingstekens als het bestandsformaat dat vereist en voeg een kopregel toe. Upload het bestand naar ProcessMind of configureer daar de databaseverbinding. Stel WarehouseOrder in als case-ID, ActivityName als activiteit, EventTime als starttimestamp en, indien beschikbaar, EventEndTime als eindtimestamp.
Configuratie
- Mapping van bronobjecten: Controleer de fysieke databaseobjecten en velden voor magazijnorders, magazijntaken, statusgeschiedenis, goederenbewegingen, inpakken, staging en laden. /SCWM/WHO en /SCWM/WT kunnen relevante logische objecten zijn, maar controleer vóór de implementatie hoe deze in de database zijn opgenomen.
- Datumbereik: Begin met een gecontroleerde periode van drie tot zes maanden. Gebruik voor de eerste test een kortere periode en breid die na afstemming uit. Laat tussen incrementele runs een kleine overlap zitten om late boekingen en correcties mee te nemen.
- Keuze van eventtimestamp: Gebruik aanmaaktimestamps voor aangemaakte activiteiten, bevestigingstimestamps voor bevestigde activiteiten, boekingstimestamps voor goederenontvangst en goederenafgifte en gecontroleerde uitvoeringstimestamps voor inpakken, staging en laden. Gebruik niet voor alle events de aanmaaktijd van de magazijnorder.
- Filters: Pas alleen gecontroleerde bedrijfsfilters toe, bijvoorbeeld op magazijnnummer, bedrijfscode, documenttype, magazijnordertype, activiteitengebied, wachtrij, vestiging of bronsysteem. Velden voor bedrijfscode en documenttype kunnen in gerelateerde objecten staan. Controleer de mapping in het doelsysteem.
- Statusmapping: Stel de exacte SAP-status- of procescodes in die staan voor voltooide en geannuleerde magazijnorders. Controleer de mapping met de EWM-proceseigenaar, want statuscodes en de opslag ervan kunnen per release en implementatie verschillen.
- SourceSystem: Gebruik een vaste waarde die de EWM-productie- of rapportageomgeving aanduidt. Leid deze niet af van een bedrijfsveld dat leeg kan zijn.
- LastDataUpdate: Vul dit veld voor elke regel in een run op dezelfde manier met de extractietimestamp of de timestamp van de bronverversing.
- Incrementele extractie: Gebruik een opgeslagen grenswaarde op basis van de laatst succesvol geëxtraheerde sourcetimestamp, met een overlapperiode voor records die later binnenkomen. Verwijder dubbele records met gecontroleerde bron-ID’s, waar die beschikbaar zijn.
- Prestaties: Beperk het datumbereik vroeg, selecteer alleen de benodigde kolommen, filter op geïndexeerde velden, gebruik geen functies op geïndexeerde timestampkolommen in voorwaarden en verwerk grote perioden in batches per dag of week. Gebruik waar toegestaan een rapportagereplica.
- Joinstrategie: Controleer de cardinaliteit tussen magazijnorders en magazijntaken. Voorkom dat joins met taak-, status-, materiaal- en handling-unitdata onbedoeld extra regels opleveren. Aggregeer of selecteer de juiste eventregel voordat je de join uitvoert.
- Tijdzones: Configureer de tijdzone van de bron en de omzettingsregel. Sla timestamps op een consistente manier op en documenteer hoe je met zomertijd omgaat.
- Vereisten: Alleen-lezenrechten voor de database, goedgekeurde toegang tot het EWM-schema, gecontroleerde datadictionary-mappings, toestemming om relevante operationele en historische objecten te lezen en een goedgekeurde ProcessMind-importconfiguratie. Welke SAP-modules, licenties en autorisaties nodig zijn, hangt af van de EWM-architectuur. Laat de systeemeigenaar dit controleren.
a Voorbeeldquery sql
WITH
params AS (
SELECT
CAST('[Start date and time]' AS TIMESTAMP) AS start_time,
CAST('[End date and time]' AS TIMESTAMP) AS end_time,
CAST('[Source system name]' AS VARCHAR(255)) AS source_system,
CAST(CURRENT_TIMESTAMP AS TIMESTAMP) AS last_data_update
),
warehouse_orders AS (
SELECT
CAST(wo.[Warehouse order ID field] AS VARCHAR(255)) AS WarehouseOrder,
CAST(wo.[Warehouse order type field] AS VARCHAR(255)) AS WarehouseOrderType,
CAST(wo.[Warehouse order status field] AS VARCHAR(255)) AS WarehouseOrderStatus,
CAST(wo.[Priority field] AS VARCHAR(255)) AS Priority,
CAST(wo.[Warehouse order creation timestamp field] AS TIMESTAMP) AS WarehouseOrderCreatedTime,
CAST(wo.[Warehouse order completion timestamp field] AS TIMESTAMP) AS WarehouseOrderCompletedTime,
CAST(wo.[Warehouse order cancellation timestamp field] AS TIMESTAMP) AS WarehouseOrderCanceledTime,
CAST(wo.[Material number field] AS VARCHAR(255)) AS MaterialNumber,
CAST(wo.[User field] AS VARCHAR(255)) AS [User]
FROM [Your warehouse order header table] wo
),
warehouse_tasks AS (
SELECT
CAST(wt.[Warehouse order ID field] AS VARCHAR(255)) AS WarehouseOrder,
CAST(wt.[Warehouse task ID field] AS VARCHAR(255)) AS WarehouseTask,
CAST(wt.[Task category or process type field] AS VARCHAR(255)) AS TaskType,
CAST(wt.[Material number field] AS VARCHAR(255)) AS MaterialNumber,
CAST(wt.[Task creation timestamp field] AS TIMESTAMP) AS TaskCreatedTime,
CAST(wt.[Task confirmation timestamp field] AS TIMESTAMP) AS TaskConfirmedTime,
CAST(wt.[User field] AS VARCHAR(255)) AS [User]
FROM [Your warehouse task table] wt
),
events AS (
SELECT wo.WarehouseOrder, 'Warehouse Order Created' AS ActivityName, wo.WarehouseOrderCreatedTime AS EventTime, CAST(NULL AS TIMESTAMP) AS EventEndTime, wo.MaterialNumber, wo.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_orders wo
UNION ALL
SELECT gr.[Warehouse order ID field], 'Goods Receipt Posted', CAST(gr.[Goods receipt posting timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(gr.[Material number field] AS VARCHAR(255)), CAST(gr.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your goods receipt posting table] gr LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(gr.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT wt.WarehouseOrder, 'Putaway Task Created', wt.TaskCreatedTime, CAST(NULL AS TIMESTAMP), wt.MaterialNumber, wt.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_tasks wt LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = wt.WarehouseOrder WHERE wt.TaskType = '[Verified putaway task type]'
UNION ALL
SELECT wt.WarehouseOrder, 'Putaway Task Confirmed', wt.TaskConfirmedTime, CAST(NULL AS TIMESTAMP), wt.MaterialNumber, wt.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_tasks wt LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = wt.WarehouseOrder WHERE wt.TaskType = '[Verified putaway task type]' AND wt.TaskConfirmedTime IS NOT NULL
UNION ALL
SELECT wt.WarehouseOrder, 'Picking Task Created', wt.TaskCreatedTime, CAST(NULL AS TIMESTAMP), wt.MaterialNumber, wt.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_tasks wt LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = wt.WarehouseOrder WHERE wt.TaskType = '[Verified picking task type]'
UNION ALL
SELECT wt.WarehouseOrder, 'Picking Task Confirmed', wt.TaskConfirmedTime, CAST(NULL AS TIMESTAMP), wt.MaterialNumber, wt.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_tasks wt LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = wt.WarehouseOrder WHERE wt.TaskType = '[Verified picking task type]' AND wt.TaskConfirmedTime IS NOT NULL
UNION ALL
SELECT pk.[Warehouse order ID field], 'Packing Started', CAST(pk.[Packing start timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(pk.[Material number field] AS VARCHAR(255)), CAST(pk.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your packing event table] pk LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(pk.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT pk.[Warehouse order ID field], 'Packing Completed', CAST(pk.[Packing completion timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(pk.[Material number field] AS VARCHAR(255)), CAST(pk.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your packing event table] pk LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(pk.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT st.[Warehouse order ID field], 'Staging Task Confirmed', CAST(st.[Staging confirmation timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(st.[Material number field] AS VARCHAR(255)), CAST(st.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your staging event table] st LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(st.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT ld.[Warehouse order ID field], 'Loading Started', CAST(ld.[Loading start timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(ld.[Material number field] AS VARCHAR(255)), CAST(ld.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your loading event table] ld LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(ld.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT ld.[Warehouse order ID field], 'Loading Completed', CAST(ld.[Loading completion timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(ld.[Material number field] AS VARCHAR(255)), CAST(ld.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your loading event table] ld LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(ld.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT gi.[Warehouse order ID field], 'Goods Issue Posted', CAST(gi.[Goods issue posting timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(gi.[Material number field] AS VARCHAR(255)), CAST(gi.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your goods issue posting table] gi LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(gi.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT wo.WarehouseOrder, 'Warehouse Order Completed', wo.WarehouseOrderCompletedTime, CAST(NULL AS TIMESTAMP), wo.MaterialNumber, wo.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_orders wo WHERE wo.WarehouseOrderCompletedTime IS NOT NULL
UNION ALL
SELECT wo.WarehouseOrder, 'Warehouse Order Canceled', wo.WarehouseOrderCanceledTime, CAST(NULL AS TIMESTAMP), wo.MaterialNumber, wo.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_orders wo WHERE wo.WarehouseOrderCanceledTime IS NOT NULL
)
SELECT
e.WarehouseOrder,
e.ActivityName,
e.EventTime,
e.EventEndTime,
p.source_system AS SourceSystem,
p.last_data_update AS LastDataUpdate,
e.MaterialNumber,
e.[User],
e.WarehouseOrderType,
e.WarehouseOrderStatus,
e.Priority
FROM events e
CROSS JOIN params p
WHERE e.WarehouseOrder IS NOT NULL
AND e.EventTime IS NOT NULL
AND e.EventTime >= p.start_time
AND e.EventTime < p.end_time
ORDER BY e.WarehouseOrder, e.EventTime, e.ActivityName; Klaar om te beginnen?
Begin vandaag met het verbeteren van je magazijnprocessen. Gebruik deze template om de efficiëntie te verhogen en orders sneller af te handelen.
Voorkom pickfouten en verbeter vandaag nog het magazijnbeheer
Bereik binnen enkele weken een voorraadnauwkeurigheid van 99,5% en voorkom vertragingen bij de orderafhandeling.
Geen creditcard nodig. Je bent binnen enkele minuten aan de slag.