Datatemplate voor productieplanning
Datatemplate voor productieplanning
- Aanbevolen attributen om te verzamelen
- Belangrijke activiteiten om bij te houden
- Praktische aanwijzingen voor data-extractie
Attributen voor productieplanning
| Naam | Beschrijving | ||
|---|---|---|---|
| Activiteitsnaam ActivityName | De naam van de bedrijfs- of systeemgebeurtenis die op een bepaald moment voor een productieorder plaatsvond. | ||
| Beschrijving De activiteitsnaam beschrijft een specifieke stap of statuswijziging in het productieplanningsproces. Deze gebeurtenissen worden opgehaald uit wijzigingslogboeken, statusupdates en transactieregistraties in SAP ECC PP. Voorbeelden zijn 'Productieorder aangemaakt', 'Materiaalbeschikbaarheid gecontroleerd' en 'Goederenontvangst geboekt'. Dit attribuut vormt de basis van de proceskaart. Analisten kunnen hiermee de volgorde van gebeurtenissen visualiseren, procesvarianten ontdekken en bottlenecks of herstelwerk opsporen. Duidelijke, specifieke activiteitsnamen zijn belangrijk voor een nauwkeurig procesmodel dat de werkelijkheid van de bedrijfsvoering weergeeft. Waarom dit belangrijk is Dit attribuut bepaalt de stappen op de proceskaart, zodat je de productieworkflow kunt visualiseren, analyseren en begrijpen. Waar vind je dit? Afkomstig uit verschillende bronnen, waaronder statuswijzigingen in de tabellen JEST/JSTO, transactielogboeken en wijzigingsdocumenten in CDHDR/CDPOS. Voorbeelden Productieorder vrijgegevenGoederenafgifte geboektEindbevestiging geregistreerdOrder technisch afgerond | |||
| Productieorder ProductionOrder | De unieke identificatiecode van een productieorder. Deze dient als primaire case-ID voor het proces van productieplanning en -uitvoering. | ||
| Beschrijving Het productieordernummer is een unieke alfanumerieke sleutel die in SAP ECC PP aan elke productieorder wordt toegekend. Het is het centrale object dat alle bijbehorende activiteiten verbindt, van aanmaak en planning tot uitvoering en uiteindelijke afrekening. Bij process mining gebruik je dit attribuut om alle gebeurtenissen van één productierun te groeperen. Zo kun je de volledige levenscyclus van een productieorder analyseren, de voortgang volgen, doorlooptijden meten en afwijkingen van het standaardproces opsporen. Door processen per productieorder te analyseren, zie je duidelijk hoe afzonderlijke productieaanvragen worden afgehandeld. Waarom dit belangrijk is Dit is de centrale identificatiecode die alle bijbehorende procesgebeurtenissen verbindt. Zo kun je het volledige verloop van elke productieorder reconstrueren en analyseren. Waar vind je dit? Dit attribuut staat in de SAP-tabel AUFK, veld AUFNR. Voorbeelden 1000345100034610003471000348 | |||
| Tijdstip van gebeurtenis EventTime | De exacte timestamp waarop de activiteit plaatsvond. | ||
| Beschrijving Het tijdstip van de gebeurtenis registreert de datum en tijd waarop een activiteit is uitgevoerd of een status in het systeem is vastgelegd. Deze timestamp is de basis voor alle tijdsanalyses van processen, zoals het berekenen van doorlooptijden, wachttijden en de totale procesduur. Nauwkeurige timestamps zijn nodig om gebeurtenissen in de juiste volgorde te zetten en prestaties te analyseren. Je kunt de tijd tussen activiteiten meten, vertragingen opsporen en prestaties vergelijken met planningen of service level agreements. Bij productieplanning laat dit zien hoelang elke fase van de planning en uitvoering duurt. Waarom dit belangrijk is Dit attribuut geeft de chronologische volgorde van gebeurtenissen weer. Die is nodig om doorlooptijden te berekenen, prestaties te analyseren en bottlenecks op te sporen. Waar vind je dit? Afgeleid van verschillende datum- en tijdvelden bij transacties en statuswijzigingen, zoals BUDAT (boekingsdatum) van materiaaldocumenten of wijzigingstimestamps uit CDHDR. Voorbeelden 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| Bronsysteem SourceSystem | Geeft aan uit welk systeem de data is opgehaald. | ||
| Beschrijving Dit attribuut geeft aan uit welk systeem de registratie afkomstig is, bijvoorbeeld de naam of ID van een specifieke SAP ECC-instantie. In organisaties met meerdere ERP-systemen of een combinatie van oude en moderne platforms is dit veld belangrijk om de herkomst en context van data te achterhalen. Je kunt processen filteren op het systeem waaruit ze afkomstig zijn. Zo kun je prestaties tussen systemen vergelijken of data afzonderlijk bekijken tijdens projecten waarin data uit meerdere systemen wordt samengevoegd. Waarom dit belangrijk is Dit geeft belangrijke context over de herkomst van data, vooral in omgevingen met meerdere SAP-instanties of gekoppelde systemen. Waar vind je dit? Dit attribuut wordt meestal toegevoegd tijdens de data-extractie en is vaak afgeleid van de SAP-systeem-ID (SY-SYSID). Voorbeelden ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Laatste data-update LastDataUpdate | De timestamp waarop de data voor deze gebeurtenis voor het laatst is bijgewerkt of opgehaald. | ||
| Beschrijving Dit attribuut registreert de datum en tijd waarop de data vanuit het bronsysteem naar de process mining-tool is opgehaald. Het is geen bedrijfsgebeurtenis, maar een technische timestamp voor databeheer. Je gebruikt dit attribuut om te controleren of de data actueel is en om te zien hoe recent de geanalyseerde data is. Zo kun je nagaan of de procesanalyse op actuele informatie is gebaseerd, vooral wanneer je de lopende bedrijfsvoering volgt. Waarom dit belangrijk is Hiermee controleer je of de data actueel is en of analyses zijn gebaseerd op de meest recente beschikbare informatie. Waar vind je dit? Deze waarde wordt meestal tijdens het inlezen van data gegenereerd en vastgelegd door de tool of het script voor data-extractie, -transformatie en -laden (ETL). Voorbeelden 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Geleverde hoeveelheid DeliveredQuantity | De werkelijke hoeveelheid van het product die is gemaakt en aan de voorraad is toegevoegd. | ||
| Beschrijving De geleverde hoeveelheid, ook wel de goederenontvangsthoeveelheid genoemd, is de totale hoeveelheid gereed product die voor een productieorder als geproduceerd is bevestigd. Deze waarde wordt bijgewerkt wanneer de gebeurtenis 'Goederenontvangst geboekt' plaatsvindt. Dit attribuut is de tegenhanger van de geplande hoeveelheid en is nodig om de KPI 'Verschil tussen geplande en werkelijke hoeveelheid' te berekenen. Het geeft de werkelijke productie weer, zodat analisten afwijkingen kunnen opsporen die bijvoorbeeld door uitval, opbrengstverlies of andere productieproblemen ontstaan. Door geleverde hoeveelheden tussen locaties, producten of perioden te vergelijken, zie je waar efficiëntieproblemen spelen. Waarom dit belangrijk is Dit meet de werkelijke productie en maakt een directe vergelijking met de geplande doelen mogelijk. Waar vind je dit? Dit staat in de SAP-tabel AFPO, veld WEMNG (hoeveelheid goederenontvangst). Voorbeelden 984950751255 | |||
| Geplande hoeveelheid PlannedQuantity | De totale hoeveelheid van het product die volgens de order moet worden gemaakt. | ||
| Beschrijving De geplande hoeveelheid is de beoogde productie van een productieorder, zoals vastgesteld tijdens de planningsfase. Dit is de basis waarmee je de werkelijke productie vergelijkt. Dit attribuut vormt de basis voor KPI’s over productieprestaties en het volgen van de planning, zoals 'Verschil tussen geplande en werkelijke hoeveelheid'. Je kunt hiermee de nauwkeurigheid van de productieplanning beoordelen en structurele problemen met over- of onderproductie opsporen. Door deze waarde te analyseren, zie je hoe goed de uitvoering aansluit op de oorspronkelijke plannen. Waarom dit belangrijk is Dit attribuut is de basis om afwijkingen in de productiehoeveelheid te meten en de nauwkeurigheid van de planning te beoordelen. Waar vind je dit? Deze waarde staat in de SAP-tabel AFKO, veld GAMNG (totale orderhoeveelheid). Voorbeelden 1005000751250 | |||
| Productcode ProductCode | De unieke identificatiecode van het materiaal of product dat wordt gemaakt. | ||
| Beschrijving De productcode, ook wel materiaalnummer, geeft aan welk artikel de productieorder moet opleveren. Dit centrale stamgegeven verbindt productieplanning met voorraadbeheer, verkoop en kostprijsberekening. Met process mining kun je processen filteren of uitsplitsen op productcode om productieprocessen per product te begrijpen. Zo beantwoord je vragen als: 'Welke producten hebben de langste doorlooptijden?' en 'Zijn bepaalde producten vaker betrokken bij kwaliteitsproblemen of materiaalvertragingen?'. Deze analyse helpt bij het beheer van het productportfolio en bij het vinden van mogelijkheden om processen voor specifieke materiaalsoorten te standaardiseren of te optimaliseren. Waarom dit belangrijk is Hiermee kun je processen per product analyseren en zien welke materialen samenhangen met inefficiënties, vertragingen of hoge kosten. Waar vind je dit? Dit staat in de SAP-tabel AFPO, veld MATNR. Voorbeelden FG-123RM-45AHALB-7890CHEM-22 | |||
| Productielocatie ProductionPlant | De productiefaciliteit of locatie waar de productieorder wordt uitgevoerd. | ||
| Beschrijving De productielocatie is een belangrijke organisatie-eenheid in SAP die een productiefaciliteit aanduidt. Elke productieorder wordt aan een locatie toegewezen. Daar vinden de productieactiviteiten fysiek plaats. Door processen per productielocatie te analyseren, kun je prestaties tussen locaties vergelijken. Zo zie je welke locaties efficiënter werken, waar vaker vertragingen of materiaaltekorten optreden en waar goede werkwijzen kunnen worden gedeeld. Dit is een belangrijke dimensie voor oorzaakanalyse in dashboards over doorvoer en de inzet van middelen. Waarom dit belangrijk is Hiermee kun je prestaties van verschillende productielocaties vergelijken en locatiespecifieke problemen of goede werkwijzen opsporen. Waar vind je dit? Dit attribuut staat in de SAP-tabel AUFK, veld WERKS. Voorbeelden 100017102000DE01 | |||
| Werkelijke einddatum ActualEndDate | De timestamp van de laatste productieactiviteit, die aangeeft wanneer de order daadwerkelijk is afgerond. | ||
| Beschrijving De werkelijke einddatum is de timestamp van de gebeurtenis die aangeeft dat alle productieactiviteiten voor een order zijn afgerond. Meestal wordt deze afgeleid van de timestamp van de gebeurtenis ‘Eindbevestiging geregistreerd’ of de laatste gebeurtenis ‘Goederenontvangst geboekt’. Dit attribuut is essentieel om de totale productiedoorlooptijd te meten en te analyseren of de planning is gehaald. Door de werkelijke einddatum te vergelijken met de geplande einddatum zie je of een order op tijd is afgerond. De tijd tussen de werkelijke startdatum en de werkelijke einddatum geeft de werkelijke productiedoorlooptijd. Waarom dit belangrijk is Deze datum markeert het einde van de productie en maakt het mogelijk om de prestaties van tijdige levering en de totale uitvoeringstijd nauwkeurig te meten. Waar vind je dit? Afgeleid uit het event log door de hoogste timestamp te bepalen van belangrijke afrondingsactiviteiten, zoals ‘Eindbevestiging geregistreerd’ of ‘Goederenontvangst geboekt’. Voorbeelden 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| Werkelijke startdatum ActualStartDate | De timestamp van de eerste vastgelegde productieactiviteit, die het werkelijke begin van de uitvoering markeert. | ||
| Beschrijving De werkelijke startdatum is de timestamp van de eerste gebeurtenis die het begin van het fysieke productiewerk aangeeft. Deze wordt meestal afgeleid van de eerste productiebevestiging of de eerste goederenafgifte van grondstoffen aan de order. Dit afgeleide attribuut is belangrijk om te analyseren of de planning wordt gevolgd. Het geeft het werkelijke startpunt waarmee je de geplande startdatum vergelijkt en de afwijking in starttijd nauwkeurig berekent. Door het verschil tussen de geplande en werkelijke startdatum te bekijken, kun je vertragingen vóór de productie opsporen, bijvoorbeeld door het klaarzetten van materialen, het instellen van machines of de beschikbaarheid van middelen. Waarom dit belangrijk is Dit geeft het werkelijke begin van de productie weer, zodat je startvertragingen en de totale productiedoorlooptijd nauwkeurig kunt berekenen. Waar vind je dit? Afgeleid uit het event log door per productieorder de vroegste timestamp te bepalen van specifieke uitvoeringsactiviteiten, zoals 'Eerste bevestiging geregistreerd' of 'Goederenafgifte geboekt'. Voorbeelden 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Beschikbaarheid van materiaal MaterialAvailabilityStatus | Geeft aan of alle benodigde componenten voor de productieorder beschikbaar zijn. | ||
| Beschrijving De materiaalbeschikbaarheidsstatus is een belangrijke indicator voor de gereedheid van de productie. Het systeem bepaalt deze status door de beschikbaarheid van alle benodigde componentmaterialen voor de order te controleren. De status ‘Beschikbaar’ betekent dat de productie zonder materiaalgerelateerde vertragingen kan doorgaan. ‘Tekort’ wijst op een probleem. Dit attribuut is essentieel voor het dashboard ‘Analyse van de impact van materiaaltekorten’. Door te analyseren hoelang orders met een materiaaltekort moeten wachten, kun je de invloed van problemen in de toeleveringsketen op de productieplanning meten. Zo spoor je onbetrouwbare leveranciers of componenten op die vaak vertraging veroorzaken. Waarom dit belangrijk is Hiermee zie je meteen welke vertragingen door materiaaltekorten komen, een veelvoorkomende en belangrijke oorzaak van afwijkingen in de productieplanning. Waar vind je dit? Dit is geen afzonderlijk opgeslagen veld, maar het resultaat van een beschikbaarheidscontrole (ATP-controle). De resultaten zijn vaak zichtbaar in transactie CO02 of in de collectieve beschikbaarheidscontrole COHV. De status zelf, bijvoorbeeld MACM (materiaal gereserveerd), kan in het event log staan. Raadpleeg de documentatie van SAP ECC PP. Voorbeelden BeschikbaarTekortGedeeltelijk beschikbaarNiet gecontroleerd | |||
| Geplande einddatum PlannedEndDate | De datum waarop de productie van de order volgens de planning klaar moet zijn. | ||
| Beschrijving De geplande einddatum is de beoogde afrondingsdatum van een productieorder, vastgesteld tijdens het inplannen. Deze datum geeft aan wanneer alle productieactiviteiten naar verwachting klaar zijn, inclusief de eindbevestigingen en goederenontvangst. Deze datum is nodig om de KPI 'Percentage volgens planning afgerond' te berekenen. Door de geplande einddatum te vergelijken met het werkelijke tijdstip van afronding, bijvoorbeeld de timestamp van de activiteit 'Goederenontvangst geboekt' of 'Eindbevestiging geregistreerd', zie je of orders op tijd klaar zijn. Zo kun je de betrouwbaarheid van productieplanningen beoordelen en de oorzaken van late leveringen opsporen. Waarom dit belangrijk is Dit is de maatstaf om te bepalen of productieorders op tijd klaar zijn. Dat heeft direct invloed op klanttevredenheid en de betrouwbaarheid van de planning. Waar vind je dit? Dit is de basis-einddatum in SAP-tabel AFKO, veld GLTRP. Voorbeelden 2023-05-152023-06-282023-07-05 | |||
| Geplande startdatum PlannedStartDate | De datum waarop de productie van de order volgens de planning moet beginnen. | ||
| Beschrijving De geplande startdatum is een belangrijke planningsparameter die tijdens de productieplanning en -roostering wordt vastgesteld. Dit is de beoogde datum waarop de productieactiviteiten voor een order beginnen. Dit attribuut is belangrijk om te meten of de planning wordt gevolgd. Door de geplande startdatum te vergelijken met het werkelijke starttijdstip van de productie, bijvoorbeeld de timestamp van de activiteit 'Eerste bevestiging geregistreerd', kun je vertragingen opsporen. Het achterhalen van de oorzaken daarvan is een belangrijke toepassing van process mining in dit proces. Waarom dit belangrijk is Dit is de basis om te meten of de planning wordt gevolgd en vertragingen bij de start van de productie op te sporen. Waar vind je dit? Dit is de basisstartdatum in SAP-tabel AFKO, veld GSTRP. Voorbeelden 2023-05-102023-06-222023-07-01 | |||
| Hoeveelheidsverschil QuantityVariance | Het verschil tussen de geplande productiehoeveelheid en de werkelijk geleverde hoeveelheid. | ||
| Beschrijving Het hoeveelheidsverschil is een berekende metriek die laat zien in hoeverre de productie afwijkt van het oorspronkelijke plan. Je berekent het door de geplande hoeveelheid af te trekken van de geleverde hoeveelheid. Een positief verschil betekent overproductie; een negatief verschil wijst op onderproductie of opbrengstverlies. Dit attribuut is essentieel voor het dashboard ‘Geplande versus werkelijke productie’ en de bijbehorende KPI. Door het verschil te analyseren, spoor je problemen op met de productieopbrengst, het uitvalpercentage of fouten bij de gegevensinvoer. Het laat rechtstreeks zien hoe betrouwbaar het productieproces is in het halen van de productiedoelen. Waarom dit belangrijk is Hiermee meet je hoe nauwkeurig de productie overeenkomt met de planning en spoor je mogelijke problemen op met opbrengst, uitval of procesbeheersing. Waar vind je dit? Berekend veld: 'DeliveredQuantity' - 'PlannedQuantity'. Voorbeelden -2-5005 | |||
| Planningsgroep PlannerGroup | De groep MRP-controllers of productieplanners die verantwoordelijk is voor de order. | ||
| Beschrijving De planningsgroep is een organisatorisch onderdeel dat bestaat uit mensen die verantwoordelijk zijn voor de planning en het beheer van een specifieke groep materialen of productieorders. Door orders aan planningsgroepen toe te wijzen, verdeel je het werk en is duidelijk wie waarvoor verantwoordelijk is. Met process mining kun je dit attribuut gebruiken om de prestaties van verschillende planningsteams te vergelijken. Zo kun je vragen beantwoorden als: ‘Welke planningsgroep wijkt het vaakst af van de planning?’ of ‘Verschillen de doorlooptijden van orders die door verschillende groepen worden beheerd?’ Dit helpt bij het verdelen van de werklast en het bepalen waar extra training nodig is. Waarom dit belangrijk is Hiermee kun je de prestaties per verantwoordelijk team analyseren en verschillen in planningsresultaten en werklast opsporen. Waar vind je dit? Dit is de MRP-controller, te vinden in SAP-tabel AFKO, veld DISPO. Voorbeelden 001002P01P02 | |||
| Productieorderstatus ProductionOrderStatus | De huidige verwerkingsstatus van de productieorder, bijvoorbeeld aangemaakt, vrijgegeven of technisch afgerond. | ||
| Beschrijving De productieorderstatus geeft aan in welke fase van de levenscyclus de order zich bevindt. SAP gebruikt statuscodes om de voortgang van de order bij te houden, bijvoorbeeld CRTD (aangemaakt), REL (vrijgegeven), CNF (bevestigd), DLV (geleverd) en TECO (technisch afgerond). Analyseren hoelang orders in verschillende statussen blijven, is een belangrijk onderdeel van process mining voor productie. Zo zie je bijvoorbeeld hoelang orders na aanmaak op vrijgave wachten of hoelang ze gedeeltelijk geleverd blijven. Door statuswijzigingen als activiteiten bij te houden, krijg je een overzicht van het procesverloop. Waarom dit belangrijk is De status geeft een momentopname van de voortgang van een order en helpt bottlenecks op te sporen waar orders lang blijven hangen. Waar vind je dit? Statusinformatie staat in de tabellen JEST en JSTO, gekoppeld aan het objectnummer van de order (AUFK-OBJNR). De statustekst staat in TJ02T. Statussen worden vaak uitgelezen met functiemodules zoals STATUS_TEXT_EDIT. Voorbeelden CRTD (Aangemaakt)REL (Vrijgegeven)DLV (Geleverd)TECO (Technisch afgerond) | |||
| Productieprioriteit ProductionPriority | Een classificatie die aangeeft hoe dringend of belangrijk de productieorder is. | ||
| Beschrijving Productieprioriteit geeft het relatieve belang van een productieorder aan. Productieplanners en medewerkers op de werkvloer kunnen hiermee hun werk prioriteren, zodat urgente orders sneller door het proces gaan. Door dit attribuut te analyseren, kun je beoordelen of het prioriteitssysteem werkt. Vergelijk de doorlooptijden van orders met een hoge en een lage prioriteit om te zien of urgente orders daadwerkelijk sneller worden verwerkt. Is dat niet zo, dan kan dat wijzen op problemen met de communicatie, de verdeling van middelen of de uitvoering van het proces. Waarom dit belangrijk is Hiermee kun je nagaan of het prioriteitssysteem werkt en of urgente orders sneller worden afgerond dan reguliere orders. Waar vind je dit? Dit is vaak geen standaardveld in de kop van een productieorder. Het kan een aangepast veld zijn, zijn afgeleid van de verkooporderprioriteit of deel uitmaken van een classificatiesysteem. Raadpleeg de documentatie van SAP ECC PP of de systeemconfiguratie. Voorbeelden HoogGemiddeldLaagSpoed | |||
| Status van planning gehaald ScheduleAdherenceStatus | Een aanduiding die aangeeft of de productieorder uiterlijk op de geplande einddatum is afgerond. | ||
| Beschrijving De status van planning gehaald is een berekend booleaans of categorisch attribuut dat in één oogopslag laat zien of orders op tijd zijn afgerond. De status wordt bepaald door de werkelijke einddatum met de geplande einddatum te vergelijken. Is de werkelijke einddatum gelijk aan of eerder dan de geplande einddatum, dan is de status ‘Op tijd’. Anders is de status ‘Te laat’. Dit attribuut maakt analyse en visualisatie in dashboards eenvoudiger. Je kunt er makkelijk mee filteren en gegevens groeperen om de KPI ‘Percentage volgens planning afgerond’ te berekenen. Ook kun je de belangrijkste oorzaken van te late orders opsporen, zoals specifieke producten, fabrieken of materiaaltekorten. Waarom dit belangrijk is Orders worden ingedeeld als ‘Op tijd’ of ‘Te laat’. Zo kun je eenvoudig meten en rapporteren hoe betrouwbaar de planning is. Waar vind je dit? Berekend veld: IF('ActualEndDate' <= 'PlannedEndDate', 'Op tijd', 'Te laat'). Voorbeelden Op tijdTe laat | |||
| Verantwoordelijke gebruiker ResponsibleUser | De gebruikers-ID van degene die de productieorder heeft aangemaakt of voor het laatst heeft gewijzigd. | ||
| Beschrijving De verantwoordelijke gebruiker is het SAP-gebruikersaccount dat hoort bij belangrijke gebeurtenissen in de levenscyclus van de productieorder, zoals het aanmaken of vrijgeven ervan. Zo kun je nagaan wie welke acties in het systeem heeft uitgevoerd. Met process mining kun je dit attribuut gebruiken om procesverschillen op basis van gebruikersgedrag te analyseren. Zo spoor je gebruikers op die mogelijk extra training nodig hebben of procedures volgen die afwijken van de standaard. Ook ondersteunt het bronanalyse: je ziet hoe het werk over verschillende gebruikers is verdeeld. Waarom dit belangrijk is Hiermee koppel je procesactiviteiten aan specifieke personen. Zo kun je prestaties per gebruiker analyseren en is duidelijk wie waarvoor verantwoordelijk is. Waar vind je dit? De gebruiker die de order heeft aangemaakt, staat in AUFK-ERNAM. De gebruiker die de order het laatst heeft gewijzigd, staat in AUFK-AENAM. Wijzigingsdocumenten (CDHDR-USERNAME) bevatten de gebruikersgeschiedenis van specifieke wijzigingen. Voorbeelden JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
Activiteiten voor productieplanning
| Activiteit | Beschrijving | ||
|---|---|---|---|
| Eerste bevestiging geregistreerd | Deze gebeurtenis geeft aan dat het daadwerkelijke productiewerk aan de order begint. De gebeurtenis wordt vastgelegd wanneer de eerste tijdsbevestiging voor een bewerking in de productieorder in het systeem wordt ingevoerd. | ||
| Waarom dit belangrijk is Deze activiteit geeft het werkelijke starttijdstip van de productie. Dat is nodig om te meten of de planning wordt gevolgd en om vertraging tussen de toewijzing van middelen en de start van het werk op te sporen. Waar vind je dit? Dit wordt afgeleid door in de tabel AFRU de vroegste boekingsdatum (AFRU-BUDAT) te bepalen van alle bevestigingen voor de order. De eerste regel markeert het begin van de fysieke productie. Vastleggen Bepaal de eerste bevestigingsregel voor de order op basis van de boekingsdatum in tabel AFRU. Gebeurtenistype inferred | |||
| Eindbevestiging geregistreerd | Deze activiteit geeft aan dat alle bewerkingen voor de productieorder op de werkvloer zijn afgerond. Dit wordt aangegeven door een eindbevestiging voor de laatste bewerking. | ||
| Waarom dit belangrijk is Dit moment markeert het einde van de fysieke productieactiviteiten. De tijd tussen de eerste en de eindbevestiging is de werkelijke productiedoorlooptijd. Waar vind je dit? Dit wordt vastgelegd wanneer de systeemstatus 'CNF' (I0009, Confirmed) wordt ingesteld. Dit gebeurt meestal na invoer van de eindbevestiging in tabel AFRU (AFRU-AUERU = 'X'). De statuswijziging wordt geregistreerd in JCDS. Vastleggen Bepaal het tijdstip waarop de status 'CNF' wordt ingesteld of zoek de laatste bevestigingsregel in AFRU. Gebeurtenistype explicit | |||
| Goederenontvangst geboekt | Deze gebeurtenis legt de ontvangst van het gereed product uit de productieorder in de voorraad vast. De geproduceerde goederen zijn vanaf dat moment beschikbaar voor verzending of verdere verwerking. | ||
| Waarom dit belangrijk is Dit is een belangrijk moment waarop de productie is afgerond en het eindproduct beschikbaar komt. De tijd tussen vrijgave en goederenontvangst is de totale productiedoorlooptijd. Waar vind je dit? Vastgelegd als materiaaldocument in de tabellen MKPF/MSEG, met een mutatiesoort, meestal '101', en een verwijzing naar de productieorder. Ook wordt de systeemstatus 'DLV' (I0012, Delivered) op de order ingesteld. Vastleggen Leg de boekingsdatum vast van het materiaaldocument met mutatiesoort '101', of het tijdstip waarop de status 'DLV' is gewijzigd. Gebeurtenistype explicit | |||
| Order technisch afgerond | Dit is een administratieve afsluitstap waarmee een productieorder vanuit logistiek oogpunt wordt afgerond. Daarna zijn verdere materiaalbewegingen of bevestigingen niet meer mogelijk en kan de financiële afrekening plaatsvinden. | ||
| Waarom dit belangrijk is Dit is het definitieve eindpunt van de orderlevenscyclus vanuit logistiek oogpunt. Door deze gebeurtenis te analyseren, krijg je inzicht in de totale procesduur, inclusief administratieve taken na de productie. Waar vind je dit? De gebeurtenis wordt expliciet vastgelegd wanneer de systeemstatus 'TECO' (I0045, Technically Completed) aan de order wordt toegekend. De wijziging wordt met een timestamp geregistreerd in de tabel JCDS. Vastleggen Bepaal in JCDS het tijdstip waarop de status 'TECO' actief wordt voor de order. Gebeurtenistype explicit | |||
| Productieorder aangemaakt | Deze gebeurtenis markeert het aanmaken van een nieuwe productieorder, meestal vanuit een planningsrun of door handmatige invoer. De gebeurtenis wordt vastgelegd wanneer een nieuwe order in het systeem wordt opgeslagen met de status 'CRTD' (Created). | ||
| Waarom dit belangrijk is Dit is het beginpunt van elke productieorder-case. Door de tijd tussen deze gebeurtenis en de vrijgave te analyseren, kun je vertragingen in de voorbereiding en administratieve afhandeling opsporen. Waar vind je dit? Deze gebeurtenis wordt afgeleid van de aanmaakdatum (AUFK-ERDAT) en -tijd (AUFK-ERZET) van de productieorder. De systeemstatus 'CRTD' (I0001) wordt toegekend en vastgelegd in de tabellen JEST en JCDS, gekoppeld aan het objectnummer van de order (AUFK-OBJNR). Vastleggen Leg het aanmaaktijdstip en de toekenning van de status 'CRTD' vast. Gebeurtenistype explicit | |||
| Productieorder vrijgegeven | Deze activiteit geeft aan dat de productieorder officieel is goedgekeurd en vrijgegeven voor uitvoering. Na vrijgave worden materiaalreserveringen actief en kunnen productieactiviteiten zoals goederenafgifte en bevestigingen beginnen. | ||
| Waarom dit belangrijk is Dit is een belangrijk moment waarop de order van planning naar uitvoering gaat. De tijd tussen aanmaak en vrijgave is een belangrijke maatstaf voor de efficiëntie van de planning. Waar vind je dit? De gebeurtenis wordt expliciet vastgelegd wanneer de systeemstatus 'REL' (I0002) aan de productieorder wordt toegekend. De wijziging wordt met een timestamp geregistreerd in de tabel JCDS, gekoppeld aan het objectnummer van de order (AUFK-OBJNR). Vastleggen Bepaal het tijdstip waarop de status 'REL' actief wordt voor de order. Gebeurtenistype explicit | |||
| Goederenafgifte geboekt | Deze activiteit staat voor het uit voorraad nemen van onderdelen voor gebruik in de productieorder. Hiermee wordt bevestigd dat de benodigde grondstoffen of halffabricaten klaarstaan voor de productie. | ||
| Waarom dit belangrijk is Deze gebeurtenis markeert het begin van het materiaalverbruik. Vertraging tussen de vrijgave van de order en de goederenafgifte kan wijzen op problemen met magazijnlogistiek, materiaalvoorbereiding of de voorraadnauwkeurigheid. Waar vind je dit? Vastgelegd als materiaaldocumenten in de tabellen MKPF (kop) en MSEG (regel), met een mutatiesoort, meestal '261', en een verwijzing naar het productieordernummer (MSEG-AUFNR). Vastleggen Leg de boekingsdatum (MKPF-BUDAT) vast van materiaaldocumenten met mutatiesoort '261' die aan de order zijn gekoppeld. Gebeurtenistype explicit | |||
| Materiaalbeschikbaarheid gecontroleerd | Deze gebeurtenis staat voor een controle om vast te stellen of alle benodigde onderdelen voor de productieorder beschikbaar zijn. De controle kan automatisch plaatsvinden bij het aanmaken of vrijgeven van de order, of handmatig worden gestart. | ||
| Waarom dit belangrijk is Deze activiteit is belangrijk om vertragingen door materiaaltekorten te begrijpen. Regelmatige controles of lange wachttijden tot materialen beschikbaar zijn, kunnen wijzen op problemen in de toeleveringsketen of het voorraadbeheer. Waar vind je dit? Het systeem stelt een status in, zoals 'MACM' (materiaal gereserveerd) of 'MSPT' (materiaaltekort). De uitvoering kan worden afgeleid uit het tijdstip van deze statuswijziging in de tabellen JEST/JCDS. De resultaten zijn zichtbaar in de orderkop. Vastleggen Leid de gebeurtenis af uit het tijdstip van statuswijzigingen rond materiaalbeschikbaarheid, zoals 'MACM' of 'MSPT'. Gebeurtenistype inferred | |||
| Order geannuleerd | Deze gebeurtenis geeft aan dat een productieorder vóór afronding is geannuleerd. Dit gebeurt meestal door een specifieke status of verwijdermarkering in te stellen, zodat verdere verwerking niet meer mogelijk is. | ||
| Waarom dit belangrijk is Dit is een ongewenste uitkomst die belangrijk is om bij te houden. Een analyse van geannuleerde orders kan problemen met vraagprognoses, planningsnauwkeurigheid of stamgegevensbeheer aan het licht brengen. Waar vind je dit? Dit kan worden afgeleid uit de toekenning van de status 'DLFL' (I0076, Deletion flag) of een specifieke status 'Canceled', als die is ingesteld. De wijziging wordt met een timestamp geregistreerd in de tabel JCDS. Vastleggen Bepaal het tijdstip waarop de verwijdermarkering ('DLFL') of een annuleringsstatus voor de order wordt ingesteld. Gebeurtenistype inferred | |||
| Orderafrekening uitgevoerd | Dit staat voor de financiële afrekening van de productieorder, waarbij de verzamelde kosten worden toegewezen aan de juiste kostenobjecten. Vanuit controlling is dit de laatste stap in de levenscyclus van de order. | ||
| Waarom dit belangrijk is Hoewel dit een financiële activiteit is, kunnen vertragingen bij de afrekening wijzen op problemen met kostenrapportages of onjuiste ordergegevens. De afrekening markeert de daadwerkelijke financiële afsluiting van het productieproces. Waar vind je dit? Dit kan worden afgeleid wanneer het ordersaldo nul wordt, of wanneer de systeemstatus 'SETC' (I0076, Settlement rule created) wordt gevolgd door logregels van een afrekenrun. De daadwerkelijke afrekening wordt vastgelegd in controllingtabellen zoals COSP en COSS. Vastleggen Leid dit af uit afrekeningsdocumenten in CO-tabellen die aan de order zijn gekoppeld, of uit de activering van de status 'SETC'. Gebeurtenistype inferred | |||
| Ordergegevens gewijzigd | Deze gebeurtenis legt belangrijke wijzigingen aan een productieorder vast nadat deze is aangemaakt, zoals wijzigingen in de geplande hoeveelheid, datums of stuklijst. Het systeem registreert deze wijzigingen voor controledoeleinden. | ||
| Waarom dit belangrijk is Door deze wijzigingen bij te houden, kun je instabiliteit in het proces en frequente herplanning opsporen. Veel wijzigingen kunnen wijzen op een gebrekkige oorspronkelijke planning, wisselende vraag of onjuiste data. Waar vind je dit? Wijzigingen in belangrijke velden van tabellen zoals AFKO (orderkop) en AFPO (orderregel) worden vastgelegd in de wijzigingsdocumenttabellen CDHDR (kop) en CDPOS (regel). Elke relevante wijziging kan als activiteit worden opgehaald. Vastleggen Haal wijzigingslogboekregels op uit de tabellen CDHDR en CDPOS voor de objectklasse van de productieorder. Gebeurtenistype explicit | |||
| Tussenbevestiging geregistreerd | Dit is een voortgangsupdate voor een productieorder, vastgelegd als gedeeltelijke bevestiging van een bewerking. Dit komt vaak voor bij langlopende orders, waarbij het nodig is de voortgang vóór de afronding bij te houden. | ||
| Waarom dit belangrijk is Met tussenbevestigingen kun je de voortgang van lange productiecycli volgen en bottlenecks binnen het productieproces opsporen, niet alleen aan het begin of einde. Waar vind je dit? Afgeleid van bevestigingsregels in de tabel AFRU die niet als eindbevestiging zijn gemarkeerd. Elke regel bevat een boekingsdatum (AFRU-BUDAT) en een tijd. Vastleggen Haal alle bevestigingsregels uit AFRU op die niet als eindbevestiging van een bewerking zijn gemarkeerd. Gebeurtenistype explicit | |||
Extractiegidsen
Stappen
- Maak een InfoSet in SAP Query: Gebruik transactiecode
SQ02. Maak een nieuwe InfoSet, bijvoorbeeldZPP_EVENTLOG. Kies als databron ‘Tabelkoppeling met basistabel’. GebruikAUFK(stamgegevens van orders) als eerste basistabel. - Koppel de benodigde tabellen: Voeg de volgende tabellen toe aan de InfoSet-koppeling. Het systeem kan koppelingen voorstellen, maar controleer of ze kloppen:
AUFKmetAFKO(kopgegevens van PP-orders):AUFK-AUFNR = AFKO-AUFNRAUFKmetJEST(status van afzonderlijke objecten):AUFK-OBJNR = JEST-OBJNRJESTmetJCDS(wijzigingsdocumenten voor systeem- en gebruikersstatussen):JEST-OBJNR = JCDS-OBJNRANDJEST-STAT = JCDS-STAT. Let op: deze koppeling is bedoeld om de wijzigingsgeschiedenis van statussen uit te lezen.AUFKmetAFRU(bevestigingen van orderafronding):AUFK-AUFNR = AFRU-AUFNRAUFKmetMSEG(documentsegment: materiaal):AUFK-AUFNR = MSEG-AUFNRMSEGmetMKPF(kop: materiaaldocument):MSEG-MBLNR = MKPF-MBLNRANDMSEG-MJAHR = MKPF-MJAHR
- Stel veldgroepen in: Sleep de benodigde velden uit de brontabellen naar de veldgroepen. Neem alle velden op die nodig zijn voor de uiteindelijke query, zoals
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATEenMKPF-BUDAT. - Voeg aangepaste velden en code toe: Ga in de InfoSet naar het tabblad ‘Extra’s’. Definieer aangepaste velden voor
ActivityName,EventTime,SourceSystemenLastDataUpdateen schrijf ABAP-code om ze te vullen volgens de logica in het querygedeelte. Daarvoor doorloop je statuswijzigingen, bevestigingen en materiaaldocumenten en maak je voor elke bedrijfsgebeurtenis een afzonderlijke registratie. Dit is de ingewikkeldste stap: je zet tabelgegevens in de codegedeelten van de InfoSet om naar een event log. - Genereer en sla de InfoSet op: Sla de InfoSet op en genereer deze zodra alle koppelingen, velden en aangepaste code zijn ingesteld.
- Maak een SAP Query: Gebruik transactiecode
SQ01. Maak een nieuwe query, bijvoorbeeldZPP_EVENTS, op basis van de InfoSet die je in de vorige stappen hebt gemaakt. - Stel de query-indeling in: Bepaal in de queryontwerper welke velden op het selectiescherm staan. Geschikte velden zijn productieorder
AUFNR, fabriekWERKS, ordertypeAUARTen een datumbereik voor de aanmaakdatum van de orderAUFK-ERDAT. - Bepaal de uitvoerlijst: Selecteer de velden die in het rapport worden weergegeven. De lijst moet precies overeenkomen met de kolommen die het event log nodig heeft, waaronder de aangepaste velden
ActivityNameenEventTime. - Voer de query uit: Voer de query uit met de gewenste selectiecriteria, bijvoorbeeld voor productieorders van de afgelopen 3 tot 6 maanden.
- Exporteer de data: Exporteer de lijst zodra de queryresultaten worden weergegeven. De meest gebruikte en betrouwbare indeling is ‘Spreadsheet’ of ‘Local File’ met tabgescheiden waarden of CSV.
- Maak de data klaar voor ProcessMind: Open het geëxporteerde bestand in een spreadsheetprogramma. Controleer of de kolomkoppen overeenkomen met de vereiste attributen (
ProductionOrder,ActivityName,EventTimeenzovoort) en of de datum- en tijdnotatie vanEventTimeconsistent is en aan de vereiste standaard voldoet, bijvoorbeeld YYYY-MM-DD HH:MI:SS. Sla het bestand op als CSV om het te uploaden.
Configuratie
- InfoSet-koppelingen: Deze methode draait om een complexe InfoSet die kop-, status-, bevestigings- en materiaalbewegingstabellen koppelt. De belangrijkste koppelingen zijn
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUenAUFK->MSEG->MKPF. Onjuiste of inefficiënte koppelingen kunnen de prestaties verslechteren of tot onjuiste data leiden. - Selectiecriteria: Stel een beheersbaar selectiegebied in om prestatieproblemen te voorkomen. Neem deze belangrijke selectievelden op het startscherm van de query op:
- Productiefabriek (
AUFK-WERKS) - Productieordertype (
AUFK-AUART) - Aanmaakdatum van de order (
AUFK-ERDAT): we raden aan data over een voortschrijdende periode van 3 tot 6 maanden op te halen, zodat de dataset beheersbaar blijft.
- Productiefabriek (
- Systeemstatussen: De logica voor het herkennen van gebeurtenissen zoals ‘Aangemaakt’, ‘Vrijgegeven’, ‘Technisch afgerond’ en ‘Geannuleerd’ is afhankelijk van specifieke systeemstatuscodes, bijvoorbeeld I0001, I0002, I0045 en I0047. Deze zijn doorgaans standaard in SAP-systemen, maar controleer ze voor de zekerheid.
- Goederensoorten: Gebeurtenissen zoals ‘Goederenafgifte’ en ‘Goederenontvangst’ worden herkend aan de hand van specifieke goederensoorten (
MSEG-BWART), meestal respectievelijk ‘261’ en ‘101’. Controleer of deze waarden overeenkomen met de configuratie van je organisatie. - Autorisaties: De gebruiker die de query uitvoert, moet toegang hebben tot transacties
SQ01,SQ02enSQ03en de onderliggende tabellen kunnen weergeven: AUFK, AFKO, JEST, JCDS, AFRU, MSEG en MKPF.
a Voorbeeldquery abap
/*
The following ABAP-style SQL script represents the complete logic required to build the event log.
This logic must be implemented within the code sections of the SQ02 InfoSet, as a direct SQL query of this nature is not run.
Each SELECT block corresponds to a specific business activity.
*/
-- 1. Production Order Created
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Created' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0001' AND JCDS.INACT = ''
UNION ALL
-- 2. Material Availability Checked (using 'Material shortage' status as an indicator)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Material Availability Checked' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0033' AND JCDS.INACT = '' -- I0033 is MSPT (Material Shortage)
UNION ALL
-- 3. Production Order Released
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Released' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0002' AND JCDS.INACT = ''
UNION ALL
-- 4. Order Data Changed (using last change date as a proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Data Changed' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime, -- Time is not available in AUFK
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.AEDAT IS NOT NULL AND AUFK.AEDAT > AUFK.ERDAT
UNION ALL
-- 5. Goods Issue Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Issue Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
CONF.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
CONF.EventTime,
CONF.ProductionPlant,
CONF.ProductCode,
CONF.PlannedQuantity,
CONF.DeliveredQuantity,
CONF.ActualStartDate,
CONF.ActualEndDate,
CONF.SourceSystem,
CONF.LastDataUpdate
FROM (
SELECT
AUFK.AUFNR AS ProductionOrder,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
ROW_NUMBER() OVER(PARTITION BY AUFK.AUFNR ORDER BY AFRU.BUDAT, AFRU.ERFZEIT) as rn
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
) AS CONF
WHERE CONF.rn = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'T' -- T = Partial Confirmation
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'E' -- E = Final Confirmation
UNION ALL
-- 9. Goods Receipt Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Technically Completed' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0045' AND JCDS.INACT = ''
UNION ALL
-- 11. Order Settlement Ran (using 'Closed' status as proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Settlement Ran' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0046' AND JCDS.INACT = '' -- I0046 is CLSD (Closed)
UNION ALL
-- 12. Order Cancellation Set
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0047' AND JCDS.INACT = '' -- I0047 is CNF (Confirmed), use I0076 for Canceled. Recorrecting. Use Deletion Flag instead.
-- Corrected Logic for Cancellation:
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.LOEKZ = 'X'; Stappen
- Regel toegang tot de database in: Vraag inloggegevens met alleen-lezenrechten aan voor de onderliggende SAP ECC-database. Je hebt het serveradres, de poort, de databasenaam, de gebruikersnaam en het wachtwoord nodig. Stem deze toegang af met de SAP Basis- en databasebeheerteams.
- Zoek het SAP-schema op: Bepaal in welk databaseschema de SAP-tabellen staan. Dit is vaak
SAPSR3of een vergelijkbare, systeemspecifieke naam. Vervang de placeholder[Your SAP Schema]in de query door deze waarde. - Maak de SQL-query klaar: Kopieer de volledige SQL-query uit het gedeelte
query. Deze query haalt alle opgegeven activiteiten op en zet ze om naar één event log. - Stel de queryparameters in: Pas vóór uitvoering de placeholders in de query aan. Vul
[Start Date]en[End Date]in om de periode voor de extractie te bepalen. We raden ook aan te filteren op productiefabriek (WERKS) of ordertype (AUART) om de hoeveelheid data te beperken. - Maak verbinding en voer de query uit: Gebruik een standaard SQL-client, zoals DBeaver of SAP HANA Studio, of een eigen script in Python of Java. Maak verbinding met de SAP-database met de gegevens uit stap 1.
- Voer de query uit: Plak de ingestelde SQL-query in de client en voer deze uit. Afhankelijk van de periode en de omvang van het systeem kan dit enkele minuten duren.
- Controleer de eerste resultaten: Bekijk na afloop kort de eerste paar honderd rijen. Controleer of kolommen zoals
ProductionOrder,ActivityNameenEventTimecorrect zijn gevuld en logisch zijn. - Exporteer naar CSV: Exporteer alle resultaten vanuit je SQL-client naar een CSV-bestand. Gebruik UTF-8-codering om problemen met tekens te voorkomen.
- Maak de CSV klaar om te uploaden: Open het CSV-bestand en controleer of de kolomkoppen overeenkomen met de vereiste attributen (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdateenzovoort). Controleer of de kolomEventTimeoveral dezelfde notatie gebruikt, bijvoorbeeldYYYY-MM-DD HH:MI:SS. - Upload naar ProcessMind: Het voorbereide CSV-bestand is nu klaar om naar het ProcessMind-platform te uploaden voor analyse.
Configuratie
- Databaseschema: Geef het SAP-schema op waarin de tabellen voor productieplanning staan. Vervang de placeholder
[Your SAP Schema]in de query door de juiste naam voor jouw omgeving, bijvoorbeeldSAPSR3. - Datumbereik: Filteren op een specifiek datumbereik is belangrijk voor de prestaties. De query filtert op de aanmaakdatum van de order (
AUFK.ERDAT). We raden aan te beginnen met een recente periode van 3 tot 6 maanden, zodat de hoeveelheid data beheersbaar blijft. - Productieordertype: Filter de query op het veld voor het productieordertype (
AUFK.AUART) om de analyse af te bakenen. Zo kun je specifieke typen opnemen of uitsluiten, zoals standaardproductieorders, procesorders of herstelorders. - Productiefabriek: We raden sterk aan om op een of meer productiefabrieken (
AFKO.WERKS) te filteren. Data voor alle fabrieken tegelijk ophalen kan veel middelen vragen. - Databasetoegang: Voor deze methode is een databasegebruiker nodig met minimaal leesrechten voor de volgende tabellen:
AUFK,AFKO,JCDS,JEST,AFRU,MSEGenMKPF. Rechtstreekse databasetoegang is niet standaard voor alle SAP-gebruikers en vereist speciale autorisaties.
a Voorbeeldquery sql
WITH Orders AS (
SELECT
aufk.AUFNR AS ProductionOrder,
afko.WERKS AS ProductionPlant,
afko.PLNBEZ AS ProductCode,
afko.GAMNG AS PlannedQuantity,
afko.GMEIN AS PlannedUnit,
afko.GEMNG AS DeliveredQuantity,
CASE
WHEN afko.GSTRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GSTRI || afko.GSUZI, 'YYYYMMDDHH24MISS')
END AS ActualStartDate,
CASE
WHEN afko.GETRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GETRI || afko.GEUZI, 'YYYYMMDDHH24MISS')
END AS ActualEndDate,
aufk.OBJNR,
aufk.ERDAT AS CreationDate,
aufk.ERFAS AS CreationTime
FROM
"[Your SAP Schema]".AUFK aufk
JOIN
"[Your SAP Schema]".AFKO afko ON aufk.AUFNR = afko.AUFNR
WHERE
aufk.AUTYP = '10' -- Filter for Production Orders
AND aufk.ERDAT BETWEEN '[Start Date]' AND '[End Date]'
-- AND afko.WERKS IN ('[Your Plant]', '[Another Plant]') -- Optional: Filter by Plant
-- AND aufk.AUART IN ('[Your Order Type]') -- Optional: Filter by Order Type
),
Confirmations AS (
SELECT
o.ProductionOrder,
a.RUECK AS ConfirmationNumber,
a.RMZHL AS ConfirmationCounter,
TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
a.AUERU AS IsFinalConfirmation,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') ASC) as rn_asc,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') DESC) as rn_desc
FROM
Orders o
JOIN
"[Your SAP Schema]".AFRU a ON o.ProductionOrder = a.AUFNR
)
-- 1. Production Order Created
SELECT
o.ProductionOrder,
'Production Order Created' AS ActivityName,
TO_TIMESTAMP(o.CreationDate || o.CreationTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
UNION ALL
-- 2. Material Availability Checked (using 'Material Committed' status as proxy)
SELECT
o.ProductionOrder,
'Material Availability Checked' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0006' AND jcds.INACT != 'X'
UNION ALL
-- 3. Production Order Released
SELECT
o.ProductionOrder,
'Production Order Released' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0002' AND jcds.INACT != 'X'
UNION ALL
-- 4. Order Data Changed
SELECT
o.ProductionOrder,
'Order Data Changed' AS ActivityName,
TO_TIMESTAMP(aufk.AEDAT || aufk.AEZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".AUFK aufk ON o.ProductionOrder = aufk.AUFNR
WHERE aufk.AEDAT > o.CreationDate
UNION ALL
-- 5. Goods Issue Posted
SELECT
o.ProductionOrder,
'Goods Issue Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
c.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
c.ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc > 1 AND c.IsFinalConfirmation IS NULL
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
c.ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.IsFinalConfirmation = 'X'
UNION ALL
-- 9. Goods Receipt Posted
SELECT
o.ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
o.ProductionOrder,
'Order Technically Completed' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0045' AND jcds.INACT != 'X'
UNION ALL
-- 11. Order Settlement Ran
SELECT
o.ProductionOrder,
'Order Settlement Ran' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0046' AND jcds.INACT != 'X'
UNION ALL
-- 12. Order Cancellation Set
SELECT
o.ProductionOrder,
'Order Cancellation Set' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0076' AND jcds.INACT != 'X'; Stappen
- Controleer of SAP ECC PP, de verwerking van productieorders, bevestigingen, voorraadbeheer en controllinggegevens beschikbaar zijn. Controleer ook of de extractiegebruiker toestemming heeft om de benodigde applicatietabellen te lezen en aangepaste ABAP-rapporten uit te voeren.
- Maak in de ABAP Workbench, bijvoorbeeld via transactie SE38 of SE80, een apart uitvoerbaar rapport, zoals [Your custom report name]. Gebruik een selectiescherm met verplichte datumparameters, zoals [Start date] en [End date], en optionele filters voor [Company Code], [Production Plant], [Order Type], [Material] en [Production Order].
- Lees de kop- en stamgegevens van productieorders uit AUFK en de productietabellen die in je SAP ECC-systeem zijn geconfigureerd. Gebruik JCDS en de bijbehorende statusconfiguratie om expliciete statuswijzigingen vast te stellen, waaronder CRTD, vrijgegeven, technisch voltooid en statussen die verband houden met annulering. Ga er niet van uit dat een statuscode een gebeurtenis vertegenwoordigt, tenzij de statushistorie een wijziging met timestamp bevat.
- Lees de resultaten van materiaalbeschikbaarheidscontroles uit de gegevens voor beschikbaarheidscontroles van productieorders die in je systeem zijn geconfigureerd. Als de controle niet wordt opgeslagen in een tabel die betrouwbaar aan de order en timestamp kan worden gekoppeld, implementeer dan de SAP-enhancement, het applicatielogboek of de auditbron die door je SAP-team is goedgekeurd. Leid een controle niet alleen af uit het aanmaken of vrijgeven van een order.
- Lees de wijzigingshistorie van orders uit de geconfigureerde wijzigingsdocumentobjecten voor productieorders en de bijbehorende wijzigingsdocumenttabellen. Haal alleen belangrijke wijzigingen op, zoals geplande hoeveelheid, datums, stuklijst, routing of andere velden die door de proceseigenaar zijn goedgekeurd. Gebruik de timestamp van het wijzigingsdocument als EventTime.
- Lees materiaalafgiften en -ontvangsten uit de voorraadgegevens van materiaaldocumenten die in je systeem zijn geconfigureerd. Koppel boekingen aan de productieorder met behulp van de orderreferentie in de materiaaldocumentgegevens. Classificeer afgiften van componenten als Goods Issue Posted en ontvangsten van eindproducten als Goods Receipt Posted. Gebruik de boekingsdatum en -tijd als die beschikbaar zijn.
- Lees bevestigingsgegevens uit de bron voor productiebevestigingen die in je systeem is geconfigureerd. Sorteer bevestigingen op productieorder en timestamp van de bevestiging. Registreer First Confirmation Recorded voor de eerste bevestiging, Intermediate Confirmation Recorded voor in aanmerking komende niet-definitieve bevestigingen en Final Confirmation Recorded voor een bevestiging die expliciet als definitief is gemarkeerd of als definitief wordt aangemerkt volgens de geconfigureerde voltooiingslogica voor bevestigingen. Leid niet af dat een bevestiging definitief is omdat deze de laatste rij in een willekeurige query is.
- Lees gegevens over de uitvoering van afrekeningen uit de bron voor controlling-afrekeningen die in je systeem is geconfigureerd. Registreer Order Settlement Ran alleen als een uitvoeringsrecord, afrekeningsdocument of goedgekeurde statushistorie van de afrekening een expliciete timestamp bevat die aan de productieorder is gekoppeld.
- Maak voor elke opgehaalde activiteit één interne gebeurtenisregel. Vul ProductionOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ProductionPlant, ProductCode, PlannedQuantity, DeliveredQuantity, ActualStartDate en ActualEndDate in. Gebruik een vaste methode voor timestampconversie en behoud de tijdzone van het bronsysteem. Stel ActualStartDate in op de timestamp van de eerste bevestiging en ActualEndDate op die van de definitieve bevestiging, als deze gebeurtenissen bestaan.
- Sorteer de gebeurtenisregels op ProductionOrder en EventTime, met een vaste secundaire sortering voor gelijke timestamps. Verwijder alleen exact dubbele bronrecords, geen geldige herhaalde gebeurtenissen. Controleer of alle twaalf vereiste activiteitsnamen in het uitvoerschema staan en of elke uitvoerregel een case-ID, activiteitsnaam en timestamp van de gebeurtenis bevat.
- Schrijf het resultaat naar een bestand op de applicatieserver met een goedgekeurde ABAP-bestandsinterface en een geconfigureerd logisch bestandspad. Gebruik een scheidingsteken en tekencodering die zijn afgestemd op de ProcessMind-instellingen voor gegevensinvoer. Voeg een kopregel toe, plaats aanhalingstekens rond waarden met scheidingstekens en gebruik een vaste timestampnotatie, bij voorkeur YYYY-MM-DDThh:mm:ss.
- Download het bestand volgens de goedgekeurde SAP-procedure voor bestandsoverdracht, controleer het bestand onafhankelijk en upload het naar ProcessMind als event log. Stel ProductionOrder in als case-ID, ActivityName als activiteit en EventTime als timestamp van de gebeurtenis. Controleer of ProcessMind de regels ongewijzigd inleest en geen ontbrekende activiteiten hoeft af te leiden.
Configuratie
- Datumbereik: Gebruik voor de eerste analyse een voortschrijdend extractiebereik van drie tot zes maanden. Vergroot het bereik pas nadat de prestaties en het datavolume zijn beoordeeld. Neem een terugkijkperiode op voor orders die vóór de gekozen startdatum zijn aangemaakt, maar tijdens de analyseperiode nog actief waren.
- Selectiefilters: Ondersteun filters voor [Company Code], [Production Plant], [Order Type], [Material], [Production Order], orderstatus en aanmaak- of wijzigingsdatum. Configureer de exacte velden op basis van de SAP ECC-implementatie, omdat de beschikbare velden voor productieorders per release en aanpassing kunnen verschillen.
- Gebeurtenisbereik: Haal alle twaalf vereiste activiteiten op als expliciete gebeurtenisregels: Production Order Created, Material Availability Checked, Production Order Released, Order Data Changed, Goods Issue Posted, First Confirmation Recorded, Intermediate Confirmation Recorded, Final Confirmation Recorded, Goods Receipt Posted, Order Technically Completed, Order Settlement Ran en Order Cancellation Set.
- Timestampbeleid: Gebruik bij voorkeur de datum en tijd van de brongebeurtenis. Is alleen een datum beschikbaar, leg dan vast dat de precisie lager is en gebruik een vaste, geconfigureerde tijd. Presenteer geen verzonnen exacte tijd. Zet alle timestamps om naar de tijdzone die ProcessMind verwacht.
- Statusverwerking: Gebruik voor statusactiviteiten de statushistorie met timestamps. Configureer de koppeling tussen interne statuswaarden en bedrijfsactiviteiten op basis van de systeemstatusconfiguratie en goedkeuring van de proceseigenaar.
- Beschikbaarheidscontroles: Configureer de goedgekeurde bron voor de uitvoering van beschikbaarheidscontroles. Maak geen regel Material Availability Checked aan op basis van het aanmaken of vrijgeven van een order, reserveringen of een geslaagde goederenafgifte, tenzij de door het bedrijf goedgekeurde bron de controle expliciet registreert.
- Verwerking van bevestigingen: Configureer de regels waarmee eerste, tussentijdse en definitieve bevestigingen van elkaar worden onderscheiden. Een bevestiging mag alleen als definitief gelden als de bron dit expliciet aangeeft of als de geconfigureerde SAP-logica voor bevestigingen de voltooiing vaststelt.
- Hoeveelheden: Behoud waar mogelijk de maateenheid uit de bron. Leg bij geaggregeerde hoeveelheden vast of de aggregatie per order, materiaal, goederenbeweging, bevestiging of gebeurtenis plaatsvindt. DeliveredQuantity moet geboekte ontvangsten van eindproducten weergeven, niet alleen de bevestigde opbrengst, tenzij de proceseigenaar die interpretatie goedkeurt.
- LastDataUpdate: Vul dit veld met de timestamp van de extractie of de timestamp van de bronverversing. Gebruik voor elke regel in één run dezelfde, gedocumenteerde afspraak.
- Prestaties: Beperk het selectiebereik, selecteer alleen de benodigde velden, verwerk gegevens in pakketten en filter aan de databasekant. Voorkom geneste databaselezingen in grote lussen en maak of gebruik indexen alleen na goedkeuring via het SAP-databasebeheerproces. Schrijf de uitvoer stapsgewijs weg als het geheugengebruik een aandachtspunt is.
- Bestandsuitvoer: Configureer de map op de applicatieserver, de logische bestandsnaam, het scheidingsteken, de tekencodering, de decimaalnotatie, de timestampnotatie en de kopregel volgens de uploadspecificatie van ProcessMind. Neem geen inloggegevens op in het rapport of uitvoerbestand.
- Vereisten vooraf: Controleer of SAP ECC PP, voorraadbeheer, bevestigingen, statusbeheer van productieorders en gegevens over controlling-afrekeningen actief zijn, voor zover van toepassing. De benodigde autorisaties, goedkeuring voor maatwerkontwikkeling en transport, toegang tot bestanden op de applicatieserver en toegang tot de gegevensinvoer van ProcessMind moeten vóór uitvoering zijn geregeld.
- Systeemspecifieke configuratie: Controleer tabelnamen, velden, statuscodes, wijzigingsdocumentobjecten, bronnen voor bevestigingen, beschikbaarheidscontroles en afrekeningen in het doelsysteem SAP ECC. Gebruik [Configure based on your system] als de implementatie geen standaardbron biedt die betrouwbaar is.
a Voorbeeldquery abap
REPORT [Your custom report name].
* This executable ABAP report is a complete extraction framework for the twelve required activities.
* Replace only the marked system-specific source sections, selection parameters, and file configuration.
* Confirm every table and field against the target SAP ECC system before activation.
PARAMETERS p_from TYPE sydatum OBLIGATORY.
PARAMETERS p_to TYPE sydatum OBLIGATORY.
PARAMETERS p_file TYPE string OBLIGATORY DEFAULT '[Application server file path]'.
PARAMETERS p_src TYPE string OBLIGATORY DEFAULT '[SAP ECC system identifier]'.
SELECT-OPTIONS s_werks FOR [Production plant field].
SELECT-OPTIONS s_aufnr FOR [Production order field].
SELECT-OPTIONS s_auart FOR [Production order type field].
SELECT-OPTIONS s_bukrs FOR [Company code field].
TYPES: BEGIN OF ty_event,
productionorder TYPE string,
activityname TYPE string,
eventtime TYPE string,
sourcesystem TYPE string,
lastdataupdate TYPE string,
productionplant TYPE string,
productcode TYPE string,
plannedquantity TYPE string,
deliveredquantity TYPE string,
actualstartdate TYPE string,
actualenddate TYPE string,
END OF ty_event.
DATA gt_events TYPE STANDARD TABLE OF ty_event WITH EMPTY KEY.
DATA gs_event TYPE ty_event.
DATA gv_update_timestamp TYPE string.
DATA gv_line TYPE string.
GET TIME STAMP FIELD DATA(gv_update_ts).
gv_update_timestamp = |{ gv_update_ts TIMESTAMP = ISO }|.
* Production Order Created
SELECT [Production order field], [Production plant field], [Product field], [Planned quantity field], [Creation date field], [Creation time field]
FROM [Production order header table]
INTO TABLE @DATA(lt_created)
WHERE [Creation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks
AND [Production order type field] IN @s_auart
AND [Company code field] IN @s_bukrs.
LOOP AT lt_created ASSIGNING FIELD-SYMBOL(<created>).
CLEAR gs_event.
gs_event-productionorder = |{ <created>-[Production order field] }|.
gs_event-activityname = 'Production Order Created'.
gs_event-eventtime = |{ <created>-[Creation date field] } { <created>-[Creation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <created>-[Production plant field] }|.
gs_event-productcode = |{ <created>-[Product field] }|.
gs_event-plannedquantity = |{ <created>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Material Availability Checked
SELECT [Production order field], [Production plant field], [Product field], [Availability check date field], [Availability check time field]
FROM [Availability check source table]
INTO TABLE @DATA(lt_availability)
WHERE [Availability check date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_availability ASSIGNING FIELD-SYMBOL(<availability>).
CLEAR gs_event.
gs_event-productionorder = |{ <availability>-[Production order field] }|.
gs_event-activityname = 'Material Availability Checked'.
gs_event-eventtime = |{ <availability>-[Availability check date field] } { <availability>-[Availability check time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <availability>-[Production plant field] }|.
gs_event-productcode = |{ <availability>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Production Order Released
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field], [Planned quantity field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_released)
WHERE [Status field] = '[Released status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_released ASSIGNING FIELD-SYMBOL(<released>).
CLEAR gs_event.
gs_event-productionorder = |{ <released>-[Production order field] }|.
gs_event-activityname = 'Production Order Released'.
gs_event-eventtime = |{ <released>-[Status change date field] } { <released>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <released>-[Production plant field] }|.
gs_event-productcode = |{ <released>-[Product field] }|.
gs_event-plannedquantity = |{ <released>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Data Changed
SELECT [Production order field], [Change date field], [Change time field], [Production plant field], [Product field], [Changed field name]
FROM [Production order change document source table]
INTO TABLE @DATA(lt_changed)
WHERE [Change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Changed field name] IN ('[Planned quantity field]', '[Basic start date field]', '[Basic finish date field]', '[BOM field]', '[Routing field]').
LOOP AT lt_changed ASSIGNING FIELD-SYMBOL(<changed>).
CLEAR gs_event.
gs_event-productionorder = |{ <changed>-[Production order field] }|.
gs_event-activityname = 'Order Data Changed'.
gs_event-eventtime = |{ <changed>-[Change date field] } { <changed>-[Change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <changed>-[Production plant field] }|.
gs_event-productcode = |{ <changed>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Issue Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gi)
WHERE [Movement type field] IN ('[Goods issue movement type 1]', '[Goods issue movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gi ASSIGNING FIELD-SYMBOL(<gi>).
CLEAR gs_event.
gs_event-productionorder = |{ <gi>-[Production order field] }|.
gs_event-activityname = 'Goods Issue Posted'.
gs_event-eventtime = |{ <gi>-[Posting date field] } { <gi>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gi>-[Production plant field] }|.
gs_event-productcode = |{ <gi>-[Product field] }|.
gs_event-deliveredquantity = |{ <gi>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* First Confirmation Recorded
SELECT [Production order field], [Confirmation date field], [Confirmation time field], [Production plant field], [Product field], [Confirmed quantity field]
FROM [Production confirmation source table]
INTO TABLE @DATA(lt_confirmations)
WHERE [Confirmation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
SORT lt_confirmations BY [Production order field] [Confirmation date field] [Confirmation time field].
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<confirmation>) GROUP BY <confirmation>-[Production order field] ASSIGNING FIELD-SYMBOL(<confirmation_group>).
LOOP AT GROUP <confirmation_group> ASSIGNING FIELD-SYMBOL(<first_confirmation>).
CLEAR gs_event.
gs_event-productionorder = |{ <first_confirmation>-[Production order field] }|.
gs_event-activityname = 'First Confirmation Recorded'.
gs_event-eventtime = |{ <first_confirmation>-[Confirmation date field] } { <first_confirmation>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <first_confirmation>-[Production plant field] }|.
gs_event-productcode = |{ <first_confirmation>-[Product field] }|.
gs_event-actualstartdate = gs_event-eventtime.
APPEND gs_event TO gt_events.
EXIT.
ENDLOOP.
ENDLOOP.
* Intermediate Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<intermediate>) GROUP BY <intermediate>-[Production order field] ASSIGNING FIELD-SYMBOL(<intermediate_group>).
DATA(lv_intermediate_index) = 0.
DATA(lv_intermediate_count) = GROUP SIZE.
LOOP AT GROUP <intermediate_group> ASSIGNING FIELD-SYMBOL(<intermediate_row>).
lv_intermediate_index = lv_intermediate_index + 1.
IF lv_intermediate_index < lv_intermediate_count AND <intermediate_row>-[Final confirmation indicator field] <> '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <intermediate_row>-[Production order field] }|.
gs_event-activityname = 'Intermediate Confirmation Recorded'.
gs_event-eventtime = |{ <intermediate_row>-[Confirmation date field] } { <intermediate_row>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <intermediate_row>-[Production plant field] }|.
gs_event-productcode = |{ <intermediate_row>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDIF.
ENDLOOP.
ENDLOOP.
* Final Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<final>) WHERE [Final confirmation indicator field] = '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <final>-[Production order field] }|.
gs_event-activityname = 'Final Confirmation Recorded'.
gs_event-eventtime = |{ <final>-[Confirmation date field] } { <final>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <final>-[Production plant field] }|.
gs_event-productcode = |{ <final>-[Product field] }|.
gs_event-actualenddate = gs_event-eventtime.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Receipt Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gr)
WHERE [Movement type field] IN ('[Goods receipt movement type 1]', '[Goods receipt movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gr ASSIGNING FIELD-SYMBOL(<gr>).
CLEAR gs_event.
gs_event-productionorder = |{ <gr>-[Production order field] }|.
gs_event-activityname = 'Goods Receipt Posted'.
gs_event-eventtime = |{ <gr>-[Posting date field] } { <gr>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gr>-[Production plant field] }|.
gs_event-productcode = |{ <gr>-[Product field] }|.
gs_event-deliveredquantity = |{ <gr>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Technically Completed
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_teco)
WHERE [Status field] = '[Technically completed status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_teco ASSIGNING FIELD-SYMBOL(<teco>).
CLEAR gs_event.
gs_event-productionorder = |{ <teco>-[Production order field] }|.
gs_event-activityname = 'Order Technically Completed'.
gs_event-eventtime = |{ <teco>-[Status change date field] } { <teco>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <teco>-[Production plant field] }|.
gs_event-productcode = |{ <teco>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Settlement Ran
SELECT [Production order field], [Settlement date field], [Settlement time field], [Production plant field], [Product field]
FROM [Order settlement source table]
INTO TABLE @DATA(lt_settlement)
WHERE [Settlement date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_settlement ASSIGNING FIELD-SYMBOL(<settlement>).
CLEAR gs_event.
gs_event-productionorder = |{ <settlement>-[Production order field] }|.
gs_event-activityname = 'Order Settlement Ran'.
gs_event-eventtime = |{ <settlement>-[Settlement date field] } { <settlement>-[Settlement time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <settlement>-[Production plant field] }|.
gs_event-productcode = |{ <settlement>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Cancellation Set
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_cancelled)
WHERE [Status field] IN ('[Cancellation status code]', '[Deletion status code]')
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_cancelled ASSIGNING FIELD-SYMBOL(<cancelled>).
CLEAR gs_event.
gs_event-productionorder = |{ <cancelled>-[Production order field] }|.
gs_event-activityname = 'Order Cancellation Set'.
gs_event-eventtime = |{ <cancelled>-[Status change date field] } { <cancelled>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <cancelled>-[Production plant field] }|.
gs_event-productcode = |{ <cancelled>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
SORT gt_events BY productionorder eventtime activityname.
DELETE ADJACENT DUPLICATES FROM gt_events COMPARING productionorder activityname eventtime productionplant productcode.
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'The application server output file could not be opened' TYPE 'E'.
ENDIF.
TRANSFER 'ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProductionPlant,ProductCode,PlannedQuantity,DeliveredQuantity,ActualStartDate,ActualEndDate' TO p_file.
LOOP AT gt_events INTO gs_event.
gv_line = |{ gs_event-productionorder },{ gs_event-activityname },{ gs_event-eventtime },{ gs_event-sourcesystem },{ gs_event-lastdataupdate },{ gs_event-productionplant },{ gs_event-productcode },{ gs_event-plannedquantity },{ gs_event-deliveredquantity },{ gs_event-actualstartdate },{ gs_event-actualenddate }|.
TRANSFER gv_line TO p_file.
ENDLOOP.
CLOSE DATASET p_file.
MESSAGE |Event log written to { p_file }| TYPE 'S'. Klaar om te beginnen?
Gebruik deze template om je data voor te bereiden en aan de slag te gaan met een efficiënter productieplanningsproces. Ontdek wat de data laat zien en verbeter je bedrijfsvoering.
Verbeter nu je productieplanning en verhoog de efficiëntie
Spoor inefficiënties op, verkort de doorlooptijd met 30% en haal je doelen.
Geen creditcard nodig. Begin vandaag met optimaliseren.