Datatemplate voor transportmanagement
Datatemplate voor transportmanagement
- Aanbevolen attributen om te verzamelen
- Belangrijke activiteiten om te volgen
- Richtlijnen voor data-extractie uit SAP Transportation Management
Attributen voor transportmanagement
| Naam | Beschrijving | ||
|---|---|---|---|
| Activiteitsnaam ActivityName | De naam van een specifieke bedrijfsgebeurtenis of stap in het transportproces. | ||
| Beschrijving De activiteitsnaam beschrijft één taak of mijlpaal in de levenscyclus van een zending, zoals ‘Zending gepland’, ‘Goederen opgehaald’ of ‘Goederen geleverd’. Deze activiteiten vormen de knooppunten op de ontdekte proceskaart. Door de volgorde en frequentie van activiteiten te analyseren, kun je het standaardproces, afwijkingen, bottlenecks en herstelwerk opsporen. Dit vormt de basis voor procesontdekking en conformancechecks in transportmanagement. Waarom dit belangrijk is Dit attribuut beschrijft de stappen in het transportproces en maakt het mogelijk het volledige verloop van een zending te visualiseren en analyseren. Waar vind je dit? Dit wordt meestal afgeleid uit eventcodes of statuswijzigingen die zijn vastgelegd in de handler voor uitvoeringstracking van SAP TM. De data kan afkomstig zijn uit tabellen met statuswijzigingen van bedrijfsobjecten of uit specifieke eventberichten. Voorbeelden Zending geplandVervoerder toegewezenGoederen opgehaaldGoederen geleverdBewijs van levering ontvangen | |||
| Eventtijd EventTime | De timestamp die aangeeft wanneer een specifieke activiteit of gebeurtenis plaatsvond. | ||
| Beschrijving De eventtijd geeft de exacte datum en tijd van elke activiteit in het transportproces. Met deze tijdsgegevens bereken je doorlooptijden, duren en wachttijden tussen processtappen. Bij analyses gebruik je dit attribuut om events in de juiste volgorde te zetten, een chronologisch logboek op te bouwen en alle tijdgebonden prestaties te analyseren. Zo kun je vertragingen opsporen, de procesefficiëntie meten en prestaties vergelijken met planningen of service level agreements. Waarom dit belangrijk is De timestamp is nodig om events chronologisch te ordenen en prestatiemaatstaven te berekenen, zoals doorlooptijden en tijdige levering. Waar vind je dit? Afkomstig uit de tabellen van de eventhandler in SAP TM, zoals /SAPTRX/EH_EVMSG. Deze bevatten timestamps van gemelde events. Voorbeelden 2023-04-15T10:00:00Z2023-04-16T14:30:00Z2023-04-20T09:15:00Z | |||
| Zending ShipmentId | De unieke identificatiecode voor één goederenverplaatsing. Deze vormt de centrale case voor de analyse. | ||
| Beschrijving Het Shipment ID is de primaire sleutel waarmee alle bijbehorende transportactiviteiten en events worden gegroepeerd. Het staat voor één volledig transportproces, van de eerste aanvraag tot het uiteindelijke bewijs van levering en de betaling. Bij process mining gebruik je dit attribuut om de caseweergave op te bouwen. Analisten kunnen zo het volledige traject van elke zending volgen. Ook kun je procesvarianten, doorlooptijden en resultaten per zending analyseren en krijg je een volledig beeld van de transportprestaties. Waarom dit belangrijk is Dit is de belangrijkste case-ID. Hiermee koppel je alle events en datapunten aan een specifieke transportorder, zodat je het volledige proces kunt analyseren. Waar vind je dit? Deze identificatiecode is het nummer van de Freight Order of Freight Booking in SAP TM. Je vindt het in tabellen zoals /SCMTMS/D_TORROT en /SCMTMS/D_TRQROT. Voorbeelden 610000432161000056786100009876 | |||
| Eindtijd EndTime | De timestamp die aangeeft wanneer een specifieke activiteit is afgerond. | ||
| Beschrijving StartTime geeft aan wanneer een event begint; EndTime markeert het einde. Dit is vooral handig voor activiteiten met een bepaalde duur, zoals ‘Customs Clearance’ of ‘Goods Loading’. Het verschil tussen EndTime en StartTime is de verwerkingstijd van de activiteit. Met zowel een begin- als eindtijd kun je de duur van activiteiten nauwkeuriger analyseren en verwerkingstijd onderscheiden van wachttijd. Zo zie je precies waar inefficiënties ontstaan: tijdens de uitvoering van een taak of bij de overdracht tussen taken. Waarom dit belangrijk is Maakt het mogelijk de verwerkingstijd van activiteiten nauwkeurig te berekenen en actieve werktijd te onderscheiden van wachttijd tussen events. Waar vind je dit? Net als StartTime komt deze waarde uit de tabellen van de eventhandler. Mogelijk hoort er een afzonderlijk event ‘completed’ bij de activiteit. Voorbeelden 2023-04-15T11:30:00Z2023-04-16T15:00:00Z2023-04-20T09:45:00Z | |||
| Gewenste leverdatum RequestedDeliveryDate | De datum en tijd waarop de klant de levering wil ontvangen, of die in de verkooporder zijn vastgelegd. | ||
| Beschrijving De gewenste leverdatum is de uiterste datum voor de activiteit 'Goederen geleverd'. Dit is de belangrijkste maatstaf voor de prestaties van tijdige levering. Deze datum is nodig om de KPI 'Percentage tijdige leveringen' te berekenen. Door de werkelijke leveringstimestamp te vergelijken met de gewenste datum, kun je bepalen of de afgesproken serviceniveaus zijn gehaald. Afwijkingen kunnen wijzen op terugkerende oorzaken van vertraging, zoals problemen met vervoerders, vertragingen in de planning of oponthoud bij de douane. Waarom dit belangrijk is Dit is de basis voor het meten van tijdige leveringen, een belangrijke KPI voor klanttevredenheid en goede bedrijfsvoering. Waar vind je dit? Deze datum wordt meestal overgenomen uit de voorafgaande verkooporder of voorraadtransportorder in SAP ERP. De datum en tijd staan in de velden van de Freight Unit of Freight Order. Voorbeelden 2023-05-20T17:00:00Z2023-06-01T12:00:00Z2023-06-15T23:59:59Z | |||
| Naam vervoerder CarrierName | De naam van de vervoerder of logistieke dienstverlener die aan de zending is toegewezen. | ||
| Beschrijving De naam van de vervoerder geeft aan welk bedrijf verantwoordelijk is voor het fysieke vervoer van de goederen. Dit is een belangrijke dimensie voor prestatieanalyses, omdat vervoerders kunnen verschillen in serviceniveau, kosten en betrouwbaarheid. Bij process mining gebruik je dit attribuut om prestaties van verschillende vervoerders te vergelijken. Je kunt scorecards per vervoerder maken, tijdige leveringen per vervoerder volgen, kosten vergelijken en nagaan met welke vervoerders vertragingen of geschillen het vaakst voorkomen. Deze informatie helpt bij strategisch vervoerdersbeheer en inkoop. Waarom dit belangrijk is Hiermee kun je de prestaties van vervoerders vergelijken. Dat helpt bij het kiezen van vervoerders en het beheersen van kosten en serviceniveaus. Waar vind je dit? Deze informatie staat in het Freight Order- of Freight Booking-document. De koppeling loopt via de functie van de vervoerder als zakenpartner. Voorbeelden DHL ExpressFedEx FreightMaersk LineUnion Pacific Railroad | |||
| Op tijd geleverd IsOnTimeDelivery | Een booleaanse vlag die aangeeft of de goederen op of vóór de gewenste leverdatum zijn afgeleverd. | ||
| Beschrijving Dit berekende attribuut vergelijkt de timestamp van de activiteit 'Goederen geleverd' met de 'Gewenste leverdatum'. De waarde is waar als de levering op tijd of eerder plaatsvond, en onwaar als deze te laat was. Dit attribuut maakt prestatieanalyse eenvoudiger doordat elke zending een duidelijke uitkomst krijgt. Het vormt de basis voor het dashboard Prestaties van tijdige levering en de bijbehorende KPI. Analisten kunnen eenvoudig te late zendingen filteren en oorzaakanalyses uitvoeren om te achterhalen waardoor de prestaties achterblijven. Waarom dit belangrijk is Meet rechtstreeks of leverafspraken zijn nagekomen en maakt het eenvoudiger om de KPI voor tijdige levering te berekenen en weer te geven. Waar vind je dit? Dit attribuut wordt niet opgeslagen in SAP TM. Je moet het tijdens de datatransformatie berekenen door de timestamp van de werkelijke levering te vergelijken met de gewenste leverdatum. Voorbeelden truefalse | |||
| Totale vrachtkosten TotalFreightCost | De totale berekende of gefactureerde kosten van de zending. | ||
| Beschrijving De totale vrachtkosten laten zien wat een zending financieel kost. Dit kan het bedrag zijn dat het transportmanagementsysteem berekent, of het definitieve bedrag op de factuur van de vervoerder na afrekening. Met dit attribuut voeg je een financiële dimensie toe aan de procesanalyse. Analisten kunnen de duurste procesvarianten vinden, de kosten van vertragingen of omleidingen berekenen en de kosteneffectiviteit van vervoerders en vervoerswijzen vergelijken. Dit attribuut is belangrijk voor dashboards over transportuitgaven en kosten per klant. Waarom dit belangrijk is Voegt een financiële dimensie toe aan het proces. Zo kun je transportuitgaven, kosten per zending en de financiële gevolgen van procesinefficiënties analyseren. Waar vind je dit? Afkomstig uit het Freight Settlement Document in SAP TM, nadat de kosten zijn berekend. Je vindt deze informatie onder meer in tabellen zoals /SCMTMS/D_SFIRHD. Voorbeelden 250.751200.005430.50 | |||
| Vervoerswijze ModeOfTransport | De manier waarop de zending wordt vervoerd, bijvoorbeeld over de weg, per spoor, door de lucht of over zee. | ||
| Beschrijving Dit attribuut geeft de vervoerswijze aan. Elke vervoerswijze heeft eigen kosten, transittijden en processtappen. Een internationale luchtvrachtzending omvat bijvoorbeeld douaneafhandeling, terwijl dat bij een binnenlandse vrachtwagenzending anders ligt. Door processen per vervoerswijze te analyseren, kun je verbeteringen gericht aanpakken. Dit is ook belangrijk voor kostenanalyses, bijvoorbeeld om premium vracht zoals spoedluchtvracht te vergelijken met standaard, voordeliger vervoer. Zo krijg je inzicht in de transportuitgaven en houd je die beter onder controle. Waarom dit belangrijk is Hiermee kun je kosten, doorlooptijden en procesverschillen per vervoerswijze analyseren. Dat helpt bij kostenoptimalisatie en maakt het gebruik van premium vracht zichtbaar. Waar vind je dit? Dit is een belangrijk veld in de Freight Order of Freight Booking, vaak aangeduid als Transportation Mode of MOT. Voorbeelden 01 (Weg)02 (Spoor)04 (Lucht)05 (Zee) | |||
| Betwist IsDisputed | Een booleaanse vlag die aangeeft of de vrachtfactuur voor de zending tot een geschil heeft geleid. | ||
| Beschrijving Deze berekende vlag geeft aan of er een geschil over de vrachtkosten van een zending is. De waarde is waar als er een geschil is aangemaakt, en onwaar als dat niet zo is. Je kunt dit afleiden uit de activiteit 'Geschil over vracht aangemaakt' of uit een ingevulde 'Reden van geschil'. Dit attribuut maakt analyse van het afrekenproces voor vracht eenvoudiger. Je kunt er de KPI voor het percentage afwijkingen in vrachtfacturen mee berekenen en alle betwiste zendingen mee filteren. Analisten kunnen vervolgens zoeken naar gemeenschappelijke kenmerken, zoals vervoerders, routes of kostensoorten, om de oorzaken van factuurfouten te vinden. Waarom dit belangrijk is Maakt problematische vrachtbetalingen zichtbaar en helpt het geschilpercentage snel te berekenen en de oorzaken van factuurfouten te achterhalen. Waar vind je dit? Dit attribuut wordt niet opgeslagen in SAP TM. Je moet het berekenen op basis van het bestaan van een geschil-case die aan het Freight Settlement Document is gekoppeld. Voorbeelden truefalse | |||
| Bronsysteem SourceSystem | Het systeem waaruit de eventdata afkomstig is. | ||
| Beschrijving Dit attribuut geeft aan uit welk systeem de data afkomstig is, bijvoorbeeld SAP TM, SAP ERP of een extern vervoerdersportaal. Zo zie je waar de data vandaan komt en hoe systemen met elkaar zijn verbonden. In een complexe systeemomgeving is het bronsysteem belangrijk voor datavalidatie, het oplossen van integratieproblemen en inzicht in de bijdrage van verschillende systemen aan het proces. Je kunt er bijvoorbeeld mee zien of een event door een intern systeem of door een externe logistieke dienstverlener is gemeld. Waarom dit belangrijk is Geeft aan waar de data vandaan komt. Dit is belangrijk voor datagovernance, het oplossen van problemen en inzicht in de procescoördinatie tussen systemen. Waar vind je dit? Deze informatie staat vaak in het systeemlogboek of kan worden afgeleid uit de interface of gebruiker die de gegevens heeft ingevoerd. Voorbeelden SAP_TM_P01SAP_ERP_E01CARRIER_PORTAL_XYZ | |||
| Gebruikersnaam UserName | De gebruikers-ID of naam van de persoon die een activiteit heeft uitgevoerd. | ||
| Beschrijving Dit attribuut geeft aan welke medewerker of gebruiker verantwoordelijk is voor een handmatige activiteit, zoals ‘Zending gepland’ of ‘Factuur gecontroleerd’. Zo koppel je processtappen aan de personen of teams die ze hebben uitgevoerd. Door activiteiten per gebruiker te analyseren, krijg je inzicht in de werkverdeling, benodigde training en medewerkers die goed presteren. Dit is ook belangrijk voor compliance en audits: je kunt duidelijk terugzien wie wat en wanneer heeft gedaan. Zo worden verschillen zichtbaar in de manier waarop gebruikers dezelfde taak uitvoeren. Waarom dit belangrijk is Koppelt handmatige processtappen aan specifieke gebruikers. Zo kun je de werkverdeling, individuele prestaties en trainingsmogelijkheden analyseren. Waar vind je dit? Meestal te vinden in de wijzigingslog of documentkop-tabellen van transportdocumenten, bijvoorbeeld in de velden 'Gemaakt door' of 'Gewijzigd door' (zoals ERNAM, AENAM). Voorbeelden CB998030SMITHJPLANNER_EU | |||
| Geplande ophaaldatum ScheduledPickupDate | De geplande datum en tijd waarop de vervoerder de goederen bij het verzendpunt ophaalt. | ||
| Beschrijving De geplande ophaaldatum is het afgesproken moment waarop het fysieke transport begint. Dit is een belangrijke mijlpaal in de uitvoeringsfase van de zending. Met dit attribuut kun je controleren of het eerste deel van de reis op tijd begint. Vergelijk de geplande ophaaltijd met de timestamp van de werkelijke gebeurtenis 'Goederen opgehaald' om ophaalvertragingen te berekenen. Zo kun je de prestaties en betrouwbaarheid van zowel de verzendlocatie als de vervoerder beoordelen. Waarom dit belangrijk is Dit is de basis voor het meten van tijdige ophaling en helpt vertragingen aan het begin van het fysieke transport op te sporen. Waar vind je dit? Dit is een geplande datum en tijd die is opgeslagen in de stopvolgorde van de Freight Order in SAP TM. Voorbeelden 2023-05-18T09:00:00Z2023-05-30T14:00:00Z2023-06-12T10:30:00Z | |||
| Laatste data-update LastDataUpdate | De timestamp van de meest recente data-extractie of -verversing voor de process mining-dataset. | ||
| Beschrijving Dit attribuut geeft aan hoe actueel de geanalyseerde data is. Het toont de datum en tijd waarop de data voor het laatst uit bronsystemen zoals SAP TM is opgehaald en in de process mining-tool is geladen. Deze metadata is belangrijk voor elk dashboard of elke analyse, omdat je hiermee kunt beoordelen hoe actueel de inzichten zijn. Zo zie je of je realtime informatie bekijkt of een momentopname uit een eerdere periode. Dat is nodig om op tijd onderbouwde beslissingen te nemen. Waarom dit belangrijk is Geeft belangrijke context over de actualiteit van de data, zodat duidelijk is hoe recent de analyse is. Waar vind je dit? Dit wordt meestal tijdens het laden van de data gegenereerd en opgeslagen door de ETL-tool (Extract, Transform, Load) of de datapijplijn. Voorbeelden 2023-10-27T08:00:00Z2023-10-26T08:00:00Z | |||
| Land van bestemming DestinationCountry | Het land waar de zending wordt afgeleverd. | ||
| Beschrijving Dit attribuut geeft het land van bestemming van de zending aan. Het wordt afgeleid van het adres van de laatste afleverlocatie. Net als bij het land van herkomst helpt analyse per bestemmingsland om logistieke uitdagingen per regio te begrijpen. Zo zie je bijvoorbeeld welke bestemmingen vaker te maken hebben met vertragingen of hogere kosten voor de laatste kilometer. Deze informatie helpt bij het optimaliseren van het netwerk, het bepalen van realistische levertijden en het beheren van compliance rond internationale handel. Waarom dit belangrijk is Hiermee kun je procesprestaties per bestemming analyseren en problemen met specifieke afleverregio’s, douaneautoriteiten of vervoerders voor de laatste kilometer opsporen. Waar vind je dit? Dit maakt deel uit van de adresgegevens van de bestemmingslocatie van de laatste stop in de Freight Order. Voorbeelden FRCAGBJP | |||
| Land van herkomst OriginCountry | Het land waar de zending vandaan komt. | ||
| Beschrijving Dit attribuut geeft het land aan waar het transport begint. Het wordt afgeleid van het adres van de eerste ophaallocatie. Door processen per land van herkomst te analyseren, kun je regionale verschillen in prestaties, kosten en complexiteit vinden. Zo wordt zichtbaar in welke landen de douaneafhandeling langer duurt, vervoerders meer kosten of vertragingen vaker voorkomen. Deze geografische uitsplitsing is belangrijk voor het beheer van een wereldwijde toeleveringsketen en voor logistieke strategieën per regio. Waarom dit belangrijk is Maakt geografische analyse van zendingprestaties mogelijk en helpt regionale bottlenecks, kostenfactoren en procesverschillen te vinden. Waar vind je dit? Dit maakt deel uit van de adresgegevens van de bronlocatie van de eerste stop in de Freight Order. Voorbeelden DEUSCNMX | |||
| Reden van geschil DisputeReason | De reden die wordt opgegeven wanneer een vrachtfactuur wordt betwist. | ||
| Beschrijving Als de factuur van een vervoerder afwijkt van de verwachte kosten die SAP TM heeft berekend, wordt er een geschil aangemaakt. Dit attribuut legt de reden voor het verschil vast, bijvoorbeeld 'Onjuist tarief', 'Dubbele factuur' of 'Niet-goedgekeurde bijkomende kosten'. Analyse van geschilredenen is belangrijk voor het dashboard over fouten en geschillen in vrachtfacturen. Hiermee kun je de oorzaken van factuurfouten achterhalen, zoals problemen met stamgegevens, fouten van vervoerders of tekortkomingen in de bedrijfsvoering. Zo kan de organisatie gericht actie ondernemen om geschillen te verminderen, de betalingscyclus te versnellen en administratief werk terug te dringen. Waarom dit belangrijk is Laat zien waardoor fouten in vrachtfacturen ontstaan. Zo kun je gericht geschillen over facturen verminderen en het afrekenproces verbeteren. Waar vind je dit? Deze informatie wordt vastgelegd in de geschilbeheer-case die bij een Freight Settlement Document hoort. Voorbeelden Tarief komt niet overeenOnjuist gewichtNiet-goedgekeurde liggeldkostenDubbele factuur | |||
| Reden van vertraging DelayReason | Een code of tekst die de reden voor een vertraging van de zending uitlegt. | ||
| Beschrijving Het attribuut Reden van vertraging legt vast waardoor de planning is afgeweken, bijvoorbeeld door 'Slecht weer', 'Oponthoud bij de douane' of 'Vertraging bij de vervoerder'. Deze informatie wordt vaak handmatig gemeld of via een gebeurtenisbericht van de vervoerder aangeleverd. Dit attribuut helpt bij oorzaakanalyse. Je ziet niet alleen dat een zending te laat was, maar ook waarom. Door redenen voor vertraging te categoriseren en te tellen, kun je terugkerende problemen vinden en verbeteringen richten op de oorzaken met de meeste impact. Denk aan betere communicatie met vervoerders of routes die files vermijden. Waarom dit belangrijk is Maakt duidelijk waarom zendingen vertraging oplopen. Zo kun je oorzaken analyseren, uitzonderingen verminderen en tijdige leveringen verbeteren. Waar vind je dit? Dit kan worden vastgelegd als gebeurteniscode en reden in het eventmanagementframework van SAP TM wanneer de gebeurtenis 'Aankomst/vertrek vertraagd' wordt gemeld. Voorbeelden WEATHER_DELAYCUSTOMS_INSPECTIONPORT_CONGESTIONMECHANICAL_FAILURE | |||
| Zendingstatus ShipmentStatus | De actuele algemene status van de zending op het moment dat de data wordt geëxtraheerd. | ||
| Beschrijving De zendingstatus laat zien waar de zending zich in de levenscyclus bevindt, bijvoorbeeld 'In planning', 'In uitvoering', 'Geleverd' of 'Geannuleerd'. De status geeft de laatst bekende toestand van de case weer. Met dit attribuut kun je zendingen filteren en analyseren op basis van de uitkomst. Een analist kan bijvoorbeeld alleen afgeronde zendingen bekijken om de totale doorlooptijd te meten, of alleen geannuleerde zendingen analyseren om de oorzaken van annuleringen te achterhalen. Zo krijg je belangrijke context bij het interpreteren van de processtroom. Waarom dit belangrijk is Geeft per zending de algemene uitkomst weer. Zo kun je filteren en analyseren of een zending is afgerond, geannuleerd of nog onderweg is. Waar vind je dit? Dit is het algemene statusveld in de kop van het Freight Order- of Freight Booking-document in SAP TM. Voorbeelden In planningKlaar voor transportIn uitvoeringUitgevoerdGeannuleerd | |||
Activiteiten voor transportmanagement
| Activiteit | Beschrijving | ||
|---|---|---|---|
| Betaling verwerkt | Deze laatste activiteit bevestigt dat de vervoerder is betaald voor de transportdiensten. Dit event vindt meestal plaats in het gekoppelde ERP-systeem, nadat de gecontroleerde factuur uit SAP TM is ontvangen. | ||
| Waarom dit belangrijk is Dit markeert het werkelijke einde van de volledige transportlevenscyclus. Je hebt deze informatie nodig om de totale procesduur en KPI’s voor tijdige betaling te meten. Waar vind je dit? Deze informatie staat in het ERP-systeem, bijvoorbeeld S/4HANA Finance. Je kunt de betaling via het factuurnummer koppelen aan het Freight Settlement Document. Een statusupdate kan naar SAP TM worden teruggestuurd. Anders haal je de data op uit ERP-tabellen zoals BKPF en BSEG. Vastleggen Haal de vereffeningsdatum van de betaling op uit het ERP-systeem en koppel deze via de factuurreferentie aan de zending. Gebeurtenistype explicit | |||
| Bewijs van levering ontvangen | Deze activiteit vindt plaats wanneer het ondertekende Proof of Delivery-document (POD) van de vervoerder is ontvangen en in het systeem is vastgelegd. Hiermee bevestigt de ontvanger dat de goederen zijn aangekomen. | ||
| Waarom dit belangrijk is Je hebt het POD nodig voordat je de klant kunt factureren en de vrachtkosten met de vervoerder kunt afrekenen. Vertragingen bij deze stap hebben meteen gevolgen voor de cash-to-cash-cyclus. Waar vind je dit? Je kunt dit meestal afleiden uit een statuswijziging van de Freight Order, bijvoorbeeld wanneer de POD-status verandert in ‘Received’. De timestamp van de activiteit is het moment waarop dit statusveld is gewijzigd. Vastleggen Leg de timestamp vast waarop de status van het Proof of Delivery in de Freight Order wordt bijgewerkt naar ‘Received’. Gebeurtenistype inferred | |||
| Goederen geleverd | Deze activiteit geeft aan dat de zending op de eindbestemming is aangekomen en het fysieke transport is afgerond. Je legt dit vast wanneer de vervoerder meldt dat de goederen op de locatie van de ontvanger zijn gelost. | ||
| Waarom dit belangrijk is Dit is de belangrijkste mijlpaal voor het meten van de prestaties van tijdige levering en klanttevredenheid. Meestal vormt dit ook de aanleiding voor facturering en afrekening. Waar vind je dit? Je legt dit vast als een uitvoeringsevent ‘Arrival at Destination’ of ‘Unloading End’ in SAP TM. Daarmee wordt de uitvoeringsstatus van de Freight Order bijgewerkt. De vervoerder levert deze data vaak aan. Vastleggen Gebruik de timestamp van het gemelde uitvoeringsevent ‘Arrival at Destination’ voor de laatste stop van de Freight Order. Gebeurtenistype explicit | |||
| Goederen opgehaald | Deze activiteit markeert het begin van het fysieke transport van de goederen. Je legt dit vast wanneer de vervoerder meldt dat de goederen zijn geladen en de locatie van de verzender hebben verlaten. | ||
| Waarom dit belangrijk is Dit is een belangrijke mijlpaal in de uitvoering en markeert het begin van het transport. Je hebt deze informatie nodig om leveringen op tijd te volgen en een actueel beeld van zendingen te geven. Waar vind je dit? Dit event wordt meestal vastgelegd in SAP Event Management, dat is geïntegreerd met SAP TM, als een event ‘Departure’ of ‘Loading End’. Het werkt de uitvoeringsstatus van de Freight Order bij. Je kunt het ook rechtstreeks in de Freight Order vastleggen. Vastleggen Gebruik de timestamp van het gemelde uitvoeringsevent ‘Departure’ voor de vertrekplaats van de Freight Order. Gebeurtenistype explicit | |||
| Transportaanvraag ontvangen | Deze activiteit markeert het begin van het transportproces: er wordt een transportbehoefte aangemaakt. In SAP TM wordt dit meestal vastgelegd bij het aanmaken van een Forwarding Order (FWO) of een Order-based Transportation Requirement (OTR). | ||
| Waarom dit belangrijk is Dit is de belangrijkste Start Event voor het volledige verzendproces. De tijd tussen deze activiteit en het afronden van de planning is een belangrijke KPI voor de efficiëntie van de planning. Waar vind je dit? Dit event wordt vastgelegd wanneer een Forwarding Order (documenttype FWO) of een ander document voor een transportbehoefte wordt aangemaakt. De aanmaaktimestamp in de kopteksttabel, zoals /SCMTMS/D_TORROT, geldt als eventtijd. Vastleggen Leg de aanmaakdatum en -tijd van de Forwarding Order of het document voor de transportbehoefte vast. Gebeurtenistype explicit | |||
| Vervoerder toegewezen | Deze activiteit geeft aan dat een specifieke transportdienstverlener, oftewel vervoerder, is gekozen en aan de zending is toegewezen. Dit kan handmatig gebeuren, via automatische planning of via een aanbesteding. | ||
| Waarom dit belangrijk is De toewijzing van een vervoerder is een belangrijke stap voordat een zending kan worden bevestigd en uitgevoerd. Door dit te volgen, kun je het selectieproces van vervoerders analyseren en zorgen dat boekingen op tijd worden bevestigd. Waar vind je dit? Je legt dit vast wanneer het vervoerdersveld (partij met de rol ‘Carrier’) wordt ingevuld in de Freight Order of Freight Booking. Bij een aanbesteding gebeurt dit wanneer een Freight Request for Quotation wordt gegund. Vastleggen Bepaal de timestamp waarop de partnerfunctie van de vervoerder voor het eerst wordt ingevuld of bevestigd in de Freight Order. Gebeurtenistype inferred | |||
| Vrachtafrekeningsdocument aangemaakt | Deze activiteit markeert het aanmaken van het Freight Settlement Document (FSD), waarin de transportkosten voor de vervoerder worden berekend. Dit is het belangrijkste document voor reserveringen en factuurcontrole. | ||
| Waarom dit belangrijk is Hiermee begint de financiële afrekening van het transport. Door de tijd tussen levering en het aanmaken van de afrekening te analyseren, kun je bottlenecks in de financiële verwerking opsporen. Waar vind je dit? Dit is een expliciet event dat wordt vastgelegd wanneer een Freight Settlement Document wordt aangemaakt. De aanmaaktimestamp staat in de kopteksttabel van dit document: /SCMTMS/D_SFIRHD. Vastleggen Gebruik de aanmaakdatum en -tijd van het Freight Settlement Document. Gebeurtenistype explicit | |||
| Zending geannuleerd | Deze activiteit geeft aan dat een zending is geannuleerd nadat deze was aangevraagd of gepland. Dit is het eindpunt van processen die niet tot uitvoering komen. | ||
| Waarom dit belangrijk is Door annuleringen te volgen, kun je oorzaken van procesuitval opsporen, zoals veranderingen in de klantvraag of planningsfouten. Veel annuleringen kunnen wijzen op onderliggende problemen in orderbeheer of planning. Waar vind je dit? Je kunt dit afleiden uit een wijziging van de status tijdens de levenscyclus van de Forwarding Order of Freight Order naar ‘Cancelled’. De timestamp van deze statuswijziging markeert het event. Vastleggen Leg de timestamp vast waarop de status tijdens de levenscyclus van het document wordt ingesteld op ‘Cancelled’. Gebeurtenistype inferred | |||
| Zending gepland | Deze activiteit geeft aan dat de transportbehoeften zijn samengevoegd tot een concreet verzendplan. Je legt dit vast wanneer een Freight Order (voor weg- of spoorvervoer) of Freight Booking (voor zee- of luchtvracht) met de geplande route en bronnen wordt aangemaakt en opgeslagen. | ||
| Waarom dit belangrijk is Deze mijlpaal is nodig om de logistieke uitvoering te starten. De doorlooptijd vanaf de aanvraag tot deze activiteit is een belangrijke KPI voor de efficiëntie van de planning. Waar vind je dit? Dit event komt overeen met het aanmaken van een Freight Order of Freight Booking. Je kunt het ook afleiden uit een statuswijziging van het document, bijvoorbeeld wanneer de planningsstatus verandert in ‘Planned’. De relevante gegevens staan meestal in de kopteksttabel /SCMTMS/D_TORROT. Vastleggen Gebruik de aanmaaktimestamp van het document Freight Order of Freight Booking. Gebeurtenistype explicit | |||
| Douaneaangifte ingediend | Bij internationale zendingen staat deze activiteit voor het indienen van de vereiste douanedocumenten bij de autoriteiten. Dit is nodig om toestemming te krijgen voor de uitvoer of invoer van goederen. | ||
| Waarom dit belangrijk is Dien douaneaangiften op tijd in om vertragingen aan de grens te voorkomen. Door deze activiteit te volgen, kun je de efficiëntie van de douaneafhandeling beoordelen. Waar vind je dit? Je kunt dit event vastleggen als een specifiek uitvoeringsevent dat door een douane-expediteur wordt gemeld, of afleiden uit een statuswijziging in een geïntegreerd douanebeheersysteem zoals SAP GTS. De Freight Order wordt vervolgens bijgewerkt. Vastleggen Leg de timestamp vast van het uitvoeringsevent ‘Customs Declaration Filed’ of van de bijbehorende statuswijziging. Gebeurtenistype explicit | |||
| Douaneafhandeling afgerond | Deze activiteit geeft aan dat de douane de zending heeft goedgekeurd en dat deze verder mag. Dit is een belangrijke mijlpaal in de internationale logistiek, omdat een mogelijke bottleneck hiermee wegvalt. | ||
| Waarom dit belangrijk is De douaneafhandeling veroorzaakt vaak grote vertragingen in internationale supplychains. Door de duur en het slagingspercentage van deze activiteit te volgen, kun je de internationale transporttijden verbeteren. Waar vind je dit? Je legt dit vast als een uitvoeringsevent ‘Customs Clearance’, meestal gemeld door een douane-expediteur of externe aanbieder van zichtbaarheid. De informatie wordt bijgewerkt in de uitvoeringsregistratie van de Freight Order. Vastleggen Gebruik de timestamp van het gemelde uitvoeringsevent ‘Customs Clearance’ dat bij de Freight Order hoort. Gebeurtenistype explicit | |||
| Factuur gecontroleerd | Deze activiteit geeft aan dat de factuur van de vervoerder met het Freight Settlement Document is vergeleken en is goedgekeurd voor betaling. Dit is de laatste stap voordat het betalingsproces in het ERP-systeem begint. | ||
| Waarom dit belangrijk is Met deze activiteit zijn de controle en verificatie van de vrachtkosten afgerond. Vertragingen in deze fase kunnen leiden tot late betalingen aan vervoerders en de relatie onder druk zetten. Waar vind je dit? Je kunt dit afleiden uit een statuswijziging van het Freight Settlement Document, bijvoorbeeld naar ‘Ready for Accrual’ of ‘Transferred for Posting’. Dit geeft aan dat het document naar het ERP-systeem is verstuurd voor betaling. Vastleggen Volg de timestamp waarop de status tijdens de levenscyclus van de FSD verandert naar gereed voor betaling of geboekt. Gebeurtenistype inferred | |||
| Geschil over vrachtkosten aangemaakt | Dit event geeft aan dat er een verschil is gevonden tussen de factuur van de vervoerder en de berekende kosten in het Freight Settlement Document. Dit start een workflow voor geschilafhandeling. | ||
| Waarom dit belangrijk is Geschillen vertragen betalingen aan vervoerders en kosten tijd om administratief af te handelen. Door deze activiteit te volgen, kun je de oorzaken van onjuiste facturen opsporen, zoals verkeerde tarieven of bijkomende kosten. Waar vind je dit? Je kunt dit afleiden uit een statuswijziging van het Freight Settlement Document, waarbij de status ‘Dispute’ wordt ingesteld. Er kan ook een afzonderlijk document voor de geschilzaak worden aangemaakt. Vastleggen Leg de timestamp vast waarop de status van het Freight Settlement Document wordt ingesteld op ‘Dispute’. Gebeurtenistype inferred | |||
| Zending bevestigd door vervoerder | Dit event geeft aan dat de vervoerder akkoord is met de uitvoering van het transport volgens plan. De bevestiging komt meestal binnen via een EDI-bericht, een update in het vervoerdersportaal of een handmatige invoer. Daarmee wordt de status van de Freight Order bijgewerkt. | ||
| Waarom dit belangrijk is Met de bevestiging van de vervoerder ligt het verzendplan vast en neemt de onzekerheid af. Als de bevestiging uitblijft, kan de hele verzendplanning in gevaar komen. Waar vind je dit? Je kunt dit afleiden uit een wijziging van het bevestigingsstatusveld van de Freight Order of Freight Booking. In het statusbeheer van het document wordt dan bijvoorbeeld de status ‘Confirmed’ ingesteld. Vastleggen Volg wijzigingen in de bevestigingsstatusvelden van het Freight Order-document. Gebeurtenistype inferred | |||
| Zending omgeleid | Deze activiteit geeft aan dat de route of planning van een zending na bevestiging onverwacht is gewijzigd. Dat kan komen door verstoringen, verzoeken van klanten of logistieke problemen. | ||
| Waarom dit belangrijk is Omleidingen leiden vaak tot hogere kosten en vertragingen. Door te achterhalen hoe vaak zendingen worden omgeleid en waarom, kun je de planningsnauwkeurigheid en stabiliteit van de bedrijfsvoering verbeteren. Waar vind je dit? Je kunt dit event afleiden uit belangrijke wijzigingen in de trajecten, locaties of datums van een Freight Order nadat de uitvoering is begonnen. Hiervoor kun je wijzigingsdocumenten analyseren, zoals de tabellen CDHDR en CDPOS. Vastleggen Spoor wijzigingen in belangrijke routevelden van het Freight Order-document op nadat het event ‘Shipment Confirmed by Carrier’ heeft plaatsgevonden. Gebeurtenistype inferred | |||
Extractiegidsen
Stappen
- CDS-view-API’s controleren en activeren: Meld je aan bij SAP S/4HANA. Gebruik transactie
/IWFND/MAINT_SERVICEom te controleren of de benodigde OData-services voor de belangrijkste CDS-views actief zijn. Controleer onder meer de services voor I_TransportationOrder, C_TranspOrdExecutionEvent, I_ForwardingOrder en I_FreightSettlementDocument. Zijn ze niet actief? Vraag dan je SAP-beheerder om ze vanuit het back-endsysteem toe te voegen en te activeren. - API-verbinding instellen: Vraag je SAP-beheerder om de basis-URL van de OData-services. Stel een clienttoepassing in om verbinding te maken met de API, bijvoorbeeld een Python-script met de requests-bibliotheek, een commerciële ETL-tool of Postman. Configureer de authenticatie, meestal Basic Authentication (gebruikersnaam en wachtwoord) of OAuth 2.0 voor een veiligere verbinding.
- Omvang van de extractie bepalen: Bepaal welke data je wilt ophalen. Stel bijvoorbeeld een periode van de afgelopen zes maanden in. Bepaal welke organisatie-eenheden relevant zijn, zoals de bedrijfscode, en welke documenttypen je nodig hebt, zoals Freight Order Type. Zo sluit de data aan op het proces dat je analyseert.
- Basisquery voor zendingen opstellen: Begin met een query op de CDS-view I_TransportationOrder. Deze view bevat de centrale gegevens over zendingen, ook wel Freight Orders of Freight Bookings genoemd. Gebruik de OData-parameter
$selectom de benodigde kolommen te kiezen, waaronder de aanbevolen attributen CarrierName, ModeOfTransport en RequestedDeliveryDate. Beperk de data met$filterop datum en andere ingestelde criteria. - Uitvoerings- en transportgebeurtenissen ophalen: Gebruik de CDS-view C_TranspOrdExecutionEvent om belangrijke logistieke gebeurtenissen op te halen. Filter deze view op specifieke waarden van
EventCodedie horen bij activiteiten zoals ‘Goederen opgehaald’ (DEPARTURE) en ‘Goederen afgeleverd’ (ARRIVAL_AT_DESTINATION). Koppel deze data aan de basisgegevens van de zending met TransportationOrder UUID. - Gerelateerde bedrijfsobjecten opvragen: Vraag ook andere gerelateerde CDS-views op om het volledige proces in beeld te krijgen. Gebruik I_ForwardingOrder voor de activiteit ‘Transportaanvraag ontvangen’ en I_FreightSettlementDocument voor financiële activiteiten zoals ‘Vrachtkostenafrekening aangemaakt’, ‘Vrachtgeschil aangemaakt’ en ‘Factuur gecontroleerd’.
- Activiteiten op basis van status ophalen: Veel activiteiten zijn geen afzonderlijke gebeurtenissen, maar statuswijzigingen op het hoofddocument. Voor activiteiten zoals ‘Vervoerder toegewezen’, ‘Zending bevestigd door vervoerder’ en ‘Zending geannuleerd’ vraag je de view I_TransportationOrder op. Gebruik
LastChangeDateTimebij het relevante statusveld als tijdstip van de gebeurtenis. Hiervoor moet je statuscodes zorgvuldig koppelen aan bedrijfsactiviteiten. - Data samenvoegen en omzetten: Voeg de opgehaalde data uit alle bronnen samen in één event log. Maak voor elke activiteit een rij met de vereiste kolommen: ShipmentId, ActivityName en EventTime. Zorg dat elke rij voor een zending ook alle aanbevolen attributen uit de basisquery bevat. Dit komt overeen met een SQL-bewerking
UNION ALL. - Complexe en externe gebeurtenissen verwerken: Data voor activiteiten zoals ‘Douanevrijgave’ of ‘Betaling verwerkt’ kan in specifieke velden of externe systemen staan. De querylogica gebruikt standaardvelden als benadering. Mogelijk moet je de query aanpassen om CDS-views voor douanegegevens te koppelen of betalingsdata uit een aparte ERP-extractie te combineren op basis van het nummer van het Freight Settlement Document.
- Data klaarmaken voor ProcessMind: Sla de samengevoegde dataset op als CSV-bestand. Zorg dat de kolomkoppen voldoen aan de uploadvereisten. Koppel bijvoorbeeld de kolom
ShipmentIdaan het veldCaseIdin de instellingen van de tool. Controleer of alle timestamps hetzelfde formaat hebben, bij voorkeur UTC (YYYY-MM-DDTHH:MM:SSZ).
Configuratie
- Belangrijkste CDS-views: De extractie gebruikt vooral I_TransportationOrder (voor vrachtorders), C_TranspOrdExecutionEvent (voor uitvoeringsgebeurtenissen), I_ForwardingOrder (voor transportaanvragen) en I_FreightSettlementDocument (voor afrekeningen).
- Filter op datumbereik: Gebruik een datumfilter om de hoeveelheid data beheersbaar te houden. Gebruik
CreationDateTimein I_TransportationOrder ofActualBusinessDateTimein C_TranspOrdExecutionEvent. Voor een eerste analyse is een periode van drie tot zes maanden aan te raden. - Filter op documenttype: Richt de analyse op specifieke documenttypen met het veld
TransportationOrderType. Zo kun je verschillende logistieke scenario’s uit elkaar houden, zoals standaard uitgaande zendingen en voorraadtransfers. - Organisatiefilters: Filter waar nodig op
PurchasingOrganizationof andere velden op organisatieniveau om de data te beperken tot een bedrijfseenheid of regio. - Paginering van de API: Gebruik bij grote datasets de OData-parameters
$topen$skipom de data in kleinere pagina’s op te halen. Zo voorkom je time-outs van de API en beperk je het geheugengebruik aan de clientzijde. Een paginagrootte van 1.000 tot 5.000 rijen werkt vaak goed. - Vereisten: De gebruiker of het serviceaccount dat de extractie uitvoert, moet toegang hebben tot de onderliggende OData-services (autorisatieobject S_SERVICE) en de bedrijfsdata in de CDS-views. De bijbehorende services moeten zijn geactiveerd in SAP Gateway (
/IWFND/MAINT_SERVICE).
a Voorbeeldquery sql
WITH Shipments AS (
SELECT
TransportationOrder AS ShipmentId,
CarrierName,
TranspOrdExecutionBlockRsnCode,
TransportationMode AS ModeOfTransport,
ShippingType AS ShipmentType,
CreationDateTime AS ShipmentCreationTime,
LastChangeDateTime,
LifeCycleStatus,
ConfirmationStatus,
OverallExecutionStatus,
DeliveryOverallStatus,
PlannedDepDateTimeReqByCust AS RequestedDeliveryDate,
TotalChargesAmountInTransacCrcy AS TotalFreightCost
FROM I_TransportationOrder
WHERE
CreationDateTime >= '[START_DATE]' AND CreationDateTime <= '[END_DATE]'
-- AND TransportationOrderType IN ('[Your_Type_1]', '[Your_Type_2]')
)
SELECT
fwo.PurchasingDocument AS ShipmentId,
'Transportation Request Received' AS ActivityName,
fwo.CreationDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM I_ForwardingOrder AS fwo
LEFT JOIN Shipments s ON fwo.PurchasingDocument = s.ShipmentId
WHERE fwo.CreationDateTime >= '[START_DATE]' AND fwo.CreationDateTime <= '[END_DATE]'
UNION ALL
SELECT
s.ShipmentId,
'Shipment Planned' AS ActivityName,
s.ShipmentCreationTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
UNION ALL
SELECT
s.ShipmentId,
'Carrier Assigned' AS ActivityName,
s.LastChangeDateTime AS EventTime, -- Best approximation using last change time
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.CarrierName IS NOT NULL
UNION ALL
SELECT
s.ShipmentId,
'Shipment Confirmed By Carrier' AS ActivityName,
s.LastChangeDateTime AS EventTime, -- Best approximation using last change time
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.ConfirmationStatus = 'C' -- 'Confirmed'
UNION ALL
SELECT
s.ShipmentId,
'Goods Picked Up' AS ActivityName,
evt.ActualBusinessDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM C_TranspOrdExecutionEvent AS evt
JOIN Shipments s ON evt.TransportationOrder = s.ShipmentId
WHERE evt.EventCode = 'DEPARTURE'
UNION ALL
SELECT
s.ShipmentId,
'Customs Declaration Filed' AS ActivityName,
s.LastChangeDateTime AS EventTime, -- Approximation based on status change
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.CustomsRelevance IS NOT NULL -- This is a proxy, system config dependent
UNION ALL
SELECT
s.ShipmentId,
'Customs Cleared' AS ActivityName,
s.LastChangeDateTime AS EventTime, -- Approximation based on status change
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.CustomsOverallStatus = '4' -- 'Customs Cleared'
UNION ALL
SELECT
s.ShipmentId,
'Shipment Rerouted' AS ActivityName,
s.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.TranspOrdExecutionBlockRsnCode = '[Your Rerouting Reason Code]'
UNION ALL
SELECT
s.ShipmentId,
'Goods Delivered' AS ActivityName,
evt.ActualBusinessDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM C_TranspOrdExecutionEvent AS evt
JOIN Shipments s ON evt.TransportationOrder = s.ShipmentId
WHERE evt.EventCode = 'ARRIVAL_AT_DESTINATION'
UNION ALL
SELECT
s.ShipmentId,
'Proof Of Delivery Received' AS ActivityName,
s.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.DeliveryOverallStatus = 'C' -- 'POD Received'
UNION ALL
SELECT
fsd.SourceDocument AS ShipmentId,
'Freight Settlement Created' AS ActivityName,
fsd.CreationDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
fsd.TotalAmount AS TotalFreightCost
FROM I_FreightSettlementDocument AS fsd
JOIN Shipments s ON fsd.SourceDocument = s.ShipmentId
UNION ALL
SELECT
fsd.SourceDocument AS ShipmentId,
'Freight Dispute Created' AS ActivityName,
fsd.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
fsd.TotalAmount AS TotalFreightCost
FROM I_FreightSettlementDocument AS fsd
JOIN Shipments s ON fsd.SourceDocument = s.ShipmentId
WHERE fsd.DisputeStatus = '1' -- 'In Dispute'
UNION ALL
SELECT
fsd.SourceDocument AS ShipmentId,
'Invoice Verified' AS ActivityName,
fsd.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
fsd.TotalAmount AS TotalFreightCost
FROM I_FreightSettlementDocument AS fsd
JOIN Shipments s ON fsd.SourceDocument = s.ShipmentId
WHERE fsd.OverallLifeCycleStatus = '06' -- 'Posted for Accruals'
UNION ALL
SELECT
s.ShipmentId,
'Shipment Cancelled' AS ActivityName,
s.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.LifeCycleStatus = 'X' -- 'Cancelled'
UNION ALL
SELECT
fsd.SourceDocument AS ShipmentId,
'Payment Processed' AS ActivityName,
fsd.LastChangeDateTime AS EventTime, -- Approximation, actual payment is in ERP
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
fsd.TotalAmount AS TotalFreightCost
FROM I_FreightSettlementDocument AS fsd
JOIN Shipments s ON fsd.SourceDocument = s.ShipmentId
WHERE fsd.InvoiceProcessingStatus = 'C' -- 'Completely Invoiced' Stappen
- Controleer of je via een goedgekeurde SQL-client, databaseview of extractieservice directe leestoegang hebt tot het SAP TM HANA-schema. Vraag de verbindingsreeks, inloggegevens, schemanaam en benodigde leesrechten voor de relevante SAP TM-tabellen op. Query niet rechtstreeks op productie zonder de vereiste beveiligings- en wijzigingsgoedkeuringen.
- Controleer de fysieke tabel- en kolomnamen in je systeem. De query hieronder gebruikt /SCMTMS/D_TORROT en /SCMTMS/D_TOSTOP als hoofdtabellen. Status-, partner-, datum-, kosten-, douane-, document- en betalingsdata kunnen, afhankelijk van de SAP TM-release en implementatie, in aanvullende tabellen of uitbreidingen staan. Vervang alleen de gedocumenteerde tijdelijke aanduidingen nadat je ze hebt gecontroleerd aan de hand van de systeemcatalogus en het datamodel.
- Stel de extractieperiode in met [Start timestamp] en [End timestamp]. Voor een eerste analyse is een voortschrijdende periode van drie tot zes maanden meestal geschikt. Gebruik pas een langere periode nadat je de queryprestaties en bewaartermijn van gebeurtenisgeschiedenis hebt gecontroleerd.
- Bepaal de case-sleutel voor zendingen. De query gebruikt TOR_ID uit /SCMTMS/D_TORROT als zending-ID. Gebruikt je implementatie een andere stabiele identificatie, vervang dan de case-sleutel consequent in elke activiteitstak. Bewaar het oorspronkelijke document-ID als extra auditattribuut als dat beschikbaar is.
- Koppel elke bedrijfsactiviteit aan een expliciete bronvoorwaarde. ProcessMind leest het event log zoals het is, dus de query maakt voor elke opgehaalde activiteit één rij. Er worden geen mijlpalen afgeleid uit de documentvolgorde, ontbrekende timestamps of statusverloop.
- Controleer de koppeling van statussen en timestamps met transportplanners en proceseigenaren. Bevestig vooral welke waarden staan voor het aanmaken van een aanvraag, planning, toewijzing aan een vervoerder, bevestiging door de vervoerder, ophalen, douaneaangifte, douanevrijgave, omleiding, aflevering, ontvangst van POD, vrachtkostenafrekening, geschil, factuurcontrole, annulering en betaling.
- Voer de query uit in de goedgekeurde SQL-client. Controleer of er één rij per gebeurtenis is en of ShipmentId, ActivityName en EventTime een geldige, niet-lege waarde hebben. Controleer op dubbele rijen door één-op-veel-koppelingen en pas waar nodig de bronkoppelingen of aggregatielogica aan.
- Vul het resultaat aan met de aanbevolen attributen als de bijbehorende bronvelden beschikbaar zijn. De query bevat tijdelijke aanduidingen voor velden waarvan de naam niet veilig kan worden vastgesteld zonder systeemspecifieke metadata. Vervang die alleen door gecontroleerde kolommen of goedgekeurde views.
- Pas de definitieve datakwaliteitsregels toe. Verwijder rijen zonder case-ID of gebeurtenistimestamp, zet timestamps om naar één tijdzone, bewaar de oorspronkelijke timestamps voor auditdoeleinden en controleer of EndTime niet vóór EventTime ligt. Maak geen kunstmatige gebeurtenissen aan voor ontbrekende bronrecords.
- Exporteer het resultaat als UTF-8-CSV of een ander tabelbestand dat ProcessMind ondersteunt. Gebruik exact de vereiste kolomnamen ShipmentId, ActivityName en EventTime. Voeg EndTime en de aanbevolen attributen toe als die zijn ingevuld. Upload het bestand of koppel het goedgekeurde queryresultaat aan ProcessMind. Controleer daarna of de case-ID van de zending en het veld Activity Name goed zijn gekoppeld.
Configuratie
- Belangrijkste brontabellen: Gebruik /SCMTMS/D_TORROT voor de hoofdgegevens van transport- of vrachtorders en /SCMTMS/D_TOSTOP voor stops en mijlpalen. Controleer alle aanvullende bronobjecten in het SAP TM-doelsysteem voordat je de oplossing in gebruik neemt.
- Case-ID: Gebruik een stabiele identificatie voor de zending of vrachtorder. De voorbeeldquery gebruikt TOR_ID als ShipmentId. Controleer of deze ID stabiel blijft tijdens planning, uitvoering, afrekening en ERP-betalingen.
- Activiteiten koppelen: Stel expliciete bronvoorwaarden in voor alle 15 vereiste activiteiten. Elke activiteit moet als afzonderlijke rij in het event log worden opgenomen. ProcessMind leidt geen activiteiten af uit andere rijen.
- Datumbereik: Begin met drie tot zes maanden aan geschiedenis. Gebruik zo vroeg mogelijk in elke brontak voorwaarden op EventTime. Gebruik bij incrementele ladingen een gecontroleerde watermark en een kleine overlapperiode om late wijzigingen mee te nemen.
- Bedrijfsfilters: Stel filters in voor bedrijfscode, inkooporganisatie, verkooporganisatie, documenttype, transportmodus, vervoerder, vestiging, locatie en status, afgestemd op de implementatie. Gebruik tijdelijke aanduidingen zoals [Company code filter] als het toepasselijke veld nog niet is gecontroleerd.
- Timestamps verwerken: Zet brontimestamps om naar één tijdzone. Als een bron aparte datum- en tijdvelden bevat, combineer die dan met de conversie die bij de HANA-release hoort. Bewaar de oorspronkelijke brontimestamp als dat nodig is voor het auditspoor.
- Aanbevolen attributen: Vul CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost en IsOnTimeDelivery in vanuit gecontroleerde bronvelden of goedgekeurde calculation views. Laat waarden leeg als de bron geen betrouwbare waarde bevat.
- Prestaties: Beperk de periode, selecteer alleen benodigde kolommen, filter vóór koppelingen, vermijd volledige tabelscans zonder beperking en controleer het uitvoeringsplan van HANA. Gebruik bij grote datasets partitiegerichte voorwaarden, incrementele extractie, stagingtabellen of een goedgekeurde calculation view.
- Dubbele rijen voorkomen: Eén-op-veel-koppelingen kunnen meerdere rijen voor één activiteit opleveren. Gebruik een gecontroleerde gebeurtenissleutel, brondocumentsleutel of vaste aggregatieregel. Verwijder niet willekeurig dubbele rijen, want daarmee kunnen geldige herhaalde gebeurtenissen verloren gaan.
- Vereisten: Benodigde databaserechten, toegang tot SAP TM-data en eventuele gekoppelde ERP- of afrekengegevens, goedgekeurde extractietools en bevestiging dat de relevante SAP TM-modules, integraties en maatwerkuitbreidingen actief zijn.
- Systeemspecifieke koppelingen: Statuscodes, partnerrollen, douanemijlpalen, afrekenstatussen, factuurstatussen en betalingsstatussen verschillen per release en configuratie. Leg de koppelingen vast in een beheerd configuratiedocument en test ze na upgrades.
a Voorbeeldquery sql
WITH
base_tor AS (
SELECT
r.TOR_ID AS ShipmentId,
r.TOR_ID AS SourceDocumentId,
r.CREATED_AT AS RequestEventTime,
r.CREATED_AT AS PlannedEventTime,
r.CREATED_AT AS CarrierAssignedEventTime,
r.CREATED_AT AS CarrierConfirmedEventTime,
r.CREATED_AT AS PickupEventTime,
r.CREATED_AT AS CustomsFiledEventTime,
r.CREATED_AT AS CustomsClearedEventTime,
r.CREATED_AT AS ReroutedEventTime,
r.CREATED_AT AS DeliveredEventTime,
r.CREATED_AT AS PodReceivedEventTime,
r.CREATED_AT AS SettlementCreatedEventTime,
r.CREATED_AT AS DisputeCreatedEventTime,
r.CREATED_AT AS InvoiceVerifiedEventTime,
r.CREATED_AT AS CancelledEventTime,
r.CREATED_AT AS PaymentProcessedEventTime,
r.CREATED_AT AS EndTime,
CAST(NULL AS NVARCHAR(255)) AS CarrierName,
CAST(NULL AS TIMESTAMP) AS RequestedDeliveryDate,
CAST(NULL AS NVARCHAR(50)) AS ModeOfTransport,
CAST(NULL AS DECIMAL(19, 2)) AS TotalFreightCost,
CAST(NULL AS NVARCHAR(5)) AS IsOnTimeDelivery
FROM "/SCMTMS/D_TORROT" r
WHERE r.CREATED_AT >= TO_TIMESTAMP('[Start timestamp]')
AND r.CREATED_AT < TO_TIMESTAMP('[End timestamp]')
AND ('[Company code filter]' = '[Company code filter]' OR r.TOR_ID IS NOT NULL)
),
stop_data AS (
SELECT
s.TOR_ID AS ShipmentId,
MIN(s.STOP_SEQ) AS FirstStopSequence,
MAX(s.STOP_SEQ) AS LastStopSequence
FROM "/SCMTMS/D_TOSTOP" s
GROUP BY s.TOR_ID
),
source_data AS (
SELECT
b.ShipmentId,
b.SourceDocumentId,
b.RequestEventTime,
b.PlannedEventTime,
b.CarrierAssignedEventTime,
b.CarrierConfirmedEventTime,
b.PickupEventTime,
b.CustomsFiledEventTime,
b.CustomsClearedEventTime,
b.ReroutedEventTime,
b.DeliveredEventTime,
b.PodReceivedEventTime,
b.SettlementCreatedEventTime,
b.DisputeCreatedEventTime,
b.InvoiceVerifiedEventTime,
b.CancelledEventTime,
b.PaymentProcessedEventTime,
b.EndTime,
b.CarrierName,
b.RequestedDeliveryDate,
b.ModeOfTransport,
b.TotalFreightCost,
CASE
WHEN b.DeliveredEventTime IS NOT NULL
AND b.RequestedDeliveryDate IS NOT NULL
AND b.DeliveredEventTime <= b.RequestedDeliveryDate THEN 'true'
WHEN b.DeliveredEventTime IS NOT NULL
AND b.RequestedDeliveryDate IS NOT NULL THEN 'false'
ELSE NULL
END AS IsOnTimeDelivery
FROM base_tor b
LEFT JOIN stop_data s
ON s.ShipmentId = b.ShipmentId
),
event_log AS (
SELECT ShipmentId, 'Transportation Request Received' AS ActivityName, RequestEventTime AS EventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE RequestEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Planned', PlannedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PlannedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Carrier Assigned', CarrierAssignedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CarrierAssignedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Confirmed By Carrier', CarrierConfirmedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CarrierConfirmedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Goods Picked Up', PickupEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PickupEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Customs Declaration Filed', CustomsFiledEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CustomsFiledEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Customs Cleared', CustomsClearedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CustomsClearedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Rerouted', ReroutedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE ReroutedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Goods Delivered', DeliveredEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE DeliveredEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Proof Of Delivery Received', PodReceivedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PodReceivedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Freight Settlement Created', SettlementCreatedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE SettlementCreatedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Freight Dispute Created', DisputeCreatedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE DisputeCreatedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Invoice Verified', InvoiceVerifiedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE InvoiceVerifiedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Cancelled', CancelledEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CancelledEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Payment Processed', PaymentProcessedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PaymentProcessedEventTime IS NOT NULL
)
SELECT
ShipmentId,
ActivityName,
EventTime,
EndTime,
CarrierName,
RequestedDeliveryDate,
ModeOfTransport,
TotalFreightCost,
IsOnTimeDelivery,
SourceDocumentId
FROM event_log
WHERE ShipmentId IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY ShipmentId, EventTime, ActivityName; Stappen
- Datavereisten bepalen: Bevestig eerst de exacte logica voor elk van de 15 vereiste activiteiten en alle attributen. Koppel elke activiteit aan specifieke statuswijzigingen, aanmaakgebeurtenissen of documentrelaties in je SAP TM-systeem. Bepaal bijvoorbeeld welke uitvoeringsstatus precies aangeeft dat ‘Goederen opgehaald’ is.
- ABAP-ontwikkelomgeving openen: Meld je aan bij SAP GUI en open de ABAP Editor met transactiecode
SE38. Geef je nieuwe programma een naam, bijvoorbeeldZTM_PROCESS_EXTRACT, en klik op ‘Aanmaken’. Vul een titel in en stel het programmatype in op ‘Uitvoerbaar programma’. - Selectiescherm maken: Bepaal welke velden gebruikers op het selectiescherm zien. Voeg parameters toe om de data te filteren, zoals een datumbereik voor de aanmaakdatum van de vrachtorder (
SO_CREDT) en select-options voor documenttypen (SO_TYPE) of vervoerders (SO_CARR). - Uitvoerstructuur definiëren: Definieer een interne tabelstructuur die aansluit op het vereiste formaat van het event log. Neem de velden
ShipmentId,ActivityName,EventTime,EndTime,CarrierName,RequestedDeliveryDate,ModeOfTransport,TotalFreightCostenIsOnTimeDeliveryop. - Logica voor dataselectie implementeren: Schrijf de ABAP-logica om data voor elk van de 15 activiteiten op te halen. Hiervoor moet je meestal meerdere SAP TM-tabellen raadplegen. Begin met de primaire zendingsdocumenten, zoals Freight Orders, binnen het ingestelde datumbereik.
- Plannings- en uitvoeringsgebeurtenissen ophalen: Raadpleeg voor elk geselecteerd zendingsdocument, bijvoorbeeld een Freight Order, de gerelateerde tabellen en bedrijfsobjecten om timestamps van verschillende gebeurtenissen te vinden. Gebruik tabel
/SCMTMS/D_TORROTvoor het aanmaken van een Freight Order (‘Zending gepland’), de toewijzing van een vervoerder (‘Vervoerder toegewezen’) en statuswijzigingen die horen bij ‘Goederen opgehaald’ en ‘Goederen afgeleverd’. Het aanmaken van de voorafgaande Forwarding Order (/SCMTMS/D_TRQROT) kan gelden als ‘Transportaanvraag ontvangen’. - Bevestiging door vervoerder en omleiding ophalen: Raadpleeg statustabellen of wijzigingsdocumenten (CDHDR/CDPOS) van de Freight Order om te bepalen wanneer de status
CONFIRMATIONis ingesteld. Daarmee leg je ‘Zending bevestigd door vervoerder’ vast. Zoek op dezelfde manier naar belangrijke wijzigingen in de route om ‘Zending omgeleid’ vast te leggen. - Douanegebeurtenissen ophalen: Als je SAP Global Trade Services (GTS) of een vergelijkbare module gebruikt, worden douanegebeurtenissen (‘Douaneaangifte ingediend’, ‘Douanevrijgave’) vaak bijgehouden via gekoppelde documenten. Lees de documentstroom (
/SCMTMS/D_TORDOC) van de Freight Order uit om gerelateerde documenten en hun aanmaak- of statuswijzigingstijden te vinden. - Afrekenings- en geschilgebeurtenissen ophalen: Raadpleeg de koptekstabel van het Freight Settlement Document (
/SCMTMS/D_SFIRHD) en de bijbehorende items en statussen om ‘Vrachtkostenafrekening aangemaakt’, ‘Vrachtgeschil aangemaakt’ en ‘Factuur gecontroleerd’ vast te leggen. Koppel deze terug aan de oorspronkelijkeShipmentId. - Data samenvoegen: Maak voor elke gevonden gebeurtenis een record aan in de uiteindelijke interne tabel. Vul
ActivityNamein met de bijbehorende activiteit,EventTimemet de timestamp van de gebeurtenis enShipmentIdmet de Freight Order- of Freight Booking-ID. Vul de overige attributen aan vanuit de brondocumenten. - Bestand opmaken en exporteren: Zet de data om naar een plat bestand zodra de interne tabel volledig is gevuld. Gebruik de opdrachten
OPEN DATASET,LOOP AT... TRANSFER...enCLOSE DATASETom de inhoud van de interne tabel naar een CSV- of TXT-bestand op de SAP-applicatieserver te schrijven. Je kunt het bestand daar openen via transactie AL11. - Inplannen en ophalen: Je kunt het ABAP-programma als achtergrondtaak inplannen met transactie SM36, zodat de data automatisch wordt opgehaald. Download het gegenereerde bestand met transactie
CG3Yvan de applicatieserver naar een lokale computer en upload het vervolgens naar ProcessMind.
Configuratie
- Datumbereik: Het selectiescherm moet een verplicht datumbereik bevatten voor de aanmaakdatum van het belangrijkste transportdocument, bijvoorbeeld een Freight Order. Voor een eerste analyse is drie tot zes maanden aan te raden. Zo krijg je een representatieve dataset zonder dat de uitvoering onnodig lang duurt.
- Filter op documenttype: Voeg een filter toe voor het type transportdocument, bijvoorbeeld Freight Order of Freight Booking. Zo kun je de analyse richten op specifieke processen, zoals wegtransport of zeevracht.
- Filter op vervoerder: Laat gebruikers filteren op specifieke vervoerders. Zo kunnen ze de prestaties van afzonderlijke logistieke partners analyseren.
- Organisatiefilters: Voeg filters toe voor relevante organisatie-eenheden, zoals inkooporganisatie of bedrijfscode, om de extractie te beperken tot specifieke bedrijfsonderdelen.
- Prestaties verbeteren: Zorg bij grote datasets dat de ABAP-code geïndexeerde databasevelden gebruikt in
WHERE-clausules, geneste lussen waar mogelijk vermijdt en alleen de benodigde velden uit de database ophaalt. Zo beperk je het geheugengebruik. - Vereisten: De gebruiker die het rapport uitvoert, moet toestemming hebben om ABAP-programma’s uit te voeren. De ontwikkelaar heeft autorisatie
S_DEVELOPnodig. Het programma zelf heeft rechten nodig voor bestandssysteemtoegang op de applicatieserver (objectS_DATASET) en toegang tot de relevante TM-databasetabellen en BOPF-objecten.
a Voorbeeldquery abap
REPORT ztm_process_extract.
*&---------------------------------------------------------------------*
*& Data Structures
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_s_event_log,
shipmentid TYPE /scmtms/tor_id,
activityname TYPE string,
eventtime TYPE timestamp,
endtime TYPE timestamp,
carriername TYPE string,
requesteddeliverydate TYPE timestamp,
modeoftransport TYPE /scmtms/mot,
totalfreightcost TYPE /scmtms/chargeable_weight,
isontimedelivery TYPE abap_bool,
END OF ty_s_event_log.
DATA: lt_event_log TYPE TABLE OF ty_s_event_log.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: so_credt FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: so_torid FOR /scmtms/d_torrot-tor_id.
SELECT-OPTIONS: so_carr FOR /scmtms/d_torrot-lsp_id.
*&---------------------------------------------------------------------*
*& Main Logic
*&---------------------------------------------------------------------*
START-OF-SELECTION.
DATA: ls_event_log TYPE ty_s_event_log.
" Select base data: Freight Orders (Shipments)
SELECT tor_id, tor_cat, lsp_id, mot_code, cretd_tst, btd_tstmp_end
FROM /scmtms/d_torrot
INTO TABLE @DATA(lt_tor_root)
WHERE CAST( cretd_tst AS DATS ) IN @so_credt
AND tor_id IN @so_torid
AND lsp_id IN @so_carr.
IF lt_tor_root IS INITIAL.
MESSAGE 'No data found for the given selection.' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
" Loop through each shipment to build the event log
LOOP AT lt_tor_root INTO DATA(ls_tor_root).
" 1. Transportation Request Received (Approximation from FWO creation)
SELECT SINGLE created_at_utc FROM /scmtms/d_trqrot
WHERE db_key IN ( SELECT trq_root_key FROM /scmtms/d_tordoc
WHERE parent_key = @ls_tor_root-db_key AND bo_node_cat = 'TRQ_ROOT' )
INTO @DATA(lv_trq_created_ts).
IF sy-subrc = 0.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Transportation Request Received'.
ls_event_log-eventtime = lv_trq_created_ts.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 2. Shipment Planned
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Shipment Planned'.
ls_event_log-eventtime = ls_tor_root-cretd_tst.
APPEND ls_event_log TO lt_event_log.
" 3. Carrier Assigned
IF ls_tor_root-lsp_id IS NOT INITIAL.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Carrier Assigned'.
ls_event_log-eventtime = ls_tor_root-cretd_tst. " Approximated with creation time
APPEND ls_event_log TO lt_event_log.
ENDIF.
" Get statuses from /SCMTMS/D_TORSTA
SELECT status, tstmp FROM /scmtms/d_torsta
INTO TABLE @DATA(lt_statuses)
WHERE parent_key = @ls_tor_root-db_key.
" 4. Shipment Confirmed By Carrier
READ TABLE lt_statuses WITH KEY status = 'CONFIRMED' INTO DATA(ls_conf_status).
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Shipment Confirmed By Carrier'.
ls_event_log-eventtime = ls_conf_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 5. Goods Picked Up
READ TABLE lt_statuses WITH KEY status = 'LOADING_END' INTO DATA(ls_pickup_status). " Example status
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Goods Picked Up'.
ls_event_log-eventtime = ls_pickup_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 6. Customs Declaration Filed (Placeholder logic)
" 7. Customs Cleared (Placeholder logic)
" 8. Shipment Rerouted (Placeholder logic, needs change documents)
" 9. Goods Delivered
READ TABLE lt_statuses WITH KEY status = 'UNLOADING_END' INTO DATA(ls_delivery_status). " Example status
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Goods Delivered'.
ls_event_log-eventtime = ls_delivery_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 10. Proof Of Delivery Received
READ TABLE lt_statuses WITH KEY status = 'POD_RECEIVED' INTO DATA(ls_pod_status). " Example status
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Proof Of Delivery Received'.
ls_event_log-eventtime = ls_pod_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 11. Freight Settlement Created
SELECT SINGLE created_at_utc FROM /scmtms/d_sfirhd
WHERE db_key IN ( SELECT sfir_root_key FROM /scmtms/d_tordoc
WHERE parent_key = @ls_tor_root-db_key AND bo_node_cat = 'SFIR_ROOT' )
INTO @DATA(lv_fsd_created_ts).
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Freight Settlement Created'.
ls_event_log-eventtime = lv_fsd_created_ts.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 12. Freight Dispute Created (Needs logic based on dispute status in SFIR)
" 13. Invoice Verified (Needs logic based on invoice status in SFIR)
" 14. Shipment Cancelled
READ TABLE lt_statuses WITH KEY status = 'CANCELLED' INTO DATA(ls_cancel_status).
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Shipment Cancelled'.
ls_event_log-eventtime = ls_cancel_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 15. Payment Processed (Data is typically in the ERP system, not TM)
ENDLOOP.
" Final step: Write lt_event_log to a file on the application server
DATA(lv_filepath) = '/usr/sap/trans/[YourInstance]/[YourFileName].csv'.
OPEN DATASET lv_filepath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc = 0.
" Write header
DATA(lv_header) = 'ShipmentId,ActivityName,EventTime'.
TRANSFER lv_header TO lv_filepath.
" Write data
LOOP AT lt_event_log INTO ls_event_log.
DATA(lv_line) = |{ ls_event_log-shipmentid },{ ls_event_log-activityname },{ ls_event_log-eventtime }|.
TRANSFER lv_line TO lv_filepath.
ENDLOOP.
CLOSE DATASET lv_filepath.
ELSE.
MESSAGE 'Error opening file on application server.' TYPE 'E'.
ENDIF.
ENDFOR. Klaar om aan de slag te gaan?
Gebruik deze template als startpunt om transportprocessen te verbeteren en leveringen sneller en goedkoper uit te voeren. Ontdek vandaag nog waar kansen liggen.
Pak bottlenecks in transportbeheer vandaag nog aan
Spoor inefficiënties op, optimaliseer routes en verkort de doorlooptijd met 30%.
Geen creditcard nodig. Binnen enkele minuten ingesteld.