Votre modèle de données pour la gestion des transports
Votre modèle de données pour la gestion des transports
- Attributs recommandés à collecter
- Activités clés à suivre
- Conseils d’extraction pour SAP Transportation Management
Attributs de gestion des transports
| Nom | Description | ||
|---|---|---|---|
| Expédition ShipmentId | Identifiant unique d’un déplacement de marchandises, qui sert de cas central pour l’analyse. | ||
| Description L’identifiant de l’expédition est la clé principale 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. En process mining, cet attribut est essentiel pour construire la vue par cas et permettre aux analystes de suivre le parcours complet de chaque expédition. Il permet d’analyser les variantes du processus, les temps de cycle et les résultats associés à chaque expédition, afin d’obtenir une vue complète de la performance du transport. Pourquoi est-ce important ? Il s’agit de l’identifiant de cas fondamental, qui relie tous les événements et points de données à un ordre de transport précis. Il est essentiel à l’analyse du processus de bout en bout. Où trouver ces données Cet identifiant correspond au numéro de l’ordre de fret ou de la réservation de fret dans SAP TM. Il figure 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 précis s’est produit. | ||
| Description L’heure de l’événement indique la date et l’heure précises de chaque activité du processus de transport. Ces données temporelles sont indispensables au calcul des temps de cycle, des durées et des temps d’attente entre les différentes étapes du processus. Dans le cadre de l’analyse, cet attribut sert à remettre les événements dans le bon ordre, à constituer un journal chronologique et à effectuer toutes les analyses de performance liées au temps. Il est essentiel pour repérer les retards, mesurer l’efficacité du processus et évaluer la performance par rapport aux calendriers ou aux accords de niveau de service. Pourquoi est-ce important ? L’horodatage est indispensable pour classer les événements par ordre chronologique et calculer les indicateurs de performance, notamment les temps de cycle et les livraisons dans les délais. Où trouver ces données Cet attribut provient des tables du gestionnaire d’é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 du processus de transport. | ||
| Description Le nom de l’activité décrit une tâche ou une étape clé du cycle de vie d’une expédition, comme « Shipment Planned », « Goods Picked Up » ou « Goods Delivered ». Ces activités constituent les nœuds de la cartographie du processus découverte. L’analyse de leur séquence et de leur fréquence permet de repérer le déroulement standard du processus, les écarts, les goulots d’étranglement et les boucles de reprise. Cet attribut est au cœur de la découverte des processus et du contrôle de conformité dans la gestion du transport. Pourquoi est-ce important ? Cet attribut définit les étapes du processus de transport et permet de visualiser et d’analyser le déroulement complet d’une expédition. Où trouver ces données Cet attribut est généralement dérivé des codes d’événement ou des changements de statut enregistrés dans le gestionnaire d’événements de suivi d’exécution de SAP TM. Il peut provenir de tables qui consignent les changements de statut des objets métier ou de 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 définitif figurant sur la facture du transporteur après règlement. Cet attribut intègre la dimension financière à l’analyse des processus. Les analystes peuvent repérer les variantes de processus les plus coûteuses, calculer le coût des retards ou des changements d’itinéraire et comparer la rentabilité des transporteurs ou des modes de transport. Il est indispensable aux Dashboards consacrés aux dépenses de transport et à l’analyse du coût de service. Pourquoi est-ce important ? Ajoute une dimension financière à l’analyse du processus et permet d’étudier les dépenses de transport, le coût par expédition et l’impact financier des inefficacités. Où trouver ces données Cette information provient du document Freight Settlement dans SAP TM, une fois le calcul des frais effectué. Elle figure notamment 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 indiquées dans la commande client. | ||
| Description La date de livraison demandée constitue l’échéance cible de l’activité « Marchandises livrées ». Elle sert de référence principale pour mesurer la performance des livraisons dans les délais. Cette date est essentielle au calcul de l’indicateur de performance clé (KPI) du taux de livraison dans les délais. En comparant l’horodatage réel de la livraison à la date demandée, les organisations peuvent vérifier si le niveau de service convenu a été respecté. L’analyse des écarts permet de repérer les causes récurrentes des retards, comme les problèmes de performance des transporteurs, les retards de planification ou les blocages en douane. Pourquoi est-ce important ? Cette date sert de référence pour mesurer la performance des livraisons dans les délais, un indicateur clé de la satisfaction client et de l’excellence opérationnelle. Où trouver ces données Cette date est généralement reprise de la commande client précédente ou de l’ordre de transfert de stock dans SAP ERP. Elle est enregistrée dans les champs de date et d’heure de l’unité de fret ou du document 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é précise a été terminée. | ||
| Description Alors que StartTime indique le début d’un événement, EndTime en marque la fin. Cet attribut est particulièrement utile pour les activités qui ont une durée, comme « Customs Clearance » ou « Goods Loading ». La différence entre EndTime et StartTime correspond à la durée de traitement de l’activité. En process mining, disposer des heures de début et 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. Vous pouvez ainsi repérer exactement l’origine des inefficacités, qu’elles se situent dans l’exécution d’une tâche ou dans les transferts entre tâches. Pourquoi est-ce important ? Cet attribut permet de calculer précisément les durées de traitement des activités et de distinguer le temps de travail effectif du temps d’attente entre les événements. Où trouver ces données Comme StartTime, cet attribut provient des tables du gestionnaire d’événements. Il peut correspondre à un événement distinct indiquant la fin d’une activité. Exemples 2023-04-15T11:30:00Z2023-04-16T15:00:00Z2023-04-20T09:45:00Z | |||
| Livraison dans les délais IsOnTimeDelivery | Indicateur booléen précisant si les marchandises ont été livrées à la date demandée ou avant celle-ci. | ||
| Description Cet attribut calculé compare l’horodatage de l’activité « Marchandises livrées » à la « Date de livraison demandée ». Il renvoie la valeur vrai si la livraison a eu lieu à temps ou en avance, et faux si elle a été retardée. Cet attribut simplifie l’analyse des performances en donnant un résultat binaire clair pour chaque expédition. Il sert de base au Dashboard sur la performance des livraisons dans les délais et à l’indicateur de performance clé correspondant. Les analystes peuvent facilement filtrer les expéditions en retard et en rechercher les causes afin de comprendre les facteurs à l’origine des mauvaises performances. Pourquoi est-ce important ? Mesure directement le respect des engagements de livraison et simplifie le calcul et la visualisation de l’indicateur clé de livraison dans les délais. Où trouver ces données Cet attribut n’est pas enregistré 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’avion ou le bateau. | ||
| Description Cet attribut précise le mode de transport. Chaque mode présente des coûts, des durées de transit et des niveaux de complexité différents. Par exemple, une expédition internationale par fret aérien comprend des activités comme le dédouanement, contrairement à 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 repérer le recours au fret premium, comme le transport aérien express, plutôt qu’à des modes standard plus économiques. Cette segmentation aide à comprendre et à maîtriser les dépenses de transport. Pourquoi est-ce important ? Permet d’analyser les écarts de coûts, de délais et de processus selon le mode de transport, afin d’optimiser les coûts et de repérer le recours au fret premium. Où trouver ces données Il s’agit d’un champ clé du document Freight Order ou Freight Booking, souvent intitulé Transportation Mode ou MOT. Exemples 01 (route)02 (rail)04 (avion)05 (mer) | |||
| Nom du transporteur CarrierName | Nom du transporteur ou du prestataire logistique affecté à l’expédition. | ||
| Description Le nom du transporteur désigne l’entreprise chargée du transport physique des marchandises. Il s’agit d’un critère important pour analyser les performances, car les transporteurs peuvent offrir des niveaux de service différents et présenter des écarts de coût et de fiabilité. Dans le cadre du Process Mining, cet attribut permet de segmenter et de comparer les performances des différents transporteurs. Vous pouvez établir des fiches de performance, suivre les taux de livraison dans les délais par transporteur, comparer les coûts et repérer ceux qui sont le plus souvent associés à des retards ou à des litiges. Ces informations sont essentielles pour piloter les relations avec les transporteurs et les achats. Pourquoi est-ce important ? Permet de comparer les performances des transporteurs afin d’optimiser leur sélection, les coûts et les niveaux de service. Où trouver ces données Cette information est enregistrée dans le document Freight Order ou Freight Booking. Elle est associée au transporteur par l’intermédiaire de sa fonction de partenaire commercial. Exemples DHL ExpressFedEx FreightMaersk LineUnion Pacific Railroad | |||
| Date d’enlèvement prévue ScheduledPickupDate | Date et heure prévues pour l’enlèvement des marchandises au point d’expédition par le transporteur. | ||
| Description La date d’enlèvement prévue correspond à l’heure convenue pour le début du transport physique. Elle constitue une étape clé de l’exécution de l’expédition. Cet attribut est essentiel pour suivre le respect des délais sur le premier trajet. En comparant l’heure d’enlèvement prévue à l’horodatage réel de l’événement « Marchandises enlevées », les entreprises peuvent calculer les retards d’enlèvement. Elles peuvent ainsi évaluer la ponctualité et la fiabilité du site d’expédition comme du transporteur. Pourquoi est-ce important ? Sert de référence pour mesurer la ponctualité de l’enlèvement et repérer les retards dès le début du transport physique des marchandises. Où trouver ces données Il s’agit d’une date et d’une heure prévues, enregistrées dans la séquence des étapes du document 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 la dernière extraction ou actualisation des données du jeu de données de process mining. | ||
| Description Cet attribut indique l’actualité des données analysées. Il précise la date et l’heure de leur dernière extraction des systèmes sources, comme SAP TM, vers l’outil de process mining. Il s’agit d’une métadonnée essentielle pour tout Dashboard ou toute analyse, car elle permet de savoir à quel point les résultats sont récents. Les utilisateurs peuvent ainsi 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 éclairées au bon moment. Pourquoi est-ce important ? Cet attribut précise l’actualité des données et permet aux utilisateurs de savoir si l’analyse repose sur des informations récentes. Où trouver ces données Cet attribut est généralement généré et stocké par l’outil ETL (Extract, Transform, Load) ou 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é repère les expéditions associées à un litige sur le règlement du fret. Il renvoie la valeur vrai si un litige a été créé, et faux dans le cas contraire. Il peut être déterminé à partir de la présence de l’activité « Litige sur le fret créé » ou d’un motif de litige non vide. Cet attribut simplifie l’analyse du processus de règlement du fret. Il facilite le calcul de l’indicateur de performance clé du taux d’écart de facturation du fret et permet de filtrer toutes les expéditions faisant l’objet d’un litige. Les analystes peuvent ensuite examiner leurs caractéristiques communes, comme les transporteurs, les itinéraires ou les types de frais, afin d’identifier les causes profondes des erreurs de facturation. Pourquoi est-ce important ? Facilite le repérage des règlements de fret problématiques, le calcul du taux de litige et l’analyse des causes profondes des erreurs de facturation. Où trouver ces données Cet attribut n’est pas enregistré dans SAP TM. Il doit être calculé à partir de l’existence d’un dossier de litige associé au document Freight Settlement. Exemples truefalse | |||
| Motif du litige DisputeReason | Motif indiqué lorsqu’une facture de fret fait l’objet d’un litige. | ||
| Description Lorsqu’une facture de transporteur ne correspond pas au coût attendu calculé dans SAP TM, un litige est créé. Cet attribut en indique le motif, par exemple « Tarif incorrect », « Facture en double » ou « Frais accessoires non approuvés ». L’analyse des motifs de litige est essentielle au Dashboard consacré aux erreurs de facturation du fret et aux litiges. Elle permet de repérer 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 alors prendre des mesures ciblées pour réduire les litiges, accélérer le cycle de paiement et diminuer la charge administrative. Pourquoi est-ce important ? Indique 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ù trouver ces données Cette information est enregistrée dans le dossier de gestion des litiges associé à un document Freight Settlement. Exemples Écart de tarifPoids incorrectFrais de surestaries non approuvésFacture en double | |||
| Motif du retard DelayReason | Code ou texte indiquant la cause d’un retard de l’expédition. | ||
| Description L’attribut Motif du retard indique la cause d’un écart par rapport au calendrier prévu, par exemple « Intempéries », « Blocage en douane » ou « Retard du transporteur ». Cette information est souvent saisie manuellement ou transmise par le transporteur sous forme de message d’événement. Cet attribut est particulièrement utile pour l’analyse des causes profondes. Il permet de comprendre pourquoi une expédition a été retardée, au-delà du simple constat du retard. En classant et en quantifiant les motifs, les organisations peuvent repérer les problèmes récurrents et concentrer leurs efforts d’amélioration sur les domaines les plus importants, par exemple en améliorant la communication avec les transporteurs ou en optimisant les itinéraires pour éviter les embouteillages. Pourquoi est-ce important ? Explique les causes des retards d’expédition et permet d’analyser leurs causes profondes afin de réduire les exceptions et d’améliorer la ponctualité des livraisons. Où trouver ces données Cette information peut être enregistrée sous forme de code d’événement et de motif dans le cadre de gestion des événements de SAP TM, lorsqu’un événement « Arrivée/Départ retardé » est signalé. Exemples WEATHER_DELAYCUSTOMS_INSPECTIONPORT_CONGESTIONMECHANICAL_FAILURE | |||
| Nom d’utilisateur UserName | Identifiant ou nom de la personne qui a exécuté une activité. | ||
| Description Cet attribut identifie l’employé ou l’utilisateur responsable d’une activité manuelle, comme « 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, à repérer les besoins de formation et à reconnaître les personnes les plus performantes. Elle est également essentielle à la conformité et à l’audit, car elle indique clairement qui a fait quoi et à quel moment. Elle peut aussi révéler des différences dans la manière dont les utilisateurs réalisent une même tâche. Pourquoi est-ce important ? Cet attribut relie 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ù trouver ces données Généralement présent dans le journal des modifications ou les tables d’en-tête des documents de transport, par exemple dans les champs « Créé par » ou « Modifié par » (p. ex. ERNAM, AENAM). Exemples CB998030SMITHJPLANNER_EU | |||
| Pays d’origine OriginCountry | Pays d’où part l’expédition. | ||
| Description Cet attribut indique le pays de départ du transport. Il est déterminé à partir de l’adresse du lieu initial d’enlèvement. L’analyse du processus par pays d’origine permet de repérer les différences régionales en matière de performance, de coûts et de complexité. Elle peut mettre en évidence les pays où le dédouanement prend plus de temps, 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 logistique mondiale et à l’adaptation des stratégies logistiques aux différentes régions. Pourquoi est-ce important ? Permet d’analyser les performances des expéditions par zone géographique et de repérer les goulots d’étranglement régionaux, les facteurs de coûts ou les variations de processus. Où trouver ces données Cette information figure dans l’adresse du lieu d’origine de la première étape du document Freight Order. Exemples DEUSCNMX | |||
| Pays de destination DestinationCountry | Pays où l’expédition doit être livrée. | ||
| Description Cet attribut indique le pays de destination finale de l’expédition, déterminé à 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 propres à chaque région. Elle peut révéler, par exemple, les destinations où les retards de livraison sont les plus fréquents ou où les coûts du dernier kilomètre sont plus élevés. Ces informations sont utiles pour optimiser le réseau, définir des délais de livraison réalistes et gérer la conformité du commerce international. Pourquoi est-ce important ? Permet d’analyser les performances du processus selon la destination et de repérer les problèmes liés à certaines régions de livraison, aux autorités douanières ou aux transporteurs du dernier kilomètre. Où trouver ces données Cette information figure dans l’adresse du lieu de destination de la dernière étape du document Freight Order. Exemples FRCAGBJP | |||
| Statut de l’expédition ShipmentStatus | Statut général de l’expédition au moment de l’extraction des données. | ||
| Description Le statut de l’expédition indique où elle en est dans son cycle de vie, par exemple « En cours de planification », « En cours d’exécution », « Livrée » ou « Annulée ». Il correspond au dernier état connu du dossier. Cet attribut permet de filtrer et d’analyser les expéditions selon leur résultat. Un analyste peut, par exemple, se concentrer sur les expéditions terminées pour mesurer le temps de cycle de bout en bout, ou examiner uniquement les expéditions annulées afin d’en comprendre les causes profondes. Il apporte un contexte important à l’interprétation du flux de processus. Pourquoi est-ce important ? Indique le résultat général de chaque expédition et permet de filtrer et d’analyser les expéditions terminées, annulées ou toujours en transit. Où trouver ces données Il s’agit du champ de statut général figurant dans l’en-tête du document Freight Order ou Freight Booking dans SAP TM. Exemples En cours de planificationPrête pour le transportEn cours d’exécutionExécutéeAnnulée | |||
| Système source SourceSystem | Système d’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 précise 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 de chaque système au processus global. Cela permet, par exemple, de distinguer un événement signalé par un système interne d’un événement transmis par un prestataire logistique tiers. Pourquoi est-ce important ? Cet attribut indique l’origine des données. Il est essentiel à la gouvernance des données, à la résolution des problèmes et à la compréhension de l’orchestration des processus entre plusieurs systèmes. Où trouver ces données Ces informations sont souvent stockées dans le journal système ou peuvent être déduites de l’interface ou de l’utilisateur à l’origine de la saisie. 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 ordre de transfert (Forwarding Order, FWO) ou d’un besoin de transport lié à une commande (Order-based Transportation Requirement, OTR). | ||
| Pourquoi est-ce important ? Il s’agit du principal événement de début du processus d’expédition de bout en bout. L’analyse du temps écoulé entre cette activité et la fin de la planification est essentielle pour mesurer l’efficacité de la planification. Où trouver ces données Cet événement est enregistré lors de la création d’un ordre de transfert (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, par exemple /SCMTMS/D_TORROT, sert d’heure d’événement. Données à recueillir Relevez la date et l’heure de création de l’ordre de transfert ou du document de besoin de transport. Type d’événement explicit | |||
| Document de règlement du fret créé | Cette activité marque la création du document de règlement du fret (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 est-ce important ? Cette étape marque le début du règlement financier du transport. L’analyse du temps écoulé entre la livraison et la création du document de règlement permet de repérer les goulots d’étranglement dans le traitement financier. Où trouver ces données Il s’agit d’un événement explicite, enregistré lors de la création d’un document de règlement du fret. L’horodatage de création est disponible dans la table d’en-tête de ce document, /SCMTMS/D_SFIRHD. Données à recueillir Utilisez la date et l’heure de création du document de règlement du fret. 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 marque la fin des processus qui ne passent pas à l’étape d’exécution. | ||
| Pourquoi est-ce important ? Le suivi des annulations permet de repérer les causes d’échec du processus, comme une évolution de la demande client ou des 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ù trouver ces données Cet événement est déduit du passage au statut « Cancelled » de l’ordre de transfert ou de l’ordre de fret. L’horodatage de ce changement de statut marque l’événement. Données à recueillir Relevez 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 ordre de fret (pour le transport routier ou ferroviaire) ou d’une réservation de fret (pour le transport maritime ou aérien), qui contient l’itinéraire et les ressources prévus. | ||
| Pourquoi est-ce important ? Cette étape est indispensable au lancement des opérations logistiques. Le temps de cycle entre la demande et cette activité est un KPI clé pour mesurer l’efficacité de la planification. Où trouver ces données Cet événement correspond à la création d’un document d’ordre de fret ou de réservation de fret. Il peut également être déduit d’un changement de statut du document, par exemple lorsque le statut de planification passe à « Planifié ». Les données d’en-tête se trouvent généralement dans la table /SCMTMS/D_TORROT. Données à recueillir Utilisez l’horodatage de création du document d’ordre de fret ou de réservation de fret. 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 est-ce important ? Cette étape clé marque le début du transport. Elle est essentielle au suivi des livraisons dans les délais et à la visibilité précise des expéditions. Où trouver ces données 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 de l’ordre de fret. Il peut également être enregistré directement dans l’ordre de fret. Données à recueillir Utilisez l’horodatage de l’événement d’exécution « Departure » signalé pour le lieu d’origine de l’ordre de fret. Type d’événement explicit | |||
| Marchandises livrées | Cette activité correspond à l’arrivée de l’expédition à sa destination finale et à la fin du transport physique. Elle est enregistrée lorsque le transporteur indique que les marchandises ont été déchargées chez le destinataire. | ||
| Pourquoi est-ce important ? Il s’agit de l’étape la plus importante pour mesurer la performance des livraisons dans les délais et la satisfaction client. Elle déclenche également généralement la facturation et le règlement. Où trouver ces données 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 de l’ordre de fret. Les données proviennent souvent du transporteur. Données à recueillir Utilisez l’horodatage de l’événement d’exécution « Arrival at Destination » signalé pour le dernier arrêt de l’ordre de fret. Type d’événement explicit | |||
| Paiement effectué | Cette dernière activité confirme que le transporteur a été payé pour ses services de transport. Elle a généralement lieu dans le système ERP connecté, après réception de la facture vérifiée depuis SAP TM. | ||
| Pourquoi est-ce important ? Cette étape 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 paiement dans les délais. Où trouver ces données Ces informations se trouvent dans le système ERP, par exemple dans S/4HANA Finance. Elles peuvent être reliées au document de règlement du fret à l’aide du numéro de facture. Une mise à jour du statut peut être renvoyée à SAP TM ; sinon, les données doivent être extraites de tables ERP telles que BKPF et BSEG. Données à recueillir Récupérez la date de compensation du paiement dans le système ERP et reliez-la à l’expédition à l’aide de la référence de facture. Type d’événement explicit | |||
| Preuve de livraison reçue | Cette activité a lieu lorsque le transporteur transmet la preuve de livraison (Proof of Delivery, POD) signée et que celle-ci est enregistrée dans le système. Elle confirme que le destinataire a accepté les marchandises. | ||
| Pourquoi est-ce important ? La réception de la POD est indispensable pour facturer le client et régler les frais de transport au transporteur. Tout retard à cette étape a un effet direct sur le cycle de conversion de trésorerie. Où trouver ces données Cet événement est généralement déduit d’un changement de statut de l’ordre de fret, par exemple lorsque le statut de la POD passe à « Received ». L’horodatage de l’activité correspond à la date de ce changement. Données à recueillir Relevez l’horodatage auquel le statut de la preuve de livraison de l’ordre de fret passe à « Received ». Type d’événement inferred | |||
| Transporteur affecté | Cette activité indique qu’un prestataire de services de transport, ou transporteur, a été sélectionné et affecté à l’expédition. Cette affectation peut être manuelle, résulter d’une planification automatisée ou intervenir dans le cadre d’un appel d’offres. | ||
| Pourquoi est-ce important ? L’affectation d’un transporteur est une étape essentielle avant la confirmation et l’exécution de l’expédition. Son suivi permet d’analyser le processus de sélection des transporteurs et de veiller à ce que les réservations soient effectuées à temps. Où trouver ces données L’événement est enregistré lorsque le champ du transporteur (partenaire ayant le rôle « Carrier ») est renseigné dans l’ordre de fret ou la réservation de fret. Dans le cadre d’un appel d’offres, il correspond à l’attribution d’une demande de devis de fret. Données à recueillir Repérez l’horodatage auquel la fonction partenaire du transporteur est renseignée ou confirmée pour la première fois dans l’ordre de fret. 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 est nécessaire pour obtenir l’autorisation d’exporter ou d’importer les marchandises. | ||
| Pourquoi est-ce important ? Le dépôt des déclarations en douane dans les délais est essentiel pour éviter les retards aux frontières. Le suivi de cette activité permet d’évaluer l’efficacité du processus de représentation en douane. Où trouver ces données Cet événement peut être enregistré comme un événement d’exécution spécifique signalé par un représentant en douane, ou déduit d’un changement de statut dans un système de gestion douanière intégré, comme SAP GTS. L’ordre de fret est alors mis à jour en conséquence. Données à recueillir Relevez l’horodatage de l’événement d’exécution « Customs Declaration Filed » ou celui du changement de statut correspondant. Type d’événement explicit | |||
| Dédouanement effectué | Cette activité indique que les autorités douanières ont autorisé l’expédition à poursuivre son trajet. Il s’agit d’une étape importante de la logistique internationale, car elle élimine un goulot d’étranglement potentiel majeur. | ||
| Pourquoi est-ce important ? Le dédouanement est souvent à l’origine de retards importants dans les chaînes d’approvisionnement mondiales. Le suivi de sa durée et de son taux de réussite est essentiel pour réduire les temps de transit à l’international. Où trouver ces données 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 suivi des expéditions, puis ajouté au suivi d’exécution de l’ordre de fret. Données à recueillir Utilisez l’horodatage de l’événement d’exécution « Customs Clearance » signalé pour l’ordre de fret. Type d’événement explicit | |||
| Expédition confirmée par le transporteur | Cet événement indique que le transporteur accepte d’effectuer le transport selon le plan prévu. La confirmation est généralement reçue par message EDI, via une mise à jour sur le portail du transporteur ou par saisie manuelle, puis met à jour le statut de l’ordre de fret. | ||
| Pourquoi est-ce important ? La confirmation du transporteur valide le plan d’expédition et réduit l’incertitude. Tout retard dans sa réception peut compromettre l’ensemble du calendrier d’expédition. Où trouver ces données Cet événement est déduit d’un changement du champ de statut de confirmation de l’ordre de fret ou de la réservation de fret. Une valeur de statut précise, comme « Confirmed », est alors définie dans la gestion des statuts du document. Données à recueillir Suivez les changements des champs de statut de confirmation dans le document d’ordre de fret. 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 document de règlement du fret et qu’elle est approuvée pour paiement. Il s’agit de la dernière étape avant le lancement du paiement dans le système ERP. | ||
| Pourquoi est-ce important ? Cette activité clôt le processus d’audit et de vérification des coûts de transport. Un retard à cette étape peut entraîner des paiements tardifs aux transporteurs et nuire aux relations avec eux. Où trouver ces données Cet événement est déduit d’un changement de statut du document de règlement du fret, par exemple « Ready for Accrual » ou « Transferred for Posting », qui indique que le document a été transmis au système ERP pour paiement. Données à recueillir Suivez l’horodatage auquel le statut du cycle de vie du FSD indique que le document est prêt à être payé ou qu’il a été comptabilisé. Type d’événement inferred | |||
| Itinéraire de l’expédition modifié | 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 à une perturbation, à une demande du client ou à un problème logistique. | ||
| Pourquoi est-ce important ? Les changements d’itinéraire entraînent souvent des coûts et des retards supplémentaires. Le suivi de leur fréquence et de leurs causes permet d’améliorer la précision de la planification et la stabilité des opérations. Où trouver ces données Cet événement est déduit de changements importants apportés aux étapes, aux lieux ou aux dates d’un ordre de fret après le début de son exécution. Les documents de modification (tables CDHDR et CDPOS) peuvent être analysés à cette fin. Données à recueillir Repérez les changements apportés aux principaux champs d’itinéraire du document d’ordre de fret après l’événement « Shipment Confirmed by Carrier ». Type d’événement inferred | |||
| Litige sur le fret créé | Cet événement indique qu’un écart a été constaté entre la facture du transporteur et les coûts calculés dans le document de règlement du fret. Il déclenche un flux de travail de résolution du litige. | ||
| Pourquoi est-ce important ? Les litiges retardent les paiements aux transporteurs et nécessitent un travail administratif pour être résolus. Le suivi de cette activité permet de repérer les causes profondes des erreurs de facturation, comme des tarifs incorrects ou des frais annexes. Où trouver ces données Cet événement peut être déduit d’un changement de statut du document de règlement du fret, lorsque le statut « Dispute » est défini. Il peut également correspondre à la création d’un document distinct pour le dossier de litige. Données à recueillir Relevez l’horodatage auquel le statut de litige est défini dans le document de règlement du fret. Type d’événement inferred | |||
Guides d’extraction
Étapes
- Repérez et activez les API des vues CDS : Connectez-vous à votre système SAP S/4HANA. Utilisez la transaction
/IWFND/MAINT_SERVICEpour vérifier que les services OData nécessaires aux principales vues CDS sont actifs. Vérifiez notamment les services lié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. - Configurez la connexion à l’API : Demandez à votre administrateur SAP l’URL racine des services OData. Configurez une application cliente pour vous connecter à l’API, par exemple un script Python utilisant la bibliothèque requests, un outil ETL commercial ou Postman. Vous devrez configurer l’authentification, généralement par authentification de base (nom d’utilisateur et mot de passe) ou par 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 le type d’ordre de fret, afin de ne conserver que les données utiles à l’analyse.
- Construisez la requête de base sur les expéditions : Commencez par interroger la vue CDS I_TransportationOrder. Cette vue constitue l’objet central des expéditions, également appelées ordres de fret ou réservations de fret. Utilisez le paramètre OData
$selectpour choisir les colonnes nécessaires, notamment les attributs recommandés CarrierName, ModeOfTransport et RequestedDeliveryDate. Appliquez un$filterpour limiter les données selon la période et les autres critères définis. - Interrogez les événements d’exécution et de transport : Utilisez la vue CDS C_TranspOrdExecutionEvent pour extraire les principaux événements logistiques. Filtrez cette vue sur les valeurs
EventCodecorrespondant à des activités telles que « Marchandises enlevées » (DEPARTURE) et « Marchandises livrées » (ARRIVAL_AT_DESTINATION). Reliez ces données à celles de la requête de base sur les expéditions à l’aide de l’UUID TransportationOrder. - Interrogez les objets métier associés : Pour couvrir l’ensemble du processus, interrogez les autres vues CDS associées. Utilisez I_ForwardingOrder pour l’activité « Demande de transport reçue » et I_FreightSettlementDocument pour les activités financières telles que « Règlement du fret créé », « Litige sur le fret créé » et « Facture vérifiée ».
- Extrayez les activités fondées sur les statuts : De nombreuses activités ne correspondent pas à des événements distincts, mais à des changements de statut du document principal. Pour des activités telles que « Transporteur affecté », « Expédition confirmée par le transporteur » et « Expédition annulée », interrogez la vue I_TransportationOrder et utilisez le champ
LastChangeDateTimeassocié au statut concerné comme heure de l’événement. Vous devrez associer avec soin les codes de statut aux activités métier. - Regroupez et transformez les données : Rassemblez 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. Veillez à ce que chaque ligne d’une expédition contienne tous les attributs recommandés issus de la requête de base. Cette étape équivaut, dans son principe, à une opération SQL
UNION ALL. - Gérez les événements complexes et externes : Pour des activités telles que « Dédouanement effectué » ou « Paiement traité », 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 l’adapter pour joindre des vues CDS propres aux douanes ou rapprocher les données d’une extraction ERP distincte à partir du numéro du document de règlement du fret.
- Préparez les données pour ProcessMind : Enregistrez le jeu de données consolidé au format CSV. Vérifiez que les en-têtes de colonnes correspondent aux exigences d’importation, par exemple en associant la colonne
ShipmentIdau champCaseIddans les paramètres de l’outil. Assurez-vous que les horodatages suivent un format cohérent, de préférence UTC (YYYY-MM-DDTHH:MM:SSZ).
Configuration
- Vues CDS principales : L’extraction s’appuie principalement sur I_TransportationOrder (ordres de fret), C_TranspOrdExecutionEvent (événements d’exécution), I_ForwardingOrder (demandes de transport) et I_FreightSettlementDocument (règlements).
- Filtrage par période : Il est essentiel de filtrer les dates pour 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 sortantes standard et les transferts de stock. - Filtres organisationnels : Si nécessaire, filtrez les données par
PurchasingOrganizationou par d’autres champs organisationnels afin de limiter l’extraction à une unité opérationnelle ou à une région donnée. - Pagination de l’API : Pour les grands jeux de données, utilisez les paramètres OData
$topet$skipafin de récupérer les données par pages plus petites. Vous limiterez ainsi les délais d’attente de l’API et la mémoire utilisée côté client. Une taille de page de 1 000 à 5 000 lignes convient souvent. - Prérequis : L’utilisateur ou le compte de service qui effectue l’extraction doit disposer des autorisations nécessaires pour accéder aux services OData sous-jacents (objet d’autorisation S_SERVICE) et aux données métier des vues CDS. Les services correspondants doivent être activés dans SAP Gateway (
/IWFND/MAINT_SERVICE).
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 vous disposez d’un accès direct en lecture au schéma SAP TM HANA via un client SQL approuvé, une vue de base de données ou un service d’extraction. Demandez 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 approbations de sécurité et de gestion du changement requises.
- Vérifiez 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 se trouver dans d’autres tables ou extensions, selon la version et l’implémentation de SAP TM. Ne remplacez les espaces réservés documentés qu’après les avoir vérifié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]. Une période glissante de trois à six mois convient généralement à une première analyse. N’élargissez cette période qu’après avoir vérifié les performances des requêtes et la durée de conservation de l’historique des événements.
- Identifiez la clé de cas de l’expédition. La requête utilise TOR_ID dans /SCMTMS/D_TORROT comme identifiant d’expédition. Si votre implémentation utilise un autre identifiant stable, remplacez la clé de cas de façon cohérente dans chaque branche d’activité et conservez, si possible, l’identifiant d’origine du document comme attribut d’audit supplémentaire.
- 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, de l’absence d’horodatages ou de l’évolution des statuts.
- Validez les associations entre statuts et horodatages avec les planificateurs transport et les responsables des processus métier. Vérifiez notamment les valeurs correspondant à la création de la demande, à la planification, à l’affectation du transporteur, à sa confirmation, à l’enlèvement, au dépôt de la déclaration en douane, au dédouanement, au changement d’itinéraire, à la livraison, à la réception de la preuve de livraison (POD), au règlement du fret, au litige, à la vérification de la facture, à l’annulation et au 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. Repérez les doublons dus aux jointures un-à-plusieurs et, si nécessaire, ajustez les associations aux 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 génériques pour les champs dont le nom ne peut être déterminé sans métadonnées propres au système. Remplacez-les uniquement par des colonnes vérifiées ou des vues approuvées.
- Appliquez les règles finales de qualité des données. Supprimez les lignes sans identifiant de cas ou horodatage d’événement, normalisez les horodatages dans 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 fictifs pour les 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 requis : 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 d’identifiant de cas de l’expédition et de nom d’activité sont correctement associés.
Configuration
- Tables sources principales : Utilisez /SCMTMS/D_TORROT pour les données principales des ordres de transport ou de fret, et /SCMTMS/D_TOSTOP pour les arrêts et les jalons. Avant le déploiement, vérifiez tous les autres objets sources dans le système SAP TM cible.
- Identifiant de cas : Utilisez un identifiant stable d’expédition ou d’ordre de fret. Dans l’exemple de requête, TOR_ID sert de ShipmentId. Vérifiez que cet identifiant reste stable entre la planification, l’exécution, le règlement et les enregistrements de paiement ERP.
- Association des activités : Configurez des conditions sources explicites pour les 15 activités requises. Chaque activité doit être produite sous la forme d’une ligne distincte dans le journal d’événements. ProcessMind ne déduit pas les activités à partir d’autres lignes.
- Période : Commencez par trois à six mois d’historique. Appliquez les conditions sur EventTime le plus tôt possible dans chaque branche source. Pour les chargements incrémentiels, utilisez un point de reprise contrôlé et prévoyez une courte période de chevauchement afin de récupérer les mises à jour tardives.
- Filtres métier : Configurez les filtres de code société, d’organisation d’achats, d’organisation commerciale, de type de document, de mode de transport, de transporteur, d’usine, de lieu et de statut en fonction de 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 à l’aide de la conversion propre au système prise en charge par la version HANA. 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 si 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 de tables sans restriction et examinez le plan d’exécution HANA. Pour les grands jeux de données, utilisez des prédicats tenant compte du partitionnement, une extraction incrémentielle, des tables intermédiaires 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. Évitez toute déduplication arbitraire qui pourrait supprimer des événements répétés légitimes.
- Prérequis : Autorisations requises sur la base de données, accès aux données SAP TM et aux éventuelles données ERP ou de règlement connectées, outils d’extraction approuvés et confirmation que les modules SAP TM, intégrations et extensions spécifiques concernés sont actifs.
- Associations propres 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. Consignez les associations dans un document de configuration contrôlé et testez-les après chaque mise à niveau.
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 indique « Marchandises enlevées ».
- Accédez à l’environnement de développement ABAP : Connectez-vous à SAP GUI et ouvrez l’éditeur ABAP avec le code de transaction
SE38. Saisissez un nom pour votre nouveau programme, par exempleZTM_PROCESS_EXTRACT, puis cliquez sur « Créer ». Indiquez un titre et définissez le type de programme sur « Programme exécutable ». - 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 comporter des paramètres de filtrage, comme une période pour la date de création de l’ordre de fret (
SO_CREDT), ainsi que des options de sélection 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 inclure 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. Cela implique généralement d’interroger plusieurs tables SAP TM. Commencez par sélectionner les documents d’expédition principaux, tels que les ordres de fret, 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 ordre de fret, 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 de l’ordre de fret (« Expédition planifiée »), l’affectation du transporteur (« Transporteur affecté ») et les changements de statut d’exécution correspondant à « Marchandises enlevées » et « Marchandises livrées ». La création de l’ordre de transfert précédent (/SCMTMS/D_TRQROT) peut indiquer l’activité « Demande de transport reçue ». - Extrayez les confirmations du transporteur et les changements d’itinéraire : Interrogez les tables de statut ou les documents de modification (CDHDR/CDPOS) associés à l’ordre de fret pour déterminer quand le statut
CONFIRMATIONa été défini, ce qui correspond à « Expédition confirmée par le transporteur ». De même, recherchez les changements importants des informations d’itinéraire pour repérer les réacheminements d’expédition. - Extrayez les événements douaniers : Si vous utilisez SAP Global Trade Services (GTS) ou un module similaire, les événements douaniers (« Déclaration en douane déposée », « Dédouanement effectué ») sont souvent suivis dans des documents liés. La logique doit lire le flux documentaire (
/SCMTMS/D_TORDOC) de l’ordre de fret afin de retrouver les documents associés et 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 des documents de règlement du fret (
/SCMTMS/D_SFIRHD) ainsi que les postes et statuts associés pour repérer les événements « Règlement du fret créé », « Litige sur le fret créé » et « Facture vérifiée ». Reliez-les au ShipmentId d’origine. - Regroupez les données : Pour chaque événement trouvé, créez un nouvel enregistrement dans la table interne finale. Renseignez ActivityName avec l’activité correspondante, EventTime avec l’horodatage de l’événement et ShipmentId avec l’identifiant de l’ordre ou de la réservation de fret. Complétez les autres attributs à partir des documents sources.
- Formatez et exportez le fichier : Une fois la table interne finale remplie, mettez les données en forme 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’applications SAP, accessible via la transaction AL11. - Planifiez l’exécution et récupérez le fichier : Vous pouvez planifier l’exécution du programme ABAP comme tâche de fond (transaction SM36) pour automatiser l’extraction. Téléchargez ensuite le fichier généré depuis le serveur d’applications vers un poste local à l’aide de la transaction
CG3Y, puis importez-le dans ProcessMind.
Configuration
- Période : L’écran de sélection doit comporter une période obligatoire pour la date de création du document de transport principal, par exemple l’ordre de fret. 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 ordre de fret ou réservation de fret. Vous pourrez ainsi cibler des processus précis, comme le transport routier ou maritime.
- Filtre par transporteur : Permettez aux utilisateurs de filtrer par transporteur. Ils pourront ainsi analyser les performances de chaque partenaire logistique.
- Filtres organisationnels : Ajoutez des filtres pour les unités organisationnelles pertinentes, telles que l’organisation d’achats ou le code société, afin de limiter l’extraction à des secteurs d’activité précis.
- Optimisation des performances : Pour les grands jeux de données, veillez à ce que le code ABAP utilise des champs indexés dans les clauses
WHERE, évite autant que possible les boucles imbriquées et ne sélectionne que les champs nécessaires dans la base de données afin de limiter l’utilisation de la 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 doit également être autorisé à accéder au système de fichiers du serveur d’applications (objetS_DATASET) et aux tables de base de données et objets BOPF SAP TM concernés.
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 à démarrer ?
Appuyez-vous sur ce modèle pour lancer l’optimisation de vos processus de transport et livrer plus rapidement, à moindre coût. Commencez dès aujourd’hui à faire apparaître des pistes d’amélioration.
Éliminez dès aujourd’hui les goulots d’étranglement de la gestion du transport
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.