Il Suo template dei dati per la gestione dei trasporti
Il Suo template dei dati per la gestione dei trasporti
- Attributi consigliati da raccogliere
- Attività principali da monitorare
- Indicazioni per l’estrazione dei dati da SAP Transportation Management
Attributi della gestione dei trasporti
| Nome | Descrizione | ||
|---|---|---|---|
| Nome dell’attività ActivityName | Nome di uno specifico evento aziendale o passaggio avvenuto nel processo di trasporto. | ||
| Descrizione Il nome dell’attività descrive un singolo task o una tappa del ciclo di vita della spedizione, ad esempio 'Shipment Planned', 'Goods Picked Up' o 'Goods Delivered'. Queste attività costituiscono i nodi della mappa del processo individuata. Analizzare la sequenza e la frequenza delle attività aiuta a individuare il flusso di processo standard, le deviazioni, i colli di bottiglia e i cicli di rilavorazione. È un elemento fondamentale per l’individuazione dei processi e il controllo di conformità nella gestione dei trasporti. Perché è importante Questo attributo definisce i passaggi del processo di trasporto e consente di visualizzare e analizzare il flusso end-to-end delle spedizioni. Dove reperirli In genere, deriva dai codici evento o dalle modifiche di stato registrate nel gestore degli eventi di monitoraggio dell’esecuzione di SAP TM. I dati possono provenire da tabelle che registrano le modifiche di stato degli oggetti aziendali o specifici messaggi di evento. Esempi Spedizione pianificataVettore assegnatoMerci ritirateMerci consegnateProva di consegna ricevuta | |||
| Ora dell’evento EventTime | Timestamp che indica quando si è verificata una specifica attività o un evento. | ||
| Descrizione L’ora dell’evento fornisce la data e l’ora precise di ogni attività del processo di trasporto. Questi dati temporali sono fondamentali per calcolare i tempi di ciclo, le durate e i tempi di attesa tra i diversi passaggi del processo. Nelle analisi, questo attributo serve a ordinare correttamente gli eventi, creare un registro cronologico e svolgere tutte le analisi delle prestazioni basate sul tempo. È essenziale per individuare i ritardi, misurare l’efficienza del processo e valutare i risultati rispetto ai programmi o agli accordi sul livello di servizio. Perché è importante Il timestamp è essenziale per ordinare gli eventi cronologicamente e calcolare tutte le metriche temporali, come i tempi di ciclo e la puntualità delle consegne. Dove reperirli Il dato proviene dalle tabelle del gestore degli eventi di SAP TM, ad esempio /SAPTRX/EH_EVMSG, che memorizzano i timestamp degli eventi segnalati. Esempi 2023-04-15T10:00:00Z2023-04-16T14:30:00Z2023-04-20T09:15:00Z | |||
| Spedizione ShipmentId | Identificativo univoco di un singolo movimento di merci, utilizzato come 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 fino alla prova di consegna e al pagamento. Nel Process Mining, questo attributo è essenziale per costruire la vista del caso e consentire agli analisti di ricostruire l’intero percorso di ogni spedizione. Permette di analizzare le varianti di processo, i tempi di ciclo e i risultati delle singole spedizioni, offrendo una visione completa delle prestazioni del trasporto. Perché è importante È l’identificativo fondamentale del caso, che collega tutti gli eventi e i dati a uno specifico ordine di trasporto e consente di analizzare il processo end-to-end. Dove reperirli Questo identificativo corrisponde al numero del Freight Order o del Freight Booking in SAP TM. Si trova in tabelle come /SCMTMS/D_TORROT e /SCMTMS/D_TRQROT. Esempi 610000432161000056786100009876 | |||
| Consegna puntuale IsOnTimeDelivery | Indicatore booleano che segnala se le merci sono state consegnate entro la data di consegna richiesta. | ||
| Descrizione È un attributo calcolato che confronta la data e l’ora dell’attività «Merci consegnate» con la «Data di consegna richiesta». Il valore è vero se la consegna è avvenuta puntualmente o in anticipo, falso se è avvenuta in ritardo. Questo attributo semplifica l’analisi delle prestazioni, assegnando a ogni spedizione un esito binario chiaro. È alla base della Dashboard «Prestazioni delle consegne puntuali» e del relativo KPI. Consente agli analisti di filtrare facilmente le spedizioni in ritardo e di analizzarne le cause profonde per capire quali fattori incidono negativamente sulle prestazioni. Perché è importante Misura direttamente il rispetto degli impegni di consegna e semplifica il calcolo e la visualizzazione del KPI fondamentale relativo alla puntualità delle consegne. Dove reperirli Questo attributo non è memorizzato in SAP TM. Deve essere calcolato durante la trasformazione dei dati, confrontando la data e l’ora effettive dell’evento di consegna 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 economico di una spedizione. Può corrispondere al costo calcolato dal sistema di gestione dei trasporti oppure all’importo finale della fattura del vettore dopo la liquidazione. Questo attributo integra la dimensione economica nell’analisi del processo. Gli analisti possono individuare le varianti di processo più costose, calcolare il costo dei ritardi o dei cambi di percorso e confrontare la convenienza di diversi vettori o modalità di trasporto. È fondamentale per le Dashboard dedicate alla spesa per i trasporti e all’analisi del costo del servizio. Perché è importante Aggiunge una dimensione economica all’analisi del processo e consente di analizzare la spesa per i trasporti, il costo per spedizione e l’impatto economico delle inefficienze di processo. Dove reperirli Proviene dal documento di liquidazione del trasporto in SAP TM, dopo il calcolo degli addebiti. È disponibile 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 indicate nell’ordine di vendita. | ||
| Descrizione La data di consegna richiesta è il termine previsto per l’attività «Merci consegnate» e costituisce il principale valore di riferimento per misurare la puntualità delle consegne. Questa data è fondamentale per calcolare il KPI del tasso di puntualità delle consegne. Confrontando l’ora effettiva di consegna con la data richiesta, le organizzazioni possono verificare se hanno rispettato il livello di servizio concordato. L’analisi degli scostamenti aiuta a individuare le cause sistemiche dei ritardi, come problemi nelle prestazioni dei vettori, ritardi nella pianificazione o blocchi doganali. Perché è importante È il valore di riferimento per misurare la puntualità delle consegne, un KPI fondamentale per la soddisfazione dei clienti e l’eccellenza operativa. Dove reperirli Questa data viene in genere trasferita dall’ordine di vendita o dall’ordine di trasferimento delle scorte precedente in SAP ERP. È memorizzata nei campi di data e ora dell’unità di trasporto o del Freight Order. Esempi 2023-05-20T17:00:00Z2023-06-01T12:00:00Z2023-06-15T23:59:59Z | |||
| Modalità di trasporto ModeOfTransport | Il mezzo di trasporto utilizzato per la spedizione, ad esempio strada, ferrovia, aereo o nave. | ||
| Descrizione Questo attributo specifica la modalità di trasporto. Ogni modalità comporta strutture di costo, tempi di transito e complessità di processo diversi. Per esempio, una spedizione internazionale di merci per via aerea prevede attività come lo sdoganamento, a differenza di una spedizione nazionale su camion. L’analisi dei processi per modalità di trasporto permette di definire iniziative di miglioramento mirate. È inoltre fondamentale per l’analisi dei costi, in particolare per individuare il ricorso a trasporti premium, come il trasporto aereo urgente, rispetto a modalità standard più economiche. Questa segmentazione è essenziale per comprendere e controllare la spesa per i trasporti. Perché è importante Consente di analizzare costi, tempi e variazioni del processo in base alla modalità di trasporto, un aspetto fondamentale per ottimizzare i costi e individuare il ricorso a trasporti premium. Dove reperirli È un campo importante del Freight Order o del Freight Booking, spesso denominato Transportation Mode o MOT. Esempi 01 (strada)02 (ferrovia)04 (aereo)05 (mare) | |||
| Nome del vettore CarrierName | Il nome del vettore o del fornitore di servizi logistici assegnato alla spedizione. | ||
| Descrizione Il nome del vettore identifica l’azienda responsabile del trasporto fisico delle merci. È un attributo fondamentale per analizzare le prestazioni, poiché i vettori possono offrire livelli diversi di servizio, costi e affidabilità. Nel Process Mining, questo attributo consente di segmentare e confrontare le prestazioni dei diversi vettori. Permette di creare schede di valutazione, monitorare la puntualità delle consegne per vettore, confrontare i costi e individuare quelli più spesso associati a ritardi o contestazioni. Queste informazioni sono essenziali per la gestione strategica dei vettori e per gli acquisti. Perché è importante Consente di confrontare le prestazioni dei diversi vettori, un aspetto fondamentale per ottimizzare la scelta del vettore, i costi e i livelli di servizio. Dove reperirli Queste informazioni sono memorizzate nel documento Freight Order o Freight Booking e collegate tramite la funzione di partner commerciale del vettore. Esempi DHL ExpressFedEx FreightMaersk LineUnion Pacific Railroad | |||
| Ora di fine EndTime | Timestamp che indica quando è stata completata una specifica attività. | ||
| Descrizione Mentre StartTime indica l’inizio di un evento, EndTime ne segna la conclusione. È particolarmente utile per le attività che hanno una durata, come 'Customs Clearance' o 'Goods Loading'. La differenza tra EndTime e StartTime corrisponde al tempo di elaborazione dell’attività. Nel Process Mining, disporre sia dell’ora di inizio sia di quella di fine consente di analizzare con maggiore precisione la durata delle attività e di distinguere il tempo di elaborazione dal tempo di attesa. In questo modo è possibile individuare con esattezza le inefficienze, che si trovino nell’esecuzione di un task o nei passaggi di consegne tra task. Perché è importante Consente di calcolare con precisione i tempi di elaborazione delle attività e di distinguere il tempo di lavoro effettivo dall’attesa tra un evento e l’altro. Dove reperirli Come StartTime, proviene dalle tabelle del gestore degli eventi. Può corrispondere a un evento 'completed' separato per una determinata attività. Esempi 2023-04-15T11:30:00Z2023-04-16T15:00:00Z2023-04-20T09:45:00Z | |||
| Contestata IsDisputed | Indicatore booleano che segnala se la fattura di trasporto della spedizione è stata contestata. | ||
| Descrizione Questo indicatore calcolato identifica le spedizioni associate a una contestazione relativa alla liquidazione del trasporto. Il valore è vero se è stata aperta una contestazione, falso in caso contrario. Può essere ricavato dalla presenza dell’attività «Contestazione del trasporto creata» o di un «Motivo della contestazione» non vuoto. Questo attributo semplifica l’analisi del processo di liquidazione dei trasporti. Consente di calcolare facilmente il KPI del tasso di discrepanza nella fatturazione dei trasporti e di filtrare tutte le spedizioni contestate. Gli analisti possono quindi esaminare le caratteristiche ricorrenti di queste spedizioni, come vettori, tratte o tipi di addebito, per individuare le cause profonde degli errori di fatturazione. Perché è importante Semplifica l’individuazione delle liquidazioni dei trasporti problematiche, consentendo di calcolare rapidamente il tasso di contestazione e di analizzare le cause profonde degli errori di fatturazione. Dove reperirli Questo attributo non è memorizzato in SAP TM. Deve essere calcolato verificando l’esistenza di un caso di contestazione collegato al documento di liquidazione del trasporto. Esempi truefalse | |||
| Data di ritiro pianificata ScheduledPickupDate | La data e l’ora pianificate per il ritiro delle merci da parte del vettore presso il punto di spedizione. | ||
| Descrizione La data di ritiro pianificata indica l’orario concordato per l’inizio del trasporto fisico ed è una tappa fondamentale nella fase di esecuzione della spedizione. Questo attributo è essenziale per monitorare la puntualità della prima tratta. Confrontando l’orario di ritiro pianificato con la data e l’ora effettive dell’evento «Merci ritirate», le aziende possono calcolare i ritardi nel ritiro. Ciò consente di valutare le prestazioni e l’affidabilità sia del luogo di spedizione sia del vettore. Perché è importante È il valore di riferimento per misurare la puntualità del ritiro e individuare i ritardi fin dall’inizio del trasporto fisico della spedizione. Dove reperirli È una data e un’ora pianificate, memorizzate nella sequenza delle fermate del Freight Order in SAP TM. Esempi 2023-05-18T09:00:00Z2023-05-30T14:00:00Z2023-06-12T10:30:00Z | |||
| Motivo del ritardo DelayReason | Un codice o una descrizione che spiega il motivo del ritardo della spedizione. | ||
| Descrizione L’attributo del motivo del ritardo registra la causa di uno scostamento dal programma previsto, ad esempio «Maltempo», «Blocco doganale» o «Ritardo del vettore». Queste informazioni vengono spesso segnalate manualmente o tramite un messaggio di evento inviato dal vettore. È un attributo utile per l’analisi delle cause profonde: permette agli analisti di capire non solo che una spedizione è arrivata in ritardo, ma anche perché. Classificando e quantificando i motivi dei ritardi, le organizzazioni possono individuare i problemi ricorrenti e concentrare gli interventi di miglioramento sugli aspetti più rilevanti, come migliorare la comunicazione con i vettori o ottimizzare i percorsi per evitare la congestione. Perché è importante Spiega i motivi dei ritardi delle spedizioni e consente di analizzarne le cause profonde per ridurre le eccezioni e migliorare la puntualità. Dove reperirli Può essere registrato come codice evento e motivo nel framework di gestione degli eventi di SAP TM quando viene segnalato un evento «Arrivo/partenza in ritardo». Esempi RITARDO_PER_MALTEMPOISPEZIONE_DOGANALECONGESTIONE_PORTUALEGUASTO_MECCANICO | |||
| Motivo della contestazione DisputeReason | Il motivo indicato quando viene contestata una fattura di trasporto. | ||
| Descrizione Quando l’importo della fattura di un vettore non corrisponde al costo previsto calcolato in SAP TM, viene aperta una contestazione. Questo attributo ne registra il motivo, ad esempio «Tariffa errata», «Fattura duplicata» o «Supplemento non approvato». L’analisi dei motivi di contestazione è fondamentale per la Dashboard relativa agli errori e alle contestazioni delle fatture di trasporto. Aiuta a individuare le cause profonde delle inesattezze di fatturazione, che possono dipendere da problemi nei dati anagrafici, errori del vettore o criticità operative. Queste informazioni consentono all’organizzazione di intervenire in modo mirato per ridurre le contestazioni, accelerare il ciclo di pagamento e contenere il carico amministrativo. Perché è importante Indica le cause profonde degli errori di fatturazione dei trasporti e consente di intervenire in modo mirato per ridurre le contestazioni e migliorare il processo di liquidazione. Dove reperirli Queste informazioni sono registrate nel caso di gestione delle contestazioni associato a un documento di liquidazione del trasporto. Esempi Tariffa non corrispondentePeso erratoAddebito per sosta non approvatoFattura duplicata | |||
| Nome utente UserName | ID o nome dell’utente che ha eseguito un’attività. | ||
| Descrizione Questo attributo identifica il dipendente o l’utente responsabile di un’attività manuale, come 'Shipment Planned' o 'Invoice Verified'. Collega i passaggi del processo alle persone o ai team che li hanno eseguiti. Analizzare le attività per utente aiuta a comprendere la distribuzione del carico di lavoro, individuare esigenze formative e riconoscere chi ottiene i risultati migliori. È inoltre fondamentale per la conformità e gli audit, perché registra chiaramente chi ha fatto cosa e quando. Può anche rivelare differenze nel modo in cui utenti diversi svolgono lo stesso task. Perché è importante Collega i passaggi manuali del processo a utenti specifici e consente di analizzare il carico di lavoro, le prestazioni individuali e le opportunità di formazione. Dove reperirli In genere si trovano nel registro delle modifiche o nelle tabelle di intestazione dei documenti di trasporto, ad esempio nei campi «Creato da» o «Modificato da» (per 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 e viene ricavato dall’indirizzo dell’ultimo luogo di consegna. Come per il paese di origine, l’analisi per paese di destinazione è fondamentale per comprendere le criticità logistiche regionali. Può rivelare, per esempio, quali destinazioni sono più soggette a ritardi nelle consegne o comportano costi più elevati per l’ultimo miglio. Queste informazioni sono utili per ottimizzare la rete, definire aspettative realistiche sui tempi di consegna e gestire la conformità degli scambi internazionali. Perché è importante Consente di analizzare le prestazioni del processo in base alla destinazione e di individuare criticità in specifiche aree di consegna, presso le autorità doganali o tra i vettori dell’ultimo miglio. Dove reperirli Fa parte delle informazioni sull’indirizzo del luogo di destinazione dell’ultima fermata nel Freight Order. Esempi FRCAGBJP | |||
| Paese di origine OriginCountry | Il paese da cui parte la spedizione. | ||
| Descrizione Questo attributo identifica il paese di partenza del trasporto e viene ricavato dall’indirizzo del luogo di ritiro iniziale. L’analisi del processo per paese di origine aiuta a individuare differenze regionali in termini di prestazioni, costi e complessità. Può mettere in evidenza i paesi in cui i tempi di sdoganamento sono più lunghi, i costi dei vettori più elevati o i ritardi più frequenti. Questa segmentazione geografica è essenziale per gestire una catena di fornitura globale e adattare le strategie logistiche alle diverse regioni. Perché è importante Consente di analizzare geograficamente le prestazioni delle spedizioni e di individuare colli di bottiglia regionali, fattori che incidono sui costi o variazioni del processo. Dove reperirli Fa parte delle informazioni sull’indirizzo del luogo di origine della prima fermata nel Freight Order. Esempi DEUSCNMX | |||
| Sistema di origine SourceSystem | Sistema da cui provengono i dati degli eventi. | ||
| Descrizione Questo attributo identifica il sistema di origine che ha generato i dati, ad esempio SAP TM, SAP ERP o il portale esterno di un vettore. Fornisce informazioni sulla provenienza dei dati e aiuta a comprendere i punti di integrazione tra i sistemi. In un’architettura complessa, conoscere il sistema di origine è fondamentale per convalidare i dati, risolvere i problemi di integrazione e capire in che modo i diversi sistemi contribuiscono al processo complessivo. Permette, ad esempio, di distinguere un evento segnalato da un sistema interno da uno comunicato da un fornitore di servizi logistici di terze parti. Perché è importante Identifica la provenienza dei dati, un’informazione fondamentale per la governance dei dati, la risoluzione dei problemi e la comprensione dell’orchestrazione dei processi tra più sistemi. Dove reperirli Queste informazioni sono spesso memorizzate nel registro di sistema oppure possono essere ricavate dall’interfaccia o dall’utente che ha creato la voce. Esempi SAP_TM_P01SAP_ERP_E01CARRIER_PORTAL_XYZ | |||
| Stato della spedizione ShipmentStatus | Lo stato complessivo della spedizione al momento dell’estrazione dei dati. | ||
| Descrizione Lo stato della spedizione indica in quale fase del ciclo di vita si trova, 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 all’esito. Per esempio, un analista può considerare solo le spedizioni completate per misurare il tempo di ciclo end-to-end oppure analizzare soltanto quelle annullate per individuare le cause profonde degli annullamenti. Fornisce un contesto importante per interpretare il flusso del processo. Perché è importante Fornisce una panoramica dell’esito di ogni spedizione e consente di filtrare e analizzare quelle completate, annullate o ancora in transito. Dove reperirli È il campo dello stato complessivo nell’intestazione del documento Freight Order o Freight Booking in SAP TM. Esempi In pianificazionePronto per il trasportoIn esecuzioneEseguitoAnnullato | |||
| Ultimo aggiornamento dei dati LastDataUpdate | Timestamp dell’ultima estrazione o dell’ultimo aggiornamento dei dati del processo utilizzati per il Process Mining. | ||
| Descrizione Questo attributo indica quanto sono aggiornati i dati analizzati. Riporta la data e l’ora in cui i dati sono stati acquisiti l’ultima volta dai sistemi di origine, come SAP TM, e importati nello strumento di Process Mining. È un metadato fondamentale per qualsiasi Dashboard o analisi, perché indica quanto sono aggiornate le informazioni. Aiuta a capire se si stanno consultando dati in tempo reale o un’istantanea relativa a un periodo precedente, un aspetto essenziale per prendere decisioni tempestive e consapevoli. Perché è importante Fornisce informazioni essenziali sull’aggiornamento dei dati e permette di sapere quanto è attuale l’analisi. Dove reperirli In genere, viene generato e memorizzato dallo strumento ETL (Extract, Transform, Load) o dalla pipeline dei dati durante il processo di acquisizione. Esempi 2023-10-27T08:00:00Z2023-10-26T08:00:00Z | |||
Attività della gestione dei trasporti
| Attività | Descrizione | ||
|---|---|---|---|
| Documento di liquidazione del trasporto creato | Questa attività segna la creazione del Freight Settlement Document (FSD), che calcola i costi di trasporto da corrispondere al vettore. È il documento principale utilizzato per gli accantonamenti e la verifica delle fatture. | ||
| Perché è importante Con questa attività inizia la fase di liquidazione finanziaria del processo di trasporto. Analizzare il tempo che intercorre tra la consegna e la creazione del documento di liquidazione aiuta a individuare i colli di bottiglia nell’elaborazione finanziaria. Dove reperirli L’evento viene registrato esplicitamente con la creazione di un Freight Settlement Document. Il timestamp di creazione è disponibile nella tabella di intestazione del documento, /SCMTMS/D_SFIRHD. Acquisizione Utilizzare la data e l’ora di creazione del Freight Settlement Document. Tipo di evento explicit | |||
| Merci consegnate | Questa attività indica l’arrivo della spedizione alla destinazione finale e il completamento del trasporto fisico. Viene registrata quando il vettore comunica che le merci sono state scaricate presso la sede del destinatario. | ||
| Perché è importante È la tappa più importante per misurare le prestazioni delle consegne puntuali e la soddisfazione dei clienti. In genere, dà inoltre avvio ai processi di fatturazione e liquidazione. Dove reperirli L’evento viene registrato in SAP TM come evento di esecuzione 'Arrival at Destination' o 'Unloading End' e aggiorna lo stato di esecuzione del Freight Order. Spesso i dati vengono ricevuti dal vettore. Acquisizione Utilizzare il timestamp dell’evento di esecuzione 'Arrival at Destination' segnalato per l’ultima tappa del Freight Order. Tipo di evento explicit | |||
| Merci ritirate | Questa attività segna l’inizio del trasporto fisico delle merci. Viene registrata quando il vettore comunica che le merci sono state caricate e sono partite dalla sede del mittente. | ||
| Perché è importante È una tappa fondamentale dell’esecuzione, che segna l’inizio della fase di trasporto. È essenziale per monitorare le consegne puntuali e fornire una visibilità accurata sulle spedizioni. Dove reperirli L’evento viene in genere registrato in SAP Event Management, integrato con SAP TM, come evento 'Departure' o 'Loading End'. Aggiorna lo stato di esecuzione del Freight Order e può essere registrato anche direttamente nel Freight Order. Acquisizione Utilizzare il timestamp dell’evento di esecuzione 'Departure' segnalato per il luogo di partenza del Freight Order. Tipo di evento explicit | |||
| Pagamento elaborato | Questa attività finale conferma che il vettore è stato pagato per i servizi di trasporto. In genere, l’evento si verifica nel sistema ERP collegato dopo che SAP TM ha ricevuto la fattura verificata. | ||
| Perché è importante Segna la conclusione effettiva del ciclo di vita end-to-end del trasporto. È essenziale per misurare la durata complessiva del processo e i KPI relativi alla puntualità dei pagamenti. Dove reperirli Queste informazioni risiedono nel sistema ERP, ad esempio in S/4HANA Finance. Possono essere collegate al Freight Settlement Document tramite il numero della fattura. Un aggiornamento di stato può essere inviato a SAP TM; in alternativa, i dati devono essere estratti da tabelle ERP come BKPF e BSEG. Acquisizione Recuperare dal sistema ERP la data di compensazione del pagamento e collegarla alla spedizione tramite il riferimento della fattura. Tipo di evento explicit | |||
| Prova di consegna ricevuta | Questa attività si verifica quando la prova di consegna (POD) firmata viene ricevuta dal vettore e registrata nel sistema. Conferma che il destinatario ha accettato le merci. | ||
| Perché è importante La ricezione della POD è un prerequisito fondamentale per fatturare il cliente e liquidare gli addebiti del trasporto al vettore. Eventuali ritardi in questa fase incidono direttamente sul ciclo di conversione della liquidità. Dove reperirli L’evento si deduce in genere da una modifica dello stato del Freight Order, ad esempio quando lo stato della POD passa a 'Received'. Il timestamp dell’attività corrisponde all’ora della modifica di questo campo di stato. Acquisizione Registrare il timestamp in cui lo stato della prova di consegna nel Freight Order viene aggiornato a 'Received'. Tipo di evento inferred | |||
| Richiesta di trasporto ricevuta | Questa attività segna l’avvio del processo di trasporto e corrisponde alla creazione di un’esigenza di trasporto. In SAP TM, viene registrata in genere con la creazione di un Forwarding Order (FWO) o di un Order-based Transportation Requirement (OTR). | ||
| Perché è importante È il principale evento di inizio del processo di spedizione end-to-end. Analizzare il tempo che intercorre tra questa attività e il completamento della pianificazione è fondamentale per misurare l’efficienza della pianificazione. Dove reperirli L’evento viene registrato quando si crea un Forwarding Order (tipo di documento FWO) o un altro documento relativo a un’esigenza di trasporto. L’ora di creazione nell’intestazione, ad esempio nella tabella /SCMTMS/D_TORROT, costituisce l’ora dell’evento. Acquisizione Registrare la data e l’ora di creazione del Forwarding Order o del documento relativo all’esigenza di trasporto. Tipo di evento explicit | |||
| Spedizione annullata | Questa attività indica l’annullamento di una spedizione dopo che è stata richiesta o pianificata. Segna la conclusione dei processi che non arrivano alla fase di esecuzione. | ||
| Perché è importante Monitorare gli annullamenti aiuta a individuare le ragioni per cui il processo non va a buon fine, come variazioni della domanda dei clienti o errori di pianificazione. Un tasso elevato di annullamenti può segnalare problemi di fondo nella gestione degli ordini o nella pianificazione. Dove reperirli L’evento si deduce quando lo stato del ciclo di vita del Forwarding Order o del Freight Order passa a 'Cancelled'. Il timestamp della modifica di stato indica l’ora dell’evento. Acquisizione Registrare il timestamp in cui lo stato del ciclo di vita del documento viene impostato su 'Cancelled'. Tipo di evento inferred | |||
| Spedizione pianificata | Questa attività indica che le esigenze di trasporto sono state consolidate in un piano di spedizione concreto. Viene registrata quando si crea e si salva un Freight Order (per il trasporto su strada o ferrovia) oppure un Freight Booking (per il trasporto marittimo o aereo), con l’itinerario e le risorse pianificati. | ||
| Perché è importante Il completamento di questa tappa è essenziale per avviare l’esecuzione logistica. Il tempo di ciclo dalla richiesta a questa attività è un KPI importante per misurare l’efficienza della pianificazione. Dove reperirli L’evento corrisponde alla creazione di un documento Freight Order o Freight Booking. Può anche essere dedotto da una modifica dello stato del documento, ad esempio quando lo stato di pianificazione passa a 'Planned'. I dati di intestazione si trovano in genere nella tabella /SCMTMS/D_TORROT. Acquisizione Utilizzare il timestamp di creazione del documento Freight Order o Freight Booking. Tipo di evento explicit | |||
| Vettore assegnato | Questa attività indica che è stato selezionato e assegnato alla spedizione uno specifico fornitore di servizi di trasporto, ovvero un vettore. L’assegnazione può avvenire manualmente, tramite pianificazione automatizzata o attraverso una procedura di gara. | ||
| Perché è importante L’assegnazione del vettore è un passaggio fondamentale prima che la spedizione possa essere confermata ed eseguita. Monitorarla aiuta ad analizzare il processo di selezione dei vettori e a garantire che la prenotazione avvenga nei tempi previsti. Dove reperirli L’evento viene registrato quando il campo del vettore, ovvero il partner con ruolo 'Carrier', viene compilato nel Freight Order o nel Freight Booking. Nelle procedure di gara, corrisponde all’aggiudicazione di una Freight Request for Quotation. Acquisizione Individuare il timestamp in cui la funzione partner del vettore viene compilata o confermata per la prima volta nel Freight Order. Tipo di evento inferred | |||
| Contestazione dei costi di trasporto creata | Questo evento indica che è stata rilevata una discrepanza tra la fattura del vettore e i costi calcolati nel Freight Settlement Document. Di conseguenza, si avvia un flusso di lavoro per la gestione della contestazione. | ||
| Perché è importante Le contestazioni ritardano i pagamenti ai vettori e richiedono attività amministrative per essere risolte. Monitorare questa attività aiuta a individuare le cause profonde delle inesattezze di fatturazione, come tariffe errate o supplementi per servizi accessori. Dove reperirli L’evento si può dedurre da una modifica dello stato del Freight Settlement Document, quando viene impostato lo stato 'Dispute'. Può anche comportare la creazione di un documento separato per la gestione della contestazione. Acquisizione Registrare il timestamp in cui viene impostato lo stato di contestazione nel Freight Settlement Document. Tipo di evento inferred | |||
| Dichiarazione doganale presentata | Per le spedizioni internazionali, questa attività corrisponde all’invio alle autorità della documentazione doganale richiesta. È un prerequisito per ottenere l’autorizzazione a esportare o importare le merci. | ||
| Perché è importante Presentare tempestivamente le dichiarazioni doganali è fondamentale per evitare ritardi alle frontiere. Monitorare questa attività aiuta a valutare l’efficienza delle procedure di intermediazione doganale. Dove reperirli L’evento può essere registrato come evento di esecuzione specifico segnalato da un intermediario doganale oppure dedotto da una modifica di stato in un sistema integrato di gestione doganale, come SAP GTS. Il Freight Order viene aggiornato di conseguenza. Acquisizione Registrare il timestamp dell’evento di esecuzione 'Customs Declaration Filed' o della corrispondente modifica di stato. Tipo di evento explicit | |||
| Fattura verificata | Questa attività indica che la fattura del vettore è stata confrontata correttamente con il Freight Settlement Document ed è stata approvata per il pagamento. È l’ultimo passaggio prima dell’avvio del pagamento nel sistema ERP. | ||
| Perché è importante Questa attività completa la verifica e il controllo dei costi di trasporto. Eventuali ritardi in questa fase possono posticipare i pagamenti ai vettori e compromettere i rapporti con loro. Dove reperirli L’evento si deduce da una modifica dello stato del Freight Settlement Document, ad esempio a 'Ready for Accrual' o 'Transferred for Posting', che indica che il documento è stato inviato al sistema ERP per il pagamento. Acquisizione Monitorare il timestamp in cui lo stato del ciclo di vita dell’FSD indica che il documento è pronto per il pagamento o è stato contabilizzato. Tipo di evento inferred | |||
| Itinerario della spedizione modificato | Questa attività indica una modifica non pianificata dell’itinerario o del programma della spedizione dopo la conferma. Può essere dovuta a interruzioni, richieste dei clienti o problemi logistici. | ||
| Perché è importante Le modifiche di itinerario spesso comportano costi più elevati e ritardi. Individuare la frequenza e le ragioni di queste modifiche aiuta a migliorare la precisione della pianificazione e la stabilità operativa. Dove reperirli L’evento si deduce rilevando modifiche significative alle tappe, alle località o alle date di un Freight Order dopo l’inizio dell’esecuzione. A questo scopo si possono analizzare i documenti di modifica nelle tabelle CDHDR e CDPOS. Acquisizione Rilevare le modifiche ai principali campi dell’itinerario nel documento Freight Order dopo l’evento 'Shipment Confirmed by Carrier'. Tipo di evento inferred | |||
| Sdoganamento completato | Questa attività indica che le autorità doganali hanno approvato la spedizione e che questa può proseguire. È una tappa importante per la logistica internazionale, perché elimina un potenziale collo di bottiglia significativo. | ||
| Perché è importante Lo sdoganamento è spesso una delle principali cause di ritardo nelle catene di approvvigionamento globali. Monitorare la durata e il tasso di completamento di questa attività è fondamentale per ridurre i tempi di transito internazionali. Dove reperirli L’evento viene registrato come evento di esecuzione 'Customs Clearance', in genere segnalato da un intermediario doganale o da un fornitore esterno di servizi di visibilità e aggiornato nel monitoraggio dell’esecuzione del Freight Order. Acquisizione Utilizzare il timestamp dell’evento di esecuzione 'Customs Clearance' segnalato e associato al Freight Order. Tipo di evento explicit | |||
| Spedizione confermata dal vettore | Questo evento indica che il vettore ha accettato di eseguire il trasporto secondo il piano. La conferma viene in genere ricevuta tramite un messaggio EDI, un aggiornamento sul portale del vettore o un inserimento manuale, che aggiorna lo stato del Freight Order. | ||
| Perché è importante La conferma del vettore attesta l’impegno a rispettare il piano di spedizione e riduce l’incertezza. Un ritardo nella ricezione della conferma può mettere a rischio l’intero programma di spedizione. Dove reperirli L’evento si deduce da una modifica del campo relativo allo stato di conferma del Freight Order o del Freight Booking. Nella gestione degli stati del documento viene impostato un valore specifico, ad esempio 'Confirmed'. Acquisizione Monitorare le modifiche ai campi dello stato di conferma nel documento Freight Order. Tipo di evento inferred | |||
Guide all’estrazione dei dati
Passaggi
- Individuare e attivare le API delle viste CDS: acceda al sistema SAP S/4HANA. Utilizzi la transazione
/IWFND/MAINT_SERVICEper verificare che i servizi OData necessari per le viste CDS principali siano attivi. Tra i servizi da controllare figurano quelli relativi a I_TransportationOrder, C_TranspOrdExecutionEvent, I_ForwardingOrder e I_FreightSettlementDocument. Se non sono attivi, chieda all’amministratore SAP di aggiungerli e attivarli dal sistema backend. - Configurare la connessione API: chieda all’amministratore SAP l’URL principale dei servizi OData. Configuri un’applicazione client per connettersi all’API, ad esempio uno script Python che utilizza la libreria requests, uno strumento ETL commerciale o Postman. Dovrà configurare l’autenticazione, in genere tramite autenticazione di base (nome utente e password) oppure OAuth 2.0 per una connessione più sicura.
- Definire l’ambito dell’estrazione: stabilisca quali dati estrarre. Definisca un intervallo di date specifico, ad esempio gli ultimi 6 mesi. Individui le unità organizzative pertinenti da usare come filtro, come il codice società, oppure tipi di documento specifici, come il tipo di ordine di trasporto, così da includere solo i dati rilevanti per il processo analizzato.
- Creare la query di base per le spedizioni: inizi interrogando la vista CDS I_TransportationOrder, che rappresenta l’oggetto centrale delle spedizioni, note anche come Freight Order o Freight Booking. Utilizzi il parametro OData
$selectper scegliere le colonne necessarie, inclusi gli attributi consigliati come CarrierName, ModeOfTransport e RequestedDeliveryDate. Applichi un$filterper limitare i dati in base alle date e agli altri parametri definiti. - Interrogare gli eventi di esecuzione e trasporto: utilizzi la vista CDS C_TranspOrdExecutionEvent per estrarre gli eventi logistici principali. Filtri la vista in base ai valori specifici di
EventCodecorrispondenti ad attività come 'Merce ritirata' (DEPARTURE) e 'Merce consegnata' (ARRIVAL_AT_DESTINATION). Colleghi questi dati a quelli di base delle spedizioni utilizzando l’UUID TransportationOrder. - Interrogare gli oggetti aziendali correlati: per acquisire il processo completo, dovrà interrogare altre viste CDS correlate. Interroghi I_ForwardingOrder per l’attività 'Richiesta di trasporto ricevuta' e I_FreightSettlementDocument per le attività finanziarie come 'Liquidazione del trasporto creata', 'Contestazione del trasporto creata' e 'Fattura verificata'.
- Estrarre le attività basate sullo stato: molte attività non corrispondono a eventi distinti, ma a cambiamenti di stato nel documento principale. Per attività come 'Vettore assegnato', 'Spedizione confermata dal vettore' e 'Spedizione annullata', interroghi la vista I_TransportationOrder e utilizzi
LastChangeDateTimeassociato al campo di stato pertinente come orario dell’evento. È necessario associare con attenzione i codici di stato alle attività aziendali. - Unire e trasformare i dati: consolidi i dati estratti da tutte le fonti in un’unica struttura di Event Log. Per ogni attività estratta, crei una riga con le colonne richieste: ShipmentId, ActivityName ed EventTime. Verifichi che ogni riga relativa a una spedizione includa tutti gli attributi consigliati dalla query di base. Questo passaggio equivale, a livello concettuale, a un’operazione SQL
UNION ALL. - Gestire eventi complessi ed esterni: per attività come 'Sdoganamento completato' o 'Pagamento elaborato', i dati potrebbero trovarsi in campi specifici o persino in sistemi esterni. La logica della query fornita utilizza campi standard come valori sostitutivi. Potrebbe essere necessario modificare la query per unirla a viste CDS specifiche per le operazioni doganali o correlare i dati con un’estrazione ERP separata per i pagamenti, utilizzando il numero del documento di liquidazione del trasporto.
- Preparare i dati per ProcessMind: salvi il dataset consolidato finale in un file CSV. Verifichi che le intestazioni delle colonne corrispondano ai requisiti di caricamento, ad esempio associando la colonna
ShipmentIdal campoCaseIdnelle impostazioni dello strumento. Controlli che i timestamp seguano un formato coerente, preferibilmente UTC (YYYY-MM-DDTHH:MM:SSZ).
Configurazione
- Viste CDS principali: l’estrazione si basa soprattutto su I_TransportationOrder (ordini di trasporto), C_TranspOrdExecutionEvent (eventi di esecuzione), I_ForwardingOrder (richieste di trasporto) e I_FreightSettlementDocument (liquidazioni).
- Filtro per intervallo di date: è fondamentale applicare un filtro per data per gestire il volume dei dati. Utilizzi
CreationDateTimein I_TransportationOrder oppureActualBusinessDateTimein C_TranspOrdExecutionEvent. Per un’analisi iniziale, si consiglia un intervallo da 3 a 6 mesi. - Filtro per tipo di documento: per circoscrivere l’analisi, filtri i tipi di documento specifici utilizzando il campo
TransportationOrderType. In questo modo può distinguere diversi scenari logistici, come le spedizioni standard in uscita e i trasferimenti di scorte. - Filtri organizzativi: se pertinenti, applichi filtri per
PurchasingOrganizationo altri campi a livello organizzativo, così da limitare i dati a una specifica unità aziendale o area geografica. - Paginazione API: per i dataset di grandi dimensioni, utilizzi i parametri OData
$tope$skipper recuperare i dati in pagine più piccole. In questo modo si evitano timeout dell’API e si riduce il consumo di memoria sul client. Spesso è efficace una dimensione di pagina compresa tra 1.000 e 5.000 righe. - 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 contenuti nelle viste CDS. I servizi corrispondenti devono essere attivati in 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' Passaggi
- Verifichi che sia disponibile l’accesso diretto in lettura allo schema SAP TM HANA tramite un client SQL approvato, una vista del database o un servizio di estrazione. Si procuri la stringa di connessione, le credenziali, il nome dello schema e le autorizzazioni necessarie per leggere le tabelle SAP TM pertinenti. Non interroghi direttamente l’ambiente di produzione senza le necessarie approvazioni di sicurezza e gestione delle modifiche.
- Verifichi i nomi fisici delle tabelle e delle colonne nel sistema. La query seguente utilizza /SCMTMS/D_TORROT e /SCMTMS/D_TOSTOP come tabelle principali, ma i dati relativi a stati, partner, date, costi, dogana, documenti e pagamenti possono trovarsi in altre tabelle o estensioni, a seconda della versione e dell’implementazione di SAP TM. Sostituisca i segnaposto documentati solo dopo averli verificati nel catalogo di sistema e nel modello dei dati.
- Definisca il periodo di estrazione utilizzando [Start timestamp] e [End timestamp]. Per un’analisi iniziale è generalmente adatto un periodo mobile di tre-sei mesi. Utilizzi un intervallo più ampio solo dopo aver verificato le prestazioni della query e il periodo di conservazione della cronologia degli eventi.
- Individui la chiave del caso di spedizione. La query utilizza TOR_ID di /SCMTMS/D_TORROT come identificativo della spedizione. Se l’implementazione utilizza un identificativo stabile diverso, sostituisca la chiave del caso in modo coerente in ogni ramo delle attività e, se disponibile, conservi l’identificativo originale del documento come attributo aggiuntivo per gli audit.
- Associe ogni attività aziendale a una condizione esplicita della fonte. ProcessMind legge l’Event Log così com’è, quindi la query crea una riga per ogni attività estratta. Non deduce le tappe dall’ordine dei documenti, da timestamp mancanti o dalla progressione degli stati.
- Convalidi le associazioni tra stati e timestamp con i responsabili della pianificazione dei trasporti e dei processi aziendali. In particolare, verifichi i valori che rappresentano la creazione della richiesta, la pianificazione, l’assegnazione del vettore, la conferma del vettore, il ritiro, la presentazione della dichiarazione doganale, lo sdoganamento, il cambio di percorso, la consegna, la ricezione della prova di consegna (POD), la liquidazione del trasporto, la contestazione, la verifica della fattura, l’annullamento e il pagamento.
- Esegua la query nel client SQL approvato. Verifichi che il risultato contenga una riga per evento, un valore ShipmentId non nullo, un valore ActivityName non nullo e un EventTime valido. Controlli la presenza di righe duplicate dovute a join uno-a-molti e, se necessario, modifichi le associazioni alle fonti o la logica di aggregazione.
- Arricchisca il risultato con gli attributi consigliati, quando i relativi campi sorgente sono disponibili. La query include segnaposto descrittivi per i campi che non possono essere indicati in modo affidabile senza metadati specifici del sistema. Sostituisca tali segnaposto solo con colonne verificate o viste approvate.
- Applichi le regole finali di qualità dei dati. Rimuova le righe prive di identificativo del caso o timestamp dell’evento, uniformi i timestamp a un unico fuso orario, conservi i timestamp originali per gli audit e verifichi che EndTime non preceda EventTime. Non crei eventi sintetici per i record sorgente mancanti.
- Esporti il risultato in formato CSV UTF-8 o in un altro formato tabellare supportato da ProcessMind. Utilizzi esattamente i nomi di colonna richiesti: ShipmentId, ActivityName ed EventTime. Includa EndTime e gli attributi consigliati quando valorizzati. Carichi il file o colleghi a ProcessMind il risultato della query approvata, quindi verifichi che i campi identificativo del caso Shipment e Activity Name siano associati correttamente.
Configurazione
- Tabelle sorgente principali: utilizzi /SCMTMS/D_TORROT per i dati principali degli ordini di trasporto o Freight Order e /SCMTMS/D_TOSTOP per i dati relativi alle fermate e alle tappe. Prima della messa in produzione, convalidi tutti gli altri oggetti sorgente nel sistema SAP TM di destinazione.
- Identificativo del caso: utilizzi un identificativo stabile della spedizione o del Freight Order. La query di esempio usa TOR_ID come ShipmentId. Verifichi che l’identificativo rimanga stabile durante la pianificazione, l’esecuzione, la liquidazione e la registrazione dei pagamenti ERP.
- Associazione delle attività: configuri condizioni esplicite nelle fonti per tutte le 15 attività richieste. Ogni attività deve essere registrata come riga effettiva dell’Event Log. ProcessMind non ricava le attività da altre righe.
- Intervallo di date: inizi con uno storico da tre a sei mesi. Applichi i criteri EventTime il prima possibile in ogni ramo della fonte. Per i caricamenti incrementali, utilizzi un watermark controllato e includa una breve finestra di sovrapposizione per acquisire gli aggiornamenti tardivi.
- Filtri aziendali: configuri i filtri per codice società, organizzazione acquisti, organizzazione vendite, tipo di documento, modalità di trasporto, vettore, stabilimento, località e stato in base all’implementazione. Utilizzi segnaposto come [Company code filter] quando il campo pertinente non è stato verificato.
- Gestione dei timestamp: converta i timestamp sorgente in un unico fuso orario. Se una fonte memorizza data e ora in campi separati, li combini utilizzando la conversione specifica del sistema supportata dalla versione di HANA. Conservi il timestamp sorgente originale quando è necessario garantire la tracciabilità per gli audit.
- Attributi consigliati: valorizzi CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost e IsOnTimeDelivery utilizzando campi sorgente verificati o viste di calcolo approvate. Lasci i valori nulli quando la fonte non contiene un dato attendibile.
- Prestazioni: limiti il periodo, selezioni solo le colonne necessarie, applichi i filtri prima dei join, eviti scansioni complete delle tabelle senza restrizioni e controlli il piano di esecuzione HANA. Per dataset di grandi dimensioni, utilizzi filtri compatibili con il partizionamento, estrazioni incrementali, tabelle di staging o una vista di calcolo approvata.
- Gestione dei duplicati: i join uno-a-molti possono generare più righe per la stessa attività. Utilizzi una chiave evento verificata, una chiave del documento sorgente o una regola di aggregazione deterministica. Eviti deduplicazioni arbitrarie che potrebbero eliminare eventi ripetuti legittimi.
- Prerequisiti: autorizzazioni necessarie per il database, accesso ai dati SAP TM, accesso ai dati di eventuali sistemi ERP o di liquidazione collegati, strumenti di estrazione approvati e conferma che i moduli SAP TM, le integrazioni e le estensioni personalizzate pertinenti siano attivi.
- Associazioni specifiche del sistema: i codici di stato, i ruoli dei partner, le tappe doganali, gli stati di liquidazione, gli stati delle fatture e gli stati dei pagamenti variano in base alla versione e alla configurazione. Mantenga le associazioni in un documento di configurazione controllato e le verifichi dopo gli aggiornamenti.
a Query di esempio sql
WITH
base_tor AS (
SELECT
r.TOR_ID AS ShipmentId,
r.TOR_ID AS SourceDocumentId,
r.CREATED_AT AS RequestEventTime,
r.CREATED_AT AS PlannedEventTime,
r.CREATED_AT AS CarrierAssignedEventTime,
r.CREATED_AT AS CarrierConfirmedEventTime,
r.CREATED_AT AS PickupEventTime,
r.CREATED_AT AS CustomsFiledEventTime,
r.CREATED_AT AS CustomsClearedEventTime,
r.CREATED_AT AS ReroutedEventTime,
r.CREATED_AT AS DeliveredEventTime,
r.CREATED_AT AS PodReceivedEventTime,
r.CREATED_AT AS SettlementCreatedEventTime,
r.CREATED_AT AS DisputeCreatedEventTime,
r.CREATED_AT AS InvoiceVerifiedEventTime,
r.CREATED_AT AS CancelledEventTime,
r.CREATED_AT AS PaymentProcessedEventTime,
r.CREATED_AT AS EndTime,
CAST(NULL AS NVARCHAR(255)) AS CarrierName,
CAST(NULL AS TIMESTAMP) AS RequestedDeliveryDate,
CAST(NULL AS NVARCHAR(50)) AS ModeOfTransport,
CAST(NULL AS DECIMAL(19, 2)) AS TotalFreightCost,
CAST(NULL AS NVARCHAR(5)) AS IsOnTimeDelivery
FROM "/SCMTMS/D_TORROT" r
WHERE r.CREATED_AT >= TO_TIMESTAMP('[Start timestamp]')
AND r.CREATED_AT < TO_TIMESTAMP('[End timestamp]')
AND ('[Company code filter]' = '[Company code filter]' OR r.TOR_ID IS NOT NULL)
),
stop_data AS (
SELECT
s.TOR_ID AS ShipmentId,
MIN(s.STOP_SEQ) AS FirstStopSequence,
MAX(s.STOP_SEQ) AS LastStopSequence
FROM "/SCMTMS/D_TOSTOP" s
GROUP BY s.TOR_ID
),
source_data AS (
SELECT
b.ShipmentId,
b.SourceDocumentId,
b.RequestEventTime,
b.PlannedEventTime,
b.CarrierAssignedEventTime,
b.CarrierConfirmedEventTime,
b.PickupEventTime,
b.CustomsFiledEventTime,
b.CustomsClearedEventTime,
b.ReroutedEventTime,
b.DeliveredEventTime,
b.PodReceivedEventTime,
b.SettlementCreatedEventTime,
b.DisputeCreatedEventTime,
b.InvoiceVerifiedEventTime,
b.CancelledEventTime,
b.PaymentProcessedEventTime,
b.EndTime,
b.CarrierName,
b.RequestedDeliveryDate,
b.ModeOfTransport,
b.TotalFreightCost,
CASE
WHEN b.DeliveredEventTime IS NOT NULL
AND b.RequestedDeliveryDate IS NOT NULL
AND b.DeliveredEventTime <= b.RequestedDeliveryDate THEN 'true'
WHEN b.DeliveredEventTime IS NOT NULL
AND b.RequestedDeliveryDate IS NOT NULL THEN 'false'
ELSE NULL
END AS IsOnTimeDelivery
FROM base_tor b
LEFT JOIN stop_data s
ON s.ShipmentId = b.ShipmentId
),
event_log AS (
SELECT ShipmentId, 'Transportation Request Received' AS ActivityName, RequestEventTime AS EventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE RequestEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Planned', PlannedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PlannedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Carrier Assigned', CarrierAssignedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CarrierAssignedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Confirmed By Carrier', CarrierConfirmedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CarrierConfirmedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Goods Picked Up', PickupEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PickupEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Customs Declaration Filed', CustomsFiledEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CustomsFiledEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Customs Cleared', CustomsClearedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CustomsClearedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Rerouted', ReroutedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE ReroutedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Goods Delivered', DeliveredEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE DeliveredEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Proof Of Delivery Received', PodReceivedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PodReceivedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Freight Settlement Created', SettlementCreatedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE SettlementCreatedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Freight Dispute Created', DisputeCreatedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE DisputeCreatedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Invoice Verified', InvoiceVerifiedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE InvoiceVerifiedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Cancelled', CancelledEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CancelledEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Payment Processed', PaymentProcessedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PaymentProcessedEventTime IS NOT NULL
)
SELECT
ShipmentId,
ActivityName,
EventTime,
EndTime,
CarrierName,
RequestedDeliveryDate,
ModeOfTransport,
TotalFreightCost,
IsOnTimeDelivery,
SourceDocumentId
FROM event_log
WHERE ShipmentId IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY ShipmentId, EventTime, ActivityName; Passaggi
- Definire i requisiti dei dati: inizi verificando la logica esatta per ciascuna delle 15 attività richieste e per tutti gli attributi. Occorre associare ogni attività a specifici cambiamenti di stato, eventi di creazione o collegamenti tra documenti nel sistema SAP TM. Ad esempio, determini lo stato di esecuzione preciso che indica 'Merce ritirata'.
- Accedere all’ambiente di sviluppo ABAP: acceda alla SAP GUI e apra l’Editor ABAP tramite il codice transazione
SE38. Inserisca un nome per il nuovo programma, ad esempioZTM_PROCESS_EXTRACT, e selezioni 'Crea'. Indichi un titolo e imposti il tipo di programma su 'Programma eseguibile'. - Creare la schermata di selezione: definisca nel programma la schermata di selezione che verrà visualizzata dagli utenti. Includa i parametri per filtrare i dati, ad esempio un intervallo di date per la data di creazione del Freight Order (
SO_CREDT), e le opzioni di selezione per i tipi di documento (SO_TYPE) o i vettori (SO_CARR). - Definire la struttura di output: definisca una struttura di tabella interna conforme al formato richiesto per l’Event Log. La struttura deve includere i campi
ShipmentId,ActivityName,EventTime,EndTime,CarrierName,RequestedDeliveryDate,ModeOfTransport,TotalFreightCosteIsOnTimeDelivery. - Implementare la logica di selezione dei dati: scriva la logica ABAP principale per selezionare i dati relativi a ciascuna delle 15 attività. In genere è necessario interrogare più tabelle SAP TM. Inizi selezionando i documenti principali delle spedizioni, come i Freight Order, nell’intervallo di date specificato.
- Estrarre gli eventi di pianificazione ed esecuzione: per ogni documento di spedizione selezionato, ad esempio un Freight Order, interroghi le tabelle e gli oggetti aziendali correlati per individuare i timestamp dei diversi eventi. Utilizzi la tabella
/SCMTMS/D_TORROTper la creazione del Freight Order ('Spedizione pianificata'), l’assegnazione del vettore ('Vettore assegnato') e i cambiamenti di stato dell’esecuzione corrispondenti a 'Merce ritirata' e 'Merce consegnata'. La creazione del Forwarding Order precedente (/SCMTMS/D_TRQROT) può indicare l’attività 'Richiesta di trasporto ricevuta'. - Estrarre la conferma del vettore e i cambi di percorso: interroghi le tabelle degli stati o i documenti di modifica (CDHDR/CDPOS) associati al Freight Order per individuare quando è stato impostato lo stato
CONFIRMATION, che corrisponde a 'Spedizione confermata dal vettore'. Analogamente, cerchi modifiche significative nelle informazioni sul percorso per rilevare 'Spedizione con percorso modificato'. - Estrarre gli eventi doganali: se utilizza SAP Global Trade Services (GTS) o un modulo simile, gli eventi doganali ('Dichiarazione doganale presentata', 'Sdoganamento completato') sono spesso registrati nei documenti collegati. La logica deve leggere il flusso documentale (
/SCMTMS/D_TORDOC) del Freight Order per individuare i documenti correlati e i relativi orari di creazione o modifica dello stato. - Estrarre gli eventi di liquidazione e contestazione: interroghi la tabella di intestazione del documento di liquidazione del trasporto (
/SCMTMS/D_SFIRHD) e le relative voci e gli stati per acquisire gli eventi 'Liquidazione del trasporto creata', 'Contestazione del trasporto creata' e 'Fattura verificata'. Li colleghi alloShipmentIdoriginale. - Consolidare i dati: per ogni evento individuato, crei un nuovo record nella tabella interna finale. Inserisca in
ActivityNamel’attività corrispondente, inEventTimeil timestamp dell’evento e inShipmentIdl’ID del Freight Order o del Freight Booking. Compili gli altri attributi utilizzando i documenti sorgente. - Formattare ed esportare il file: una volta compilata la tabella interna finale, formatti i dati in un file semplice. Utilizzi 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 la transazione AL11. - Pianificare ed estrarre il file: il programma ABAP può essere pianificato come job in background tramite la transazione SM36 per estrarre i dati automaticamente. Il file generato può quindi essere scaricato dal server applicativo su un computer locale tramite la transazione
CG3Ye caricato 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 esempio il Freight Order. Per l’analisi iniziale si consiglia un intervallo da 3 a 6 mesi, così da ottenere un dataset rappresentativo senza tempi di esecuzione eccessivi.
- Filtro per tipo di documento: preveda un filtro per il tipo di documento di trasporto, ad esempio Freight Order o Freight Booking. È essenziale per circoscrivere l’analisi a processi specifici, come il trasporto su strada o via mare.
- Filtro per vettore: consenta agli utenti di filtrare i dati in base a vettori specifici. In questo modo è possibile analizzare le prestazioni dei singoli partner logistici.
- Filtri organizzativi: includa filtri per le unità organizzative pertinenti, come l’organizzazione acquisti o il codice società, per limitare l’estrazione a specifiche aree aziendali.
- Ottimizzazione delle prestazioni: per i dataset di grandi dimensioni, verifichi che il codice ABAP utilizzi campi indicizzati del database nelle clausole
WHERE, eviti per quanto possibile i cicli annidati e selezioni dal database solo i campi necessari, così da ridurre il consumo di memoria. - Prerequisiti: l’utente che esegue il report deve essere autorizzato a eseguire programmi ABAP. Lo sviluppatore deve disporre dell’autorizzazione
S_DEVELOP. Il programma deve inoltre avere le autorizzazioni per accedere al file system del server applicativo (oggettoS_DATASET) e 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. È pronto a iniziare?
Utilizzi questo template per avviare il percorso verso processi di trasporto più efficienti e consegne più rapide ed economiche. Inizi subito a individuare nuove opportunità di miglioramento.
Elimini oggi i colli di bottiglia nella gestione dei trasporti
Individui le inefficienze, ottimizzi i percorsi e riduca del 30% il tempo di ciclo.
Non è richiesta alcuna carta di credito. La configurazione richiede pochi minuti.