Votre modèle de données Transportation Management
Votre modèle de données Transportation Management
- Attributs recommandés à collecter
- Activités clés à suivre
- Recommandations d’extraction pour SAP Transportation Management
Attributs de la gestion des transports
| Nom | Description | ||
|---|---|---|---|
| Expédition ShipmentId | Identifiant unique d’un mouvement de marchandises, qui sert de cas central pour l’analyse. | ||
| Description Le Shipment ID est la clé primaire qui regroupe toutes les activités et tous les événements de transport associés. Il représente un processus de transport unique, de bout en bout, depuis la demande initiale jusqu’à la preuve de livraison finale et au paiement. Dans le Process Mining, cet attribut est essentiel à la construction de la vue par cas. Il permet aux analystes de suivre le parcours complet de chaque expédition, d’analyser les variantes de processus, les temps de cycle et les résultats associés à chaque expédition, et d’obtenir une vision complète de la performance du transport. Pourquoi c’est important Il s’agit de l’identifiant de cas fondamental, qui relie tous les événements et points de données à une commande de transport précise, ce qui est essentiel à l’analyse du processus de bout en bout. Où les obtenir Cet identifiant correspond au numéro du Freight Order ou du Freight Booking dans SAP TM. Il peut être trouvé dans des tables telles que /SCMTMS/D_TORROT et /SCMTMS/D_TRQROT. Exemples 610000432161000056786100009876 | |||
| Heure de l’événement EventTime | Horodatage indiquant le moment où une activité ou un événement spécifique s’est produit. | ||
| Description Event Time fournit la date et l’heure précises de chaque activité du processus de transport. Ces données temporelles sont essentielles pour calculer les temps de cycle, les durées et les temps d’attente entre les différentes étapes du processus. Dans l’analyse, cet attribut sert à ordonner correctement les événements, à constituer un journal chronologique et à réaliser toutes les analyses de performance fondées sur le temps. Il est indispensable pour identifier les retards, mesurer l’efficacité du processus et évaluer la performance par rapport aux plannings ou aux accords de niveau de service. Pourquoi c’est important L’horodatage est essentiel pour ordonner chronologiquement les événements et calculer les indicateurs de performance, notamment les temps de cycle et le taux de livraison à temps. Où les obtenir Provient des tables du gestionnaire des événements de SAP TM, telles que /SAPTRX/EH_EVMSG, qui stockent les horodatages des événements signalés. Exemples 2023-04-15T10:00:00Z2023-04-16T14:30:00Z2023-04-20T09:15:00Z | |||
| Nom de l’activité ActivityName | Nom d’un événement métier ou d’une étape précise survenue dans le processus de transport. | ||
| Description Le nom de l’activité décrit une tâche ou une étape précise du cycle de vie de l’expédition, comme « Shipment Planned », « Goods Picked Up » ou « Goods Delivered ». Ces activités constituent les nœuds de la carte des processus découverte. L’analyse de la séquence et de la fréquence des activités aide à identifier le flux de processus standard, les écarts, les goulots d’étranglement et les boucles de reprises. Elle constitue la base de la découverte des processus et de la vérification de la conformité dans la gestion du transport. Pourquoi c’est important Cet attribut définit les étapes du processus de transport et permet de visualiser et d’analyser le flux des expéditions de bout en bout. Où les obtenir Cette information est généralement dérivée des codes d’événement ou des changements de statut enregistrés dans le gestionnaire des événements de suivi de l’exécution de SAP TM. Elle peut provenir de tables qui consignent les changements de statut des objets métier ou des messages d’événement spécifiques. Exemples Expédition planifiéeTransporteur affectéMarchandises enlevéesMarchandises livréesPreuve de livraison reçue | |||
| Coût total du fret TotalFreightCost | Coût total calculé ou facturé pour l’expédition. | ||
| Description Le coût total du fret représente l’impact financier d’une expédition. Il peut s’agir du coût calculé par le système de gestion du transport ou du montant final figurant sur la facture du transporteur après règlement. Cet attribut permet d’intégrer la dimension financière à l’analyse des processus. Les analystes peuvent identifier les variantes de processus les plus coûteuses, calculer le coût des retards ou des réacheminements et comparer la rentabilité de différents transporteurs ou modes de transport. Il est fondamental pour les Dashboards consacrés aux dépenses de transport et à l’analyse du coût de service. Pourquoi c’est important Ajoute une dimension financière au processus et permet d’analyser les dépenses de transport, le coût par expédition et l’impact financier des inefficacités du processus. Où les obtenir Provient du Freight Settlement Document dans SAP TM une fois le calcul des frais effectué. Il peut être trouvé dans des tables telles que /SCMTMS/D_SFIRHD. Exemples 250.751200.005430.50 | |||
| Date de livraison demandée RequestedDeliveryDate | Date et heure de livraison demandées par le client ou stipulées dans la commande client. | ||
| Description La date de livraison demandée constitue l’échéance cible de l’activité « Goods Delivered ». Elle sert de référence principale pour mesurer la performance des livraisons à temps. Cette date est essentielle au calcul du KPI « On-Time Delivery Rate ». En comparant l’horodatage réel de la livraison à cette date demandée, les organisations peuvent déterminer si elles ont respecté leur accord de niveau de service. L’analyse des écarts aide à identifier les causes systémiques des retards, telles que les problèmes de performance des transporteurs, les retards de planification ou les blocages douaniers. Pourquoi c’est important Constitue la référence pour mesurer la performance des livraisons à temps, un KPI essentiel à la satisfaction client et à l’excellence opérationnelle. Où les obtenir Cette date est généralement transférée depuis la commande client ou l’ordre de transfert de stock précédent dans SAP ERP. Elle est stockée dans les champs de date et d’heure du Freight Unit ou du Freight Order. Exemples 2023-05-20T17:00:00Z2023-06-01T12:00:00Z2023-06-15T23:59:59Z | |||
| Heure de fin EndTime | Horodatage indiquant le moment où une activité spécifique a été achevée. | ||
| Description Alors que StartTime indique le début d’un événement, EndTime en marque la fin. Cette distinction est particulièrement utile pour les activités qui ont une durée, telles que « Customs Clearance » ou « Goods Loading ». La différence entre EndTime et StartTime correspond au temps de traitement de l’activité. Dans l’analyse de Process Mining, disposer d’une heure de début et d’une heure de fin permet d’analyser plus précisément la durée des activités et de distinguer le temps de traitement du temps d’attente. Il devient ainsi possible de localiser précisément les inefficacités, qu’elles se situent dans l’exécution d’une tâche ou dans les transferts entre tâches. Pourquoi c’est important Permet de calculer précisément les temps de traitement des activités et de distinguer le temps de travail effectif du temps d’attente entre les événements. Où les obtenir Comme StartTime, cette information provient des tables du gestionnaire des événements. Elle peut correspondre à un événement « completed » distinct pour une activité donnée. Exemples 2023-04-15T11:30:00Z2023-04-16T15:00:00Z2023-04-20T09:45:00Z | |||
| Livraison à temps IsOnTimeDelivery | Indicateur booléen précisant si les marchandises ont été livrées à la date de livraison demandée ou avant celle-ci. | ||
| Description Il s’agit d’un attribut calculé qui compare l’horodatage de l’activité « Goods Delivered » à la « Requested Delivery Date ». Sa valeur est true si la livraison a été effectuée à temps ou en avance, et false si elle a été effectuée en retard. Cet attribut simplifie l’analyse de la performance en fournissant un résultat binaire clair pour chaque expédition. Il constitue la base du Dashboard de performance des livraisons à temps et du KPI associé. Les analystes peuvent facilement filtrer les expéditions en retard et analyser leurs causes profondes afin de comprendre les facteurs à l’origine d’une performance insuffisante. Pourquoi c’est important Mesure directement le respect des engagements de livraison et simplifie le calcul et la visualisation du KPI essentiel de livraison à temps. Où les obtenir Cet attribut n’est pas stocké dans SAP TM. Il doit être calculé lors de la transformation des données en comparant l’horodatage réel de l’événement de livraison à la date de livraison demandée. Exemples truefalse | |||
| Mode de transport ModeOfTransport | Mode de transport utilisé pour l’expédition, par exemple la route, le rail, l’air ou la mer. | ||
| Description Cet attribut précise le mode de transport. Chaque mode présente une structure de coûts, des temps de transit et des niveaux de complexité différents. Par exemple, une expédition internationale de fret aérien comprend des activités, telles que le dédouanement, qui diffèrent de celles d’une expédition nationale par camion complet. L’analyse des processus par mode de transport permet de définir des initiatives d’amélioration adaptées. Elle est également essentielle à l’analyse des coûts, notamment pour distinguer le recours au fret premium, comme le transport aérien express, des modes standard plus économiques. Cette segmentation est indispensable pour comprendre et maîtriser les dépenses de transport. Pourquoi c’est important Permet d’analyser les écarts de coûts, de délais et de processus selon le mode de transport, un élément essentiel pour optimiser les coûts et identifier le recours au fret premium. Où les obtenir Il s’agit d’un champ clé du Freight Order ou du Freight Booking, souvent intitulé Transportation Mode ou MOT. Exemples 01 (Route)02 (Rail)04 (Air)05 (Mer) | |||
| Nom du transporteur CarrierName | Nom du transporteur ou du prestataire de services logistiques chargé de l’expédition. | ||
| Description Le nom du transporteur identifie l’entreprise responsable du déplacement physique des marchandises. Il s’agit d’une dimension essentielle pour l’analyse de la performance, car les transporteurs peuvent présenter des niveaux de service, des coûts et une fiabilité différents. Dans le cadre du Process Mining, cet attribut sert à segmenter et à comparer la performance des différents transporteurs. Il permet de créer des fiches d’évaluation, de suivre les taux de livraison à temps par transporteur, de comparer les coûts et d’identifier les transporteurs le plus souvent associés aux retards ou aux litiges. Cette analyse est essentielle à la gestion stratégique des transporteurs et aux achats. Pourquoi c’est important Permet de comparer la performance des différents transporteurs, un élément essentiel pour optimiser leur sélection, les coûts et les niveaux de service. Où les obtenir Cette information est stockée dans le document Freight Order ou Freight Booking. Elle est associée au moyen de la fonction de partenaire métier du transporteur. Exemples DHL ExpressFedEx FreightMaersk LineUnion Pacific Railroad | |||
| Date d’enlèvement planifiée ScheduledPickupDate | Date et heure prévues pour l’enlèvement des marchandises par le transporteur au point d’expédition. | ||
| Description La date d’enlèvement planifiée correspond à l’heure convenue pour le début du transport physique. Il s’agit d’un jalon important de la phase d’exécution de l’expédition. Cet attribut est essentiel pour surveiller la ponctualité du premier trajet. En comparant l’heure d’enlèvement planifiée à l’horodatage réel de l’événement « Goods Picked Up », les entreprises peuvent calculer les retards d’enlèvement. Elles peuvent ainsi évaluer la performance et la fiabilité du site d’expédition comme du transporteur. Pourquoi c’est important Sert de référence pour mesurer la ponctualité de l’enlèvement et identifier les retards dès le début du trajet physique de l’expédition. Où les obtenir Il s’agit d’une date et d’une heure planifiées, stockées dans la séquence des arrêts du Freight Order dans SAP TM. Exemples 2023-05-18T09:00:00Z2023-05-30T14:00:00Z2023-06-12T10:30:00Z | |||
| Dernière mise à jour des données LastDataUpdate | Horodatage de l’extraction ou de l’actualisation la plus récente des données du jeu de données de Process Mining. | ||
| Description Cet attribut indique l’actualité des données analysées. Il correspond à la date et à l’heure auxquelles les données ont été extraites pour la dernière fois des systèmes sources, tels que SAP TM, vers l’outil de Process Mining. Il s’agit d’un élément de métadonnées essentiel pour tout Dashboard ou toute analyse, car il précise l’actualité des résultats. Il aide les utilisateurs à déterminer s’ils consultent des informations en temps réel ou un instantané d’une période antérieure, ce qui est indispensable pour prendre des décisions rapides et éclairées. Pourquoi c’est important Fournit le contexte nécessaire sur l’actualité des données et permet aux utilisateurs de savoir dans quelle mesure l’analyse est à jour. Où les obtenir Cette information est généralement générée et stockée par l’outil ETL (Extract, Transform, Load) ou par le pipeline de données lors de l’ingestion des données. Exemples 2023-10-27T08:00:00Z2023-10-26T08:00:00Z | |||
| Fait l’objet d’un litige IsDisputed | Indicateur booléen précisant si la facture de fret de l’expédition a donné lieu à un litige. | ||
| Description Cet indicateur calculé identifie les expéditions associées à un litige de règlement du fret. Sa valeur est true si un litige a été créé, et false dans le cas contraire. Il peut être déduit de la présence d’une activité « Freight Dispute Created » ou d’un « Dispute Reason » non vide. Cet attribut simplifie l’analyse du processus de règlement du fret. Il permet de calculer facilement le KPI de taux d’écart de facturation du fret et de filtrer toutes les expéditions faisant l’objet d’un litige. Les analystes peuvent ensuite étudier leurs caractéristiques communes, telles que les transporteurs, les itinéraires ou les types de frais, afin d’identifier la cause profonde des erreurs de facturation. Pourquoi c’est important Simplifie l’identification des règlements de fret problématiques et permet de calculer rapidement le taux de litige et d’analyser les causes profondes des erreurs de facturation. Où les obtenir Cet attribut n’est pas stocké dans SAP TM. Il doit être calculé à partir de l’existence d’un cas de litige associé au Freight Settlement Document. Exemples truefalse | |||
| Motif du litige DisputeReason | Motif fourni lorsqu’une facture de fret fait l’objet d’un litige. | ||
| Description Lorsque la facture d’un transporteur ne correspond pas au coût attendu calculé dans SAP TM, un litige est créé. Cet attribut enregistre la raison de l’écart, par exemple « Incorrect Rate », « Duplicate Invoice » ou « Accessorial Charge Not Approved ». L’analyse des motifs de litige est essentielle au Dashboard consacré aux erreurs et aux litiges de facturation du fret. Elle aide à identifier les causes profondes des erreurs de facturation, qu’elles soient liées aux données de référence, aux erreurs du transporteur ou à des défaillances opérationnelles. L’organisation peut ainsi prendre des mesures ciblées pour réduire les litiges, accélérer le cycle de paiement et diminuer la charge administrative. Pourquoi c’est important Fournit la cause profonde des erreurs de facturation du fret et permet de prendre des mesures ciblées pour réduire les litiges sur les factures et améliorer le processus de règlement. Où les obtenir Cette information est enregistrée dans le cas de gestion des litiges associé à un Freight Settlement Document. Exemples Écart de tarifPoids incorrectFrais de surestaries non approuvésFacture en double | |||
| Motif du retard DelayReason | Code ou texte expliquant la raison d’un retard de l’expédition. | ||
| Description L’attribut Motif du retard enregistre la cause d’un écart par rapport au planning prévu, par exemple « Bad Weather », « Customs Hold » ou « Carrier Delay ». Cette information est souvent signalée manuellement ou transmise par le transporteur au moyen d’un message d’événement. Il s’agit d’un attribut particulièrement utile pour l’analyse des causes profondes. Il permet aux analystes de ne pas se limiter au constat d’un retard, mais d’en comprendre la raison. En catégorisant et en quantifiant les motifs de retard, les organisations peuvent identifier les problèmes récurrents et concentrer leurs efforts d’amélioration sur les domaines les plus importants, comme l’amélioration de la communication avec les transporteurs ou l’optimisation des itinéraires pour éviter les congestions. Pourquoi c’est important Explique la cause des retards d’expédition et permet d’analyser leurs causes profondes afin de réduire les exceptions et d’améliorer la performance des livraisons à temps. Où les obtenir Cette information peut être enregistrée sous forme de code d’événement et de motif dans le framework de gestion des événements de SAP TM lorsqu’un événement « Arrival/Departure Delayed » est signalé. Exemples RETARD_MÉTÉOINSPECTION_DOUANIÈRECONGESTION_PORTUAIREPANNE_MÉCANIQUE | |||
| Nom de l’utilisateur UserName | Identifiant ou nom de la personne ayant exécuté une activité. | ||
| Description Cet attribut identifie l’employé ou l’utilisateur responsable de l’exécution d’une activité manuelle, telle que « Shipment Planned » ou « Invoice Verified ». Il relie les étapes du processus aux personnes ou aux équipes qui les ont réalisées. L’analyse des activités par utilisateur aide à comprendre la répartition de la charge de travail, à identifier les besoins de formation et à reconnaître les meilleurs contributeurs. Elle est également essentielle à des fins de conformité et d’audit, car elle fournit un historique précis des actions réalisées, de leurs auteurs et de leur date. Elle peut révéler des différences dans la manière dont les utilisateurs exécutent une même tâche. Pourquoi c’est important Associe les étapes manuelles du processus à des utilisateurs précis et permet d’analyser la charge de travail, la performance individuelle et les besoins de formation. Où les obtenir Se trouve généralement dans le journal des modifications ou dans les tables d’en-tête des documents de transport, notamment dans les champs « Created By » ou « Changed By » (par exemple, ERNAM, AENAM). Exemples CB998030SMITHJPLANNER_EU | |||
| Pays d’origine OriginCountry | Pays depuis lequel l’expédition est effectuée. | ||
| Description Cet attribut identifie le pays de départ du trajet de transport. Il est déduit de l’adresse du lieu d’enlèvement initial. L’analyse du processus par pays d’origine aide à identifier les différences régionales en matière de performance, de coûts et de complexité. Elle peut mettre en évidence les pays où les délais de dédouanement sont plus longs, où les coûts des transporteurs sont plus élevés ou où les retards sont plus fréquents. Cette segmentation géographique est essentielle à la gestion d’une chaîne d’approvisionnement mondiale et à l’adaptation des stratégies logistiques aux spécificités de chaque région. Pourquoi c’est important Permet d’analyser les performances des expéditions par zone géographique et d’identifier les goulots d’étranglement régionaux, les facteurs de coûts ou les variations du processus. Où les obtenir Cette information fait partie des données d’adresse du lieu source du premier arrêt du Freight Order. Exemples DEUSCNMX | |||
| Pays de destination DestinationCountry | Pays vers lequel l’expédition est livrée. | ||
| Description Cet attribut identifie le pays de destination finale de l’expédition, à partir de l’adresse du dernier lieu de livraison. Comme pour le pays d’origine, l’analyse par pays de destination est essentielle pour comprendre les difficultés logistiques régionales. Elle peut révéler, par exemple, les destinations les plus exposées aux retards de livraison ou présentant les coûts de livraison du dernier kilomètre les plus élevés. Cette analyse est utile pour optimiser le réseau, définir des attentes de livraison réalistes et gérer la conformité du commerce international. Pourquoi c’est important Permet d’analyser la performance du processus par destination et de mettre en évidence les problèmes propres à certaines régions de livraison, autorités douanières ou transporteurs du dernier kilomètre. Où les obtenir Cette information fait partie des données d’adresse du lieu de destination du dernier arrêt du Freight Order. Exemples FRCAGBJP | |||
| Statut de l’expédition ShipmentStatus | Statut global actuel de l’expédition au moment de l’extraction des données. | ||
| Description Le statut de l’expédition fournit un instantané de sa position dans son cycle de vie, par exemple « In Planning », « In Execution », « Delivered » ou « Cancelled ». Il représente le dernier état connu du cas. Cet attribut est utile pour filtrer et analyser les expéditions en fonction de leur résultat. Un analyste peut, par exemple, se concentrer uniquement sur les expéditions terminées afin de mesurer le temps de cycle de bout en bout, ou analyser uniquement les expéditions annulées pour comprendre les causes profondes des annulations. Il fournit un contexte important pour interpréter le flux du processus. Pourquoi c’est important Fournit une vue d’ensemble du résultat de chaque expédition et permet de filtrer et d’analyser les expéditions terminées, annulées ou encore en transit. Où les obtenir Il s’agit du champ de statut global figurant dans l’en-tête du document Freight Order ou Freight Booking dans SAP TM. Exemples En planificationPrêt pour le transportEn cours d'exécutionExécutéAnnulé | |||
| Système source SourceSystem | Système à l’origine des données d’événement. | ||
| Description Cet attribut identifie le système source qui a généré les données, par exemple SAP TM, SAP ERP ou le portail d’un transporteur externe. Il fournit le contexte nécessaire sur l’origine des données et aide à comprendre les points d’intégration. Dans un environnement complexe, connaître le système source est essentiel pour valider les données, résoudre les problèmes d’intégration et comprendre la contribution des différents systèmes au processus global. Il peut notamment distinguer un événement signalé par un système interne d’un événement transmis par un prestataire logistique tiers. Pourquoi c’est important Identifie l’origine des données, un élément essentiel pour la gouvernance des données, le dépannage et la compréhension de l’orchestration du processus entre plusieurs systèmes. Où les obtenir Cette information est souvent stockée dans le journal système ou peut être déduite de l’interface utilisée ou de l’utilisateur ayant créé l’entrée de données. Exemples SAP_TM_P01SAP_ERP_E01CARRIER_PORTAL_XYZ | |||
Activités de gestion des transports
| Activité | Description | ||
|---|---|---|---|
| Demande de transport reçue | Cette activité marque le début du processus de transport et correspond à la création d’un besoin de transport. Dans SAP TM, elle est généralement enregistrée lors de la création d’un Forwarding Order (FWO) ou d’un Order-based Transportation Requirement (OTR). | ||
| Pourquoi c’est important Il s’agit de l’événement de début principal du processus d’expédition de bout en bout. L’analyse du délai entre cette activité et la fin de la planification est essentielle pour mesurer l’efficacité de la planification. Où les obtenir Cet événement est enregistré lors de la création d’un Forwarding Order (type de document FWO) ou d’un autre document de besoin de transport. L’horodatage de création dans la table d’en-tête, telle que /SCMTMS/D_TORROT, sert d’heure de l’événement. Collecte Enregistrez la date et l’heure de création du document Forwarding Order ou Transportation Requirement. Type d’événement explicit | |||
| Document de règlement du transport créé | Cette activité marque la création du Freight Settlement Document (FSD), qui calcule les coûts de transport à payer au transporteur. Il s’agit du document principal utilisé pour les provisions et la vérification des factures. | ||
| Pourquoi c’est important Cet événement marque le début de la phase de règlement financier du processus de transport. L’analyse du délai entre la livraison et la création du règlement aide à identifier les goulots d’étranglement du traitement financier. Où les obtenir Il s’agit d’un événement explicite, enregistré lors de la création d’un Freight Settlement Document. L’horodatage de création est disponible dans la table d’en-tête de ce document, /SCMTMS/D_SFIRHD. Collecte Utilisez la date et l’heure de création du Freight Settlement Document. Type d’événement explicit | |||
| Expédition annulée | Cette activité correspond à l’annulation d’une expédition après sa demande ou sa planification. Elle constitue le point terminal des processus qui ne passent pas à l’exécution. | ||
| Pourquoi c’est important Le suivi des annulations aide à identifier les causes des échecs du processus, telles que l’évolution de la demande client ou les erreurs de planification. Un taux d’annulation élevé peut révéler des problèmes sous-jacents dans la gestion des commandes ou la planification. Où les obtenir Cet événement est déduit du passage du statut du cycle de vie du Forwarding Order ou du Freight Order à « Cancelled ». L’horodatage de cette modification de statut marque l’événement. Collecte Enregistrez l’horodatage auquel le statut du cycle de vie du document passe à « Cancelled ». Type d’événement inferred | |||
| Expédition planifiée | Cette activité indique que les besoins de transport ont été regroupés dans un plan d’expédition concret. Elle est enregistrée lors de la création et de l’enregistrement d’un Freight Order, pour le transport routier ou ferroviaire, ou d’un Freight Booking, pour le transport maritime ou aérien, contenant l’itinéraire et les ressources planifiés. | ||
| Pourquoi c’est important L’achèvement de cette étape est essentiel au lancement de l’exécution logistique. Le temps de cycle entre la demande et cette activité constitue un KPI important pour mesurer l’efficacité de la planification. Où les obtenir Cet événement correspond à la création d’un document Freight Order ou Freight Booking. Il peut également être déduit d’une modification du statut du document, par exemple lorsque le statut de planification passe à « Planned ». Les tables pertinentes sont généralement /SCMTMS/D_TORROT pour les données d’en-tête. Collecte Utilisez l’horodatage de création du document Freight Order ou Freight Booking. Type d’événement explicit | |||
| Marchandises enlevées | Cette activité marque le début du transport physique des marchandises. Elle est enregistrée lorsque le transporteur signale que les marchandises ont été chargées et ont quitté le site de l’expéditeur. | ||
| Pourquoi c’est important Il s’agit d’une étape essentielle de l’exécution, qui marque le début de la phase de transport. Elle est indispensable au suivi de la ponctualité et à la fourniture d’une visibilité précise sur les expéditions. Où les obtenir Cet événement est généralement enregistré dans SAP Event Management, intégré à SAP TM, sous la forme d’un événement « Departure » ou « Loading End ». Il met à jour le statut d’exécution du Freight Order. Il peut également être enregistré directement dans le Freight Order. Collecte Utilisez l’horodatage de l’événement d’exécution « Departure » signalé pour le site d’origine du Freight Order. Type d’événement explicit | |||
| Marchandises livrées | Cette activité correspond à l’arrivée de l’expédition à sa destination finale et à l’achèvement du transport physique. Elle est enregistrée lorsque le transporteur signale que les marchandises ont été déchargées sur le site du destinataire. | ||
| Pourquoi c’est important Il s’agit de l’étape la plus importante pour mesurer la ponctualité des livraisons et la satisfaction des clients. Elle sert également généralement de déclencheur aux processus de facturation et de règlement. Où les obtenir Cet événement est enregistré dans SAP TM sous la forme d’un événement d’exécution « Arrival at Destination » ou « Unloading End », qui met à jour le statut d’exécution du Freight Order. Les données sont souvent transmises par le transporteur. Collecte Utilisez l’horodatage de l’événement d’exécution « Arrival at Destination » signalé pour le dernier arrêt du Freight Order. Type d’événement explicit | |||
| Paiement traité | Cette dernière activité confirme que le transporteur a été payé pour les services de transport. Elle intervient généralement dans le système ERP connecté, après réception de la facture vérifiée depuis SAP TM. | ||
| Pourquoi c’est important Elle marque la véritable fin du cycle de vie du transport de bout en bout. Elle est essentielle pour mesurer la durée globale du processus et les KPI de ponctualité des paiements. Où les obtenir Ces informations se trouvent dans le système ERP, par exemple S/4HANA Finance. Elles peuvent être reliées au Freight Settlement Document grâce au numéro de facture. Une mise à jour du statut peut être renvoyée à SAP TM, ou les données doivent être extraites de tables ERP telles que BKPF et BSEG. Collecte Récupérez la date de compensation du paiement dans le système ERP et reliez-la à l’expédition au moyen de la référence de facture. Type d’événement explicit | |||
| Preuve de livraison reçue | Cette activité intervient lorsque le document Proof of Delivery (POD) signé est reçu du transporteur et enregistré dans le système. Elle confirme que le destinataire a accepté les marchandises. | ||
| Pourquoi c’est important La réception du POD est un préalable essentiel à la facturation du client et au règlement des frais de transport avec le transporteur. Les retards à cette étape ont un impact direct sur le cycle de conversion de trésorerie. Où les obtenir Cet événement est généralement déduit d’une modification du statut du Freight Order, par exemple lorsque le statut du POD passe à « Received ». La modification de ce champ de statut fournit l’horodatage de l’activité. Collecte Enregistrez l’horodatage auquel le statut Proof of Delivery du Freight Order est mis à jour sur « Received ». Type d’événement inferred | |||
| Transporteur affecté | Cette activité indique qu’un prestataire de services de transport précis, ou transporteur, a été sélectionné et affecté à l’expédition. Cette affectation peut être effectuée manuellement, par une planification automatisée ou dans le cadre d’un processus d’appel d’offres. | ||
| Pourquoi c’est important L’affectation d’un transporteur est une étape essentielle avant la confirmation et l’exécution d’une expédition. Son suivi permet d’analyser les processus de sélection des transporteurs et de garantir la ponctualité des réservations. Où les obtenir Cet événement est enregistré lorsque le champ du transporteur, c’est-à-dire le partenaire ayant le rôle « Carrier », est renseigné dans le Freight Order ou le Freight Booking. Dans le cadre d’un appel d’offres, il correspond à l’attribution d’une Freight Request for Quotation. Collecte Identifiez l’horodatage auquel la fonction partenaire du transporteur est renseignée ou confirmée pour la première fois dans le Freight Order. Type d’événement inferred | |||
| Déclaration en douane déposée | Pour les expéditions internationales, cette activité correspond à la transmission aux autorités des documents douaniers requis. Elle constitue un préalable à l’obtention de l’autorisation d’exporter ou d’importer les marchandises. | ||
| Pourquoi c’est important Le dépôt ponctuel des déclarations en douane est essentiel pour éviter les retards aux frontières. Cette activité permet de suivre l’efficacité du processus de représentation en douane. Où les obtenir Cet événement peut être enregistré comme un événement d’exécution précis signalé par un représentant en douane, ou résulter d’une modification du statut dans un système intégré de gestion douanière, tel que SAP GTS. Le Freight Order est mis à jour en conséquence. Collecte Enregistrez l’horodatage de l’événement d’exécution « Customs Declaration Filed » ou de la modification de statut correspondante. Type d’événement explicit | |||
| Dédouanement effectué | Cette activité indique que l’expédition a été approuvée par les autorités douanières et peut poursuivre son acheminement. Cet événement constitue une étape importante de la logistique internationale, car il élimine un goulot d’étranglement potentiel majeur. | ||
| Pourquoi c’est important Le dédouanement est souvent à l’origine de retards importants dans les chaînes logistiques internationales. Le suivi de la durée et du taux de réussite de cette activité est essentiel pour améliorer les délais de transport internationaux. Où les obtenir Cet événement est enregistré sous la forme d’un événement d’exécution « Customs Clearance », généralement signalé par un représentant en douane ou un prestataire externe de visibilité, puis mis à jour dans le suivi de l’exécution du Freight Order. Collecte Utilisez l’horodatage de l’événement d’exécution « Customs Clearance » signalé et associé au Freight Order. Type d’événement explicit | |||
| Expédition confirmée par le transporteur | Cet événement représente l’accord du transporteur pour exécuter le transport conformément au plan. La confirmation est généralement reçue par un message EDI, une mise à jour dans le portail du transporteur ou une saisie manuelle, qui actualise le statut du Freight Order. | ||
| Pourquoi c’est important La confirmation du transporteur officialise son engagement envers le plan d’expédition et réduit l’incertitude. Tout retard dans sa réception peut mettre en péril l’ensemble du calendrier d’expédition. Où les obtenir Cet événement est déduit d’une modification du champ de statut de confirmation du Freight Order ou du Freight Booking. Une valeur de statut précise, telle que « Confirmed », est définie dans la gestion des statuts du document. Collecte Suivez les modifications des champs de statut de confirmation dans le document Freight Order. Type d’événement inferred | |||
| Expédition réacheminée | Cette activité indique une modification imprévue de l’itinéraire ou du calendrier de l’expédition après sa confirmation. Elle peut être due à des perturbations, à une demande du client ou à des problèmes logistiques. | ||
| Pourquoi c’est important Les réacheminements entraînent souvent une hausse des coûts et des retards. L’identification de leur fréquence et de leurs causes contribue à améliorer la précision de la planification et la stabilité opérationnelle. Où les obtenir Cet événement est déduit de la détection de modifications importantes des étapes, des sites ou des dates d’un Freight Order après le début de son exécution. Les documents de modification, dans les tables CDHDR et CDPOS, peuvent être analysés à cette fin. Collecte Détectez les modifications des champs clés de l’itinéraire dans le document Freight Order après l’événement « Shipment Confirmed by Carrier ». Type d’événement inferred | |||
| Facture vérifiée | Cette activité indique que la facture du transporteur a été rapprochée avec succès du Freight Settlement Document et approuvée pour paiement. Il s’agit de la dernière étape avant le lancement du processus de paiement dans le système ERP. | ||
| Pourquoi c’est important Cette activité clôt le processus d’audit et de vérification des coûts de transport. Les retards à cette étape peuvent entraîner des paiements tardifs aux transporteurs et nuire à la relation avec eux. Où les obtenir Cet événement est déduit d’une modification du statut du Freight Settlement Document, par exemple « Ready for Accrual » ou « Transferred for Posting », indiquant que le document a été transmis au système ERP pour paiement. Collecte Suivez l’horodatage auquel le statut du cycle de vie du FSD indique qu’il est prêt pour le paiement ou qu’il a été comptabilisé. Type d’événement inferred | |||
| Litige de transport créé | Cet événement indique qu’un écart a été constaté entre la facture du transporteur et les coûts calculés dans le Freight Settlement Document. Il déclenche un flux de travail de résolution des litiges. | ||
| Pourquoi c’est important Les litiges retardent les paiements aux transporteurs et nécessitent un travail administratif pour être résolus. Le suivi de cette activité aide à identifier les causes profondes des erreurs de facturation, telles que des tarifs incorrects ou des frais accessoires. Où les obtenir Cet événement peut être déduit d’une modification du statut du Freight Settlement Document, lorsque le statut « Dispute » est défini. Il peut également impliquer la création d’un document distinct pour le dossier de litige. Collecte Enregistrez l’horodatage auquel le statut de litige est défini dans le Freight Settlement Document. Type d’événement inferred | |||
Guides d’extraction
Étapes
- Identifiez et activez les API des CDS Views : Connectez-vous à votre système SAP S/4HANA. Utilisez la transaction
/IWFND/MAINT_SERVICEpour vérifier que les services OData nécessaires aux CDS Views principales sont actifs. Vérifiez notamment les services associés à I_TransportationOrder, C_TranspOrdExecutionEvent, I_ForwardingOrder et I_FreightSettlementDocument. S’ils ne sont pas actifs, demandez à votre administrateur SAP de les ajouter et de les activer depuis le système backend. - Établissez la connectivité avec l’API : Demandez à votre administrateur SAP l’URL racine des services OData. Configurez une application cliente, par exemple un script Python utilisant la bibliothèque requests, un outil ETL commercial ou un outil tel que Postman, afin de vous connecter à l’API. Vous devrez configurer l’authentification, généralement au moyen de l’authentification Basic (nom d’utilisateur et mot de passe) ou d’OAuth 2.0 pour une connexion plus sécurisée.
- Définissez le périmètre d’extraction : Déterminez les données à extraire. Définissez une période précise, par exemple les six derniers mois. Identifiez les unités organisationnelles pertinentes à utiliser comme filtres, telles que le code société, ainsi que les types de documents concernés, comme Freight Order Type, afin de garantir la pertinence des données pour le processus analysé.
- Construisez la requête de base sur les expéditions : Commencez par interroger la CDS View I_TransportationOrder. Elle constitue l’objet central des expéditions, également appelées Freight Orders ou Freight Bookings. Utilisez le paramètre OData
$selectpour choisir les colonnes nécessaires, notamment les attributs recommandés tels que CarrierName, ModeOfTransport et RequestedDeliveryDate. Appliquez un$filterpour limiter les données selon la période et les autres paramètres du périmètre. - Exécutez la requête et récupérez les événements de transport : Utilisez la CDS View C_TranspOrdExecutionEvent pour extraire les principaux événements logistiques. Filtrez cette vue sur les valeurs
EventCodecorrespondant à des activités telles que « Goods Picked Up » (DEPARTURE) et « Goods Delivered » (ARRIVAL_AT_DESTINATION). Reliez ensuite ces données aux données de base des expéditions à l’aide de l’UUID de TransportationOrder. - Interrogez les objets métier associés : Pour couvrir l’ensemble du processus, vous devez interroger d’autres CDS Views associées. Interrogez I_ForwardingOrder pour l’activité « Transportation Request Received » et I_FreightSettlementDocument pour les activités financières telles que « Freight Settlement Created », « Freight Dispute Created » et « Invoice Verified ».
- Extrayez les activités fondées sur les statuts : De nombreuses activités ne sont pas des événements distincts, mais des changements de statut du document principal. Pour des activités telles que « Carrier Assigned », « Shipment Confirmed By Carrier » et « Shipment Cancelled », interrogez la vue I_TransportationOrder et utilisez la valeur
LastChangeDateTimeassociée au champ de statut concerné comme heure de l’événement. Cette étape nécessite une correspondance précise entre les codes de statut et les activités métier. - Unifiez et transformez les données : Regroupez les données extraites de toutes les sources dans une structure unique de journal d’événements. Pour chaque activité extraite, créez une ligne contenant les colonnes requises : ShipmentId, ActivityName et EventTime. Vérifiez que tous les attributs recommandés de la requête de base sur les expéditions sont présents sur chaque ligne associée à cette expédition. Cette étape correspond conceptuellement à une opération SQL
UNION ALL. - Gérez les événements complexes et externes : Pour des activités telles que « Customs Cleared » ou « Payment Processed », les données peuvent se trouver dans des champs spécifiques, voire dans des systèmes externes. La logique de requête fournie utilise des champs standard comme approximation. Vous devrez peut-être adapter la requête pour la relier à des CDS Views dédiées aux douanes ou à une extraction ERP distincte pour les données de paiement, sur la base du numéro du Freight Settlement Document.
- Mettez les données au format ProcessMind : Enregistrez le jeu de données consolidé final au format CSV. Vérifiez que les en-têtes de colonnes correspondent aux exigences d’importation, en associant par exemple votre colonne
ShipmentIdau champCaseIddans les paramètres de l’outil. Vérifiez que les horodatages utilisent un format cohérent, de préférence UTC (YYYY-MM-DDTHH:MM:SSZ).
Configuration
- CDS Views principales : L’extraction repose principalement sur I_TransportationOrder (pour les Freight Orders), C_TranspOrdExecutionEvent (pour les événements d’exécution), I_ForwardingOrder (pour les demandes de transport) et I_FreightSettlementDocument (pour le règlement).
- Filtrage par période : Il est essentiel d’appliquer un filtre de date afin de maîtriser le volume de données. Utilisez
CreationDateTimedans I_TransportationOrder ouActualBusinessDateTimedans C_TranspOrdExecutionEvent. Pour une première analyse, une période de trois à six mois est recommandée. - Filtrage par type de document : Pour cibler l’analyse, filtrez les types de documents à l’aide du champ
TransportationOrderType. Vous pourrez ainsi distinguer différents scénarios logistiques, comme les expéditions standard sortantes et les transferts de stock. - Filtres organisationnels : Si nécessaire, filtrez selon
PurchasingOrganizationou d’autres champs organisationnels afin de limiter les données à une unité opérationnelle ou à une région donnée. - Pagination de l’API : Pour les grands volumes de données, utilisez les paramètres OData
$topet$skipafin de récupérer les données par pages plus petites. Cette méthode évite les dépassements de délai de l’API et réduit la consommation mémoire côté client. Une taille de page comprise entre 1 000 et 5 000 lignes est souvent efficace. - Prérequis : L’utilisateur ou le compte de service qui effectue l’extraction doit disposer des autorisations nécessaires sur les services OData sous-jacents (objet d’autorisation S_SERVICE) ainsi que sur les données métier des CDS Views. Les services correspondants doivent être activés dans SAP Gateway (
/IWFND/MAINT_SERVICE).
a Exemple de requête 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' Étapes
- Vérifiez que l’accès direct en lecture au schéma SAP TM HANA est disponible via un client SQL, une vue de base de données ou un service d’extraction approuvé. Obtenez la chaîne de connexion, les identifiants, le nom du schéma et les autorisations nécessaires pour lire les tables SAP TM concernées. N’interrogez pas directement la production sans les validations de sécurité et de gestion du changement requises.
- Confirmez les noms physiques des tables et des colonnes dans votre système. La requête ci-dessous utilise /SCMTMS/D_TORROT et /SCMTMS/D_TOSTOP comme tables principales, mais les données de statut, de partenaire, de date, de coût, de douane, de document et de paiement peuvent être stockées dans des tables ou extensions supplémentaires selon la version et l’implémentation de SAP TM. Ne remplacez les espaces réservés documentés qu’après les avoir validés dans le catalogue système et le modèle de données.
- Définissez la période d’extraction à l’aide de [Start timestamp] et [End timestamp]. Pour une première analyse, une période glissante de trois à six mois convient généralement. N’utilisez une période plus longue qu’après avoir vérifié les performances de la requête et la durée de conservation de l’historique des événements.
- Identifiez la clé de dossier de l’expédition. La requête utilise TOR_ID de /SCMTMS/D_TORROT comme identifiant d’expédition. Si votre implémentation utilise un autre identifiant stable, remplacez la clé de dossier de manière cohérente dans chaque branche d’activité et conservez l’identifiant du document d’origine comme attribut d’audit supplémentaire, s’il est disponible.
- Associez chaque activité métier à une condition source explicite. ProcessMind lit le journal d’événements tel quel. La requête crée donc une ligne pour chaque activité extraite. Elle ne déduit pas les jalons à partir de l’ordre des documents, des horodatages manquants ou de la progression des statuts.
- Validez les correspondances entre statuts et horodatages avec les planificateurs transport et les responsables des processus métier. Confirmez notamment les valeurs représentant la création de la demande, la planification, l’affectation du transporteur, la confirmation du transporteur, l’enlèvement, le dépôt de la déclaration en douane, le dédouanement, le changement d’itinéraire, la livraison, la réception du POD, le règlement du fret, le litige, la vérification de la facture, l’annulation et le paiement.
- Exécutez la requête dans le client SQL approuvé. Vérifiez que le résultat contient une ligne par événement, un ShipmentId non nul, un ActivityName non nul et un EventTime valide. Recherchez les doublons causés par les jointures un-à-plusieurs et ajustez si nécessaire les correspondances sources ou la logique d’agrégation.
- Enrichissez le résultat avec les attributs recommandés lorsque les champs sources correspondants sont disponibles. La requête contient des espaces réservés pour les champs qui ne peuvent pas être nommés de manière fiable sans métadonnées propres au système. Ne remplacez ces espaces réservés que par des colonnes vérifiées ou des vues approuvées.
- Appliquez les règles finales de qualité des données. Supprimez les lignes dépourvues d’identifiant de dossier ou d’horodatage d’événement, normalisez les horodatages sur un même fuseau horaire, conservez les horodatages sources à des fins d’audit et vérifiez que EndTime n’est pas antérieur à EventTime. Ne créez pas d’événements artificiels pour compenser des enregistrements sources manquants.
- Exportez le résultat au format CSV UTF-8 ou dans un autre format tabulaire pris en charge par ProcessMind. Utilisez exactement les noms de colonnes ShipmentId, ActivityName et EventTime. Ajoutez EndTime et les attributs recommandés lorsqu’ils sont renseignés. Importez le fichier ou connectez le résultat de la requête approuvée à ProcessMind, puis vérifiez que les champs Shipment case identifier et Activity Name sont correctement associés.
Configuration
- Tables sources principales : Utilisez /SCMTMS/D_TORROT pour les données racines des ordres de transport ou Freight Orders et /SCMTMS/D_TOSTOP pour les arrêts et les jalons. Validez tous les objets sources supplémentaires dans le système SAP TM cible avant le déploiement.
- Identifiant de dossier : Utilisez un identifiant stable de l’expédition ou du Freight Order. L’exemple de requête utilise TOR_ID comme ShipmentId. Vérifiez que cet identifiant reste stable lors de la planification, de l’exécution, du règlement et de l’enregistrement des paiements dans l’ERP.
- Correspondance des activités : Configurez des conditions sources explicites pour les 15 activités requises. Chaque activité doit être émise sous la forme d’une ligne physique du journal d’événements. ProcessMind ne déduit pas les activités à partir d’autres lignes.
- Période : Commencez par un historique de trois à six mois. Appliquez les prédicats EventTime le plus tôt possible dans chaque branche source. Pour les chargements incrémentiels, utilisez un watermark contrôlé et prévoyez une petite fenêtre de chevauchement afin de prendre en compte les mises à jour tardives.
- Filtres métier : Configurez les filtres relatifs au code société, à l’organisation d’achat, à l’organisation commerciale, au type de document, au mode de transport, au transporteur, à l’usine, au lieu et au statut selon l’implémentation. Utilisez des espaces réservés tels que [Company code filter] lorsque le champ applicable n’a pas été vérifié.
- Gestion des horodatages : Convertissez les horodatages sources dans un fuseau horaire cohérent. Si une source stocke séparément la date et l’heure, combinez-les au moyen de la conversion propre à la version HANA utilisée. Conservez l’horodatage source d’origine lorsque la traçabilité est requise.
- Attributs recommandés : Renseignez CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost et IsOnTimeDelivery à partir de champs sources vérifiés ou de vues de calcul approuvées. Laissez les valeurs nulles lorsque la source ne contient pas de valeur fiable.
- Performances : Limitez la période, ne sélectionnez que les colonnes nécessaires, filtrez avant les jointures, évitez les analyses complètes non restreintes des tables et examinez le plan d’exécution HANA. Pour les grands volumes, utilisez des prédicats tenant compte du partitionnement, une extraction incrémentielle, des tables de staging ou une vue de calcul approuvée.
- Gestion des doublons : Les jointures un-à-plusieurs peuvent produire plusieurs lignes pour une même activité. Utilisez une clé d’événement vérifiée, une clé de document source ou une règle d’agrégation déterministe. N’appliquez pas de déduplication arbitraire qui pourrait supprimer des événements répétés légitimes.
- Prérequis : Autorisations de base de données nécessaires, accès aux données SAP TM, accès aux données ERP ou de règlement connectées, outils d’extraction approuvés et confirmation que les modules SAP TM, les intégrations et les extensions spécifiques concernés sont actifs.
- Correspondance propre au système : Les codes de statut, rôles des partenaires, jalons douaniers, statuts de règlement, statuts de facture et statuts de paiement varient selon la version et la configuration. Conservez les correspondances dans un document de configuration contrôlé et testez-les après chaque mise à niveau.
a Exemple de requête 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; Étapes
- Définissez les besoins en données : Commencez par confirmer la logique exacte de chacune des 15 activités requises et de tous les attributs. Il s’agit d’associer chaque activité à des changements de statut, des événements de création ou des liens entre documents précis dans votre système SAP TM. Déterminez par exemple le statut d’exécution exact qui signifie « Goods Picked Up ».
- Accédez à l’environnement de développement ABAP : Connectez-vous à SAP GUI et ouvrez l’éditeur ABAP à l’aide du code de transaction
SE38. Saisissez un nom pour votre nouveau programme, par exempleZTM_PROCESS_EXTRACT, puis cliquez sur « Create ». Indiquez un titre et définissez le type de programme sur « Executable Program ». - Créez l’écran de sélection : Dans le programme, définissez l’écran de sélection qui sera présenté aux utilisateurs. Il doit inclure des paramètres de filtrage, comme une période pour la date de création du Freight Order (
SO_CREDT), ainsi que des select-options pour les types de documents (SO_TYPE) ou les transporteurs (SO_CARR). - Définissez la structure de sortie : Définissez une structure de table interne correspondant au format requis pour le journal d’événements. Elle doit contenir les champs
ShipmentId,ActivityName,EventTime,EndTime,CarrierName,RequestedDeliveryDate,ModeOfTransport,TotalFreightCostetIsOnTimeDelivery. - Implémentez la logique de sélection des données : Écrivez la logique ABAP principale pour sélectionner les données correspondant aux 15 activités. Cette étape implique généralement l’interrogation de plusieurs tables SAP TM. Commencez par sélectionner les documents d’expédition principaux, tels que les Freight Orders, dans la période définie.
- Extrayez les événements de planification et d’exécution : Pour chaque document d’expédition sélectionné, par exemple un Freight Order, interrogez les tables et objets métier associés afin de trouver les horodatages des différents événements. Utilisez la table
/SCMTMS/D_TORROTpour la création du Freight Order (« Shipment Planned »), l’affectation du transporteur (« Carrier Assigned ») et les changements de statut d’exécution correspondant à « Goods Picked Up » et « Goods Delivered ». La création du Forwarding Order précédent (/SCMTMS/D_TRQROT) peut représenter « Transportation Request Received ». - Extrayez la confirmation du transporteur et les changements d’itinéraire : Interrogez les tables de statut ou les documents de modification (CDHDR/CDPOS) associés au Freight Order afin d’identifier le moment où le statut
CONFIRMATIONa été défini, ce qui permet de capturer « Shipment Confirmed By Carrier ». Recherchez également les modifications importantes des informations d’itinéraire afin de capturer « Shipment Rerouted ». - Extrayez les événements douaniers : Si vous utilisez SAP Global Trade Services (GTS) ou un module similaire, les événements douaniers (« Customs Declaration Filed », « Customs Cleared ») sont souvent suivis dans des documents liés. La logique doit lire le flux documentaire (
/SCMTMS/D_TORDOC) du Freight Order afin de trouver ces documents associés ainsi que leurs dates de création ou de changement de statut. - Extrayez les événements de règlement et de litige : Interrogez la table d’en-tête du Freight Settlement Document (
/SCMTMS/D_SFIRHD), ainsi que ses postes et statuts associés, afin de capturer les événements « Freight Settlement Created », « Freight Dispute Created » et « Invoice Verified ». Reliez-les au ShipmentId d’origine. - Consolidez les données : Pour chaque événement trouvé, créez un nouvel enregistrement dans la table interne finale. Renseignez
ActivityNameavec l’activité correspondante,EventTimeavec l’horodatage de l’événement etShipmentIdavec l’identifiant du Freight Order ou du Freight Booking. Complétez les autres attributs à partir des documents sources. - Mettez en forme et exportez le fichier : Une fois la table interne finale entièrement renseignée, formatez les données dans un fichier plat. Utilisez les commandes
OPEN DATASET,LOOP AT... TRANSFER...etCLOSE DATASETpour écrire le contenu de la table interne dans un fichier CSV ou TXT sur le serveur d’application SAP, accessible via la transaction AL11. - Planifiez et récupérez le fichier : Le programme ABAP peut être planifié comme tâche d’arrière-plan, via la transaction SM36, afin d’automatiser l’extraction. Le fichier généré peut ensuite être téléchargé du serveur d’application vers un poste local à l’aide de la transaction
CG3Y, pour être importé dans ProcessMind.
Configuration
- Période : L’écran de sélection doit inclure une période obligatoire pour la date de création du document de transport principal, par exemple le Freight Order. Pour une première analyse, une période de trois à six mois est recommandée afin d’obtenir un jeu de données représentatif sans allonger excessivement le temps d’exécution.
- Filtre par type de document : Prévoyez un filtre pour le type de document de transport, par exemple Freight Order ou Freight Booking. Ce filtre est essentiel pour cibler des processus précis, comme le transport routier ou maritime.
- Filtre par transporteur : Permettez aux utilisateurs de filtrer certains transporteurs. Ils pourront ainsi analyser les performances de chaque partenaire logistique.
- Filtres organisationnels : Incluez des filtres pour les unités organisationnelles pertinentes, telles que l’organisation d’achat ou le code société, afin de limiter l’extraction à certains domaines d’activité.
- Optimisation des performances : Pour les grands volumes de données, vérifiez que le code ABAP utilise les champs indexés de la base de données dans les clauses
WHERE, évite autant que possible les boucles imbriquées et ne sélectionne que les champs nécessaires afin de limiter la consommation mémoire. - Prérequis : L’utilisateur qui exécute le rapport doit être autorisé à lancer des programmes ABAP. Le développeur doit disposer de l’autorisation
S_DEVELOP. Le programme lui-même nécessite des autorisations d’accès au système de fichiers du serveur d’application (objetS_DATASET) ainsi qu’aux tables de base de données et objets BOPF TM concernés.
a Exemple de requête 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. Prêt à commencer ?
Utilisez ce modèle pour commencer à optimiser vos processus de transport et réaliser des livraisons plus rapides et moins coûteuses. Commencez dès aujourd’hui à faire apparaître des analyses utiles !
Éliminez dès aujourd’hui les goulots d’étranglement de Transportation Management
Repérez les inefficacités, optimisez les itinéraires et réduisez le temps de cycle de 30 %.
Aucune carte bancaire requise. Configuration en quelques minutes.