Votre modèle de données de gestion des transports
Votre modèle de données de gestion des transports
- Attributs recommandés à collecter
- Activités clés à suivre
- Guide d'extraction pour SAP Transportation Management
Attributs de gestion des transports
| Nom | Descriptionn | ||
|---|---|---|---|
| Expédition ShipmentId | L'identifiant unique pour un seul mouvement de marchandises, qui sert de cas central pour l'analyse. | ||
| Descriptionn L'ID d'expédition est la clé primaire qui regroupe toutes les activités et événements de transport connexes. Il représente un processus de transport unique, complet, de la demande initiale à la preuve de livraison finale et au paiement. En Process Mining, cet attribut est indispensable pour construire la vue du cas, permettant aux analystes de suivre le parcours complet de chaque expédition. Il permet l'analyse des variantes de processus, des temps de cycle et des résultats associés aux expéditions individuelles, offrant une vision globale des performances de transport. Pourquoi est-ce important ? : C'est l'identifiant de cas clé, reliant tous les événements et points de données à une commande de transport spécifique, ce qui est impératif pour l'analyse de processus complet. Source des données : Cet identifiant est le numéro de la Commande de transport (Freight Order) ou de la Réservation de fret (Freight Booking) dans SAP TM. On le trouve dans des tables comme /SCMTMS/D_TORROT et /SCMTMS/D_TRQROT. Exemples 610000432161000056786100009876 | |||
| Heure de l'événement EventTime | L'horodatage indiquant quand une activité ou un événement spécifique s'est produit. | ||
| Descriptionn L'heure de l'événement fournit la date et l'heure précises de chaque activité dans le processus de transport. Ces données temporelles sont clées 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 est utilisé pour séquencer correctement les événements, construire un journal chronologique et effectuer toutes les analyses de performance temporelles. Il est indispensable pour identifier les retards, mesurer l'efficacité des processus et évaluer les performances par rapport aux plannings ou aux accords de niveau de service. Pourquoi est-ce important ? : L'horodatage est indispensable pour ordonner les événements chronologiquement et calculer toutes les métriques de performance, telles que les temps de cycle et la paiement à temps. Source des données : Provenant des tables de gestionnaires d'événements dans 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 | Le nom d'un événement métier ou d'une étape spécifique survenus au sein du processus de transport. | ||
| Descriptionn Le nom de l'activité décrit une tâche ou un jalon unique dans le cycle de vie de l'expédition, tel que "Expédition planifiée", "Marchandises enlevées" ou "Marchandises livrées". Ces activités constituent les nœuds de la carte de 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 points de blocage et les boucles de reprise. C'est la base de la découverte de processus et de la vérification de conformité dans la gestion des transports. Pourquoi est-ce important ? : Cet attribut définit les étapes du processus de transport, pour visualiser et l'analyse du flux d'expédition complet. Source des données : Cela 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 enregistrent les changements de statut d'objets métier ou des messages d'événements spécifiques. Exemples Expédition planifiéeTransporteur assignéMarchandises enlevéesMarchandises livréesPreuve de livraison reçue | |||
| Coût Total du Fret TotalFreightCost | Le coût total calculé ou facturé pour l'expédition. | ||
| Descriptionn 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 des transports ou du montant final de 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 indispensable pour les dashboards axés sur les dépenses de transport et l'analyse du coût de service. Pourquoi est-ce important ? : Ajoute une dimension financière au processus, permettant l'analyse des dépenses de transport, du coût par expédition et de l'impact financier des inefficacités du processus. Source des données : Provenant du document de règlement de fret (Freight Settlement Document) dans SAP TM après que le calcul des frais a été effectué. On le trouve dans des tables comme /SCMTMS/D_SFIRHD. Exemples 250.751200.005430.50 | |||
| Date de livraison demandée RequestedDeliveryDate | La date et l'heure de livraison demandées par le client ou stipulées dans la commande client. | ||
| Descriptionn La date de livraison demandée est la date limite cible pour l'activité "Marchandises livrées". Elle sert de référence principale pour mesurer la performance de paiement à temps. Cette date est indispensablele pour le calcul du KPI "Taux de paiement à temps". En comparant l'horodatage de livraison réel à 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 du transporteur, les retards de planification ou les retenues douanières. Pourquoi est-ce important ? : Ceci est la référence pour mesurer la performance de paiement à temps, un KPI clé pour la satisfaction client et l'excellence opérationnelle. Source des données : Cette date est généralement transférée de la commande client ou de la commande de transfert de stock précédente depuis SAP ERP. Elle est stockée dans les champs de date/heure de l'Unité de fret (Freight Unit) ou de la Commande de transport (Freight Order). Exemples 2023-05-20T17:00:00Z2023-06-01T12:00:00Z2023-06-15T23:59:59Z | |||
| Heure de fin EndTime | L'horodatage indiquant la date et l'heure de réalisation d'une activité spécifique. | ||
| Descriptionn Alors que StartTime indique le début d'un événement, EndTime marque sa conclusion. Ceci est particulièrement utile pour les activités qui ont une durée, comme le 'Dédouanement' ou le 'Chargement des marchandises'. La différence entre EndTime et StartTime représente le temps de traitement de cette activité. Dans l'analyse de Process Mining, disposer à la fois d'une heure de début et de fin permet une analyse plus granulairesre des durées d'activité, permettant de séparer le temps de traitement du temps d'attente. Cela aide à identifier précisément où se situent les inefficacités, que ce soit dans l'exécution d'une tâche ou dans les transferts entre les tâches. Pourquoi est-ce important ? : Permet le calcul précis des temps de traitement des activités, distinguant le temps de travail actif du temps d'attente entre les événements. Source des données : Comme StartTime, cette information provient des tables de gestionnaires d'événements. Elle peut correspondre à un événement "terminé" distinct pour une activité donnée. Exemples 2023-04-15T11:30:00Z2023-04-16T15:00:00Z2023-04-20T09:45:00Z | |||
| Livraison à temps IsOnTimeDelivery | Un indicateur booléen indiquant si les marchandises ont été livrées à la date de livraison demandée ou avant. | ||
| Descriptionn Il s'agit d'un attribut calculé qui compare l'horodatage de l'activité "Marchandises livrées" avec la "Date de livraison demandée". Il est vrai si la livraison a été effectuée à temps ou en avance, et faux si elle a été en retard. Cet attribut simplifie l'analyse des performances en créant un résultat binaire clair pour chaque expédition. Il constitue la base du tableau de bord de performance de paiement à temps et du KPI correspondant. Il permet aux analystes de filtrer facilement les expéditions en retard et d'effectuer une analyse des causes profondes pour comprendre les facteurs de mauvaise performance. Pourquoi est-ce important ? : Mesure directement le respect des engagements de livraison, simplifiant le calcul et la visualisation du KPI essentiel de paiement à temps. Source des données : Cet attribut n'est pas stocké dans SAP TM. Il doit être calculé lors de la transformation des données en comparant l'horodatage de l'événement de livraison réel à la date de livraison demandée. Exemples truefaux | |||
| Mode de transport ModeOfTransport | La méthode de transport utilisée pour l'expédition, telle que la route, le rail, l'air ou la mer. | ||
| Descriptionn Cet attribut spécifie le mode de transport. Les différents modes ont des structures de coûts, des temps de transit et des complexités de processus distincts. Par exemple, une expédition de fret aérien international aura des activités différentes, comme le dédouanement, par rapport à une expédition par camion domestique. L'analyse des processus par mode de transport permet des initiatives d'amélioration adaptées. Elle est également critique pour l'analyse des coûts, en particulier pour identifier l'utilisation du fret premium (par exemple, aérien express) par rapport aux modes standard, plus économiques. Cette segmentation est indispensablele pour comprendre et contrôler les dépenses de transport. Pourquoi est-ce important ? : Permet l'analyse des variations de coût, de temps et de processus basées sur le mode de transport, ce qui est impératif pour l'optimisation des coûts et l'identification de l'utilisation du fret premium. Source des données : Il s'agit d'un champ clé sur la Commande de transport (Freight Order) ou la Réservation de fret (Freight Booking), souvent étiqueté comme Mode de transport ou MOT. Exemples 01 (Route)02 (Ferroviaire)04 (Aérien)05 (Maritime) | |||
| Nom du transporteur CarrierName | Le nom du transporteur ou du prestataire de services logistiques assigné à l'expédition. | ||
| Descriptionn Le nom du transporteur identifie l'entreprise responsable du déplacement physique des marchandises. C'est une dimension essentielle pour l'analyse des performances, car différents transporteurs peuvent avoir des niveaux de service, des coûts et une fiabilité variables. En Process Mining, cet attribut est utilisé pour segmenter et comparer les performances des différents transporteurs. Il permet la création de dashboards des transporteurs, le suivi des taux de paiement à temps par transporteur, la comparaison des coûts et l'identification des transporteurs les plus fréquemment associés à des retards ou des litiges. Cet insight est indispensable à la gestion stratégique des transporteurs et l'approvisionnement. Pourquoi est-ce important ? : Permet la comparaison des performances entre différents transporteurs, ce qui est indispensable pour optimiser la sélection des transporteurs, les coûts et les niveaux de service. Source des données : Cette information est stockée sur le document de Commande de transport (Freight Order) ou de Réservation de fret (Freight Booking). Elle est liée via la fonction partenaire commercial pour le transporteur. Exemples DHL ExpressFedEx FreightMaersk LineUnion Pacific Railroad | |||
| Date de ramassage prévue ScheduledPickupDate | La date et l'heure prévues pour que le transporteur enlève les marchandises au point d'expédition. | ||
| Descriptionn La date d'enlèvement prévue est l'heure convenue pour le début du transport physique. C'est un jalon clé dans la phase d'exécution de l'expédition. Cet attribut est indispensable pour suivre la ponctualité de la première étape du trajet. En comparant l'heure d'enlèvement prévue avec l'horodatage réel de l'événement "Marchandises enlevées", les entreprises peuvent calculer les retards d'enlèvement. Cela aide à évaluer la performance et la fiabilité à la fois du lieu d'expédition et du transporteur. Pourquoi est-ce important ? : Sert de référence pour mesurer la ponctualité de l'enlèvement, aidant à identifier les retards dès le début du parcours physique de l'expédition. Source des données : C'est une date/heure planifiée stockée sur la séquence d'arrêt de la Commande de transport (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 | L'horodatage de la plus récente extraction ou actualisation des données pour le jeu de données de Process Mining. | ||
| Descriptionn Cet attribut indique la la réactualisation des données analysées. Il reflète la date et l'heure de la dernière extraction des données des systèmes sources, comme SAP TM, vers l'outil de Process Mining. Il s'agit d'un élément de métadonnée critique pour tout tableau de bord ou analyse, car il fournit un contexte sur l'pertinence des analyses. Il aide les utilisateurs à comprendre s'ils examinent des informations en temps réel ou un instantané d'une période prélèvement.cédente, ce qui est indispensable pour prendre des décisions opportunes et éclairées. Pourquoi est-ce important ? : Fournit un contexte essentiel sur la réactualisation des données, garantissant que les utilisateurs sont conscients de la récence de l'analyse. Source des données : Cela est généralement généré et stocké par l'outil ETL (Extract, Transform, Load) ou le pipeline de données pendant le processus d'ingestion des données. Exemples 2023-10-27T08:00:00Z2023-10-26T08:00:00Z | |||
| Est litigieux IsDisputed | Un indicateur booléen indiquant si la facture de fret pour l'expédition a donné lieu à un litige. | ||
| Descriptionn Ce drapeau calculé identifie les expéditions qui ont un litige de règlement de fret associé. Il est "vrai" si un litige a été créé, et "faux" autrement. Il peut être dérivé de la présence d'une activité "Litige de fret créé" ou d d'un "Motif de litige" non vide. Cet attribut simplifie l'analyse du processus de règlement de fret. Il permet un calcul facile du KPI du taux d'écart de facturation de fret et aide à filtrer toutes les expéditions contestées. Les analystes peuvent ensuite enquêter sur les caractéristiques communes de ces expéditions, telles que les transporteurs, les itinéraires ou les types de frais, pour trouver la cause première des erreurs de facturation. Pourquoi est-ce important ? : Simplifie l'identification des règlements de fret problématiques, permettant un calcul rapide du taux de litige et une analyse des causes profondes des erreurs de facturation. Source des données : Cet attribut n'est pas stocké dans SAP TM. Il doit être calculé en fonction de l'existence d'un cas de litige lié au document de règlement de fret (Freight Settlement Document). Exemples truefaux | |||
| Motif du Litige DisputeReason | Le motif fourni lorsqu'une facture de fret est contestée. | ||
| Descriptionn Lorsqu'une facture de transporteur ne correspond pas au coût prévu calculé dans SAP TM, un litige est créé. Cet attribut enregistre la raison de cette divergence, comme 'Taux incorrect', 'Facture en double' ou 'Frais accessoires non approuvés'. L'analyse des raisons de litige est indispensablele pour le tableau de bord des erreurs de facturation de fret et des taux de litige. Elle aide à identifier les causes profondes des inexactitudes de facturation, qu'elles proviennent de problèmes de données de base, d'erreurs de transporteur ou de défaillances opérationnelles. Cette analyse permet à l'organisation de prendre des mesures ciblées pour réduire les litiges, ce qui accélère le cycle de paiement et réduit les frais administratifs. Pourquoi est-ce important ? : Fournit la cause profonde des erreurs de facturation de fret, permettant des actions ciblées pour réduire les litiges de facturation et améliorer le processus de règlement. Source des données : Cette information est enregistrée dans le dossier de gestion des litiges associé à un document de règlement de fret (Freight Settlement Document). Exemples Inadéquation des tarifsPoids incorrectFrais de Surestaries Non ApprouvésFacture en double | |||
| Motif du retard DelayReason | Un code ou un texte expliquant la raison d'un retard d'expédition. | ||
| Descriptionn L'attribut Motif du retard saisit la cause d'une déviation par rapport au calendrier prévu, telle que "Mauvais temps", "Retenue douanière" ou "Retard du transporteur". Cette information est souvent signalée manuellement ou via un message d'événement du transporteur. Il s'agit d'un attribut puissant pour l'analyse des causes profondes. Il permet aux analystes d'aller au-delà du simple fait de savoir qu'une expédition était en retard pour comprendre pourquoi. 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 impactants, comme l'amélioration de la communication avec les transporteurs ou l'optimisation des itinéraires pour éviter la congestion. Pourquoi est-ce important ? : Explique le 'pourquoi' des retards d'expédition, permettant une analyse des causes profondes puissante pour réduire les exceptions et améliorer la respect des délais. Source des données : Cela peut être capturé comme un code d'événement et une raison dans le cadre de gestion des événements de SAP TM lorsqu'un événement "Arrivée/Départ retardé" est signalé. Exemples RETARD_MÉTÉOINSPECTION_DOUANIÈRECONGESTION_PORTUAIREMECHANICAL_FAILURE | |||
| Nom d'utilisateur UserName | L'ID utilisateur ou le nom de la personne ayant exécuté une activité. | ||
| Descriptionn Cet attribut identifie l'employé ou l'utilisateur responsable de l'exécution d'une activité manuelle, telle que "Expédition planifiée" ou "Facture vérifiée". Il relie les étapes du processus aux individus ou aux équipes qui les ont exécutées. L'analyse des activités par utilisateur aide à comprendre la répartition de la charge de travail, à identifier les besoins en formation et à reconnaître les meilleurs collaborateurs les plus performants. Elle est également cruciale à des fins de conformité et d'audit, fournissant un enregistrement clair de qui a fait quoi et quand. Cela peut révéler des variations dans la manière dont différents utilisateurs exécutent la même tâche. Pourquoi est-ce important ? : Attribue les étapes de processus manuelles à des utilisateurs spécifiques, permettant l'analyse de la charge de travail, des performances individuelles et des opportunités de formation. Source des données : Généralement disponible dans le journal des modifications ou les tables d'en-tête de document pour les documents de transport, tels que les champs 'Créé par' ou 'Modifié par' (par exemple, ERNAM, AENAM). Exemples CB998030SMITHJPLANIFICATEUR_UE | |||
| Pays d'origine OriginCountry | Le pays d'origine de l'expédition. | ||
| Descriptionn Cet attribut identifie le pays de départ du trajet de transport. Il est dérivé 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 termes de performance, de coût et de complexité. Elle peut mettre en évidence les pays avec des délais de dédouanement plus longs, des coûts de transporteur plus élevés ou des retards plus fréquents. Cette segmentation géographique est indispensablele pour gérer une chaîne d'approvisionnement mondiale et adapter les stratégies logistiques à des régions spécifiques. Pourquoi est-ce important ? : Permet une analyse géographique des performances d'expédition, aidant à identifier les points de blocage régionaux, les facteurs de coût ou les variations de processus. Source des données : Cela fait partie des informations d'adresse pour le lieu source du premier arrêt dans la Commande de transport (Freight Order). Exemples DEUSCNMX | |||
| Pays de destination DestinationCountry | Le pays de destination de l'expédition. | ||
| Descriptionn Cet attribut identifie le pays de destination finale de l'expédition, dérivé de l'adresse du dernier lieu de livraison. Similaire au pays d'origine, l'analyse par pays de destination est indispensablele pour comprendre les défis logistiques régionaux. Elle peut révéler des modèles, tels que les destinations les plus sujettes aux retards de livraison ou ayant des coûts de livraison du dernier kilomètre plus élevés. Cet insight est précieux pour l'optimisation du réseau, la fixation d'attentes de livraison réalistes et la gestion de la conformité au commerce international. Pourquoi est-ce important ? : Permet l'analyse des performances de processus par destination, mettant en évidence les problèmes liés à des régions de livraison spécifiques, des autorités douanières ou des transporteurs du dernier kilomètre. Source des données : Cela fait partie des informations d'adresse pour le lieu de destination du dernier arrêt dans la Commande de transport (Freight Order). Exemples FRCAGBJP | |||
| Statut de l'expédition ShipmentStatus | Le statut général actuel de l'expédition au moment de l'extraction des données. | ||
| Descriptionn Le statut d'expédition donne un aperçu de l'état d'avancement de l'expédition dans son cycle de vie, par exemple "En planification", "En exécution", "Livré" ou "Annulé". 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. Par exemple, un analyste peut se concentrer uniquement sur les expéditions terminées pour mesurer le temps de cycle complet ou analyser uniquement les expéditions annulées pour comprendre les causes profondes des annulations. Il fournit un contexte important pour l'interprétation du flux de processus. Pourquoi est-ce important ? : Fournit un résultat de haut niveau pour chaque expédition, permettant un filtrage et une analyse basés sur la complétion, l'annulation ou l'état de transit de l'expédition. Source des données : C'est le champ de statut global dans l'en-tête du document Commande de transport (Freight Order) ou Réservation de fret (Freight Booking) dans SAP TM. Exemples En planificationPrêt pour le transportEn exécutionExécutéAnnulé | |||
| Système source SourceSystem | Le système d'où proviennent les données d'événements. | ||
| Descriptionn Cet attribut identifie le système source qui a généré les données, par exemple, SAP TM, SAP ERP ou un portail de transporteur externe. Il fournit le contexte sur l'origine des données et aide à comprendre les points d'intégration des données. Dans un paysage complexe, connaître le système source est impératif pour la validation des données, la résolution des problèmes d'intégration et la compréhension de la manière dont les différents systèmes contribuent au processus global. Par exemple, il peut différencier un événement signalé par un système interne de celui signalé par un fournisseur de services logistiques tiers. Pourquoi est-ce important ? : Identifie l'origine des données, ce qui est impératif pour la gouvernance des données, le dépannage et la compréhension de l'orchestration des processus à travers plusieurs systèmes. Source des données : Cette information est souvent stockée dans le journal système ou peut être dérivée en fonction de l'interface ou de l'utilisateur qui a créé la saisie de données. Exemples SAP_TM_P01SAP_ERP_E01CARRIER_PORTAL_XYZ | |||
Activités de gestion des transports
| Activité | Descriptionn | ||
|---|---|---|---|
| Demande de transport reçue | Cette activité marque l'initiation du processus de transport, représentant la création d'une exigence de transport. Dans SAP TM, cela est généralement capturé par la création d'un Ordre d'acheminement (Forwarding Order - FWO) ou d'une Exigence de transport basée sur une commande (Order-based Transportation Requirement - OTR). | ||
| Pourquoi est-ce important ? : C'est l'événement de démarrage principal du processus d'expédition complet. L'analyse du temps écoulé entre cette activité et l'achèvement de la planification est indispensablele pour mesurer l'efficacité de la planification. Source des données : Cet événement est enregistré lors de la création d'un Ordre d'acheminement (document de type FWO) ou d'autres documents d'exigence de transport. L'horodatage de création dans la table d'en-tête, telle que /SCMTMS/D_TORROT, sert d'heure d'événement. Capture Capturez la date et l'heure de création du document d'Ordre d'Acheminement ou d'Exigence de Transport. Type d'événement explicit | |||
| Expédition annulée | Cette activité représente l'annulation d'une expédition après qu'elle a été demandée ou planifiée. Elle sert de point d'arrivée terminal pour les processus qui ne procèdent pas à l'exécution. | ||
| Pourquoi est-ce important ? : Le suivi des annulations permet d'identifier les raisons des échecs de processus, telles que les changements de demande client ou les erreurs de planification. Des taux d'annulation élevés peuvent indiquer des problèmes sous-jacents dans la gestion des commandes ou la planification. Source des données : Cela est déduit d'un changement de statut du cycle de vie de l'Ordre d'acheminement (Forwarding Order) ou de la Commande de transport (Freight Order) à "Annulé". L'horodatage de ce changement de statut marque l'événement. Capture Capturez l'horodatage lorsque le statut du cycle de vie du document est défini sur 'Annulé'. Type d'événement inferred | |||
| Expédition planifiée | Cette activité signifie que les exigences de transport ont été consolidées dans un plan d'expédition concret. Elle est enregistrée lorsqu'une Commande de transport (Freight Order, pour la route/rail) ou une Réservation de fret (Freight Booking, pour la mer/air) est créée et sauvegardée, contenant l'itinéraire et les ressources planifiés. | ||
| Pourquoi est-ce important ? : L'achèvement de cette étape est indispensable pour l'initiation de l'exécution logistique. Le temps de cycle pour cette activité à partir de la demande est un KPI clé pour mesurer l'efficacité de la planification. Source des données : Cet événement correspond à la création d'un document de Commande de transport (Freight Order) ou de Réservation de fret (Freight Booking). Il peut également être déduit d'un changement de statut sur le document, comme le statut de planification passant à "Planifié". Les tables pertinentes sont généralement /SCMTMS/D_TORROT pour les données d'en-tête. Capture Utilisez l'horodatage de création du document de commande de transport 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 lieu d'expédition. | ||
| Pourquoi est-ce important ? : Il s'agit d'un jalon d'exécution clé qui marque le début de la phase de transit. Il est indispensable pour le suivi de la respect des délais et pour fournir une visibilité précise des expéditions. Source des données : Cet événement est généralement enregistré dans SAP Event Management, qui est intégré à SAP TM, comme un événement de "Départ" ou "Fin de chargement". Il met à jour le statut d'exécution de la Commande de transport (Freight Order). Il peut également être enregistré directement dans la Commande de transport. Capture Utilisez l'horodatage de l'événement d'exécution 'Départ' signalé pour le lieu d'origine de la commande de transport. Type d'événement explicit | |||
| Marchandises livrées | Cette activité représente l'arrivée de l'expédition à 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 au lieu du destinataire. | ||
| Pourquoi est-ce important ? : C'est le jalon le plus important pour mesurer la performance de paiement à temps et la satisfaction client. Il sert également généralement de déclencheur pour les processus de facturation et de règlement. Source des données : Cela est enregistré comme un événement d'exécution "Arrivée à destination" ou "Fin de déchargement" dans SAP TM, mettant à jour le statut d'exécution de la Commande de transport (Freight Order). Les données sont souvent reçues du transporteur. Capture Utilisez l'horodatage de l'événement d'exécution 'Arrivée à destination' signalé pour le dernier arrêt de la commande de transport. Type d'événement explicit | |||
| Paiement traité | Cette activité finale confirme que le transporteur a été payé pour les services de transport. Cet événement se produit généralement dans le système ERP connecté après réception de la facture vérifiée de SAP TM. | ||
| Pourquoi est-ce important ? : Cela marque la véritable fin du cycle de vie du transport complet. C'est indispensable pour mesurer la durée globale du processus et les KPI de paiement à temps. Source des données : Cette information réside dans le système ERP (par exemple, S/4HANA Finance). Elle peut être liée au document de règlement de fret (Freight Settlement Document) via le numéro de facture. Une mise à jour de statut peut être renvoyée à SAP TM, ou les données doivent être extraites des tables ERP comme BKPF et BSEG. Capture Obtenez la date de compensation du paiement du système ERP, en la liant à l'expédition via la référence de facture. Type d'événement explicit | |||
| Preuve de livraison reçue | Cette activité se produit lorsque le document de preuve de livraison (POD) signé est reçu du transporteur et enregistré dans le système. Cela confirme l'acceptation des marchandises par le destinataire. | ||
| Pourquoi est-ce important ? : La réception du POD est une condition préalable essentielle pour la facturation du client et le règlement des frais de fret avec le transporteur. Les retards à ce niveau impactent directement le cycle de conversion de trésorerie. Source des données : Cela est généralement déduit d'un changement de statut sur la Commande de transport (Freight Order), tel que le statut POD étant défini sur "Reçu". Le changement dans ce champ de statut fournit l'horodatage de l'activité. Capture Capturez l'horodatage lorsque le statut de Preuve de Livraison sur la Commande de Transport est mis à jour à 'Reçue'. Type d'événement inferred | |||
| Règlement de fret créé | Cette activité marque la création du document de règlement de fret (FSD), qui calcule les coûts de transport à payer au transporteur. C'est le document principal utilisé pour les écritures de régularisation et la vérification des factures. | ||
| Pourquoi est-ce important ? : Cela marque le début de la phase de règlement financier du processus de transport. L'analyse du temps écoulé entre la livraison et la création du règlement aide à identifier les points de blocage dans le traitement financier. Source des données : Il s'agit d'un événement explicite capturé par la création d'un document de règlement de fret (Freight Settlement Document). L'horodatage de création est disponibleble dans la table d'en-tête de ce document, /SCMTMS/D_SFIRHD. Capture Utilisez la date et l'heure de création du document de règlement de fret. Type d'événement explicit | |||
| Transporteur assigné | Cette activité indique qu'un prestataire de services de transport spécifique, ou transporteur, a été sélectionné et assigné à l'expédition. Cela peut se produire par attribution manuelle, planification automatisée ou processus d'appel d'offres. | ||
| Pourquoi est-ce important ? : L'attribution d'un transporteur est une étape cruciale avant qu'une expédition puisse être confirmée et exécutée. Le suivi de cette étape aide à analyser les processus de sélection des transporteurs et à garantir une réservation dans les délais. Source des données : Cela est enregistré lorsque le champ transporteur (partie ayant le rôle de 'Carrier') est renseigné dans la Commande de transport (Freight Order) ou la Réservation de fret (Freight Booking). Pour un appel d'offres, c'est au moment où une demande de cotation de fret est attribuée. Capture Identifie l'horodatage lorsque la fonction partenaire transporteur est renseignée ou confirmée pour la première fois dans la Commande de transport (Freight Order). Type d'événement inferred | |||
| Déclaration en douane déposée | Pour les expéditions internationales, cette activité représente la soumission de la documentation douanière requise aux autorités. C'est un prérequis pour obtenir l'autorisation d'exporter ou d'importer des marchandises. | ||
| Pourquoi est-ce important ? : Le dépôt des déclarations douanières dans les délais est impératif pour éviter les retards aux frontières. Cette activité permet de suivre l'efficacité du processus de dédouanement. Source des données : Cet événement peut être capturé comme un événement d'exécution spécifique signalé par un courtier en douane ou à partir d'un changement de statut dans un système de gestion douanière intégré, comme SAP GTS. La Commande de transport (Freight Order) est mise à jour en conséquence. Capture Capturez l'horodatage de l'événement d'exécution 'Déclaration en douane déposée' ou d'un changement de statut correspondant. Type d'événement explicit | |||
| Dédouané | Cette activité indique que l'expédition a été approuvée par les autorités douanières et est autorisée à poursuivre son chemin. Cet événement est un jalon majeur pour la logistique internationale, car il élimine un goulot d'étranglement potentiel significatif. | ||
| Pourquoi est-ce important ? : Le dédouanement est souvent une source de retards majeurs dans les chaînes d'approvisionnement mondiales. Suivre la durée et le taux de réussite de cette activité est indispensable pour améliorer les temps de transit internationaux. Source des données : Cela est enregistré comme un événement d'exécution "Dédouanement", généralement signalé par un courtier en douane ou un fournisseur de visibilité externe et mis à jour dans le suivi d'exécution de la Commande de transport (Freight Order). Capture Utilisez l'horodatage de l'événement d'exécution 'Dédouanement' signalé associé à la commande de transport. 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 tel que planifié. La confirmation est généralement reçue via un message EDI, une mise à jour du portail transporteur ou une saisie manuelle, ce qui met à jour le statut de la Commande de transport (Freight Order). | ||
| Pourquoi est-ce important ? : La confirmation du transporteur engage sur le plan d'expédition, réduisant l'incertitude. Des retards dans la réception de cette confirmation peuvent mettre en péril l'ensemble du calendrier d'expédition. Source des données : Cela est déduit d'un changement dans le champ de statut de confirmation de la Commande de transport (Freight Order) ou de la Réservation de fret (Freight Booking). Une valeur de statut spécifique, comme "Confirmé", sera définie dans la gestion des statuts du document. Capture Suivre les modifications des champs de statut de confirmation au sein du document de commande de transport. Type d'événement inferred | |||
| Expédition réacheminée | Cette activité signifie un changement imprévu d'itinéraire ou de calendrier d'expédition après sa confirmation. Cela peut être dû à des perturbations, des demandes des clients ou des problèmes logistiques. | ||
| Pourquoi est-ce important ? : Les réacheminements entraînent souvent des coûts et des retards accrus. L'identification de la fréquence et des raisons des réacheminements aide à améliorer la précision de la planification et la stabilité opérationnelle. Source des données : Cet événement est déduit en détectant des changements significatifs aux étapes, lieux ou dates d'une Commande de transport (Freight Order) après le début de son exécution. Les documents de modification (tables CDHDR et CDPOS) peuvent être analysés à cette fin. Capture Détecter les changements apportés aux champs de routage clés dans le document de Commande de Transport après l'événement 'Expédition confirmée par le transporteur'. Type d'événement inferred | |||
| Facture vérifiée | Cette activité signifie que la facture du transporteur a été correctement rapprochée du document de règlement de fret et est approuvée pour paiement. C'est la dernière étape avant l'initiation du processus de paiement dans le système ERP. | ||
| Pourquoi est-ce important ? : Cette activité complète le processus d'audit et de vérification des coûts de fret. Les retards à ce stade peuvent entraîner des paiements tardifs aux transporteurs, ce qui peut nuire aux relations. Source des données : Cela est déduit d'un changement de statut sur le document de règlement de fret (Freight Settlement Document), tel que "Prêt pour les écritures de régularisation" ou "Transféré pour comptabilisation", indiquant qu'il a été envoyé au système ERP pour paiement. Capture Suivre l'horodatage lorsque le statut du cycle de vie du FSD change pour indiquer qu'il est prêt pour le paiement ou qu'il a été enregistré. Type d'événement inferred | |||
| Litige de 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 de fret (Freight Settlement Document). Cela déclenche un workflow de résolution de litige. | ||
| Pourquoi est-ce important ? : Les litiges retardent les paiements des transporteurs et exigent un effort administratif pour être résolus. Le suivi de cette activité aide à identifier les causes profondes des inexactitudes de facturation, telles que des tarifs incorrects ou des frais accessoires. Source des données : Cela peut être déduit d'un changement de statut sur le document de règlement de fret (Freight Settlement Document), où un statut "Litige" est défini. Cela peut également impliquer la création d'un document de cas de litige distinct. Capture Capturez l'horodatage lorsque le statut de litige est défini sur le Document de Règlement de Fret. Type d'événement inferred | |||
Guides d'extraction
Étapes
- Identifier et activer 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 vues CDS principales sont actifs. Les services clés à vérifier incluent ceux liés à I_TransportationOrder, C_TranspOrdExecutionEvent, I_ForwardingOrder et I_FreightSettlementDocument. S'ils ne sont pas actifs, collaborez avec votre administrateur SAP pour les ajouter et les activer depuis le système backend. - Établir la connectivité API : Obtenez l'URL racine des services OData auprès de votre administrateur SAP. Configurez une application cliente, telle qu'un script Python utilisant la bibliothèque
requests, un outil ETL commercial ou un outil comme Postman, pour vous connecter à l'API. Vous devrez configurer l'authentification, généralement en utilisant l'authentification de base (nom d'utilisateur et mot de passe) ou OAuth 2.0 pour une connexion plus sécurisée. - Définir la portée de l'extraction : Déterminez la portée de votre extraction de données. Définissez une plage de dates spécifique, par exemple, les 6 derniers mois. Identifiez les unités organisationnelles pertinentes sur lesquelles filtrer, telles que
Company Code, ou des types de documents spécifiques comme le type de Commande de transport, pour garantir que les données sont pertinentes pour le processus que vous analysez. - Construire la requête d'expédition de base : Commencez par interroger la vue CDS I_TransportationOrder. Cette vue sert d'objet central pour les expéditions, également connues sous le nom de Commandes de transport ou Réservations de transport. Utilisez le paramètre OData
$selectpour choisir les colonnes dont vous avez besoin, y compris les attributs recommandés commeCarrierName,ModeOfTransportetRequestedDeliveryDate. Appliquez un$filterpour limiter les données par date et d'autres paramètres de portée. - Interroger les événements d'exécution et de transport : Utilisez la vue CDS C_TranspOrdExecutionEvent pour extraire les événements logistiques clés. Filtrez cette vue pour des valeurs spécifiques de
EventCodequi correspondent à des activités telles que « Marchandises enlevées » (DEPARTURE) et « Marchandises livrées » (ARRIVAL_AT_DESTINATION). Joignez ces données à vos données d'expédition de base en utilisant l'UUID de TransportationOrder. - Interroger les objets commerciaux connexes : Pour capturer l'ensemble du processus, vous devez interroger d'autres vues CDS connexes. Interrogez I_ForwardingOrder pour l'activité « Demande de transport reçue » et I_FreightSettlementDocument pour les activités financières comme « Règlement de fret créé », « Litige de fret créé » et « Facture vérifiée ».
- Extraire les activités basées sur le statut : De nombreuses activités ne sont pas des événements discrets mais plutôt des changements de statut sur le document primaire. Pour des activités comme « Transporteur assigné », « Expédition confirmée par le transporteur » et « Expédition annulée », vous interrogerez la vue I_TransportationOrder et utiliserez le
LastChangeDateTimeassocié au champ de statut pertinent comme heure de l'événement. Cela nécessite une cartographie minutieuse des codes de statut aux activités commerciales. - Unir et transformer les données : Consolidez les données extraites de toutes les sources dans une structure de journal d'événements unique. Pour chaque activité extraite, créez une ligne contenant les colonnes requises :
ShipmentId,(ActivityName)et(EventTime). Assurez-vous que tous les attributs recommandés de la requête d'expédition de base sont présents sur chaque ligne pour cette expédition. Cette étape est conceptuellement équivalente à une opération SQLUNION ALL. - Gérer les événements complexes et externes : Pour des activités comme « Dédouané » ou « Paiement traité », les données peuvent résider dans des champs spécifiques ou même dans des systèmes externes. La logique de requête fournie utilise des champs standard comme proxy. Vous devrez peut-être ajuster la requête pour la joindre à des vues CDS spécifiques aux douanes ou la corréler avec une extraction ERP distincte pour les données de paiement basées sur le numéro de Document de Règlement de Fret.
- Formater pour ProcessMind : Enregistrez le jeu de données consolidé final sous forme de fichier CSV. Assurez-vous que les en-têtes de colonne correspondent aux exigences de téléchargement, par exemple, en mappant votre colonne
ShipmentIdau champCaseIddans les paramètres de l'outil. Vérifiez que les horodatages sont dans un format cohérent, de prélèvement.férence UTC (AAAA-MM-JJTHH:MM:SSZ).
Configuration
- Vues CDS principales : L'extraction s'appuie principalement sur I_TransportationOrder (pour les commandes de transport), 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 plage de dates : Il est indispensable d'appliquer un filtre de date pour gérer le volume de données. Utilisez le champ
CreationDateTimesur I_TransportationOrder ou le champActualBusinessDateTimesur C_TranspOrdExecutionEvent. Une plage de 3 à 6 mois est recommandée pour une analyse initiale. - Filtrage par type de document : Pour affiner l'analyse, filtrez sur des types de documents spécifiques à l'aide du champ
TransportationOrderType. Cela permet de distinguer différents scénarios logistiques, tels que les expéditions sortantes standard des transferts de stock. - Filtres organisationnels : Le cas échéant, filtrez par
PurchasingOrganizationou d'autres champs de niveau organisationnel pour limiter les données à une unité commerciale ou une région spécifique. - Pagination de l'API : Pour les grands jeux de données, utilisez les paramètres OData
$topet$skippour récupérer les données par pages plus petites. Cela évite les délais d'attente de l'API et réduit la consommation de mémoire côté client. Une taille de page de 1000 à 5000 lignes est souvent efficace. - Prérequis : L'utilisateur ou le compte de service effectuant l'extraction nécessite des autorisations pour les services OData sous-jacents (objet d'autorisation S_SERVICE) et les données commerciales danss vues CDS. Les services correspondants doivent être activés dans la passerelle SAP (
/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
- Identifier et activer 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 vues CDS principales sont actifs. Les services clés à vérifier incluent ceux liés à I_TransportationOrder, C_TranspOrdExecutionEvent, I_ForwardingOrder et I_FreightSettlementDocument. S'ils ne sont pas actifs, collaborez avec votre administrateur SAP pour les ajouter et les activer depuis le système backend. - Établir la connectivité API : Obtenez l'URL racine des services OData auprès de votre administrateur SAP. Configurez une application cliente, telle qu'un script Python utilisant la bibliothèque
requests, un outil ETL commercial ou un outil comme Postman, pour vous connecter à l'API. Vous devrez configurer l'authentification, généralement en utilisant l'authentification de base (nom d'utilisateur et mot de passe) ou OAuth 2.0 pour une connexion plus sécurisée. - Définir la portée de l'extraction : Déterminez la portée de votre extraction de données. Définissez une plage de dates spécifique, par exemple, les 6 derniers mois. Identifiez les unités organisationnelles pertinentes sur lesquelles filtrer, telles que
Company Code, ou des types de documents spécifiques comme le type de Commande de transport, pour garantir que les données sont pertinentes pour le processus que vous analysez. - Construire la requête d'expédition de base : Commencez par interroger la vue CDS I_TransportationOrder. Cette vue sert d'objet central pour les expéditions, également connues sous le nom de Commandes de transport ou Réservations de transport. Utilisez le paramètre OData
$selectpour choisir les colonnes dont vous avez besoin, y compris les attributs recommandés commeCarrierName,ModeOfTransportetRequestedDeliveryDate. Appliquez un$filterpour limiter les données par date et d'autres paramètres de portée. - Interroger les événements d'exécution et de transport : Utilisez la vue CDS C_TranspOrdExecutionEvent pour extraire les événements logistiques clés. Filtrez cette vue pour des valeurs spécifiques de
EventCodequi correspondent à des activités telles que « Marchandises enlevées » (DEPARTURE) et « Marchandises livrées » (ARRIVAL_AT_DESTINATION). Joignez ces données à vos données d'expédition de base en utilisant l'UUID de TransportationOrder. - Interroger les objets commerciaux connexes : Pour capturer l'ensemble du processus, vous devez interroger d'autres vues CDS connexes. Interrogez I_ForwardingOrder pour l'activité « Demande de transport reçue » et I_FreightSettlementDocument pour les activités financières comme « Règlement de fret créé », « Litige de fret créé » et « Facture vérifiée ».
- Extraire les activités basées sur le statut : De nombreuses activités ne sont pas des événements discrets mais plutôt des changements de statut sur le document primaire. Pour des activités comme « Transporteur assigné », « Expédition confirmée par le transporteur » et « Expédition annulée », vous interrogerez la vue I_TransportationOrder et utiliserez le
LastChangeDateTimeassocié au champ de statut pertinent comme heure de l'événement. Cela nécessite une cartographie minutieuse des codes de statut aux activités commerciales. - Unir et transformer les données : Consolidez les données extraites de toutes les sources dans une structure de journal d'événements unique. Pour chaque activité extraite, créez une ligne contenant les colonnes requises :
ShipmentId,(ActivityName)et(EventTime). Assurez-vous que tous les attributs recommandés de la requête d'expédition de base sont présents sur chaque ligne pour cette expédition. Cette étape est conceptuellement équivalente à une opération SQLUNION ALL. - Gérer les événements complexes et externes : Pour des activités comme « Dédouané » ou « Paiement traité », les données peuvent résider dans des champs spécifiques ou même dans des systèmes externes. La logique de requête fournie utilise des champs standard comme proxy. Vous devrez peut-être ajuster la requête pour la joindre à des vues CDS spécifiques aux douanes ou la corréler avec une extraction ERP distincte pour les données de paiement basées sur le numéro de Document de Règlement de Fret.
- Formater pour ProcessMind : Enregistrez le jeu de données consolidé final sous forme de fichier CSV. Assurez-vous que les en-têtes de colonne correspondent aux exigences de téléchargement, par exemple, en mappant votre colonne
ShipmentIdau champCaseIddans les paramètres de l'outil. Vérifiez que les horodatages sont dans un format cohérent, de prélèvement.férence UTC (AAAA-MM-JJTHH:MM:SSZ).
Configuration
- Vues CDS principales : L'extraction s'appuie principalement sur I_TransportationOrder (pour les commandes de transport), 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 plage de dates : Il est indispensable d'appliquer un filtre de date pour gérer le volume de données. Utilisez le champ
CreationDateTimesur I_TransportationOrder ou le champActualBusinessDateTimesur C_TranspOrdExecutionEvent. Une plage de 3 à 6 mois est recommandée pour une analyse initiale. - Filtrage par type de document : Pour affiner l'analyse, filtrez sur des types de documents spécifiques à l'aide du champ
TransportationOrderType. Cela permet de distinguer différents scénarios logistiques, tels que les expéditions sortantes standard des transferts de stock. - Filtres organisationnels : Le cas échéant, filtrez par
PurchasingOrganizationou d'autres champs de niveau organisationnel pour limiter les données à une unité commerciale ou une région spécifique. - Pagination de l'API : Pour les grands jeux de données, utilisez les paramètres OData
$topet$skippour récupérer les données par pages plus petites. Cela évite les délais d'attente de l'API et réduit la consommation de mémoire côté client. Une taille de page de 1000 à 5000 lignes est souvent efficace. - Prérequis : L'utilisateur ou le compte de service effectuant l'extraction nécessite des autorisations pour les services OData sous-jacents (objet d'autorisation S_SERVICE) et les données commerciales danss vues CDS. Les services correspondants doivent être activés dans la passerelle SAP (
/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
- Définir les exigences en matière de données : Commencez par confirmer la logique exacte pour chacune des 15 activités requises et tous les attributs. Cela implique de mapper chaque activité à des changements de statut spécifiques, des événements de création ou des liens documentaires dans votre système SAP TM. Par exemple, déterminez le statut d'exécution exact qui signifie « Marchandises enlevées ».
- Accéder à l'environnement de développement ABAP : Connectez-vous à la SAP GUI et accédez à l'éditeur ABAP à l'aide du code de transaction
SE38. Saisissez un nom pour votre nouveau programme, par exempleZTM_PROCESS_EXTRACT, et cliquez sur « Créer ». Donnez un titre et définissez le type de programme sur « Programme exécutable ». - Créer l'écran de sélection : Dans le programme, définissez l'écran de sélection que les utilisateurs verront. Cela devrait inclure des paramètres de filtrage des données, tels qu'une plage de dates pour la date de création de la commande de transport (
SO_CREDT), et des options de sélection pour les types de documents (SO_TYPE) ou les transporteurs (SO_CARR). - Définir la structure de sortie : Définissez une structure de table interne qui correspond au format du journal d'événements requis. Cette structure doit inclure des champs pour
ShipmentId,(ActivityName),(EventTime),EndTime,CarrierName,RequestedDeliveryDate,ModeOfTransport,TotalFreightCostetIsOnTimeDelivery. - Mettre en œuvre la logique de sélection des données : Écrivez la logique ABAP principale pour sélectionner les données de chacune des 15 activités. Cela implique généralement d'interroger plusieurs tables SAP TM. Commencez par sélectionner les documents d'expédition primaires, tels que les Commandes de transport, dans la plage de dates spécifiée.
- Extraire les événements de planification et d'exécution : Pour chaque document d'expédition sélectionné (par exemple, une Commande de transport), interrogez les tables et objets commerciaux liés pour trouver les horodatages des différents événements. Utilisez la table
/SCMTMS/D_TORROTpour la création de la Commande de transport (« Expédition planifiée »), l'attribution du transporteur (« Transporteur assigné ») et les changements de statut d'exécution qui correspondent à « Marchandises enlevées » et « Marchandises livrées ». La création de l'Ordre d'acheminement précédent (/SCMTMS/D_TRQROT) peut signifier « Demande de transport reçue ». - Extraire la confirmation du transporteur et le réacheminement : Interrogez les tables de statut ou les documents de modification (CDHDR/CDPOS) associés à la Commande de transport pour identifier quand le statut
CONFIRMATIONa été défini, ce qui capture « Expédition confirmée par le transporteur ». De même, recherchez les changements significatifs dans les informations de routage pour capturer « Expédition réacheminée ». - Extraire 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édouané ») sont souvent suivis via des documents liés. La logique doit lire le flux de documents (
/SCMTMS/D_TORDOC) de la Commande de transport pour trouver ces documents liés et leurs heures de création ou de modification de statut. - Extraire les événements de règlement et de litige : Interrogez la table d'en-tête du Document de Règlement de Fret (
/SCMTMS/D_SFIRHD) et ses éléments et statuts liés pour capturer les événements « Règlement de fret créé », « Litige de fret créé » et « Facture vérifiée ». Reliez-les à l'originalShipmentId. - Consolider les données : Pour chaque événement trouvé, créez un nouvel enregistrement dans votre table interne finale. Remplissez le champ
(ActivityName)avec l'activité correspondante, le champ(EventTime)avec l'horodatage de l'événement et le champShipmentIdavec l'ID de la Commande de transport ou de la Réservation de transport. Remplissez les autres attributs à partir des documents source. - Formater et exporter le fichier : Une fois la table interne finale entièrement remplie, 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'applications SAP (accessible via la transaction AL11). - Planifier et récupérer : Le programme ABAP peut être planifié pour s'exécuter en tâche de fond (transaction SM36) afin d'extraire automatiquement les données. Le fichier généré peut ensuite être téléchargé du serveur d'applications vers une machine locale à l'aide de la transaction
CG3Ypour être téléversé dans ProcessMind.
Configuration
- Plage de dates : L'écran de sélection doit inclure une plage de dates obligatoire pour la date de création du document de transport principal (par exemple, Commande de transport). Pour une analyse initiale, une plage de 3 à 6 mois est recommandée pour garantir un jeu de données représentatif sans entraîner un temps d'exécution excessif.
- Filtre par type de document : Fournissez un filtre pour le type de document de transport (par exemple, Commande de transport, Réservation de transport). Ceci est impératif pour concentrer l'analyse sur des processus spécifiques comme le fret routier par rapport au fret maritime.
- Filtre par transporteur : Permettez aux utilisateurs de filtrer par transporteurs spécifiques. Cela aide à analyser la performance des partenaires logistiques individuels.
- Filtres organisationnels : Incluez des filtres pour les unités organisationnelles pertinentes, telles que
PurchasingOrganizationouCompany Code, afin de limiter l'extraction à des domaines d'activité spécifiques. - Optimisation des performances : Pour les grands jeux de données, assurez-vous que le code ABAP utilise des champs de base de données indexés dans les clauses
WHERE, évite les boucles imbriquées si possible, et ne sélectionne que les champs nécessaires de la base de données pour minimiser la consommation de mémoire. - Prérequis : L'utilisateur exécutant le rapport a besoin d'une autorisation pour exécuter des programmes ABAP. Le développeur nécessite l'autorisation
S_DEVELOP. Le programme lui-même nécessite des autorisations pour l'accès au système de fichiers sur le serveur d'applications (objetS_DATASET) et l'accès aux tables de base de données TM et aux objets BOPF pertinents.
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.