Datatemplate voor productieplanning
Datatemplate voor productieplanning
- Aanbevolen attributen voor analyse van productieplanning
- Belangrijke activiteiten in de productieplanning om te volgen
- Gedetailleerde uitleg over data-extractie uit SAP S/4HANA
Attributen voor productieplanning
| Naam | Beschrijving | ||
|---|---|---|---|
| Activiteit Activity | De naam van het specifieke event of de specifieke taak die op een bepaald moment in het productieplanningsproces plaatsvond. | ||
| Beschrijving Dit attribuut legt de afzonderlijke stappen en mijlpalen in de levenscyclus van een productieorder vast. Voorbeelden zijn ‘Productieorder aangemaakt’, ‘Beschikbaarheid materiaal gecontroleerd’, ‘Productie gestart’ en ‘Order financieel afgesloten’. Elke activiteit staat voor een specifieke actie of statuswijziging die in het systeem is vastgelegd. De volgorde en frequentie van deze activiteiten analyseren is de kern van process mining. Zo kun je de procesflow visualiseren, afwijkingen van de standaardprocedure opsporen en activiteiten vinden die vertraging veroorzaken of vaak herstelwerk vragen, zoals ‘Productieplan aangepast’. Waarom dit belangrijk is Dit attribuut beschrijft de processtappen. Daarmee kun je de daadwerkelijke productieworkflow en de variaties daarin ontdekken en visualiseren. Waar vind je dit? Afgeleid uit statuswijzigingen in tabellen zoals JEST en JCDS, gebruikte transactiecodes (bijvoorbeeld CO01 voor aanmaken) of specifieke bevestigingsrecords in AFRU. Voorbeelden Productieorder aangemaaktProductieorder vrijgegevenProductie gestartEindbevestiging ingevoerdGoederenontvangst geboekt | |||
| Productieorder ProductionOrder | De unieke identificatiecode van een productieorder. Deze dient als primaire case-ID voor het productieplanningsproces. | ||
| Beschrijving Het productieordernummer is een unieke sleutel die SAP S/4HANA genereert om alle activiteiten voor de productie van een bepaalde hoeveelheid van een product te beheren en te volgen. Het verbindt alle bijbehorende events, van planning en vrijgave tot uitvoering en uiteindelijke afrekening. Bij process mining gebruik je dit attribuut om alle bijbehorende events te groeperen in één end-to-end-procesinstantie. Door processen per productieorder te analyseren, kun je KPI’s meten, zoals de doorlooptijd en het halen van de planning, en bottlenecks opsporen die specifieke productieruns beïnvloeden. Waarom dit belangrijk is Dit is het essentiële attribuut dat alle processtappen met elkaar verbindt. Zo kun je de volledige levenscyclus van de productie per case analyseren, van begin tot eind. Waar vind je dit? Dit is het productieordernummer. Je vindt het doorgaans in SAP-tabellen zoals AFKO (veld AUFNR) en AFPO. Voorbeelden 100056710008341001299 | |||
| Starttijd StartTime | De timestamp die aangeeft wanneer een specifieke activiteit of een specifiek event begon. | ||
| Beschrijving Dit attribuut bevat de datum en tijd van elk vastgelegd event in het productieproces. Het vormt de basis voor alle tijdsanalyses van het proces. De starttijd is belangrijk om de tijd tussen activiteiten en de totale doorlooptijd van een productieorder te berekenen en om te zien wanneer events plaatsvinden. Je kunt bottlenecks, wachttijden en het halen van de planning analyseren door de werkelijke timestamps te vergelijken met de geplande datums. Waarom dit belangrijk is Dit geeft alle events een chronologische context, zodat je de procesprestaties, doorlooptijden en bottlenecks kunt analyseren. Waar vind je dit? Deze informatie staat doorgaans in wijzigingsdocumenttabellen (CDHDR/CDPOS) voor statuswijzigingen, bevestigingstabellen (AFRU) voor uitvoeringsstappen en koptabellen (AFKO) voor aanmaakdatums. Voorbeelden 2023-10-26T09:00:00Z2023-10-26T14:30:00Z2023-10-27T08:15:00Z | |||
| Bronsysteem SourceSystem | Het systeem waaruit de productieplanningsdata is gehaald. | ||
| Beschrijving Dit attribuut geeft aan waar de data vandaan komt. Dat is belangrijk in omgevingen met meerdere geïntegreerde systemen. Voor dit proces is dit doorgaans de specifieke SAP S/4HANA-instantie. Als je data uit verschillende bronnen analyseert, helpt kennis van het bronsysteem om de data-integriteit te bewaken en de juiste context te behouden wanneer je data samenvoegt. Dit is essentiële metadata voor datagovernance en traceerbaarheid. Waarom dit belangrijk is Dit levert belangrijke metadata voor datagovernance, zodat de herkomst en context van de procesdata duidelijk zijn. Waar vind je dit? Dit is doorgaans een vaste waarde die tijdens de data-extractie wordt toegevoegd om de SAP S/4HANA-client en systeem-ID (SID) aan te geven. Voorbeelden S4P_100S4H_PRD_200S4Q_300 | |||
| Laatste data-update LastDataUpdate | De timestamp die aangeeft wanneer de data voor het laatst is vernieuwd of uit het bronsysteem is gehaald. | ||
| Beschrijving Dit attribuut legt de datum en tijd van de meest recente data-extractie vast. Deze metadata laat zien hoe actueel de data is die je analyseert. De tijd van de laatste update is belangrijk om de analyse goed te interpreteren. Je ziet hiermee of je realtime-informatie bekijkt of een momentopname. Dat bepaalt hoe relevant bevindingen en beslissingen op basis van de data zijn. Waarom dit belangrijk is Zo weten gebruikers hoe actueel de data is. Dat is belangrijk om juiste en relevante zakelijke beslissingen te nemen. Waar vind je dit? Deze timestamp wordt aangemaakt en toegevoegd tijdens het ETL-proces (extractie, transformatie en laden van data). Voorbeelden 2024-05-21T02:00:00Z2024-05-22T02:00:00Z2024-05-23T02:00:00Z | |||
| Geplande einddatum PlannedEndDate | De geplande datum waarop de productieorder volgens het oorspronkelijke plan klaar moet zijn. | ||
| Beschrijving De geplande einddatum is de streefdatum waarop alle productieactiviteiten voor een order afgerond moeten zijn. Deze datum wordt bepaald tijdens de planningsfase. Dit attribuut is nodig om te meten of de planning wordt gehaald. Door de geplande einddatum te vergelijken met de werkelijke eindtijd, kunnen organisaties de KPI voor het halen van de productieplanning berekenen en te late orders opsporen. Deze analyse helpt de planning nauwkeuriger te maken en de klanttevredenheid te verbeteren. Waarom dit belangrijk is Dit is het uitgangspunt om te meten of de planning wordt gehaald en om de nauwkeurigheid van de planning en de efficiëntie van de uitvoering te beoordelen. Waar vind je dit? Te vinden in de kopteksttabel van de productieorder AFKO (veld GLTRP). Voorbeelden 2023-11-152023-12-012024-01-20 | |||
| Materiaalnummer MaterialNumber | De unieke identificatiecode van het product dat met de productieorder wordt gemaakt. | ||
| Beschrijving Het materiaalnummer geeft aan welk product de productieorder moet opleveren. Het koppelt het productieproces aan de stamgegevens van het materiaal, waaronder de stuklijst (BOM) en de routing. Door het proces per materiaalnummer te analyseren, zie je of bepaalde producten vaker vertraging, herstelwerk of materiaaltekorten hebben. Zo kun je het proces per product verbeteren, bijvoorbeeld door planningsparameters aan te passen of de toeleveringsketen voor specifieke onderdelen te verbeteren. Waarom dit belangrijk is Je kunt filteren en analyseren op het product dat wordt gemaakt. Zo komen inefficiënties en bottlenecks per product aan het licht. Waar vind je dit? Te vinden in de tabel met productieorderposities AFPO (veld MATNR). Voorbeelden RM-1001FG-2050SA-3100-B | |||
| Orderstatus OrderStatus | De huidige verwerkingsstatus van de productieorder, bijvoorbeeld aangemaakt, vrijgegeven of technisch afgerond. | ||
| Beschrijving De orderstatus geeft aan in welke fase van de levenscyclus de productieorder zich bevindt. Het is een samenvatting van de verschillende systeem- en gebruikersstatussen die aan de order zijn toegekend. Veelvoorkomende statussen zijn CRTD (aangemaakt), REL (vrijgegeven), CNF (bevestigd), TECO (technisch afgerond) en CLSD (afgesloten). De huidige status van orders analyseren helpt om het onderhanden werk te begrijpen. Bij process mining levert het volgen van statuswijzigingen in de tijd het activiteitenlogboek op. Daarmee kun je de procesflow en de tijd in elke fase in detail bekijken. Waarom dit belangrijk is Dit geeft op hoofdlijnen aan in welke fase van de levenscyclus een order zit en helpt de activiteitenvolgorde voor process mining af te leiden. Waar vind je dit? Afgeleid van de systeemstatus in tabel JEST, gekoppeld via het objectnummer in AFKO (veld OBJNR). Voorbeelden CRTDRELTECOCLSD | |||
| Vestiging Plant | De productielocatie waar de productieorder wordt uitgevoerd. | ||
| Beschrijving Een vestiging is in SAP een organisatorische eenheid die een productielocatie of fabriek vertegenwoordigt. Elke productieorder wordt toegewezen aan een specifieke vestiging waar de productieactiviteiten plaatsvinden. Dit attribuut is belangrijk om verschillende productielocaties met elkaar te vergelijken. Door de procesdata per vestiging op te splitsen, kunnen organisaties prestaties vergelijken, locatiegebonden problemen of goede werkwijzen opsporen en regionale verschillen in efficiëntie, capaciteit of naleving van normen in kaart brengen. Waarom dit belangrijk is Hiermee kun je prestaties van verschillende productielocaties vergelijken, goede werkwijzen delen en locatiegebonden problemen aanpakken. Waar vind je dit? Te vinden in de kopteksttabel van de productieorder AFKO (veld DWERK). Voorbeelden 100017102000 | |||
| Werkplek WorkCenter | De specifieke machine, groep machines of assemblageafdeling die verantwoordelijk is voor een bewerking. | ||
| Beschrijving Een werkplek is een specifieke operationele eenheid binnen een vestiging waar een productiestap wordt uitgevoerd. Dit kan één machine, een productielijn of een groep medewerkers zijn. Door procesdata per werkplek te analyseren, kun je bottlenecks in de capaciteit opsporen en de inzet van bronnen verbeteren. Je ziet welke werkplekken overbelast of onderbenut zijn en waar tijdens de productie vaak vertraging ontstaat. Dit is nodig voor het dashboard Capaciteitsbottlenecks opsporen. Waarom dit belangrijk is Zo kun je machines of productielijnen opsporen die een bottleneck vormen en gericht de capaciteit en inzet van bronnen verbeteren. Waar vind je dit? Te vinden in de bewerkingsgegevens van een productieorder, tabel AFVC (veld ARBPL). Voorbeelden WC-ASSEMBLY-01WC-MILLING-05WC-PACKING | |||
| Beschikbaarheidsstatus materiaal MaterialAvailabilityStatus | Geeft aan of alle benodigde materialen voor de productieorder beschikbaar zijn. | ||
| Beschrijving Deze status geeft het resultaat weer van de beschikbaarheidscontrole voor materialen bij een productieorder. De status kan aangeven dat alle materialen beschikbaar zijn, dat er materialen ontbreken of dat de controle niet is uitgevoerd. De status ‘tekort’ kan wijzen op vertraging. Dit attribuut is belangrijk voor het dashboard Impact van materiaaltekorten. Door de tekortstatus te koppelen aan de tijd tussen het vrijgeven van de order en de start van de productie, kun je de vertraging door materiaaltekorten meten. Deze metriek helpt om de productiestroom te verbeteren. Waarom dit belangrijk is Dit verklaart vertragingen tussen het vrijgeven van de order en de start van de productie. Zo kun je de impact van problemen in de toeleveringsketen op de productie meten. Waar vind je dit? Dit is een status die vaak wordt afgeleid van de gezamenlijke status van materiaalcomponenten. Je vindt deze in de systeemstatus (JEST), bijvoorbeeld als ‘MSPT’ (materiaaltekort). Voorbeelden BeschikbaarTekortNiet gecontroleerd | |||
| Bevestigde hoeveelheid TotalConfirmedQuantity | De totale hoeveelheid materiaal die voor de order als geproduceerd is bevestigd. | ||
| Beschrijving Dit attribuut geeft de totale hoeveelheid gereed of halffabricaat weer die via productiebevestigingen is gemeld. Het laat zien hoe ver de order is gevorderd ten opzichte van de beoogde hoeveelheid. Door de bevestigde hoeveelheid met de geplande hoeveelheid te vergelijken, kun je de productievoortgang volgen en opbrengstproblemen of verschillen opsporen. Dit is een belangrijke maatstaf voor de productie en wordt gebruikt in verschillende prestatieberekeningen, waaronder afkeurpercentages en efficiëntie. Waarom dit belangrijk is Dit houdt de werkelijke productie van de order bij. Zo kun je de voortgang volgen, de opbrengst berekenen en verschillen opsporen. Waar vind je dit? Berekend op basis van bevestigingsrecords in AFRU (veld LMNGA voor de opbrengsthoeveelheid). Voorbeelden 9801000501200 | |||
| Eindtijd EndTime | De timestamp die aangeeft wanneer een specifieke activiteit of een specifiek event is afgerond. | ||
| Beschrijving Dit attribuut bevat de einddatum en -tijd van elk vastgelegd event. Samen met de starttijd bepaalt het de duur van activiteiten. De eindtijd is belangrijk om de verwerkingstijd van afzonderlijke activiteiten nauwkeurig te berekenen. Die is nodig voor analyses van capaciteit en de inzet van bronnen. Zo kun je actieve werktijd onderscheiden van stilstand- of wachttijd en bottlenecks nauwkeuriger opsporen. Waarom dit belangrijk is Hiermee kun je de duur van activiteiten nauwkeurig berekenen. Dat is nodig om de efficiëntie van bronnen te analyseren en bottlenecks in het proces op te sporen. Waar vind je dit? Te vinden in bevestigingstabellen (AFRU) voor uitvoeringsstappen. Bij andere events kan de eindtijd gelijk zijn aan de starttijd als het event direct plaatsvindt. Voorbeelden 2023-10-26T09:45:00Z2023-10-26T15:00:00Z2023-10-27T10:30:00Z | |||
| Gebruiker User | De systeem-ID van de gebruiker die een event voor een productieorder heeft aangemaakt, gewijzigd of bevestigd. | ||
| Beschrijving Dit attribuut legt de SAP-gebruikers-ID vast die hoort bij een specifieke transactie of statuswijziging, zoals het vrijgeven van een order of het invoeren van een bevestiging. Zo kun je acties in het systeem traceren. Door activiteiten per gebruiker te analyseren, krijg je inzicht in de verdeling van het werk, opleidingsbehoeften en naleving van procedures. Je ziet bijvoorbeeld of bepaalde gebruikers vaak planningen aanpassen of dat vertragingen samenhangen met specifieke teams. Waarom dit belangrijk is Dit maakt duidelijk wie verantwoordelijk was en biedt mogelijkheden om de werkverdeling, het gedrag van gebruikers en opleidingsbehoeften te analyseren. Waar vind je dit? Doorgaans te vinden in wijzigingsdocumentkoppen (CDHDR, veld UNAME) of bevestigingsrecords (AFRU, veld PERNR voor personeelsnummer). Voorbeelden CB9980000021JSMITHPLANNER01 | |||
| Geplande startdatum PlannedStartDate | De geplande datum waarop de productieorder volgens het oorspronkelijke plan moet beginnen. | ||
| Beschrijving De geplande startdatum is de streefdatum waarop de productieactiviteiten voor een order moeten beginnen. Dit is een belangrijk resultaat van het planningsproces. Deze datum vormt het uitgangspunt om te analyseren of de planning wordt gehaald. Door de geplande startdatum met de werkelijke starttijd te vergelijken, zie je vertragingen aan het begin van het proces, bijvoorbeeld bij het klaarzetten van materialen of het vrijgeven van de order. Die kunnen gevolgen hebben voor de hele productieplanning. Waarom dit belangrijk is Dit is het uitgangspunt om te meten of de starttijd wordt gehaald. Zo kun je vertragingen vóór de productie opsporen, bijvoorbeeld bij het vrijgeven van orders of de beschikbaarheid van materialen. Waar vind je dit? Te vinden in de kopteksttabel van de productieorder AFKO (veld GSTRP). Voorbeelden 2023-11-102023-11-252024-01-15 | |||
| Herstelwerk uitgevoerd IsRework | Een markering die aangeeft of er na de start herstelwerk of grote planningsaanpassingen voor een productieorder zijn geweest. | ||
| Beschrijving Dit booleaanse attribuut wordt afgeleid om productieorders te herkennen waarbij na de start van de productie correcties of planningswijzigingen zijn uitgevoerd. Dit kan worden veroorzaakt door een expliciete herstelactiviteit of door een event ‘Productieplan aangepast’ na ‘Productie gestart’. Deze markering is nodig om de KPI voor het herstelpercentage in de productie te berekenen en voor het dashboard Herstelwerk en revisies in de productie. Je kunt cases hiermee eenvoudig filteren en analyseren. Zo spoor je de oorzaken op van kwaliteitsproblemen of procesafwijkingen die tot kostbaar herstelwerk leiden. Waarom dit belangrijk is Hiermee kun je cases met herstelwerk apart analyseren en gericht kwaliteitsproblemen, procesafwijkingen en bijbehorende kosten terugdringen. Waar vind je dit? Berekend veld. Ingesteld op true als de activiteit ‘Productieplan aangepast’ na ‘Productie gestart’ plaatsvindt binnen dezelfde case, of als een specifiek ordertype voor herstelwerk wordt gebruikt. Voorbeelden truefalse | |||
| Op schema IsOnTime | Een markering die aangeeft of de productieorder op of vóór de geplande einddatum is afgerond. | ||
| Beschrijving Dit berekende booleaanse attribuut meet rechtstreeks of de planning is gehaald, door de werkelijke einddatum met de geplande einddatum te vergelijken. Per productieorder geeft het een duidelijke uitkomst: op tijd of te laat. Dit attribuut vormt de basis voor de KPI voor het halen van de productieplanning. Je kunt orders eenvoudig opdelen in orders die op tijd en te laat zijn afgerond. Zo vind je kenmerken en procesroutes die vaak met vertraging samenhangen. Waarom dit belangrijk is Dit geeft per order duidelijk aan of de planning is gehaald en helpt de oorzaken van vertraging op te sporen. Waar vind je dit? Berekend veld. Ingesteld op true als de timestamp van de activiteit ‘Order technisch afgerond’ gelijk is aan of eerder valt dan het attribuut ‘Geplande einddatum’. Voorbeelden truefalse | |||
| Ordertype OrderType | Een classificatie van de productieorder die het doel ervan aangeeft en bepaalt hoe de order wordt verwerkt. | ||
| Beschrijving Het ordertype is een belangrijk configuratie-element in SAP PP. Het bepaalt hoe het systeem een productieorder verwerkt. Het regelt nummerreeksen, de selectie van stamgegevens, calculatieparameters en afrekenregels. Voorbeelden zijn standaardproductieorders, herstelorders en prototypeorders. Door het proces per ordertype te analyseren, kun je de prestaties en procesflow van verschillende soorten productieorders vergelijken. Zo zie je bijvoorbeeld of herstelorders veel langer duren of bepaalde ordertypen vaker tot planningsaanpassingen leiden. Die informatie helpt om gericht processen te verbeteren. Waarom dit belangrijk is Hiermee kun je de analyse opdelen naar het zakelijke doel van de order en standaardproductie, herstelwerk en andere processen vergelijken. Waar vind je dit? Te vinden in de kopteksttabel van de productieorder AFKO (veld AUART). Voorbeelden PP01PP03ZP01 | |||
| Productieprioriteit ProductionPriority | Een code of waarde die aan een productieorder wordt toegekend om de urgentie of het belang ervan aan te geven. | ||
| Beschrijving Planners gebruiken de productieprioriteit om orders te rangschikken en voorrang te geven, vooral wanneer er weinig bronnen beschikbaar zijn. Een order met een hogere prioriteit hoort vóór een order met een lagere prioriteit te worden verwerkt. Door dit attribuut te analyseren, kun je nagaan of de toegekende prioriteiten op de werkvloer worden gevolgd. Het dashboard Consistentie van productieprioriteiten vergelijkt de verwerkingsvolgorde met de toegekende prioriteit en brengt afwijkingen aan het licht. Zo kun je de discipline in de planning verbeteren en planning en uitvoering beter op elkaar afstemmen. Waarom dit belangrijk is Hiermee kun je nagaan of de productieplanning de zakelijke prioriteiten volgt en urgente orders de bedoelde voorrang krijgen. Waar vind je dit? Dit is vaak een aangepast veld of is gebaseerd op andere orderparameters. De exacte locatie hangt af van de configuratie. Voorbeelden HoogGemiddeldLaag15 | |||
Activiteiten in de productieplanning
| Activiteit | Beschrijving | ||
|---|---|---|---|
| Eindbevestiging ingevoerd | Deze activiteit markeert de bevestiging van de laatste bewerking in de routing van de productieorder. Dit betekent dat alle geplande productiestappen op de werkvloer zijn afgerond. | ||
| Waarom dit belangrijk is De eindbevestiging is een belangrijke mijlpaal die het einde van het fysieke productiewerk aangeeft. Vaak is dit een nauwkeuriger eindpunt om de doorlooptijd op de werkvloer te meten dan de uiteindelijke goederenontvangst. Waar vind je dit? Afgeleid uit bevestigingsgegevens in de tabel AFRU. Het gaat om de bevestigingsregel voor de laatste bewerkingsvolgorde (AFVC-VPLNR) waarbij de indicator voor eindbevestiging (AFRUD-AUERU) is ingesteld. Vastleggen Zoek in AFRU naar de laatste bevestiging van een bewerking waarbij de indicator voor eindbevestiging is ingesteld. Gebeurtenistype inferred | |||
| Goederenontvangst geboekt | Deze gebeurtenis registreert de ontvangst van het eindproduct van de productielijn in de voorraad. De voorraad van het geproduceerde materiaal wordt hiermee officieel verhoogd. | ||
| Waarom dit belangrijk is Dit is een belangrijke mijlpaal die aangeeft dat de productie is afgerond. Vaak geldt dit als het einde van de productiecyclus voor het meten van tijdige levering en de totale doorlooptijd. Waar vind je dit? Dit is een expliciete financiële boeking in de tabellen voor materiaaldocumenten MSEG (regelniveau) en MKPF (kopniveau), meestal met bewegingstype 101. Deze documenten zijn gekoppeld aan de productieorder. Vastleggen Zoek in MSEG naar het materiaaldocument dat aan de order is gekoppeld en bewegingstype 101 heeft. Gebeurtenistype explicit | |||
| Order technisch afgerond | Dit is een administratieve afsluitstap die verdere logistieke wijzigingen aan de order voorkomt, zoals goederenbewegingen of bevestigingen. Vanuit logistiek oogpunt is de order hiermee afgerond. | ||
| Waarom dit belangrijk is TECO is het definitieve eindpunt van het productieproces en belangrijk voor het berekenen van de totale doorlooptijd van de productieorder. Het geeft aan dat alle logistieke activiteiten zijn afgerond en de order klaar is voor financiële afwikkeling. Waar vind je dit? Een gebruiker stelt de status in op TECO (Technically Completed). De gebeurtenis wordt als statuswijziging met de bijbehorende timestamp vastgelegd in de tabel JCDS. Vastleggen Timestamp van de statuswijziging naar 'TECO' in de tabel JCDS. Gebeurtenistype inferred | |||
| Productie gestart | Dit geeft aan dat de fysieke productie van de order is begonnen. Meestal wordt dit afgeleid uit de eerste bevestiging op de werkvloer of de eerste goederenafgifte van onderdelen voor de order. | ||
| Waarom dit belangrijk is Deze activiteit markeert de overgang van planning naar uitvoering. Ze is nodig om te controleren of de planning wordt nageleefd, door de werkelijke startdatum met de geplande startdatum te vergelijken. Waar vind je dit? Dit is een afgeleide gebeurtenis. Meestal wordt deze bepaald op basis van de vroegste timestamp van een goederenboeking (tabel MSEG, bewegingstype 261) of een tijdsbevestiging (tabel AFRU) die bij de order hoort. Vastleggen Vroegste timestamp uit AFRU (bevestigingen) of MSEG (goederenbewegingen) voor de order. Gebeurtenistype inferred | |||
| Productieorder aangemaakt | Dit is het moment waarop de productieorder in het systeem wordt aangemaakt. De order is het formele verzoek om een bepaalde hoeveelheid van een product te maken. De gebeurtenis wordt vastgelegd wanneer een gebruiker een nieuwe order opslaat en de beginstatus CRTD (Created) krijgt. | ||
| Waarom dit belangrijk is Dit markeert het begin van de levenscyclus van de productieorder. Door de tijd tussen aanmaak en vrijgave te analyseren, kun je administratieve of planningsvertragingen opsporen voordat de productie officieel wordt ingepland. Waar vind je dit? Deze gebeurtenis wordt vastgelegd in de tabel AUFK (Order Master Data), met de aanmaakdatum (ERDAT). De status CRTD (Created) wordt geregistreerd in de tabellen JEST en JCDS, gekoppeld via het objectnummer van de order (OBJNR). Vastleggen Timestamp uit AUFK-ERDAT of uit de statuswijziging naar 'CRTD' in JCDS. Gebeurtenistype explicit | |||
| Productieorder vrijgegeven | Dit is een belangrijke mijlpaal: de productieorder is goedgekeurd en kan op de werkvloer worden uitgevoerd. Na de vrijgave kunnen goederen worden afgeboekt, bewerkingen worden bevestigd en andere uitvoeringsstappen beginnen. | ||
| Waarom dit belangrijk is Deze gebeurtenis markeert de officiële start van de productie die kan worden uitgevoerd en is een belangrijk meetpunt voor doorlooptijden. De tijd tussen aanmaak en vrijgave is een belangrijke KPI voor de efficiëntie vóór de productie. Waar vind je dit? Een gebruiker of systeembatch start de vrijgave, waarna de status REL wordt ingesteld. Deze statuswijziging wordt met een timestamp vastgelegd in de tabel JCDS. De vrijgavedatum staat vaak ook in AFKO-FTRMI. Vastleggen Timestamp van de statuswijziging naar 'REL' in de tabel JCDS. Gebeurtenistype inferred | |||
| Productieplan aangepast | Dit is een belangrijke wijziging aan de productieorder nadat deze is vrijgegeven, bijvoorbeeld een wijziging van de hoeveelheid, datums of stuklijst. De wijziging wordt vastgesteld aan de hand van wijzigingsdocumenten. | ||
| Waarom dit belangrijk is Veelvuldige aanpassingen kunnen wijzen op een instabiele planning of wisselende vraag. Deze activiteit vormt de basis voor de KPI voor het percentage herziene productieplannen en helpt bronnen van procesvariatie op te sporen. Waar vind je dit? Afgeleid uit wijzigingslogs in de tabellen CDHDR (Change document header) en CDPOS (Change document items) voor het productieorderobject (AUFK of AFPO). Wijzigingen na de vrijgavedatum tellen als aanpassingen. Vastleggen Zoek in CDHDR/CDPOS naar wijzigingen in belangrijke velden, zoals hoeveelheid en datums, na de vrijgave. Gebeurtenistype inferred | |||
| Beschikbaarheid van materiaal gecontroleerd | Dit is de actie van een gebruiker of het systeem om te controleren of alle benodigde onderdelen in de juiste hoeveelheden en op tijd beschikbaar zijn voor de productieorder. Dit gebeurt meestal automatisch bij het aanmaken of vrijgeven van de order, of handmatig. De orderstatus wordt dan bijgewerkt. | ||
| Waarom dit belangrijk is Door materiaaltekorten vroeg op te sporen, kun je tijdig plannen. Door deze activiteit te volgen, zie je hoe de beschikbaarheid van materiaal invloed heeft op het vrijgeven van orders en het op tijd starten van de productie. Waar vind je dit? Afgeleid uit de orderstatus. Een status zoals MACM (Material committed) of een wijziging van de materiaalbeschikbaarheidsdatum (AFKO-MSERF) wijst erop dat er een controle is uitgevoerd. Ook de afwezigheid van de status voor materiaaltekort (MSPT) kan op beschikbaarheid wijzen. Vastleggen Afgeleid uit statuswijzigingen rond de reservering van materiaal of uit de uitvoering van transactie COMAC. Gebeurtenistype inferred | |||
| Capaciteitsbehoefte gepland | Bij deze activiteit worden de bewerkingen van de productieorder ingepland en wordt gecontroleerd of er voldoende capaciteit is bij de benodigde werkcentra. Het systeem beoordeelt de capaciteitsbelasting van werkcentra en verdeelt deze indien dat zo is ingesteld. Op basis daarvan worden de productiedatums bepaald. | ||
| Waarom dit belangrijk is Deze stap is belangrijk voor een haalbare productieplanning. Door de duur en uitkomsten te analyseren, kun je capaciteitsbottlenecks opsporen en de nauwkeurigheid van de capaciteitsplanning verbeteren. Waar vind je dit? Meestal afgeleid uit een systeemstatus die aangeeft dat de order is ingepland, zoals SETC (Scheduling carried out). Ook ingevulde geplande start- en einddatums (AUFK-GSTRP, AUFK-GLTRP) wijzen erop dat deze activiteit is afgerond. Vastleggen Afgeleid uit ingevulde geplande datums in AUFK/AFKO of een planningsstatus in JEST. Gebeurtenistype inferred | |||
| Materiaaltekort opgetreden | Deze gebeurtenis geeft aan dat de productie is vertraagd of stilgelegd doordat een of meer benodigde onderdelen niet beschikbaar waren. Het systeem stelt hiervoor een specifieke status in op de order. | ||
| Waarom dit belangrijk is Het volgen van materiaaltekorten is belangrijk voor de analyse van de gevolgen van materiaaltekorten. Zo kun je vertragingen door problemen in de toeleveringsketen kwantificeren en de materiaalplanning verbeteren. Waar vind je dit? Afgeleid uit de activering van de status 'MSPT' (Material shortage) voor de productieorder. De timestamp van deze statuswijziging staat in de tabel JCDS. Vastleggen Timestamp van de statuswijziging naar 'MSPT' in de tabel JCDS. Gebeurtenistype inferred | |||
| Ongeplande stop opgetreden | Deze berekende gebeurtenis staat voor een lange periode van stilstand tijdens de productie. Het is geen expliciete systeemgebeurtenis, maar wordt afgeleid uit lange tijdsverschillen tussen opeenvolgende productiebevestigingen. | ||
| Waarom dit belangrijk is Helpt ongeplande verstoringen, zoals machinepech of kwaliteitsproblemen, te volgen. Veelvuldige of lange stops opsporen is belangrijk om de stabiliteit en doorvoer op de werkvloer te verbeteren. Waar vind je dit? Dit wordt berekend door de timestamps van opeenvolgende activiteiten 'Productiebevestiging ingevoerd' uit de tabel AFRU te analyseren. Een tijdsverschil boven een vooraf ingestelde grens wordt aangemerkt als een ongeplande stop. Vastleggen Bereken het tijdsverschil tussen opeenvolgende bevestigingstimestamps (AFRU-BUDAT/UZEIT). Gebeurtenistype calculated | |||
| Order financieel afgesloten | De laatste afsluitstap: de order is financieel afgerekend en er kunnen geen financiële boekingen meer worden gedaan. Vanuit controlling en boekhouding is de levenscyclus van de order hiermee beëindigd. | ||
| Waarom dit belangrijk is Deze activiteit valt vaak buiten een analyse die alleen op productie is gericht, maar geeft wel een volledig beeld van begin tot eind. Je kunt hiermee de tijd tussen de logistieke afronding (TECO) en de financiële afsluiting analyseren. Waar vind je dit? Een gebruiker stelt de status in op CLSD (Closed). De gebeurtenis wordt als statuswijziging met de bijbehorende timestamp vastgelegd in de tabel JCDS. Vastleggen Timestamp van de statuswijziging naar 'CLSD' in de tabel JCDS. Gebeurtenistype inferred | |||
| Productiebevestiging ingevoerd | Dit is de registratie van de voortgang van een specifieke bewerking binnen de productieorder. Daarbij worden onder meer de geproduceerde aantallen, uitval en bestede tijd bij een werkcentrum vastgelegd. | ||
| Waarom dit belangrijk is Bevestigingen geven realtime zicht op de voortgang op de werkvloer en zijn belangrijk om de productiestatus te volgen. Door de frequentie en timing van bevestigingen te analyseren, kun je het procesverloop volgen en vertragingen tussen bewerkingen opsporen. Waar vind je dit? Elke bevestiging wordt als een afzonderlijke regel vastgelegd in de tabel AFRU (Order Completion Confirmations), met een timestamp (BUDAT, UZEIT) en gegevens over de bewerking. Vastleggen Vastgelegd als document in de tabel AFRU. Gebeurtenistype explicit | |||
| Productieorder geannuleerd | Dit is de annulering van een productieorder voordat deze is afgerond. Het is een alternatieve, niet-succesvolle eindstatus van het proces. | ||
| Waarom dit belangrijk is Een analyse van geannuleerde orders kan problemen in de vraagplanning, stamgegevens of het verkoopproces aan het licht brengen. Veel annuleringen kunnen wijzen op structurele problemen die aandacht nodig hebben. Waar vind je dit? Afgeleid uit de systeemstatus CACL (Cancellation) in de tabel JCDS. Ook een verwijderingsindicator (AUFK-LOEKZ) kan op annulering wijzen. Vastleggen Timestamp van de statuswijziging naar 'CACL' in JCDS of het instellen van de verwijderingsindicator in AUFK. Gebeurtenistype inferred | |||
Extractiegidsen
Stappen
- Vereisten controleren: Zorg dat je een gebruiker hebt in SAP S/4HANA met de juiste autorisaties voor de benodigde Core Data Services (CDS)-weergaven. Dit zijn
I_ProductionOrder,I_ProdOrdConfirmation,I_MaterialDocumentItem,I_ObjectStatusenI_ChangeDocument. Je hebt ook toegang nodig tot een SQL-omgeving die is verbonden met de SAP HANA-database, zoals SAP HANA Studio, DBeaver of een externe ETL-tool. - Systeemgegevens noteren: Noteer de bronsysteem-ID die je gebruikt voor het attribuut
SourceSystem. Dit is een logische naam die je zelf kiest om de herkomst van de data aan te geven, bijvoorbeeldS4H_PROD. - Extractieparameters instellen: Bepaal vóór het uitvoeren van de query de belangrijkste parameters. Geef de begin- en einddatum van de extractieperiode op en stel eventuele filters in, zoals
PlantofProductionOrderType, om de scope te beperken. - SQL-query voorbereiden: Kopieer de volledige SQL-query uit de sectie
querynaar de SQL-client of data-extractietool van je keuze. - Placeholders instellen: Vervang de placeholders in de query door je eigen parameters. Het gaat om
_StartDate,_EndDateen de bronsysteem-ID. Pas ook de drempel voor de gebeurtenisUnplanned Halt Occurredaan je situatie aan, bijvoorbeeld'24:00:00'. - Extractiequery uitvoeren: Voer het ingestelde SQL-script uit op de database van SAP S/4HANA. Gaat het om een grote dataset over een lange periode, voer de extractie dan in kleinere delen uit, bijvoorbeeld per maand, om prestatieproblemen te voorkomen.
- Eerste controle van de data: Controleer de resultaten zodra de query klaar is. Bekijk het aantal rijen, controleer of alle kolommen aanwezig zijn en kijk of de kolom
Activiteitverschillende verwachte events bevat. - Data valideren: Volg de stappen in de sectie
validationStepsvoor een grondigere controle. Vergelijk enkele productieorders met de gegevens in SAP via transactieCO03om te controleren of het event log klopt. - Exporteren naar CSV: Exporteer de definitieve resultaten naar een CSV-bestand. Gebruik UTF-8 als bestandsencoding om problemen met tekens te voorkomen.
- Klaarmaken voor upload: Controleer of de CSV-kolomkoppen overeenkomen met de vereiste attribuutnamen:
ProductionOrder,Activiteit,StartTime,SourceSystemenLastDataUpdate. Zorg vóór het uploaden naar de process mining-tool dat de kolomStartTimeeen gangbare timestamp-indeling heeft, zoals ISO 8601 (YYYY-MM-DDTHH:MM:SS).
Configuratie
- Belangrijkste CDS-weergaven: De extractie gebruikt voornamelijk een aantal standaard-CDS-weergaven die de onderliggende SAP-tabellen op een gestructureerde, bedrijfsgerichte manier weergeven. Belangrijke weergaven zijn:
I_ProductionOrder: voor gegevens op kopniveau en aanmaakgebeurtenissen.I_ProdOrdConfirmation: voor alle bevestigingen van bewerkingen.I_MaterialDocumentItem: voor goederenbewegingen, zoals afgiften en ontvangsten.I_ObjectStatus: om statuswijzigingen van de productieorder uit te lezen.I_ChangeDocumenten bijbehorende weergaven: om wijzigingen in belangrijke ordervelden vast te leggen.
- Filter op datumbereik: Pas een filter op datumbereik toe om de hoeveelheid data te beheersen. De meegeleverde query gebruikt de
CreationDatevan de productieorder. Voor een eerste analyse is een periode van 3 tot 6 maanden gebruikelijk. - Belangrijke bedrijfsfilters: Verfijn de dataset met filters op belangrijke organisatorische of stamgegevensattributen. Veelgebruikte filters zijn:
Plant: om één productielocatie te analyseren.ProductionOrderType: om je te richten op standaardproductie, herstelwerk of andere ordertypen.CompanyCode: om de data te beperken tot één juridische entiteit.
- Drempelwaarde voor ongeplande stilstand: De query bevat logica om gebeurtenissen
Unplanned Halt Occurredaf te leiden. Daarvoor is een tijdsdrempel nodig die bepaalt wanneer een onderbreking tussen bewerkingen als significant geldt. Stel deze waarde in op basis van gebruikelijke productiedoorlooptijden en bedrijfsregels. - Vereiste autorisaties: De SAP-gebruiker die de query uitvoert, moet leesrechten hebben voor alle CDS-weergaven en de onderliggende tabellen. Zonder de juiste autorisaties is het resultaat leeg of onvolledig.
a Voorbeeldquery sql
WITH BaseOrders AS (
SELECT
ProductionOrder,
Material AS MaterialNumber,
ProductionPlant AS Plant,
CreationDate,
CreationTime,
BasicEndDate AS PlannedEndDate,
TechnicalCompletionDate,
LastChangeDateTime
FROM I_ProductionOrder
-- P_CreationDateFrom and P_CreationDateTo are placeholders for your date range
WHERE CreationDate BETWEEN '[_StartDate]' AND '[_EndDate]'
-- Add other filters as needed, for example:
-- AND ProductionPlant IN ('[Your_Plant_1]', '[Your_Plant_2]')
-- AND ProductionOrderType = '[Your_Order_Type]'
)
SELECT
bo.ProductionOrder,
'Production Order Created' AS Activity,
TO_TIMESTAMP(bo.CreationDate || ' ' || LPAD(bo.CreationTime, 6, '0'), 'YYYYMMDD HH24MISS') AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
'CRTD' AS OrderStatus
FROM BaseOrders bo
UNION ALL
-- System status changes like Released, Technically Completed, Closed, Cancelled, Material Shortage
SELECT
os.ObjectInternalID AS ProductionOrder,
CASE os.SystemStatus
WHEN 'I0002' THEN 'Production Order Released'
WHEN 'I0043' THEN 'Material Availability Checked' -- Status: MACM (Material committed)
WHEN 'I0045' THEN 'Order Technically Completed'
WHEN 'I0046' THEN 'Order Financially Closed'
WHEN 'I0047' THEN 'Production Order Cancelled'
WHEN 'I0010' THEN 'Material Shortage Occurred' -- Status: MSPT (Material shortage)
END AS Activity,
os.StatusChangeDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
os.SystemStatus AS OrderStatus
FROM I_ObjectStatus AS os
JOIN BaseOrders AS bo ON os.ObjectInternalID = bo.ProductionOrder
WHERE os.SystemStatus IN ('I0002', 'I0043', 'I0045', 'I0046', 'I0047', 'I0010') AND os.StatusIsInactive = ''
UNION ALL
-- Production Started, inferred from the first goods issue or first confirmation
SELECT
s.ProductionOrder,
'Production Started' AS Activity,
s.StartEventTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
s.MaterialNumber,
s.Plant,
NULL AS WorkCenter,
s.PlannedEndDate,
NULL AS OrderStatus
FROM (
SELECT
bo.ProductionOrder,
bo.MaterialNumber,
bo.Plant,
bo.PlannedEndDate,
MIN(COALESCE(gm.PostingTime, cf.ConfirmationDateTime)) AS StartEventTime,
ROW_NUMBER() OVER(PARTITION BY bo.ProductionOrder ORDER BY MIN(COALESCE(gm.PostingTime, cf.ConfirmationDateTime))) as rn
FROM BaseOrders bo
LEFT JOIN I_MaterialDocumentItem gm ON bo.ProductionOrder = gm.ProductionOrder AND gm.GoodsMovementType IN ('261', '262') -- Goods Issue
LEFT JOIN I_ProdOrdConfirmation cf ON bo.ProductionOrder = cf.ProductionOrder
WHERE gm.ProductionOrder IS NOT NULL OR cf.ProductionOrder IS NOT NULL
GROUP BY bo.ProductionOrder, bo.MaterialNumber, bo.Plant, bo.PlannedEndDate
) s
WHERE s.rn = 1
UNION ALL
-- Production Confirmation Entered (for each confirmation)
SELECT
cf.ProductionOrder,
'Production Confirmation Entered' AS Activity,
cf.ConfirmationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
cf.WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
UNION ALL
-- Final Confirmation Entered
SELECT
cf.ProductionOrder,
'Final Confirmation Entered' AS Activity,
cf.ConfirmationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
cf.WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
WHERE cf.IsFinalConfirmation = 'X'
UNION ALL
-- Unplanned Halt Occurred (derived from gaps between confirmations)
SELECT
ProductionOrder,
'Unplanned Halt Occurred' AS Activity,
PreviousConfirmationTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
MaterialNumber,
Plant,
WorkCenter,
PlannedEndDate,
NULL AS OrderStatus
FROM (
SELECT
cf.ProductionOrder,
bo.MaterialNumber,
bo.Plant,
bo.PlannedEndDate,
cf.WorkCenter,
cf.ConfirmationDateTime,
LAG(cf.ConfirmationDateTime, 1) OVER (PARTITION BY cf.ProductionOrder ORDER BY cf.ConfirmationDateTime) AS PreviousConfirmationTime,
(SECONDS_BETWEEN(LAG(cf.ConfirmationDateTime, 1) OVER (PARTITION BY cf.ProductionOrder ORDER BY cf.ConfirmationDateTime), cf.ConfirmationDateTime) / 3600.0) as HoursDiff
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
) AS gaps
WHERE gaps.HoursDiff > 24 -- Configurable threshold in hours, e.g. 24 hours
UNION ALL
-- Goods Receipt Posted
SELECT
gm.ProductionOrder,
'Goods Receipt Posted' AS Activity,
gm.PostingTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_MaterialDocumentItem gm
JOIN BaseOrders bo ON gm.ProductionOrder = bo.ProductionOrder
WHERE gm.GoodsMovementType = '101'
UNION ALL
-- Capacity Requirements Planned (using Release event as a proxy)
SELECT
os.ObjectInternalID AS ProductionOrder,
'Capacity Requirements Planned' AS Activity,
os.StatusChangeDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
os.SystemStatus AS OrderStatus
FROM I_ObjectStatus AS os
JOIN BaseOrders AS bo ON os.ObjectInternalID = bo.ProductionOrder
WHERE os.SystemStatus = 'I0002' AND os.StatusIsInactive = '' -- Status 'REL' (Released)
UNION ALL
-- Production Plan Adjusted
SELECT
ch.ObjectValue AS ProductionOrder,
'Production Plan Adjusted' AS Activity,
ch.CreationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL as WorkCenter,
bo.PlannedEndDate,
NULL as OrderStatus
FROM I_ChangeDocument AS ch
JOIN BaseOrders bo ON ch.ObjectValue = bo.ProductionOrder
WHERE ch.ChangeDocumentObject = 'PRODORDER'
-- Monitoring changes in key fields like Total Quantity (GAMNG) or Basic Finish Date (GLTRP)
AND ch.FieldName IN ('GAMNG', 'GLTRP')
GROUP BY ch.ObjectValue, ch.CreationDateTime, bo.MaterialNumber, bo.Plant, bo.PlannedEndDate Stappen
- Controleer of je rechtstreekse leestoegang hebt tot het SAP HANA-schema met de productieordergegevens. Stel vast wie eigenaar is van het schema, hoe de client wordt verwerkt, welke timestampnotatie wordt gebruikt en welk autorisatiemodel geldt. Gebruik SAP HANA Database Explorer of een goedgekeurde SQL-client. Controleer welke SAP S/4HANA-release en productieplanningsfuncties zijn geactiveerd voordat je de query definitief maakt.
- Stel de verbindingsreeks, inloggegevens, schemanaam, clientwaarde, begindatum en einddatum van de extractie en filters voor specifieke bedrijven in. De query hieronder gebruikt AUFK, AFPO, JEST en JCDS en verwijst ook naar AFKO, AFVC, AFRU, RESB, MSEG, CDHDR en CDPOS. Controleer vóór uitvoering of deze objecten beschikbaar zijn en welke velden ze bevatten. Uitbreidingen, compatibiliteitsweergaven en verschillen tussen releases kunnen van invloed zijn.
- Voer de query uit in SAP HANA Database Explorer of een goedgekeurde SQL-tool. De query maakt één rij voor elke expliciet geëxtraheerde activiteit en voegt de activiteitenrijen samen met UNION ALL. ProcessMind leidt de gebeurtenissen niet zelf af.
- Controleer de brond data en pas waar nodig de gemarkeerde systeemspecifieke expressies aan. Controleer met name de statuscodes voor materiaalbeschikbaarheid, capaciteitsplanning, technische voltooiing, financiële afsluiting en annulering. Controleer ook welke object- en veldnamen van wijzigingsdocumenten worden gebruikt om aanpassingen aan de productieplanning te herkennen.
- Valideer de timestampconversie en clientfiltering. SAP-systemen kunnen datums en tijden in aparte velden opslaan. Sommige installaties gebruiken UTC, andere de lokale tijd van de fabriek of het systeem. Zorg dat alle waarden in
StartTimedezelfde tijdzone gebruiken en sluit ongeldige of niet-ingevulde SAP-datums uit. - Exporteer het resultaat als een plat bestand dat ProcessMind ondersteunt, bij voorkeur CSV of UTF-8-tekst met scheidingstekens. Behoud exact deze kolomnamen: ProductionOrder, Activity, StartTime, SourceSystem, LastDataUpdate, MaterialNumber, Plant, WorkCenter, PlannedEndDate en OrderStatus.
- Sorteer de geëxporteerde rijen op ProductionOrder en StartTime. Voeg bij gelijke timestamps een vaste tweede sorteervolgorde toe als het uploadproces dit ondersteunt. Houd één rij per gebeurtenis aan, ook voor herhaalde bevestigingen en statuswijzigingen die overeenkomen met afzonderlijke bronrecords.
- Upload het bestand naar ProcessMind en koppel ProductionOrder aan de case-ID, Activity aan de activiteit en StartTime aan de eventtimestamp. Koppel de overige kolommen als gebeurtenis- of case-attributen volgens de importinstellingen van ProcessMind. Controleer of alle 14 activiteitslabels exact zijn overgenomen zoals de query ze oplevert.
Configuratie
- Datumbereik: Begin met een voortschrijdende periode van drie tot zes maanden. Gebruik voor de eerste test een kortere periode en breid die pas uit nadat je het aantal rijen en de queryprestaties hebt gecontroleerd.
- Extractieparameters: Vervang [Your schema name], [Your client], [Extraction start date], [Extraction end date] en [Your source system name] door waarden uit je omgeving. Pas filters voor specifieke bedrijven pas toe nadat je de relevante organisatievelden en waarden hebt gecontroleerd.
- Statusinstellingen: Controleer welke SAP-statuscodes en statusobject-ID’s in je systeem worden gebruikt voor CRTD, vrijgave, materiaalbeschikbaarheid, capaciteitsplanning, technische voltooiing, financiële afsluiting en annulering. Statusprofielen en maatwerkuitbreidingen kunnen invloed hebben op de beschikbare codes.
- Wijzigingsdocumenten: Controleer welk wijzigingsdocumentobject, welke tabellen en velden en welke waarde-indelingen worden gebruikt voor wijzigingen in hoeveelheden, datums, stuklijsten en bewerkingsplannen. De query behandelt overeenkomende records in CDHDR en CDPOS als aanwijzingen voor aanpassingen aan de planning.
- Timestamps verwerken: Zet alle brontimestamps om naar één tijdzone. Controleer of datum- en tijdvelden apart zijn opgeslagen, of timestamps lokale tijd of UTC gebruiken en hoe niet-ingevulde datums worden weergegeven.
- Prestaties: Beperk de extractie op basis van de aanmaakdatum van de order of een andere geïndexeerde productiedatum. Filter op client, selecteer alleen de benodigde kolommen en voer de extractie uit op een geschikt moment voor rapportage. Haal grote datasets per maand of orderbereik op en sla de resultaten tussentijds op.
- Databaseobjecten: Controleer of AUFK, AFPO, JEST, JCDS, AFKO, AFVC, AFRU, RESB, MSEG, CDHDR en CDPOS beschikbaar en leesbaar zijn in het gekozen schema. Vervang een weergave of veld dat in jouw release afwijkt door het bijbehorende vrijgegeven of goedgekeurde object.
- Autorisaties: Je hebt leestoegang nodig tot het gekozen SAP HANA-schema en de objecten, plus toestemming om SQL uit te voeren. Volgens je governanceproces kunnen ook SAP-applicatieautorisaties nodig zijn.
- Functionele scope: Productieplannings- en uitvoeringsdata, voorraadbewegingen, statushistorie en wijzigingsdocumenten moeten voor de gekozen periode beschikbaar blijven. Gearchiveerde of verwijderde records worden niet opgehaald.
- ProcessMind-koppeling: Stel ProductionOrder in als case-ID, Activity als activiteit en StartTime als eventtimestamp. Verwacht niet dat ProcessMind ontbrekende activiteiten afleidt uit attributen.
a Voorbeeldquery sql
WITH
params AS (
SELECT
'[Your client]' AS mandt,
TO_DATE('[Extraction start date]', 'YYYY-MM-DD') AS date_from,
TO_DATE('[Extraction end date]', 'YYYY-MM-DD') AS date_to,
'[Your source system name]' AS source_system,
CURRENT_UTCTIMESTAMP AS last_data_update
FROM DUMMY
),
orders AS (
SELECT
a.mandt,
LTRIM(a.aufnr, '0') AS production_order,
a.aufnr AS production_order_raw,
a.erdat AS order_created_date,
a.erfzeit AS order_created_time,
a.auart AS order_type,
a.werks AS plant,
a.objnr AS object_number,
a.ktext AS order_text,
p.matnr AS material_number,
p.psmng AS planned_quantity,
p.wemng AS delivered_quantity,
k.gstrp AS planned_start_date,
k.gltrp AS planned_end_date,
k.ftrmi AS release_date,
k.ftrmp AS release_time,
k.gamng AS total_order_quantity,
k.plnbez AS header_material_number,
k.plnty AS task_list_type,
k.plnnr AS task_list_group,
k.plnal AS task_list_group_counter
FROM [Your schema name].AUFK a
LEFT JOIN [Your schema name].AFPO p
ON p.mandt = a.mandt
AND p.aufnr = a.aufnr
LEFT JOIN [Your schema name].AFKO k
ON k.mandt = a.mandt
AND k.aufnr = a.aufnr
CROSS JOIN params x
WHERE a.mandt = x.mandt
AND a.erdat >= x.date_from
AND a.erdat < ADD_DAYS(x.date_to, 1)
),
status_history AS (
SELECT
o.*,
j.stat,
j.inact,
j.chgnr,
j.udate AS status_date,
j.utime AS status_time,
c.usnam AS status_user,
c.chind AS status_change_indicator
FROM orders o
INNER JOIN [Your schema name].JEST j
ON j.mandt = o.mandt
AND j.objnr = o.object_number
LEFT JOIN [Your schema name].JCDS c
ON c.mandt = j.mandt
AND c.objnr = j.objnr
AND c.stat = j.stat
AND c.chgnr = j.chgnr
WHERE COALESCE(j.inact, '') <> 'X'
),
operations AS (
SELECT
o.production_order,
o.mandt,
v.vornr,
v.arbid,
v.steus,
v.ltxa1,
v.aufpl,
v.aplzl,
cr.name1 AS work_center
FROM orders o
LEFT JOIN [Your schema name].AFVC v
ON v.mandt = o.mandt
AND v.aufpl = (SELECT MAX(k2.aufpl) FROM [Your schema name].AFKO k2 WHERE k2.mandt = o.mandt AND k2.aufnr = o.production_order_raw)
LEFT JOIN [Your schema name].CRHD cr
ON cr.mandt = v.mandt
AND cr.objty = 'A'
AND cr.objid = v.arbid
),
confirmations AS (
SELECT
o.production_order,
o.mandt,
r.rmzhl,
r.vornr,
r.budat AS confirmation_date,
r.ersda AS entry_date,
r.erzet AS entry_time,
r.ism01,
r.ism02,
r.ism03,
r.ism04,
r.ism05,
r.ism06,
r.xmnga,
r.stzhl,
r.stzhl AS reversal_counter,
r.lmnga AS confirmed_quantity,
r.xmnge AS scrap_quantity,
r.aufpl,
r.aplzl,
op.work_center
FROM orders o
INNER JOIN [Your schema name].AFRU r
ON r.mandt = o.mandt
AND r.aufnr = o.production_order_raw
LEFT JOIN operations op
ON op.production_order = o.production_order
AND op.mandt = r.mandt
AND op.vornr = r.vornr
),
first_confirmation AS (
SELECT production_order, MIN(TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS')) AS start_time
FROM confirmations
GROUP BY production_order
),
last_confirmation AS (
SELECT production_order, MAX(TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS')) AS final_time
FROM confirmations
GROUP BY production_order
),
first_goods_issue AS (
SELECT
o.production_order,
MIN(TO_TIMESTAMP(TO_VARCHAR(m.budat_mkpf, 'YYYYMMDD') || LPAD(TO_VARCHAR(m.cputm_mkpf), 6, '0'), 'YYYYMMDDHH24MISS')) AS start_time
FROM orders o
INNER JOIN [Your schema name].MSEG m
ON m.mandt = o.mandt
AND m.aufnr = o.production_order_raw
AND m.bwart IN ('261', '262')
GROUP BY o.production_order
),
first_receipt AS (
SELECT
o.production_order,
MIN(TO_TIMESTAMP(TO_VARCHAR(m.budat_mkpf, 'YYYYMMDD') || LPAD(TO_VARCHAR(m.cputm_mkpf), 6, '0'), 'YYYYMMDDHH24MISS')) AS receipt_time
FROM orders o
INNER JOIN [Your schema name].MSEG m
ON m.mandt = o.mandt
AND m.aufnr = o.production_order_raw
AND m.bwart IN ('101', '102')
GROUP BY o.production_order
),
plan_changes AS (
SELECT
o.production_order,
MIN(TO_TIMESTAMP(TO_VARCHAR(h.udate, 'YYYYMMDD') || LPAD(TO_VARCHAR(h.utime), 6, '0'), 'YYYYMMDDHH24MISS')) AS adjustment_time
FROM orders o
INNER JOIN [Your schema name].CDHDR h
ON h.mandant = o.mandt
AND h.objectid = o.production_order_raw
INNER JOIN [Your schema name].CDPOS p
ON p.mandant = h.mandant
AND p.objectclas = h.objectclas
AND p.objectid = h.objectid
AND p.changenr = h.changenr
WHERE h.objectclas IN ('ORDER', 'PP_ORDER')
AND p.tabname IN ('AFKO', 'AFPO', 'AFVC', 'RESB')
AND p.fname IN ('GAMNG', 'PSMNG', 'GSTRP', 'GLTRP', 'MATNR', 'BDMNG', 'VORNR')
GROUP BY o.production_order
),
status_times AS (
SELECT
production_order,
MIN(CASE WHEN stat IN ('I0001', 'CRTD') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS created_status_time,
MIN(CASE WHEN stat IN ('I0002', 'REL') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS released_time,
MIN(CASE WHEN stat IN ('I0003', 'MATC', 'MANC') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS material_available_time,
MIN(CASE WHEN stat IN ('I0004', 'CAPC', 'CAPA') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS capacity_planned_time,
MIN(CASE WHEN stat IN ('I0045', 'TECO') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS technically_completed_time,
MIN(CASE WHEN stat IN ('I0046', 'CLSD') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS financially_closed_time,
MIN(CASE WHEN stat IN ('I0076', 'DLFL', 'CANC') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS cancelled_time
FROM status_history
GROUP BY production_order
),
material_shortages AS (
SELECT
o.production_order,
MIN(TO_TIMESTAMP(TO_VARCHAR(j.status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(j.status_time), 6, '0'), 'YYYYMMDDHH24MISS')) AS shortage_time
FROM status_history j
INNER JOIN orders o
ON o.production_order = j.production_order
WHERE j.stat IN ('I0042', 'MANC', 'MSHT')
GROUP BY o.production_order
),
capacity_times AS (
SELECT
production_order,
MIN(COALESCE(released_time, created_status_time)) AS capacity_time
FROM status_times
GROUP BY production_order
),
base_attributes AS (
SELECT
o.production_order,
o.material_number,
o.plant,
COALESCE(op.work_center, '') AS work_center,
o.planned_end_date,
COALESCE(st.stat, '') AS current_status
FROM orders o
LEFT JOIN status_history st
ON st.production_order = o.production_order
AND st.inact = ''
LEFT JOIN operations op
ON op.production_order = o.production_order
AND op.vornr = (SELECT MIN(op2.vornr) FROM operations op2 WHERE op2.production_order = o.production_order)
),
events AS (
SELECT o.production_order, 'Production Order Created' AS activity, COALESCE(st.created_status_time, TO_TIMESTAMP(TO_VARCHAR(o.order_created_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(o.order_created_time), 6, '0'), 'YYYYMMDDHH24MISS')) AS start_time FROM orders o LEFT JOIN status_times st ON st.production_order = o.production_order
UNION ALL
SELECT production_order, 'Material Availability Checked', material_available_time FROM status_times WHERE material_available_time IS NOT NULL
UNION ALL
SELECT production_order, 'Capacity Requirements Planned', capacity_time FROM capacity_times WHERE capacity_time IS NOT NULL
UNION ALL
SELECT production_order, 'Production Order Released', released_time FROM status_times WHERE released_time IS NOT NULL
UNION ALL
SELECT o.production_order, 'Production Started', LEAST(COALESCE(fc.start_time, TO_TIMESTAMP('99991231235959', 'YYYYMMDDHH24MISS')), COALESCE(fg.start_time, TO_TIMESTAMP('99991231235959', 'YYYYMMDDHH24MISS'))) FROM orders o LEFT JOIN first_confirmation fc ON fc.production_order = o.production_order LEFT JOIN first_goods_issue fg ON fg.production_order = o.production_order WHERE fc.start_time IS NOT NULL OR fg.start_time IS NOT NULL
UNION ALL
SELECT production_order, 'Production Confirmation Entered', TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS') FROM confirmations
UNION ALL
SELECT production_order, 'Material Shortage Occurred', shortage_time FROM material_shortages WHERE shortage_time IS NOT NULL
UNION ALL
SELECT production_order, 'Production Plan Adjusted', adjustment_time FROM plan_changes WHERE adjustment_time IS NOT NULL
UNION ALL
SELECT c.production_order, 'Unplanned Halt Occurred', ADD_SECONDS(c.confirmation_time, 1) FROM (SELECT production_order, TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS') AS confirmation_time, LEAD(TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS')) OVER (PARTITION BY production_order ORDER BY entry_date, entry_time, rmzhl) AS next_confirmation_time FROM confirmations) c WHERE c.next_confirmation_time IS NOT NULL AND SECONDS_BETWEEN(c.confirmation_time, c.next_confirmation_time) >= 86400
UNION ALL
SELECT production_order, 'Final Confirmation Entered', final_time FROM last_confirmation WHERE final_time IS NOT NULL
UNION ALL
SELECT production_order, 'Goods Receipt Posted', receipt_time FROM first_receipt WHERE receipt_time IS NOT NULL
UNION ALL
SELECT production_order, 'Order Technically Completed', technically_completed_time FROM status_times WHERE technically_completed_time IS NOT NULL
UNION ALL
SELECT production_order, 'Order Financially Closed', financially_closed_time FROM status_times WHERE financially_closed_time IS NOT NULL
UNION ALL
SELECT production_order, 'Production Order Cancelled', cancelled_time FROM status_times WHERE cancelled_time IS NOT NULL
)
SELECT
e.production_order AS "ProductionOrder",
e.activity AS "Activity",
e.start_time AS "StartTime",
p.source_system AS "SourceSystem",
p.last_data_update AS "LastDataUpdate",
b.material_number AS "MaterialNumber",
b.plant AS "Plant",
NULLIF(b.work_center, '') AS "WorkCenter",
b.planned_end_date AS "PlannedEndDate",
b.current_status AS "OrderStatus"
FROM events e
INNER JOIN base_attributes b
ON b.production_order = e.production_order
CROSS JOIN params p
WHERE e.start_time IS NOT NULL
ORDER BY e.production_order, e.start_time, e.activity; Klaar om te beginnen?
Zet de eerste stap naar een efficiëntere productieplanning. Bereid je data voor met deze template en ontdek waar je kunt optimaliseren.
Optimaliseer vandaag nog je productieplanning
Spoor bottlenecks op en verhelp ze, en verkort de productiedoorlooptijd met 30%.
Geen creditcard nodig