Il Suo template per i dati di Transportation Management
Il Suo template per i dati di Transportation Management
- Attributi consigliati da raccogliere
- Attività chiave da tracciare
- Guida all'estrazione per SAP Transportation Management
Attributi di Transportation Management
| Nome | Descrizione | ||
|---|---|---|---|
| Nome attività ActivityName | Il nome di un evento aziendale specifico o di una fase avvenuta all'interno del processo di trasporto. | ||
| Descrizione Il Nome attività descrive un singolo compito o una pietra miliare nel ciclo di vita della spedizione, come "Spedizione pianificata", "Merce ritirata" o "Merce consegnata". Queste attività formano i nodi nella mappa del processo rilevata. L'analisi della sequenza e della frequenza delle attività aiuta a identificare il flusso di processo standard, le deviazioni, i colli di bottiglia e i loop di rilavorazione (rework). È la spina dorsale della process discovery e del controllo di conformità nella gestione dei trasporti. Perché è importante Questo attributo definisce le fasi del processo di trasporto, consentendo la visualizzazione e l'analisi del flusso di spedizione end-to-end. Dove trovare Solitamente deriva da codici evento o cambi di stato registrati nell'event handler di tracciamento dell'esecuzione di SAP TM. Può provenire da tabelle che registrano i cambi di stato degli oggetti aziendali o messaggi di eventi specifici. Esempi Spedizione pianificataVettore assegnatoMerce ritirataMerce consegnataProva di consegna ricevuta | |||
| Spedizione ShipmentId | L'identificatore unico per un singolo movimento di merci, che funge da caso centrale per l'analisi. | ||
| Descrizione Lo Shipment ID è la chiave primaria che raggruppa tutte le attività e gli eventi di trasporto correlati. Rappresenta un singolo processo di trasporto end-to-end, dalla richiesta iniziale alla prova finale di consegna e al pagamento. Nel Process Mining, questo attributo è essenziale per costruire la vista del caso (case view), consentendo agli analisti di tracciare il viaggio completo di ogni spedizione. Permette l'analisi delle varianti di processo, dei tempi di ciclo e degli esiti associati alle singole spedizioni, fornendo una visione completa delle prestazioni di trasporto. Perché è importante Questo è l'identificatore fondamentale del caso, che collega tutti gli eventi e i punti dati a un ordine di trasporto specifico, il che è fondamentale per l'analisi del processo end-to-end. Dove trovare Questo identificatore è il numero del Freight Order o il numero della Freight Booking in SAP TM. Si trova in tabelle come /SCMTMS/D_TORROT e /SCMTMS/D_TRQROT. Esempi 610000432161000056786100009876 | |||
| Timestamp Evento EventTime | Il timestamp che indica quando una specifica attività o un evento si è verificato. | ||
| Descrizione Il valore Event Time fornisce la data e l'ora precise per ogni attività. Questi dati temporali sono fondamentali per calcolare i tempi di ciclo, le durate e i tempi di attesa tra le fasi del processo. In fase di analisi, questo attributo viene utilizzato per sequenziare correttamente gli eventi, costruire un log cronologico ed eseguire analisi delle prestazioni basate sul tempo. È fondamentale per identificare i ritardi, misurare l'efficienza del processo e valutare le prestazioni rispetto ai programmi o agli SLA. Perché è importante Il timestamp è essenziale per ordinare gli eventi cronologicamente e calcolare tutte le metriche di performance, come i tempi di ciclo e la consegna puntuale. Dove trovare Proveniente dalle tabelle dell'event handler in SAP TM, come /SAPTRX/EH_EVMSG, che memorizzano i timestamp per gli eventi segnalati. Esempi 2023-04-15T10:00:00Z2023-04-16T14:30:00Z2023-04-20T09:15:00Z | |||
| Consegna puntuale IsOnTimeDelivery | Un flag booleano che indica se la merce è stata consegnata entro la data di consegna richiesta. | ||
| Descrizione Questo è un attributo calcolato che confronta il timestamp dell'attività "Merce consegnata" con la "Data di consegna richiesta". Viene valutato come vero se la consegna è stata puntuale o anticipata, e falso se è stata in ritardo. Questo attributo semplifica l'analisi delle prestazioni creando un chiaro risultato binario per ogni spedizione. È la base per la Dashboard delle prestazioni di consegna puntuale e il relativo KPI. Consente agli analisti di filtrare facilmente le spedizioni in ritardo ed eseguire un'analisi delle cause profonde per comprendere i driver di scarse prestazioni. Perché è importante Misura direttamente l'aderenza agli impegni di consegna, semplificando il calcolo e la visualizzazione del KPI critico sulla puntualità (On-Time Delivery). Dove trovare Questo attributo non è memorizzato in SAP TM. Deve essere calcolato durante la trasformazione dei dati confrontando il timestamp dell'evento di consegna effettiva con la Data di consegna richiesta. Esempi truefalse | |||
| Costo totale del trasporto TotalFreightCost | Il costo totale calcolato o fatturato per la spedizione. | ||
| Descrizione Il Costo totale del trasporto rappresenta l'impatto finanziario di una spedizione. Può trattarsi del costo calcolato dal sistema di gestione dei trasporti o dell'importo finale della fattura del vettore dopo il regolamento. Questo attributo permette di integrare la dimensione finanziaria nell'analisi dei processi. Gli analisti possono identificare le varianti di processo più costose, calcolare il costo di ritardi o cambi di rotta e confrontare l'efficienza dei diversi vettori o modalità di trasporto. È un elemento fondamentale per le dashboard dedicate all'analisi della spesa logistica e del costo del servizio. Perché è importante Aggiunge una dimensione finanziaria al processo, consentendo l'analisi della spesa di trasporto, del costo per spedizione e dell'impatto economico delle inefficienze. Dove trovare Proveniente dal Freight Settlement Document in SAP TM dopo il calcolo delle spese. Si trova in tabelle come /SCMTMS/D_SFIRHD. Esempi 250.751200.005430.50 | |||
| Data di consegna richiesta RequestedDeliveryDate | La data e l'ora di consegna richieste dal cliente o stipulate nell'ordine di vendita. | ||
| Descrizione La Data di consegna richiesta è il termine previsto per l'attività "Merce consegnata". Funge da benchmark principale per misurare le prestazioni di consegna puntuale. Questa data è fondamentale per il calcolo del KPI "Tasso di consegna puntuale". Confrontando il timestamp della consegna effettiva con questa data richiesta, le organizzazioni possono determinare se hanno rispettato l'accordo sul livello di servizio (SLA). L'analisi delle deviazioni aiuta a identificare le cause sistemiche dei ritardi, come problemi di prestazioni dei vettori, ritardi nella pianificazione o blocchi doganali. Perché è importante È il riferimento per misurare la puntualità di consegna, un KPI fondamentale per la soddisfazione del cliente e l'eccellenza operativa. Dove trovare Questa data viene solitamente trasferita dal precedente ordine di vendita o ordine di trasferimento stock da SAP ERP. È memorizzata nei campi data/ora della Freight Unit o del Freight Order. Esempi 2023-05-20T17:00:00Z2023-06-01T12:00:00Z2023-06-15T23:59:59Z | |||
| Modalità di Trasporto ModeOfTransport | Il metodo di trasporto utilizzato per la spedizione, come strada, ferrovia, aria o mare. | ||
| Descrizione Questo attributo specifica la modalità di trasporto. Modalità diverse presentano strutture di costo, tempi di transito e complessità di processo differenti. Ad esempio, una spedizione aerea internazionale avrà attività diverse, come lo sdoganamento, rispetto a una spedizione nazionale su gomma. L'analisi dei processi per modalità di trasporto consente iniziative di miglioramento personalizzate. È inoltre fondamentale per l'analisi dei costi, specialmente per identificare l'uso del trasporto premium (ad esempio, via aerea espresso) rispetto a modalità standard più economiche. Questa segmentazione è fondamentale per comprendere e controllare la spesa per i trasporti. Perché è importante Consente l'analisi di costi, tempi e variazioni di processo in base alla modalità di trasporto, fondamentale per l'ottimizzazione dei costi e l'identificazione dell'uso di noli premium. Dove trovare Questo è un campo chiave del Freight Order o della Freight Booking, spesso etichettato come Modalità di trasporto o MOT. Esempi 01 (Su strada)02 (Ferroviario)04 (Aereo)05 (Marittimo) | |||
| Nome Vettore CarrierName | Il nome del vettore di trasporto o del fornitore di servizi logistici assegnato alla spedizione. | ||
| Descrizione Il Nome vettore identifica l'azienda responsabile dello spostamento fisico delle merci. Si tratta di una dimensione critica per l'analisi delle prestazioni, poiché vettori diversi possono avere livelli di servizio, costi e affidabilità differenti. Nel Process Mining, questo attributo viene utilizzato per segmentare e confrontare le prestazioni tra i vari vettori. Consente di creare scorecard dei vettori, monitorare i tassi di puntualità della consegna per vettore, confrontare i costi e identificare quali vettori sono più frequentemente associati a ritardi o controversie. Questo insight è vitale per la gestione strategica dei vettori e per il procurement. Perché è importante Consente il confronto delle prestazioni tra diversi vettori, fondamentale per ottimizzare la selezione, i costi e i livelli di servizio. Dove trovare Queste informazioni sono memorizzate nel documento di Freight Order o Freight Booking. Sono collegate tramite la funzione business partner per il vettore. Esempi DHL ExpressFedEx FreightMaersk LineUnion Pacific Railroad | |||
| Ora di Fine EndTime | Il `timestamp` che indica quando una specifica attività è stata completata. | ||
| Descrizione Mentre StartTime indica l'inizio di un evento, EndTime ne segna la conclusione. Questo è particolarmente utile per le attività che hanno una durata, come lo 'Sdoganamento' o il 'Carico merci'. La differenza tra EndTime e StartTime rappresenta il tempo di elaborazione di quell'attività. Nel Process Mining, avere sia l'ora di inizio che quella di fine permette un'analisi più granulare delle durate, consentendo di distinguere il tempo di esecuzione dal tempo di attesa. Ciò aiuta a individuare esattamente dove risiedono le inefficienze, se nell'esecuzione di un task o nei passaggi tra i vari task. Perché è importante Consente il calcolo preciso dei tempi di elaborazione delle attività, distinguendo il tempo di lavoro attivo dai tempi di attesa tra gli eventi. Dove trovare Come StartTime, questo dato proviene dalle tabelle dell'event handler. Può corrispondere a un evento separato di "completamento" per una determinata attività. Esempi 2023-04-15T11:30:00Z2023-04-16T15:00:00Z2023-04-20T09:45:00Z | |||
| Data di ritiro programmata ScheduledPickupDate | La data e l'ora pianificate per il ritiro della merce da parte del vettore presso il punto di spedizione. | ||
| Descrizione La Data di ritiro programmata è l'orario concordato per l'inizio del trasporto fisico. È una pietra miliare fondamentale nella fase di esecuzione della spedizione. Questo attributo è essenziale per monitorare la puntualità della prima tappa del viaggio. Confrontando l'orario di ritiro programmato con il timestamp dell'evento reale "Merce ritirata", le aziende possono calcolare i ritardi nel ritiro. Ciò aiuta a valutare le prestazioni e l'affidabilità sia del luogo di spedizione che del vettore. Perché è importante Funge da base per misurare la puntualità del ritiro, aiutando a identificare i ritardi proprio all'inizio del viaggio fisico della spedizione. Dove trovare Si tratta di una data/ora pianificata memorizzata nella sequenza delle tappe del Freight Order in SAP TM. Esempi 2023-05-18T09:00:00Z2023-05-30T14:00:00Z2023-06-12T10:30:00Z | |||
| È Contestata IsDisputed | Un flag booleano che indica se la fattura di nolo per la spedizione ha generato una controversia. | ||
| Descrizione Questo flag calcolato identifica le spedizioni che hanno una contestazione del regolamento di trasporto associata. Viene valutato come vero se è stata creata una contestazione e falso altrimenti. Può essere derivato dalla presenza di un'attività "Contestazione trasporto creata" o da un "Motivo della contestazione" non vuoto. Questo attributo semplifica l'analisi del processo di regolamento del trasporto. Consente un facile calcolo del KPI "Tasso di discrepanza nella fatturazione del trasporto" e aiuta a filtrare tutte le spedizioni contestate. Gli analisti possono quindi indagare le caratteristiche comuni di queste spedizioni, come vettori, tratte o tipi di spesa, per trovare la causa profonda degli errori di fatturazione. Perché è importante Semplifica l'identificazione dei regolamenti di trasporto problematici, consentendo un calcolo rapido del tasso di contestazione e l'analisi delle cause profonde degli errori di fatturazione. Dove trovare Questo attributo non è memorizzato in SAP TM. Deve essere calcolato in base all'esistenza di un caso di contestazione collegato al Freight Settlement Document. Esempi truefalse | |||
| Motivo del ritardo DelayReason | Un codice o un testo che spiega il motivo di un ritardo nella spedizione. | ||
| Descrizione L'attributo Motivo del ritardo acquisisce la causa di una deviazione dal programma pianificato, come "Maltempo", "Blocco doganale" o "Ritardo del vettore". Queste informazioni sono spesso riportate manualmente o tramite un messaggio di evento dal vettore. Questo è un attributo potente per l'analisi delle cause profonde. Consente agli analisti di andare oltre la semplice consapevolezza che una spedizione è in ritardo, arrivando a capirne il motivo. Categorizzando e quantificando i motivi del ritardo, le organizzazioni possono identificare problemi ricorrenti e concentrare i propri sforzi di miglioramento sulle aree più impattanti, come il miglioramento della comunicazione con i vettori o l'ottimizzazione dei percorsi per evitare la congestione. Perché è importante Spiega il "perché" dei ritardi, consentendo analisi approfondite delle cause profonde per ridurre le eccezioni e migliorare la puntualità. Dove trovare Questo può essere acquisito come codice evento e motivo nel framework di gestione degli eventi di SAP TM quando viene segnalato un evento "Arrivo/Partenza in ritardo". Esempi WEATHER_DELAYCUSTOMS_INSPECTIONCONGESTIONE DEL PORTOGUASTO MECCANICO | |||
| Motivo della Contestazione DisputeReason | Il motivo fornito quando una fattura di trasporto viene contestata. | ||
| Descrizione Quando la fattura di un vettore non corrisponde al costo previsto calcolato in SAP TM, viene aperta una contestazione. Questo attributo cattura il motivo della discrepanza, come 'Tariffa errata', 'Fattura duplicata' o 'Spesa accessoria non approvata'. L'analisi dei motivi di contestazione è fondamentale per la dashboard relativa agli errori di fatturazione e al tasso di contestazione dei noli. Aiuta a identificare le cause profonde delle imprecisioni di fatturazione, siano esse dovute a problemi nei dati anagrafici, errori del vettore o mancanze operative. Questo insight consente all'organizzazione di intraprendere azioni mirate per ridurre le dispute, accelerando il ciclo di pagamento e riducendo gli oneri amministrativi. Perché è importante Fornisce la causa profonda degli errori di fatturazione del trasporto, consentendo azioni mirate per ridurre le controversie sulle fatture e migliorare il processo di regolamento. Dove trovare Queste informazioni sono acquisite nel caso di gestione delle controversie associato a un Freight Settlement Document. Esempi Discrepanza tariffariaPeso erratoSpese di sosta (demurrage) non approvateFattura Duplicata | |||
| Nome Utente UserName | L'ID utente o il nome della persona che ha eseguito un'attività. | ||
| Descrizione Questo attributo identifica l'dipendente o l'utente responsabile dell'esecuzione di un'attività manuale, come "Spedizione pianificata" o "Fattura verificata". Collega le fasi del processo agli individui o ai team che le hanno eseguite. L'analisi delle attività per utente aiuta a comprendere la distribuzione del carico di lavoro, a identificare le esigenze di formazione e a riconoscere i migliori performer. È inoltre fondamentale ai fini della conformità e dell'audit, fornendo un record chiaro di chi ha fatto cosa e quando. Ciò può rivelare variazioni nel modo in cui diversi utenti eseguono lo stesso compito. Perché è importante Attribuisce le fasi manuali del processo a utenti specifici, consentendo l'analisi del carico di lavoro, delle prestazioni individuali e delle opportunità di formazione. Dove trovare Solitamente si trova nei log delle modifiche o nelle tabelle di intestazione dei documenti di trasporto, come nei campi 'Creato da' o 'Modificato da' (es. ERNAM, AENAM). Esempi CB998030SMITHJPLANNER_EU | |||
| Paese di destinazione DestinationCountry | Il paese in cui viene consegnata la spedizione. | ||
| Descrizione Questo attributo identifica il paese di destinazione finale della spedizione, derivato dall'indirizzo dell'ultimo luogo di consegna. Analogamente al paese di origine, l'analisi per paese di destinazione è fondamentale per comprendere le sfide logistiche regionali. Può rivelare pattern come quali destinazioni sono più soggette a ritardi nelle consegne o hanno costi di consegna "last-mile" più elevati. Questo insight è prezioso per l'ottimizzazione della rete, la definizione di aspettative di consegna realistiche e la gestione della conformità al commercio internazionale. Perché è importante Consente l'analisi delle prestazioni per destinazione, evidenziando problemi con specifiche regioni di consegna, autorità doganali o vettori dell'ultimo miglio. Dove trovare Fa parte delle informazioni sull'indirizzo per il luogo di destinazione della tappa finale nel Freight Order. Esempi FRCAGBJP | |||
| Paese di Origine OriginCountry | Il paese da cui ha origine la spedizione. | ||
| Descrizione Questo attributo identifica il paese di partenza per il viaggio di trasporto. Deriva dall'indirizzo del luogo di ritiro iniziale. L'analisi del processo per paese di origine aiuta a identificare le differenze regionali in termini di prestazioni, costi e complessità. Può evidenziare i paesi con tempi di sdoganamento più lunghi, costi del vettore più elevati o ritardi più frequenti. Questa segmentazione geografica è essenziale per la gestione di una supply chain globale e per adattare le strategie logistiche a regioni specifiche. Perché è importante Consente l'analisi geografica delle prestazioni delle spedizioni, aiutando a identificare colli di bottiglia regionali, driver di costo o variazioni di processo. Dove trovare Fa parte delle informazioni sull'indirizzo per il luogo di origine della prima tappa nel Freight Order. Esempi DEUSCNMX | |||
| Sistema di Origine SourceSystem | Il sistema da cui provengono i dati dell'evento. | ||
| Descrizione Questo attributo identifica il sistema sorgente che ha generato i dati, ad esempio SAP TM, SAP ERP o un portale vettori esterno. Fornisce il contesto sull'origine dei dati e aiuta a comprendere i punti di integrazione. In un panorama complesso, conoscere il sistema sorgente è fondamentale per la validazione dei dati, la risoluzione dei problemi di integrazione e la comprensione di come i diversi sistemi contribuiscono al processo complessivo. Ad esempio, può differenziare un evento segnalato da un sistema interno rispetto a uno segnalato da un fornitore di logistica di terze parti. Perché è importante Identifica l'origine dei dati, fondamentale per la data governance, la risoluzione dei problemi e la comprensione dell'orchestrazione dei processi tra più sistemi. Dove trovare Queste informazioni sono spesso memorizzate come parte del log di sistema o possono essere derivate in base all'interfaccia o all'utente che ha creato l'inserimento dei dati. Esempi SAP_TM_P01SAP_ERP_E01CARRIER_PORTAL_XYZ | |||
| Stato della spedizione ShipmentStatus | Lo stato generale attuale della spedizione al momento dell'estrazione dei dati. | ||
| Descrizione Lo Stato della spedizione fornisce un'istantanea della fase in cui si trova la spedizione nel suo ciclo di vita, ad esempio "In pianificazione", "In esecuzione", "Consegnata" o "Annullata". Rappresenta l'ultimo stato noto del caso. Questo attributo è utile per filtrare e analizzare le spedizioni in base al loro esito. Ad esempio, un analista può concentrarsi solo sulle spedizioni completate per misurare il tempo di ciclo end-to-end o analizzare solo le spedizioni annullate per comprendere le cause profonde degli annullamenti. Fornisce un contesto importante per l'interpretazione del flusso di processo. Perché è importante Fornisce un risultato di alto livello per ogni spedizione, consentendo di filtrare e analizzare se una spedizione è stata completata, annullata o è ancora in transito. Dove trovare Questo è il campo dello stato generale nell'intestazione del documento di Freight Order o Freight Booking in SAP TM. Esempi In pianificazionePronto per il trasportoIn esecuzioneEseguitoAnnullata | |||
| Tempo di ciclo della spedizione ShipmentCycleTime | La durata totale della spedizione dalla richiesta iniziale alla prova di consegna finale. | ||
| Descrizione Questa è una metrica calcolata che rappresenta il tempo di ciclo end-to-end per una spedizione. Viene tipicamente calcolata come la differenza tra il timestamp di "Prova di consegna ricevuta" e "Richiesta di trasporto ricevuta". Il Tempo di ciclo della spedizione è un KPI primario per misurare l'efficienza complessiva del processo di trasporto. Fornisce una visione di alto livello delle prestazioni e, se analizzato nel tempo o attraverso diverse dimensioni come il vettore o il percorso, può rivelare tendenze e principali colli di bottiglia. È essenziale per la dashboard del tempo di ciclo della spedizione end-to-end. Perché è importante Misura la durata totale end-to-end del processo di trasporto, fornendo un indicatore chiave della velocità e dell'efficienza complessiva del processo. Dove trovare Questa è una metrica calcolata, derivata sottraendo l'ora di inizio del primo evento dall'ora di fine dell'ultimo evento per ogni caso. Esempi 5 giorni 4 ore12 giorni 8 ore22 ore 30 minuti | |||
| Ultimo `Data Update` LastDataUpdate | Il timestamp dell'estrazione o dell'aggiornamento dei dati più recente per il dataset di Process Mining. | ||
| Descrizione Questo attributo indica la freschezza dei dati analizzati. Riflette la data e l'ora in cui i dati sono stati estratti per l'ultima volta dai sistemi sorgente, come SAP TM, nello strumento di Process Mining. Si tratta di un elemento di metadati critico per qualsiasi dashboard o analisi, poiché fornisce il contesto sull'aggiornamento degli insight. Aiuta gli utenti a capire se stanno guardando informazioni in tempo reale o un'istantanea di un periodo precedente, il che è essenziale per prendere decisioni tempestive e informate. Perché è importante Fornisce un contesto cruciale sulla tempestività dei dati, garantendo che gli utenti sappiano quanto sia aggiornata l'analisi. Dove trovare Solitamente viene generato e memorizzato dallo strumento ETL (Extract, Transform, Load) o dalla data pipeline durante il processo di acquisizione dei dati. Esempi 2023-10-27T08:00:00Z2023-10-26T08:00:00Z | |||
Attività di Transportation Management
| Activity | Descrizione | ||
|---|---|---|---|
| Liquidazione nolo creata | Questa attività segna la creazione del Freight Settlement Document (FSD), che calcola i costi di trasporto da pagare al vettore. Questo è il documento principale utilizzato per i ratei e la verifica delle fatture. | ||
| Perché è importante Con questa fase ha inizio la fase di regolamento finanziario del processo di trasporto. L'analisi del tempo che intercorre dalla consegna alla creazione del regolamento aiuta a identificare i colli di bottiglia nell'elaborazione finanziaria. Dove trovare Si tratta di un evento esplicito acquisito dalla creazione di un Freight Settlement Document. Il timestamp di creazione è disponibile nella tabella di intestazione per questo documento, /SCMTMS/D_SFIRHD. Acquisisci Utilizzi la data e l'ora di creazione del documento di liquidazione del trasporto (Freight Settlement Document). Tipo di evento explicit | |||
| Merce consegnata | Questa attività rappresenta l'arrivo della spedizione alla destinazione finale e il completamento del trasporto fisico. Viene acquisita quando il vettore riferisce che le merci sono state scaricate presso la sede del destinatario. | ||
| Perché è importante Questa è la pietra miliare più importante per misurare le prestazioni di consegna puntuale e la soddisfazione del cliente. Di solito funge anche da trigger per i processi di fatturazione e regolamento. Dove trovare Viene registrato come evento di esecuzione di "Arrivo a destinazione" o "Fine scarico" in SAP TM, aggiornando lo stato di esecuzione del Freight Order. I dati sono spesso ricevuti dal vettore. Acquisisci Utilizzi il timestamp dell'evento di esecuzione 'Arrivo a destinazione' riportato per l'ultima tappa dell'ordine di trasporto. Tipo di evento explicit | |||
| Merce ritirata | Questa attività segna l'inizio del trasporto fisico della merce. Viene acquisita quando il vettore riferisce che le merci sono state caricate e sono partite dalla sede del mittente. | ||
| Perché è importante Si tratta di una pietra miliare dell'esecuzione che indica l'inizio della fase di transito. È fondamentale per tracciare la puntualità e fornire un'accurata visibilità della spedizione. Dove trovare Questo evento viene solitamente registrato in SAP Event Management, integrato con SAP TM, come evento di "Partenza" o "Fine carico". Aggiorna lo stato di esecuzione del Freight Order. Può anche essere registrato direttamente nel Freight Order. Acquisisci Utilizzi il timestamp dell'evento di esecuzione 'Partenza' riportato per il luogo di origine dell'ordine di trasporto. Tipo di evento explicit | |||
| Pagamento Elaborato | Questa attività finale conferma che il vettore è stato pagato per i servizi di trasporto. Questo evento si verifica in genere nel sistema ERP collegato dopo che la fattura verificata è stata ricevuta da SAP TM. | ||
| Perché è importante Questo segna la vera fine del ciclo di vita del trasporto end-to-end. È essenziale per misurare la durata complessiva del processo e i KPI relativi alla puntualità dei pagamenti. Dove trovare Queste informazioni risiedono nel sistema ERP (ad esempio, S/4HANA Finance). Possono essere collegate al Freight Settlement Document tramite il numero di fattura. Un aggiornamento dello stato può essere inviato a SAP TM, oppure i dati devono provenire da tabelle ERP come BKPF e BSEG. Acquisisci Estrapoli la data di liquidazione del pagamento dal sistema ERP, collegandola alla spedizione tramite il riferimento della fattura. Tipo di evento explicit | |||
| Prova di consegna ricevuta | Questa attività si verifica quando il documento di prova di consegna (POD) firmato viene ricevuto dal vettore e registrato nel sistema. Ciò conferma l'accettazione delle merci da parte del destinatario. | ||
| Perché è importante Ricevere la POD è un prerequisito fondamentale per fatturare al cliente e regolare le spese di trasporto con il vettore. I ritardi in questa fase influiscono direttamente sul ciclo cash-to-cash. Dove trovare Solitamente viene dedotto da un cambio di stato nel Freight Order, come l'impostazione dello stato POD su "Ricevuto". Il cambiamento in questo campo di stato fornisce il timestamp per l'attività. Acquisisci Cattura il timestamp di quando lo stato della Prova di consegna (POD) nell'Ordine di trasporto viene aggiornato a 'Ricevuto'. Tipo di evento inferred | |||
| Richiesta di trasporto ricevuta | Questa attività segna l'avvio del processo di trasporto, rappresentando la creazione di un requisito di trasporto. In SAP TM, questo viene solitamente acquisito con la creazione di un Forwarding Order (FWO) o di un Order-based Transportation Requirement (OTR). | ||
| Perché è importante Questo è l'evento di inizio primario per il processo di spedizione end-to-end. L'analisi del tempo che intercorre da questa attività al completamento della pianificazione è fondamentale per misurare l'efficienza della pianificazione. Dove trovare Questo evento viene registrato al momento della creazione di un Forwarding Order (tipo di documento FWO) o di altri documenti di requisiti di trasporto. Il timestamp di creazione nella tabella di intestazione, come /SCMTMS/D_TORROT, funge da ora dell'evento. Acquisisci Cattura la data e l'ora di creazione dell'Ordine di spedizione o del documento di Requisito di trasporto. Tipo di evento explicit | |||
| Spedizione annullata | Questa attività rappresenta l'annullamento di una spedizione dopo che è stata richiesta o pianificata. Funge da punto finale per i processi che non procedono all'esecuzione. | ||
| Perché è importante Monitorare gli annullamenti aiuta a identificare le ragioni del fallimento del processo, come variazioni nella domanda dei clienti o errori di pianificazione. Tassi elevati di annullamento possono indicare problemi sottostanti nella gestione degli ordini o nella pianificazione. Dove trovare Questo viene dedotto da un cambiamento nello stato del ciclo di vita del Forwarding Order o del Freight Order in "Annullato". Il timestamp di questo cambiamento di stato segna l'evento. Acquisisci Cattura il timestamp di quando lo stato del ciclo di vita del documento viene impostato su 'Annullato'. Tipo di evento inferred | |||
| Spedizione pianificata | Questa attività indica che i requisiti di trasporto sono stati consolidati in un piano di spedizione concreto. Viene acquisita quando viene creato e salvato un Freight Order (per strada/ferrovia) o una Freight Booking (per mare/aria), contenente il percorso e le risorse pianificati. | ||
| Perché è importante Il completamento di questo traguardo è essenziale per avviare l'esecuzione logistica. Il tempo di ciclo tra la richiesta e questa attività è un KPI fondamentale per misurare l'efficienza della pianificazione. Dove trovare Questo evento corrisponde alla creazione di un documento di Freight Order o Freight Booking. Può anche essere dedotto da un cambio di stato nel documento, come lo stato di pianificazione che passa a "Pianificato". Le tabelle rilevanti sono in genere /SCMTMS/D_TORROT per i dati di intestazione. Acquisisci Utilizzi il timestamp di creazione dell'ordine di trasporto (Freight Order) o del documento di prenotazione del trasporto (Freight Booking). Tipo di evento explicit | |||
| Vettore assegnato | Questa attività indica che un fornitore di servizi di trasporto specifico, o vettore, è stato selezionato e assegnato alla spedizione. Ciò può avvenire tramite assegnazione manuale, pianificazione automatizzata o un processo di gara (tendering). | ||
| Perché è importante L'assegnazione di un vettore è una fase critica prima della conferma e dell'esecuzione della spedizione. Il tracciamento di questo step aiuta ad analizzare i processi di selezione dei vettori e a garantire prenotazioni tempestive. Dove trovare Viene acquisito quando il campo del vettore (parte con ruolo "Carrier") viene popolato nel Freight Order o nella Freight Booking. Per il tendering, si verifica quando viene aggiudicata una Freight Request for Quotation. Acquisisci Identificare il timestamp in cui la funzione partner del vettore viene popolata o confermata per la prima volta nel Freight Order. Tipo di evento inferred | |||
| Controversia nolo aperta | Questo evento indica che è stata riscontrata una discrepanza tra la fattura del vettore e i costi calcolati nel Freight Settlement Document. Ciò attiva un workflow di risoluzione della controversia. | ||
| Perché è importante Le controversie ritardano i pagamenti ai vettori e richiedono sforzi amministrativi. Il tracciamento di questa attività aiuta a identificare le cause dell'imprecisione nella fatturazione, come tariffe errate o costi accessori. Dove trovare Questo può essere dedotto da un cambio di stato nel Freight Settlement Document, in cui viene impostato lo stato "Contestazione" (Dispute). Può anche comportare la creazione di un documento separato per il caso di contestazione. Acquisisci Cattura il timestamp di quando lo stato di controversia viene impostato nel Documento di liquidazione del nolo. Tipo di evento inferred | |||
| Dichiarazione doganale presentata | Per le spedizioni internazionali, questa attività rappresenta la presentazione della documentazione doganale richiesta alle autorità. È un prerequisito per ottenere lo sdoganamento per l'esportazione o l'importazione. | ||
| Perché è importante La presentazione tempestiva delle dichiarazioni doganali è fondamentale per evitare ritardi alle frontiere. Questa attività aiuta a monitorare l'efficienza del processo di sdoganamento. Dove trovare Questo evento può essere acquisito come un evento di esecuzione specifico segnalato da un broker doganale o da un cambio di stato in un sistema di gestione doganale integrato, come SAP GTS. Il Freight Order viene aggiornato di conseguenza. Acquisisci Cattura il timestamp dell'evento di esecuzione 'Dichiarazione doganale presentata' o il corrispondente cambio di stato. Tipo di evento explicit | |||
| Fattura Verificata | Questa attività indica che la fattura del vettore è stata confrontata con successo con il Freight Settlement Document ed è approvata per il pagamento. È l'ultimo passaggio prima che il processo di pagamento venga avviato nel sistema ERP. | ||
| Perché è importante Questa attività completa il processo di audit e verifica dei costi di trasporto. I ritardi in questa fase possono portare a pagamenti posticipati ai vettori, danneggiando potenzialmente le relazioni. Dove trovare Questo viene dedotto da un cambiamento di stato sul Freight Settlement Document, come "Pronto per il rateo" o "Trasferito per la registrazione", a indicare che è stato inviato al sistema ERP per il pagamento. Acquisisci Monitori il timestamp in cui lo stato del ciclo di vita dell'FSD cambia per indicare che è pronto per il pagamento o che è stato contabilizzato. Tipo di evento inferred | |||
| Sdoganato | Questa attività indica che la spedizione è stata approvata dalle autorità doganali ed è libera di procedere. Questo evento è una pietra miliare per la logistica internazionale, poiché rimuove un potenziale collo di bottiglia significativo. | ||
| Perché è importante Lo sdoganamento è spesso fonte di grandi ritardi nelle supply chain globali. Tracciarne la durata e la percentuale di successo è fondamentale per migliorare i tempi di transito internazionali. Dove trovare Questo viene acquisito come un evento di esecuzione di "Sdoganamento", solitamente segnalato da un broker doganale o da un fornitore di visibilità esterno e aggiornato nel tracciamento dell'esecuzione del Freight Order. Acquisisci Utilizzi il timestamp dell'evento di esecuzione 'Sdoganamento' riportato e associato all'ordine di trasporto. Tipo di evento explicit | |||
| Spedizione confermata dal vettore | Questo evento rappresenta l'accordo del vettore a eseguire il trasporto come pianificato. La conferma viene solitamente ricevuta tramite un messaggio EDI, un aggiornamento del portale del vettore o un inserimento manuale, che aggiorna lo stato del Freight Order. | ||
| Perché è importante La conferma del vettore rappresenta un impegno rispetto al piano di spedizione, riducendo l'incertezza. I ritardi nel riceverla possono mettere a rischio l'intera pianificazione. Dove trovare Questo viene dedotto da una modifica nel campo dello stato di conferma del Freight Order o della Freight Booking. Un valore di stato specifico, come "Confermato", verrà impostato nella gestione degli stati del documento. Acquisisci Monitori le modifiche ai campi dello stato di conferma all'interno del documento dell'ordine di trasporto (Freight Order). Tipo di evento inferred | |||
| Spedizione reindirizzata | Questa attività indica una modifica non pianificata del percorso o del programma della spedizione dopo che è stata confermata. Ciò potrebbe essere dovuto a interruzioni, richieste del cliente o problemi logistici. | ||
| Perché è importante I reindirizzamenti spesso comportano un aumento dei costi e dei ritardi. Identificare la frequenza e i motivi dei reindirizzamenti aiuta a migliorare l'accuratezza della pianificazione e la stabilità operativa. Dove trovare Questo evento viene dedotto rilevando cambiamenti significativi nelle fasi, nei luoghi o nelle date di un Freight Order dopo l'inizio della sua esecuzione. A tale scopo possono essere analizzati i documenti di modifica (tabelle CDHDR e CDPOS). Acquisisci Rileva le modifiche ai campi chiave di instradamento nell'Ordine di trasporto dopo l'evento 'Spedizione confermata dal vettore'. Tipo di evento inferred | |||
Guide all'Estrazione
Fasi
- Identificare e attivare le API delle CDS View: Accedete al sistema SAP S/4HANA. Utilizzate la transazione
/IWFND/MAINT_SERVICEper verificare che i servizi OData necessari per le CDS view principali siano attivi. I servizi chiave includono quelli relativi a I_TransportationOrder, C_TranspOrdExecutionEvent, I_ForwardingOrder e I_FreightSettlementDocument. Se non sono attivi, contattate il vostro amministratore SAP per aggiungerli e attivarli dal sistema backend. - Stabilire la connettività API: Ottenete l'URL radice dei servizi OData dal vostro amministratore SAP. Configurate un'applicazione client, come uno script Python che utilizzi la libreria requests, uno strumento ETL commerciale o un tool come Postman, per connettervi all'API. Sarà necessario configurare l'autenticazione, solitamente tramite Basic Authentication (username e password) o OAuth 2.0.
- Definire l'ambito dell'estrazione: Determinate l'ambito dell'estrazione dei dati. Definite un intervallo di date specifico, ad esempio gli ultimi 6 mesi. Identificate le unità organizzative su cui filtrare, come la Società, o tipi di documento specifici, per garantire che i dati siano pertinenti al processo in analisi.
- Costruire la query di spedizione di base: Iniziate interrogando la CDS view I_TransportationOrder. Questa vista funge da oggetto centrale per le spedizioni (Ordini o Booking di trasporto). Utilizzate il parametro OData
$selectper scegliere le colonne necessarie, inclusi gli attributi consigliati come CarrierName, ModeOfTransport e RequestedDeliveryDate. Applicate un$filterper limitare i dati per data e altri parametri di ambito. - Interrogare eventi di esecuzione e trasporto: Utilizzate la vista C_TranspOrdExecutionEvent per estrarre i principali eventi logistici. Filtrate questa vista per specifici valori di
EventCodeche corrispondono ad attività come 'Merce ritirata' (DEPARTURE) e 'Merce consegnata' (ARRIVAL_AT_DESTINATION). Unite questi dati ai dati di spedizione di base utilizzando lo UUID di TransportationOrder. - Interrogare gli oggetti aziendali correlati: Per catturare l'intero processo, è necessario interrogare altre CDS view correlate. Interrogate I_ForwardingOrder per l'attività 'Richiesta di trasporto ricevuta' e I_FreightSettlementDocument per le attività finanziarie come 'Liquidazione nolo creata', 'Controversia nolo aperta' e 'Fattura verificata'.
- Estrarre attività basate sullo stato: Molte attività non sono eventi discreti ma cambi di stato sul documento principale. Per attività come 'Vettore assegnato', 'Spedizione confermata dal vettore' e 'Spedizione annullata', interrogherete la vista I_TransportationOrder utilizzando il valore
LastChangeDateTimeassociato al relativo campo di stato come orario dell'evento. Ciò richiede una mappatura accurata dei codici di stato sulle attività aziendali. - Unire e trasformare i dati: Consolidate i dati estratti da tutte le fonti in un'unica struttura di event log. Per ogni attività estratta, create una riga contenente le colonne richieste: ShipmentId, ActivityName e EventTime. Assicuratevi che tutti gli attributi consigliati dalla query di base siano presenti in ogni riga per quella spedizione. Questo passaggio equivale concettualmente a un'operazione SQL di
UNION ALL. - Gestire eventi complessi ed esterni: Per attività come 'Sdoganato' o 'Pagamento elaborato', i dati potrebbero risiedere in campi specifici o sistemi esterni. La logica di query fornita utilizza i campi standard come proxy. Potrebbe essere necessario regolare la query per unirla a CDS view specifiche per la dogana o correlarla con un'estrazione ERP separata per i dati di pagamento basata sul numero del Documento di liquidazione del nolo.
- Formattare per ProcessMind: Salvate il dataset finale consolidato come file CSV. Assicuratevi che le intestazioni delle colonne corrispondano ai requisiti per il caricamento, mappando ad esempio la colonna
ShipmentIdsul campoCaseIdnelle impostazioni del tool. Verificate che i timestamp siano in un formato coerente, preferibilmente UTC (YYYY-MM-DDTHH:MM:SSZ).
Configurazione
- CDS View principali: L'estrazione si basa principalmente su I_TransportationOrder (per gli ordini di trasporto), C_TranspOrdExecutionEvent (per gli eventi di esecuzione), I_ForwardingOrder (per le richieste di trasporto) e I_FreightSettlementDocument (per la liquidazione).
- Filtraggio per intervallo di date: È fondamentale applicare un filtro temporale per gestire il volume dei dati. Utilizzate il campo
CreationDateTimein I_TransportationOrder oActualBusinessDateTimein C_TranspOrdExecutionEvent. Per un'analisi iniziale, si consiglia un intervallo di 3-6 mesi. - Filtraggio per tipo di documento: Per focalizzare l'analisi, filtrate tipi di documento specifici usando il campo
TransportationOrderType. Ciò aiuta a distinguere diversi scenari logistici, come le spedizioni in uscita standard rispetto ai trasferimenti di stock. - Filtri organizzativi: Se pertinente, filtrate per
PurchasingOrganizationo altri campi a livello organizzativo per limitare i dati a una specifica business unit o regione. - Paginazione API: Per i dataset di grandi dimensioni, utilizzate i parametri OData
$tope$skipper recuperare i dati in pagine più piccole. Questo previene i timeout dell'API e riduce il consumo di memoria lato client. Una dimensione di pagina compresa tra 1000 e 5000 righe è spesso efficace. - Prerequisiti: L'utente o l'account di servizio che esegue l'estrazione deve disporre delle autorizzazioni per i servizi OData sottostanti (oggetto di autorizzazione S_SERVICE) e per i dati aziendali nelle CDS view. I servizi corrispondenti devono essere attivati nel SAP Gateway (
/IWFND/MAINT_SERVICE).
a Query di Esempio 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' Fasi
- Identificare e attivare le API delle CDS View: Accedete al sistema SAP S/4HANA. Utilizzate la transazione
/IWFND/MAINT_SERVICEper verificare che i servizi OData necessari per le CDS view principali siano attivi. I servizi chiave includono quelli relativi a I_TransportationOrder, C_TranspOrdExecutionEvent, I_ForwardingOrder e I_FreightSettlementDocument. Se non sono attivi, contattate il vostro amministratore SAP per aggiungerli e attivarli dal sistema backend. - Stabilire la connettività API: Ottenete l'URL radice dei servizi OData dal vostro amministratore SAP. Configurate un'applicazione client, come uno script Python che utilizzi la libreria requests, uno strumento ETL commerciale o un tool come Postman, per connettervi all'API. Sarà necessario configurare l'autenticazione, solitamente tramite Basic Authentication (username e password) o OAuth 2.0.
- Definire l'ambito dell'estrazione: Determinate l'ambito dell'estrazione dei dati. Definite un intervallo di date specifico, ad esempio gli ultimi 6 mesi. Identificate le unità organizzative su cui filtrare, come la Società, o tipi di documento specifici, per garantire che i dati siano pertinenti al processo in analisi.
- Costruire la query di spedizione di base: Iniziate interrogando la CDS view I_TransportationOrder. Questa vista funge da oggetto centrale per le spedizioni (Ordini o Booking di trasporto). Utilizzate il parametro OData
$selectper scegliere le colonne necessarie, inclusi gli attributi consigliati come CarrierName, ModeOfTransport e RequestedDeliveryDate. Applicate un$filterper limitare i dati per data e altri parametri di ambito. - Interrogare eventi di esecuzione e trasporto: Utilizzate la vista C_TranspOrdExecutionEvent per estrarre i principali eventi logistici. Filtrate questa vista per specifici valori di
EventCodeche corrispondono ad attività come 'Merce ritirata' (DEPARTURE) e 'Merce consegnata' (ARRIVAL_AT_DESTINATION). Unite questi dati ai dati di spedizione di base utilizzando lo UUID di TransportationOrder. - Interrogare gli oggetti aziendali correlati: Per catturare l'intero processo, è necessario interrogare altre CDS view correlate. Interrogate I_ForwardingOrder per l'attività 'Richiesta di trasporto ricevuta' e I_FreightSettlementDocument per le attività finanziarie come 'Liquidazione nolo creata', 'Controversia nolo aperta' e 'Fattura verificata'.
- Estrarre attività basate sullo stato: Molte attività non sono eventi discreti ma cambi di stato sul documento principale. Per attività come 'Vettore assegnato', 'Spedizione confermata dal vettore' e 'Spedizione annullata', interrogherete la vista I_TransportationOrder utilizzando il valore
LastChangeDateTimeassociato al relativo campo di stato come orario dell'evento. Ciò richiede una mappatura accurata dei codici di stato sulle attività aziendali. - Unire e trasformare i dati: Consolidate i dati estratti da tutte le fonti in un'unica struttura di event log. Per ogni attività estratta, create una riga contenente le colonne richieste: ShipmentId, ActivityName e EventTime. Assicuratevi che tutti gli attributi consigliati dalla query di base siano presenti in ogni riga per quella spedizione. Questo passaggio equivale concettualmente a un'operazione SQL di
UNION ALL. - Gestire eventi complessi ed esterni: Per attività come 'Sdoganato' o 'Pagamento elaborato', i dati potrebbero risiedere in campi specifici o sistemi esterni. La logica di query fornita utilizza i campi standard come proxy. Potrebbe essere necessario regolare la query per unirla a CDS view specifiche per la dogana o correlarla con un'estrazione ERP separata per i dati di pagamento basata sul numero del Documento di liquidazione del nolo.
- Formattare per ProcessMind: Salvate il dataset finale consolidato come file CSV. Assicuratevi che le intestazioni delle colonne corrispondano ai requisiti per il caricamento, mappando ad esempio la colonna
ShipmentIdsul campoCaseIdnelle impostazioni del tool. Verificate che i timestamp siano in un formato coerente, preferibilmente UTC (YYYY-MM-DDTHH:MM:SSZ).
Configurazione
- CDS View principali: L'estrazione si basa principalmente su I_TransportationOrder (per gli ordini di trasporto), C_TranspOrdExecutionEvent (per gli eventi di esecuzione), I_ForwardingOrder (per le richieste di trasporto) e I_FreightSettlementDocument (per la liquidazione).
- Filtraggio per intervallo di date: È fondamentale applicare un filtro temporale per gestire il volume dei dati. Utilizzate il campo
CreationDateTimein I_TransportationOrder oActualBusinessDateTimein C_TranspOrdExecutionEvent. Per un'analisi iniziale, si consiglia un intervallo di 3-6 mesi. - Filtraggio per tipo di documento: Per focalizzare l'analisi, filtrate tipi di documento specifici usando il campo
TransportationOrderType. Ciò aiuta a distinguere diversi scenari logistici, come le spedizioni in uscita standard rispetto ai trasferimenti di stock. - Filtri organizzativi: Se pertinente, filtrate per
PurchasingOrganizationo altri campi a livello organizzativo per limitare i dati a una specifica business unit o regione. - Paginazione API: Per i dataset di grandi dimensioni, utilizzate i parametri OData
$tope$skipper recuperare i dati in pagine più piccole. Questo previene i timeout dell'API e riduce il consumo di memoria lato client. Una dimensione di pagina compresa tra 1000 e 5000 righe è spesso efficace. - Prerequisiti: L'utente o l'account di servizio che esegue l'estrazione deve disporre delle autorizzazioni per i servizi OData sottostanti (oggetto di autorizzazione S_SERVICE) e per i dati aziendali nelle CDS view. I servizi corrispondenti devono essere attivati nel SAP Gateway (
/IWFND/MAINT_SERVICE).
a Query di Esempio 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' Fasi
- Definire i requisiti dei dati: Iniziate confermando la logica esatta per ciascuna delle 15 attività richieste e per tutti gli attributi. Ciò comporta la mappatura di ogni attività su specifici cambi di stato, eventi di creazione o collegamenti a documenti nel vostro sistema SAP TM. Ad esempio, determinate lo stato di esecuzione esatto che indica il 'Ritiro merce'.
- Accedere all'ambiente di sviluppo ABAP: Accedete alla SAP GUI e andate all'ABAP Editor utilizzando il codice transazione
SE38. Inserite un nome per il nuovo programma, ad esempioZTM_PROCESS_EXTRACT, e cliccate su 'Create'. Fornite un titolo e impostate il tipo di programma come 'Executable Program'. - Creare la schermata di selezione: Nel programma, definite la schermata di selezione per l'utente. Questa dovrebbe includere i parametri per filtrare i dati, come un intervallo di date per la creazione dell'ordine di trasporto (
SO_CREDT) e opzioni di selezione per i tipi di documento (SO_TYPE) o i vettori (SO_CARR). - Definire la struttura di output: Definite la struttura di una tabella interna che corrisponda al formato richiesto per l'event log. La struttura deve includere campi per
ShipmentId,ActivityName,EventTime,EndTime,CarrierName,RequestedDeliveryDate,ModeOfTransport,TotalFreightCosteIsOnTimeDelivery. - Implementare la logica di selezione dati: Scrivete la logica ABAP principale per selezionare i dati di ciascuna delle 15 attività. Solitamente ciò comporta l'interrogazione di diverse tabelle SAP TM. Iniziate selezionando i documenti di spedizione primari, come gli Ordini di trasporto, entro l'intervallo di date specificato.
- Estrarre eventi di pianificazione ed esecuzione: Per ogni documento di spedizione selezionato, interrogate le tabelle e gli oggetti aziendali correlati per trovare i timestamp degli eventi. Utilizzate la tabella
/SCMTMS/D_TORROTper la creazione dell'Ordine di trasporto ('Spedizione pianificata'), l'assegnazione del vettore ('Vettore assegnato') e i cambi di stato di esecuzione che corrispondono al 'Ritiro merce' e alla 'Merce consegnata'. La creazione del precedente Ordine di spedizione (/SCMTMS/D_TRQROT) può indicare la 'Richiesta di trasporto ricevuta'. - Estrarre conferma vettore e re-instradamento: Interrogate le tabelle di stato o i documenti di modifica (CDHDR/CDPOS) associati all'Ordine di trasporto per identificare quando è stato impostato lo stato
CONFIRMATION, che cattura la 'Spedizione confermata dal vettore'. Allo stesso modo, cercate modifiche significative nelle informazioni di instradamento per catturare la 'Spedizione re-instradata'. - Estrarre eventi doganali: Se utilizzate SAP Global Trade Services (GTS) o un modulo simile, gli eventi doganali ('Dichiarazione doganale presentata', 'Sdoganato') sono spesso tracciati tramite documenti collegati. La logica deve leggere il flusso dei documenti (
/SCMTMS/D_TORDOC) dell'Ordine di trasporto per trovare tali documenti e i relativi tempi di creazione o variazione di stato. - Estrarre eventi di liquidazione e controversie: Interrogate la tabella di testata del Documento di liquidazione del nolo (
/SCMTMS/D_SFIRHD) e i relativi elementi e stati per catturare gli eventi 'Liquidazione nolo creata', 'Controversia nolo aperta' e 'Fattura verificata'. Collegate questi eventi alloShipmentIdoriginale. - Consolidare i dati: Per ogni evento trovato, create un nuovo record nella tabella interna finale. Popolate
ActivityNamecon l'attività corrispondente,EventTimecon il timestamp dell'evento eShipmentIdcon l'ID dell'Ordine di trasporto o del Booking. Compilate gli altri attributi dai documenti sorgente. - Formattare ed esportare il file: Una volta popolata la tabella interna, formattate i dati in un file flat. Utilizzate i comandi
OPEN DATASET,LOOP AT... TRANSFER...eCLOSE DATASETper scrivere il contenuto della tabella interna in un file CSV o TXT sul server applicativo SAP (accessibile tramite transazione AL11). - Pianificare e recuperare: Il programma ABAP può essere pianificato come job in background (transazione SM36) per estrarre i dati automaticamente. Il file generato può quindi essere scaricato dal server applicativo su una macchina locale tramite la transazione
CG3Yper l'upload in ProcessMind.
Configurazione
- Intervallo di date: La schermata di selezione deve includere un intervallo di date obbligatorio per la data di creazione del documento di trasporto principale (ad es. l'Ordine di Trasporto). Per l'analisi iniziale, si consiglia un intervallo di 3-6 mesi per garantire un dataset rappresentativo senza tempi di esecuzione eccessivi.
- Filtro per tipo di documento: Prevedete un filtro per il tipo di documento di trasporto (ad es. Ordine di Trasporto, Booking di Trasporto). Questo è cruciale per focalizzare l'analisi su processi specifici, come il trasporto su strada rispetto a quello marittimo.
- Filtro vettore: Permettete agli utenti di filtrare per vettori specifici. Questo aiuta ad analizzare le prestazioni dei singoli partner logistici.
- Filtri organizzativi: Includete filtri per le unità organizzative rilevanti, come l'Organizzazione acquisti o la Società, per limitare l'estrazione a specifiche aree di business.
- Ottimizzazione delle prestazioni: Per i dataset di grandi dimensioni, assicuratevi che il codice ABAP utilizzi campi di database indicizzati nelle clausole
WHERE, eviti cicli nidificati ove possibile e selezioni solo i campi necessari dal database per ridurre al minimo il consumo di memoria. - Prerequisiti: L'utente che esegue il report deve avere l'autorizzazione per eseguire programmi ABAP. Lo sviluppatore necessita dell'autorizzazione
S_DEVELOP. Il programma stesso richiede autorizzazioni per l'accesso al file system sul server applicativo (oggettoS_DATASET) e l'accesso alle tabelle del database TM e agli oggetti BOPF pertinenti.
a Query di Esempio 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.