Su Template de datos de gestión del transporte
Su Template de datos de gestión del transporte
- Atributos recomendados para recopilar
- Actividades clave que debe seguir
- Recomendaciones para extraer datos de SAP Transportation Management
Atributos de gestión del transporte
| Nombre | Descripción | ||
|---|---|---|---|
| Envío ShipmentId | Identificador único de un movimiento de mercancías, que sirve como caso central para el análisis. | ||
| Descripción El ID del envío es la clave principal que agrupa todas las actividades y eventos de transporte relacionados. Representa un proceso de transporte completo, desde la solicitud inicial hasta el comprobante de entrega y el pago finales. En Process Mining, este atributo es esencial para construir la vista del caso y permite a los analistas seguir el recorrido completo de cada envío. Facilita el análisis de las variantes del proceso, los tiempos de ciclo y los resultados de cada envío, y ofrece una visión integral del rendimiento del transporte. Por qué es importante Este es el identificador de caso fundamental: vincula todos los eventos y puntos de datos con una orden de transporte específica, algo esencial para analizar el proceso de principio a fin. Dónde obtenerlo Este identificador corresponde al número de la orden de transporte o de la reserva de transporte en SAP TM. Puede encontrarse en tablas como /SCMTMS/D_TORROT y /SCMTMS/D_TRQROT. Ejemplos 610000432161000056786100009876 | |||
| Hora del evento EventTime | Marca de tiempo que indica cuándo se produjo una actividad o un evento específico. | ||
| Descripción La hora del evento proporciona la fecha y hora precisas de cada actividad del proceso de transporte. Estos datos temporales son fundamentales para calcular los tiempos de ciclo, las duraciones y los tiempos de espera entre los distintos pasos del proceso. En el análisis, este atributo permite ordenar correctamente los eventos, crear un registro cronológico y realizar análisis de rendimiento basados en el tiempo. Es fundamental para detectar retrasos, medir la eficiencia del proceso y evaluar el rendimiento frente a los calendarios o los acuerdos de nivel de servicio. Por qué es importante La marca de tiempo es esencial para ordenar cronológicamente los eventos y calcular todas las métricas de rendimiento, como los tiempos de ciclo y las entregas a tiempo. Dónde obtenerlo Se obtiene de las tablas del gestor de eventos de SAP TM, como /SAPTRX/EH_EVMSG, que almacenan las marcas de tiempo de los eventos notificados. Ejemplos 2023-04-15T10:00:00Z2023-04-16T14:30:00Z2023-04-20T09:15:00Z | |||
| Nombre de la actividad ActivityName | Nombre de un evento de negocio o paso específico que tuvo lugar durante el proceso de transporte. | ||
| Descripción El nombre de la actividad describe una tarea o un hito del ciclo de vida del envío, como «Envío planificado», «Mercancías recogidas» o «Mercancías entregadas». Estas actividades forman los nodos del mapa de procesos descubierto. Analizar la secuencia y la frecuencia de las actividades ayuda a identificar el flujo estándar del proceso, las desviaciones, los cuellos de botella y los ciclos de retrabajo. Es la base del descubrimiento de procesos y de la comprobación de conformidad en la gestión del transporte. Por qué es importante Este atributo define los pasos del proceso de transporte y permite visualizar y analizar el flujo completo del envío. Dónde obtenerlo Por lo general, se obtiene de los códigos de evento o de los cambios de estado registrados en el gestor de eventos de seguimiento de ejecución de SAP TM. También puede proceder de tablas que registran cambios de estado de objetos de negocio o mensajes de eventos específicos. Ejemplos Envío planificadoTransportista asignadoMercancías recogidasMercancías entregadasComprobante de entrega recibido | |||
| Coste total del transporte TotalFreightCost | Coste total calculado o facturado del envío. | ||
| Descripción El coste total del transporte refleja el impacto financiero de un envío. Puede ser el coste calculado por el sistema de gestión del transporte o el importe final de la factura del transportista tras la liquidación. Este atributo incorpora la dimensión financiera al análisis del proceso. Las personas analistas pueden identificar las variantes de proceso más costosas, calcular el coste de los retrasos o los cambios de ruta y comparar la rentabilidad de distintos transportistas o modos de transporte. Es fundamental para los Dashboards centrados en el gasto en transporte y el análisis del coste de servicio. Por qué es importante Añade una dimensión financiera al proceso y permite analizar el gasto en transporte, el coste por envío y el impacto financiero de las ineficiencias del proceso. Dónde obtenerlo Se obtiene del documento Freight Settlement en SAP TM, una vez calculados los cargos. Puede encontrarse en tablas como /SCMTMS/D_SFIRHD. Ejemplos 250.751200.005430.50 | |||
| Entrega a tiempo IsOnTimeDelivery | Indicador booleano que señala si las mercancías se entregaron en la fecha solicitada o antes. | ||
| Descripción Este atributo calculado compara la marca de tiempo de la actividad «Mercancías entregadas» con la «Fecha de entrega solicitada». Devuelve verdadero si la entrega se realizó a tiempo o antes, y falso si se retrasó. Este atributo simplifica el análisis del rendimiento al ofrecer un resultado binario claro para cada envío. Es la base del Dashboard de rendimiento de las entregas a tiempo y del KPI correspondiente. Permite filtrar fácilmente los envíos retrasados y analizar sus causas para comprender qué factores afectan al rendimiento. Por qué es importante Mide directamente el cumplimiento de los compromisos de entrega y simplifica el cálculo y la visualización del KPI clave de entregas a tiempo. Dónde obtenerlo Este atributo no se almacena en SAP TM. Debe calcularse durante la transformación de datos, comparando la marca de tiempo del evento de entrega real con la fecha de entrega solicitada. Ejemplos truefalse | |||
| Fecha de entrega solicitada RequestedDeliveryDate | Fecha y hora de entrega solicitadas por el cliente o especificadas en el pedido de venta. | ||
| Descripción La fecha de entrega solicitada es la fecha límite prevista para la actividad «Mercancías entregadas». Es la referencia principal para medir el rendimiento de las entregas a tiempo. Esta fecha es fundamental para calcular el KPI de entregas a tiempo. Al comparar la marca de tiempo real de la entrega con la fecha solicitada, las organizaciones pueden determinar si cumplieron el nivel de servicio acordado. El análisis de las desviaciones ayuda a identificar causas recurrentes de los retrasos, como problemas de rendimiento del transportista, demoras en la planificación o retenciones en aduanas. Por qué es importante Es la referencia para medir el rendimiento de las entregas a tiempo, un KPI clave para la satisfacción del cliente y la excelencia operativa. Dónde obtenerlo Por lo general, esta fecha se transfiere del pedido de venta o del pedido de traslado de stock anterior en SAP ERP. Se almacena en los campos de fecha y hora de Freight Unit o Freight Order. Ejemplos 2023-05-20T17:00:00Z2023-06-01T12:00:00Z2023-06-15T23:59:59Z | |||
| Hora de finalización EndTime | Marca de tiempo que indica cuándo se completó una actividad específica. | ||
| Descripción Mientras que StartTime indica el inicio de un evento, EndTime marca su finalización. Esto resulta especialmente útil para actividades que tienen una duración, como «Despacho de aduanas» o «Carga de mercancías». La diferencia entre EndTime y StartTime representa el tiempo de procesamiento de esa actividad. En el análisis de Process Mining, disponer de las horas de inicio y finalización permite analizar con más detalle la duración de las actividades y separar el tiempo de procesamiento del tiempo de espera. Así se puede localizar con precisión dónde están las ineficiencias, ya sea durante la ejecución de una tarea o en los traspasos entre tareas. Por qué es importante Permite calcular con precisión los tiempos de procesamiento de las actividades y distinguir el tiempo de trabajo efectivo del tiempo de espera entre eventos. Dónde obtenerlo Al igual que StartTime, se obtiene de las tablas del gestor de eventos. Puede corresponder a un evento independiente de «Finalización» de una actividad. Ejemplos 2023-04-15T11:30:00Z2023-04-16T15:00:00Z2023-04-20T09:45:00Z | |||
| Modo de transporte ModeOfTransport | Medio de transporte utilizado para el envío, como carretera, ferrocarril, avión o barco. | ||
| Descripción Este atributo especifica el modo de transporte. Cada modo tiene una estructura de costes, tiempos de tránsito y complejidad del proceso distintos. Por ejemplo, un envío internacional de carga aérea incluye actividades como el despacho de aduanas, que no suelen formar parte de un envío nacional en camión. El análisis de los procesos por modo de transporte permite definir iniciativas de mejora específicas. También es fundamental para analizar los costes, especialmente para identificar el uso de transporte prémium (p. ej., carga aérea urgente) frente a opciones estándar más económicas. Esta segmentación es clave para comprender y controlar el gasto en transporte. Por qué es importante Permite analizar las variaciones de costes, tiempos y procesos según el modo de transporte, algo esencial para optimizar los costes e identificar el uso de transporte prémium. Dónde obtenerlo Es un campo clave de Freight Order o Freight Booking, que suele aparecer como Transportation Mode o MOT. Ejemplos 01 (Carretera)02 (Ferrocarril)04 (Aéreo)05 (Marítimo) | |||
| Nombre del transportista CarrierName | Nombre del transportista o proveedor de servicios logísticos asignado al envío. | ||
| Descripción El nombre del transportista identifica a la empresa responsable del traslado físico de las mercancías. Es una dimensión clave para analizar el rendimiento, ya que los niveles de servicio, los costes y la fiabilidad pueden variar entre transportistas. En Process Mining, este atributo permite segmentar y comparar el rendimiento de distintos transportistas. Sirve para crear cuadros de evaluación, supervisar las entregas a tiempo de cada transportista, comparar costes e identificar cuáles se asocian con mayor frecuencia a retrasos o disputas. Esta información es fundamental para la gestión estratégica de transportistas y las compras. Por qué es importante Permite comparar el rendimiento de distintos transportistas, un aspecto clave para optimizar su selección, los costes y los niveles de servicio. Dónde obtenerlo Esta información se almacena en el documento Freight Order o Freight Booking. El vínculo se establece mediante la función de socio comercial correspondiente al transportista. Ejemplos DHL ExpressFedEx FreightMaersk LineUnion Pacific Railroad | |||
| En disputa IsDisputed | Indicador booleano que señala si la factura de transporte del envío dio lugar a una disputa. | ||
| Descripción Este indicador calculado identifica los envíos asociados a una disputa de liquidación de transporte. Devuelve verdadero si se creó una disputa y falso en caso contrario. Puede derivarse de la presencia de la actividad «Disputa de transporte creada» o de un «Motivo de la disputa» no vacío. Este atributo simplifica el análisis del proceso de liquidación del transporte. Permite calcular fácilmente el KPI de discrepancias en la facturación del transporte y filtrar todos los envíos disputados. Después, las personas analistas pueden investigar las características comunes de estos envíos, como los transportistas, las rutas o los tipos de cargos, para encontrar la causa de los errores de facturación. Por qué es importante Facilita la identificación de liquidaciones de transporte problemáticas, permite calcular rápidamente la tasa de disputas y ayuda a analizar las causas de los errores de facturación. Dónde obtenerlo Este atributo no se almacena en SAP TM. Debe calcularse según exista o no un caso de disputa vinculado al documento Freight Settlement. Ejemplos truefalse | |||
| Estado del envío ShipmentStatus | Estado general del envío en el momento de extraer los datos. | ||
| Descripción El estado del envío ofrece una instantánea de su situación en el ciclo de vida, por ejemplo, «En planificación», «En ejecución», «Entregado» o «Cancelado». Representa el último estado conocido del caso. Este atributo permite filtrar y analizar los envíos según su resultado. Por ejemplo, una persona analista puede centrarse únicamente en los envíos completados para medir el tiempo de ciclo de principio a fin, o analizar solo los cancelados para comprender las causas. También aporta contexto importante para interpretar el flujo del proceso. Por qué es importante Indica el resultado general de cada envío y permite filtrar y analizar si se completó, se canceló o sigue en tránsito. Dónde obtenerlo Es el campo de estado general del encabezado del documento Freight Order o Freight Booking en SAP TM. Ejemplos En planificaciónListo para el transporteEn ejecuciónEjecutadoCancelado | |||
| Fecha de recogida programada ScheduledPickupDate | Fecha y hora previstas para que el transportista recoja las mercancías en el punto de expedición. | ||
| Descripción La fecha de recogida programada es la hora acordada para iniciar el transporte físico. Es un hito clave en la fase de ejecución del envío. Este atributo es esencial para supervisar la puntualidad del primer tramo del trayecto. Al comparar la hora de recogida programada con la marca de tiempo real del evento «Mercancías recogidas», las empresas pueden calcular los retrasos en la recogida. Esto ayuda a evaluar el rendimiento y la fiabilidad tanto del punto de expedición como del transportista. Por qué es importante Sirve de referencia para medir la puntualidad de la recogida y detectar retrasos desde el inicio del trayecto físico del envío. Dónde obtenerlo Es una fecha y hora planificadas que se almacenan en la secuencia de paradas de Freight Order en SAP TM. Ejemplos 2023-05-18T09:00:00Z2023-05-30T14:00:00Z2023-06-12T10:30:00Z | |||
| Motivo de la disputa DisputeReason | Motivo indicado cuando se disputa una factura de transporte. | ||
| Descripción Cuando la factura de un transportista no coincide con el coste previsto calculado en SAP TM, se crea una disputa. Este atributo registra el motivo de la discrepancia, como «Tarifa incorrecta», «Factura duplicada» o «Cargo adicional no aprobado». Analizar los motivos de las disputas es fundamental para el Dashboard de errores y disputas en facturas de transporte. Ayuda a identificar las causas de los errores de facturación, ya se deban a problemas con los datos maestros, errores del transportista o fallos operativos. Esta información permite tomar medidas específicas para reducir las disputas, agilizar el ciclo de pago y disminuir la carga administrativa. Por qué es importante Identifica la causa de los errores en las facturas de transporte y permite tomar medidas específicas para reducir las disputas y mejorar el proceso de liquidación. Dónde obtenerlo Esta información se registra en el caso de gestión de disputas asociado a un documento Freight Settlement. Ejemplos Discrepancia en la tarifaPeso incorrectoCargo por demora no aprobadoFactura duplicada | |||
| Motivo del retraso DelayReason | Código o texto que explica el motivo de un retraso en el envío. | ||
| Descripción El atributo Motivo del retraso registra la causa de una desviación del horario previsto, como «Mal tiempo», «Retención en aduanas» o «Retraso del transportista». Esta información suele comunicarse manualmente o mediante un mensaje de evento del transportista. Es un atributo clave para analizar las causas. Permite ir más allá de saber que un envío llegó tarde y comprender por qué. Al clasificar y cuantificar los motivos de los retrasos, las organizaciones pueden detectar problemas recurrentes y centrar las mejoras en los aspectos de mayor impacto, como mejorar la comunicación con los transportistas u optimizar las rutas para evitar la congestión. Por qué es importante Explica por qué se retrasan los envíos y permite analizar las causas para reducir las excepciones y mejorar el rendimiento de las entregas a tiempo. Dónde obtenerlo Puede registrarse como código y motivo de evento en el marco de gestión de eventos de SAP TM cuando se notifica un evento «Llegada/salida retrasada». Ejemplos WEATHER_DELAYCUSTOMS_INSPECTIONPORT_CONGESTIONMECHANICAL_FAILURE | |||
| Nombre de usuario UserName | ID o nombre de la persona que ejecutó una actividad. | ||
| Descripción Este atributo identifica a la persona empleada o usuaria responsable de realizar una actividad manual, como «Envío planificado» o «Factura verificada». Vincula los pasos del proceso con las personas o los equipos que los llevaron a cabo. Analizar las actividades por usuario ayuda a comprender cómo se distribuye la carga de trabajo, detectar necesidades de formación y reconocer a quienes obtienen mejores resultados. También es fundamental para el cumplimiento y las auditorías, ya que deja constancia de quién hizo qué y cuándo. Además, permite detectar diferencias en la forma en que distintas personas realizan una misma tarea. Por qué es importante Asocia los pasos manuales del proceso con usuarios específicos y permite analizar la carga de trabajo, el rendimiento individual y las oportunidades de formación. Dónde obtenerlo Suele encontrarse en el registro de cambios o en las tablas de encabezado de los documentos de transporte, en campos como «Creado por» o «Modificado por» (p. ej., ERNAM, AENAM). Ejemplos CB998030SMITHJPLANNER_EU | |||
| País de destino DestinationCountry | País al que se entrega el envío. | ||
| Descripción Este atributo identifica el país de destino final del envío y se obtiene de la dirección del último punto de entrega. Al igual que el país de origen, analizar los datos por país de destino es fundamental para comprender los desafíos logísticos de cada región. Puede revelar patrones, como los destinos con más retrasos en las entregas o mayores costes de última milla. Esta información resulta útil para optimizar la red, establecer expectativas de entrega realistas y gestionar el cumplimiento de las normas del comercio internacional. Por qué es importante Permite analizar el rendimiento del proceso por destino y detectar problemas en regiones de entrega específicas, autoridades aduaneras o transportistas de última milla. Dónde obtenerlo Forma parte de la información de dirección del destino de la última parada de Freight Order. Ejemplos FRCAGBJP | |||
| País de origen OriginCountry | País desde el que se origina el envío. | ||
| Descripción Este atributo identifica el país de origen del trayecto de transporte. Se obtiene de la dirección del punto de recogida inicial. Analizar el proceso por país de origen ayuda a detectar diferencias regionales en rendimiento, costes y complejidad. Puede revelar países con tiempos de despacho de aduanas más largos, costes de transporte más elevados o retrasos más frecuentes. Esta segmentación geográfica es esencial para gestionar una cadena de suministro global y adaptar las estrategias logísticas a cada región. Por qué es importante Permite analizar geográficamente el rendimiento de los envíos y detectar cuellos de botella regionales, factores que impulsan los costes o variaciones en los procesos. Dónde obtenerlo Forma parte de la información de dirección del punto de origen de la primera parada de Freight Order. Ejemplos DEUSCNMX | |||
| Sistema de origen SourceSystem | Sistema del que proceden los datos del evento. | ||
| Descripción Este atributo identifica el sistema de origen que generó los datos, por ejemplo, SAP TM, SAP ERP o un portal externo de transportistas. Aporta contexto sobre el origen de los datos y ayuda a comprender los puntos de integración. En un panorama de sistemas complejo, conocer el sistema de origen es fundamental para validar los datos, resolver problemas de integración y entender cómo contribuye cada sistema al proceso general. Por ejemplo, permite distinguir entre un evento notificado por un sistema interno y otro comunicado por un proveedor logístico externo. Por qué es importante Identifica el origen de los datos, algo fundamental para la gobernanza de datos, la resolución de problemas y la comprensión de la orquestación de procesos entre varios sistemas. Dónde obtenerlo Esta información suele almacenarse en el registro del sistema o puede deducirse de la interfaz o del usuario que creó la entrada de datos. Ejemplos SAP_TM_P01SAP_ERP_E01CARRIER_PORTAL_XYZ | |||
| Última actualización de datos LastDataUpdate | Marca de tiempo de la extracción o actualización más reciente de los datos del conjunto de datos de Process Mining. | ||
| Descripción Este atributo indica qué tan actualizados están los datos analizados. Refleja la fecha y hora en que se obtuvieron por última vez de los sistemas de origen, como SAP TM, y se cargaron en la herramienta de Process Mining. Es un metadato fundamental para cualquier Dashboard o análisis, ya que permite saber qué tan recientes son las conclusiones. Ayuda a distinguir entre información en tiempo real y una instantánea de un periodo anterior, algo esencial para tomar decisiones oportunas y bien fundamentadas. Por qué es importante Aporta contexto fundamental sobre la actualidad de los datos y permite saber qué tan recientes son los análisis. Dónde obtenerlo Por lo general, la herramienta ETL (extracción, transformación y carga) o la canalización de datos genera y almacena esta información durante la ingesta de datos. Ejemplos 2023-10-27T08:00:00Z2023-10-26T08:00:00Z | |||
Actividades de gestión del transporte
| Actividad | Descripción | ||
|---|---|---|---|
| Comprobante de entrega recibido | Esta actividad se produce cuando el transportista envía el comprobante de entrega (POD) firmado y este se registra en el sistema. El documento confirma que el destinatario ha aceptado las mercancías. | ||
| Por qué es importante Recibir el POD es un requisito fundamental para facturar al cliente y liquidar los cargos de transporte con el transportista. Los retrasos en esta etapa afectan directamente al ciclo de conversión de efectivo. Dónde obtenerlo Este evento suele deducirse de un cambio de estado en la orden de transporte, por ejemplo, cuando el estado del POD pasa a «Recibido». La marca de tiempo de ese cambio indica cuándo se realizó la actividad. Capturar Registre la marca de tiempo en que el estado del comprobante de entrega de la orden de transporte cambia a «Recibido». Tipo de evento inferred | |||
| Envío cancelado | Esta actividad representa la cancelación de un envío después de haberlo solicitado o planificado. Marca el final de los procesos que no llegan a ejecutarse. | ||
| Por qué es importante Hacer un seguimiento de las cancelaciones ayuda a identificar las causas de los fallos del proceso, como cambios en la demanda del cliente o errores de planificación. Una tasa elevada de cancelaciones puede indicar problemas subyacentes en la gestión de pedidos o la planificación. Dónde obtenerlo Este evento se deduce cuando el estado del ciclo de vida de la orden de expedición o de la orden de transporte cambia a «Cancelado». La marca de tiempo de ese cambio indica cuándo se produjo el evento. Capturar Registre la marca de tiempo en que el estado del ciclo de vida del documento cambia a «Cancelado». Tipo de evento inferred | |||
| Envío planificado | Esta actividad indica que las necesidades de transporte se han consolidado en un plan de envío concreto. Se registra al crear y guardar una orden de transporte (para carretera o ferrocarril) o una reserva de transporte (para transporte marítimo o aéreo) con la ruta y los recursos previstos. | ||
| Por qué es importante Completar este hito es esencial para iniciar la ejecución logística. El tiempo de ciclo desde la solicitud hasta esta actividad es un KPI clave para medir la eficiencia de la planificación. Dónde obtenerlo Este evento corresponde a la creación de una orden de transporte o una reserva de transporte. También puede deducirse de un cambio de estado del documento, por ejemplo, cuando el estado de planificación pasa a «Planificado». Las tablas pertinentes suelen incluir /SCMTMS/D_TORROT para los datos de cabecera. Capturar Utilice la marca de tiempo de creación de la orden de transporte o de la reserva de transporte. Tipo de evento explicit | |||
| Liquidación de transporte creada | Esta actividad marca la creación del documento de liquidación de transporte (FSD), que calcula los costes de transporte que se pagarán al transportista. Es el documento principal para las provisiones y la verificación de facturas. | ||
| Por qué es importante Con esta actividad comienza la fase de liquidación financiera del proceso de transporte. Analizar el tiempo transcurrido desde la entrega hasta la creación de la liquidación ayuda a detectar cuellos de botella en el procesamiento financiero. Dónde obtenerlo Este evento explícito se registra al crear un documento de liquidación de transporte. La marca de tiempo de creación está disponible en la tabla de cabecera del documento, /SCMTMS/D_SFIRHD. Capturar Utilice la fecha y hora de creación del documento de liquidación de transporte. Tipo de evento explicit | |||
| Mercancías entregadas | Esta actividad representa la llegada del envío a su destino final y la finalización del transporte físico. Se registra cuando el transportista informa que las mercancías se han descargado en las instalaciones del destinatario. | ||
| Por qué es importante Este es el hito más importante para medir el rendimiento de las entregas a tiempo y la satisfacción del cliente. También suele activar los procesos de facturación y liquidación. Dónde obtenerlo Se registra en SAP TM como un evento de ejecución de «Llegada al destino» o «Fin de descarga» y actualiza el estado de ejecución de la orden de transporte. A menudo, los datos los proporciona el transportista. Capturar Utilice la marca de tiempo del evento de ejecución «Llegada al destino» notificado para la última parada de la orden de transporte. Tipo de evento explicit | |||
| Mercancías recogidas | Esta actividad marca el inicio del transporte físico de las mercancías. Se registra cuando el transportista informa que las mercancías se han cargado y han salido de las instalaciones del remitente. | ||
| Por qué es importante Este es un hito clave de ejecución que marca el inicio del trayecto. Es fundamental para hacer un seguimiento de las entregas a tiempo y ofrecer información precisa sobre los envíos. Dónde obtenerlo Este evento suele registrarse en SAP Event Management, integrado con SAP TM, como un evento de «Salida» o «Fin de carga». Actualiza el estado de ejecución de la orden de transporte. También puede registrarse directamente en la orden de transporte. Capturar Utilice la marca de tiempo del evento de ejecución «Salida» notificado para el lugar de origen de la orden de transporte. Tipo de evento explicit | |||
| Pago procesado | Esta actividad final confirma que se ha pagado al transportista por los servicios de transporte. Suele producirse en el sistema ERP conectado, después de que SAP TM reciba la factura verificada. | ||
| Por qué es importante Este evento marca el verdadero final del ciclo de vida del transporte de principio a fin. Es esencial para medir la duración total del proceso y los KPI de puntualidad de los pagos. Dónde obtenerlo Esta información se encuentra en el sistema ERP, por ejemplo, en S/4HANA Finance. Puede vincularse al documento de liquidación de transporte mediante el número de factura. Es posible que se envíe una actualización de estado a SAP TM; de lo contrario, los datos deben obtenerse de tablas del ERP como BKPF y BSEG. Capturar Obtenga del sistema ERP la fecha de compensación del pago y vincúlela al envío mediante la referencia de la factura. Tipo de evento explicit | |||
| Solicitud de transporte recibida | Esta actividad marca el inicio del proceso de transporte y representa la creación de una necesidad de transporte. En SAP TM, suele registrarse al crear una orden de expedición (FWO) o una necesidad de transporte basada en una orden (OTR). | ||
| Por qué es importante Este es el evento de inicio principal del proceso de envío de principio a fin. Analizar el tiempo transcurrido desde esta actividad hasta que se completa la planificación es fundamental para medir su eficiencia. Dónde obtenerlo Este evento se registra al crear una orden de expedición (tipo de documento FWO) u otro documento de necesidad de transporte. La marca de tiempo de creación en la tabla de cabecera, como /SCMTMS/D_TORROT, sirve como hora del evento. Capturar Registre la fecha y hora de creación de la orden de expedición o del documento de necesidad de transporte. Tipo de evento explicit | |||
| Transportista asignado | Esta actividad indica que se ha seleccionado y asignado al envío un proveedor de servicios de transporte específico, es decir, un transportista. La asignación puede ser manual, realizarse mediante planificación automatizada o formar parte de un proceso de licitación. | ||
| Por qué es importante Asignar un transportista es un paso fundamental antes de confirmar y ejecutar un envío. Hacer un seguimiento de esta actividad ayuda a analizar el proceso de selección de transportistas y a garantizar que las reservas se realicen a tiempo. Dónde obtenerlo Se registra cuando se completa el campo del transportista (parte con la función «Transportista») en la orden de transporte o la reserva de transporte. En una licitación, corresponde al momento en que se adjudica la solicitud de cotización de transporte. Capturar Identifique la marca de tiempo en que se completa o confirma por primera vez la función de interlocutor del transportista en la orden de transporte. Tipo de evento inferred | |||
| Declaración aduanera presentada | En los envíos internacionales, esta actividad representa la presentación a las autoridades de la documentación aduanera requerida. Es un requisito previo para obtener la autorización de exportación o importación de las mercancías. | ||
| Por qué es importante Presentar las declaraciones aduaneras a tiempo es fundamental para evitar retrasos en las fronteras. El seguimiento de esta actividad ayuda a evaluar la eficiencia del proceso de gestión aduanera. Dónde obtenerlo Este evento puede registrarse como un evento de ejecución específico notificado por un agente de aduanas o deducirse de un cambio de estado en un sistema integrado de gestión aduanera, como SAP GTS. La orden de transporte se actualiza en consecuencia. Capturar Registre la marca de tiempo del evento de ejecución «Declaración aduanera presentada» o del cambio de estado correspondiente. Tipo de evento explicit | |||
| Despacho de aduanas completado | Esta actividad indica que las autoridades aduaneras han aprobado el envío y que puede continuar su trayecto. Es un hito importante para la logística internacional, ya que elimina un posible cuello de botella. | ||
| Por qué es importante El despacho de aduanas suele ser una fuente importante de retrasos en las cadenas de suministro globales. Hacer un seguimiento de la duración y la tasa de éxito de esta actividad es clave para reducir los tiempos de tránsito internacional. Dónde obtenerlo Se registra como un evento de ejecución de «Despacho de aduanas», que suele notificar un agente de aduanas o un proveedor externo de visibilidad y que se actualiza en el seguimiento de ejecución de la orden de transporte. Capturar Utilice la marca de tiempo del evento de ejecución de «Despacho de aduanas» notificado y asociado a la orden de transporte. Tipo de evento explicit | |||
| Disputa de transporte creada | Este evento indica que se ha detectado una discrepancia entre la factura del transportista y los costes calculados en el documento de liquidación de transporte. Esto inicia un flujo de trabajo para resolver la disputa. | ||
| Por qué es importante Las disputas retrasan los pagos a los transportistas y requieren trabajo administrativo para resolverse. Hacer un seguimiento de esta actividad ayuda a identificar las causas raíz de los errores de facturación, como tarifas incorrectas o cargos adicionales. Dónde obtenerlo Este evento puede deducirse de un cambio de estado en el documento de liquidación de transporte, cuando se establece el estado «Disputa». También puede implicar la creación de un documento independiente para el caso de disputa. Capturar Registre la marca de tiempo en que se establece el estado de disputa en el documento de liquidación de transporte. Tipo de evento inferred | |||
| Envío confirmado por el transportista | Este evento representa la aceptación del transportista para realizar el transporte según lo previsto. La confirmación suele recibirse mediante un mensaje EDI, una actualización en el portal del transportista o una entrada manual que actualiza el estado de la orden de transporte. | ||
| Por qué es importante La confirmación del transportista supone un compromiso con el plan de envío y reduce la incertidumbre. Si tarda en llegar, todo el calendario del envío puede quedar en riesgo. Dónde obtenerlo Este evento se deduce de un cambio en el campo de estado de confirmación de la orden de transporte o de la reserva de transporte. En la gestión de estados del documento se establece un valor específico, como «Confirmado». Capturar Haga un seguimiento de los cambios en los campos de estado de confirmación de la orden de transporte. Tipo de evento inferred | |||
| Factura verificada | Esta actividad indica que la factura del transportista se ha cotejado correctamente con el documento de liquidación de transporte y se ha aprobado para el pago. Es el último paso antes de iniciar el proceso de pago en el sistema ERP. | ||
| Por qué es importante Esta actividad completa la auditoría y verificación de los costes de transporte. Los retrasos en esta etapa pueden demorar los pagos a los transportistas y perjudicar la relación con ellos. Dónde obtenerlo Este evento se deduce de un cambio de estado en el documento de liquidación de transporte, como «Listo para provisión» o «Transferido para contabilización», que indica que se ha enviado al sistema ERP para el pago. Capturar Haga un seguimiento de la marca de tiempo en que el estado del ciclo de vida del FSD cambia para indicar que está listo para el pago o que se ha contabilizado. Tipo de evento inferred | |||
| Ruta del envío modificada | Esta actividad indica un cambio no planificado en la ruta o el calendario del envío después de su confirmación. Puede deberse a interrupciones, solicitudes de clientes o problemas logísticos. | ||
| Por qué es importante Los cambios de ruta suelen aumentar los costes y provocar retrasos. Identificar con qué frecuencia se producen y por qué ayuda a mejorar la precisión de la planificación y la estabilidad operativa. Dónde obtenerlo Este evento se deduce al detectar cambios importantes en las etapas, ubicaciones o fechas de una orden de transporte una vez iniciada su ejecución. Para ello, pueden analizarse los documentos de modificación (tablas CDHDR y CDPOS). Capturar Detecte los cambios en los campos clave de ruta de la orden de transporte posteriores al evento «Envío confirmado por el transportista». Tipo de evento inferred | |||
Guías de extracción
Pasos
- Identifique y active las API de las vistas CDS: Inicie sesión en su sistema SAP S/4HANA. Use la transacción
/IWFND/MAINT_SERVICEpara comprobar que los servicios OData necesarios para las vistas CDS principales estén activos. Compruebe, en particular, los servicios relacionados con I_TransportationOrder, C_TranspOrdExecutionEvent, I_ForwardingOrder e I_FreightSettlementDocument. Si no están activos, solicite al administrador de SAP que los agregue y active desde el sistema backend. - Configure la conexión con la API: Solicite al administrador de SAP la URL raíz de los servicios OData. Configure una aplicación cliente para conectarse a la API, como un script de Python que use la biblioteca requests, una herramienta ETL comercial o Postman. Deberá configurar la autenticación, normalmente mediante autenticación básica (nombre de usuario y contraseña) u OAuth 2.0 para una conexión más segura.
- Defina el alcance de la extracción: Determine qué datos extraer. Defina un intervalo de fechas específico, por ejemplo, los últimos 6 meses. Identifique las unidades organizativas pertinentes para aplicar filtros, como el código de sociedad, o tipos de documento concretos, como el tipo de orden de flete. Así se asegurará de que los datos sean relevantes para el proceso que analiza.
- Prepare la consulta principal de envíos: Empiece consultando la vista CDS I_TransportationOrder. Esta vista es el objeto central de los envíos, también denominados órdenes de flete o reservas de flete. Use el parámetro OData
$selectpara elegir las columnas necesarias, incluidos los atributos recomendados, como CarrierName, ModeOfTransport y RequestedDeliveryDate. Aplique un$filterpara limitar los datos por fecha y otros parámetros del alcance. - Consulte los eventos de ejecución y transporte: Use la vista CDS C_TranspOrdExecutionEvent para extraer eventos logísticos clave. Filtre esta vista por valores específicos de
EventCodeque correspondan a actividades como «Mercancía recogida» (DEPARTURE) y «Mercancía entregada» (ARRIVAL_AT_DESTINATION). Vincule estos datos con los datos principales del envío mediante TransportationOrder UUID. - Consulte los objetos de negocio relacionados: Para capturar el proceso completo, consulte otras vistas CDS relacionadas. Consulte I_ForwardingOrder para la actividad «Solicitud de transporte recibida» e I_FreightSettlementDocument para actividades financieras como «Liquidación de flete creada», «Disputa de flete creada» y «Factura verificada».
- Extraiga actividades basadas en estados: Muchas actividades no son eventos independientes, sino cambios de estado en el documento principal. Para actividades como «Transportista asignado», «Envío confirmado por el transportista» y «Envío cancelado», consulte la vista I_TransportationOrder y use
LastChangeDateTime, asociado al campo de estado correspondiente, como hora del evento. Para ello, deberá relacionar cuidadosamente los códigos de estado con las actividades de negocio. - Combine y transforme los datos: Consolide los datos extraídos de todas las fuentes en una única estructura de registro de eventos. Para cada actividad extraída, cree una fila con las columnas necesarias: ShipmentId, ActivityName y EventTime. Asegúrese de que todas las filas de un envío incluyan los atributos recomendados de la consulta principal. Este paso equivale conceptualmente a una operación SQL
UNION ALL. - Gestione eventos complejos y externos: Los datos de actividades como «Despacho de aduanas completado» o «Pago procesado» pueden encontrarse en campos específicos o incluso en sistemas externos. La lógica de consulta proporcionada usa campos estándar como aproximación. Es posible que deba ajustar la consulta para vincularla con vistas CDS específicas de aduanas o relacionarla con una extracción independiente del ERP para obtener los datos de pago a partir del número del documento de liquidación de flete.
- Prepare los datos para ProcessMind: Guarde el conjunto de datos consolidado final en un archivo CSV. Asegúrese de que los encabezados de columna cumplan los requisitos de carga; por ejemplo, asigne la columna
ShipmentIdal campoCaseIden la configuración de la herramienta. Compruebe que las marcas de tiempo tengan un formato uniforme, preferiblemente UTC (YYYY-MM-DDTHH:MM:SSZ).
Configuración
- Vistas CDS principales: La extracción se basa principalmente en I_TransportationOrder (para órdenes de flete), C_TranspOrdExecutionEvent (para eventos de ejecución), I_ForwardingOrder (para solicitudes de transporte) e I_FreightSettlementDocument (para liquidaciones).
- Filtro por intervalo de fechas: Es fundamental aplicar un filtro de fecha para controlar el volumen de datos. Use
CreationDateTimeen I_TransportationOrder oActualBusinessDateTimeen C_TranspOrdExecutionEvent. Para el análisis inicial, se recomienda un intervalo de 3 a 6 meses. - Filtro por tipo de documento: Para centrar el análisis, filtre por tipos de documento específicos mediante el campo
TransportationOrderType. Esto permite separar distintos escenarios logísticos, como los envíos estándar de salida y los traslados de existencias. - Filtros organizativos: Si corresponde, filtre por
PurchasingOrganizationu otros campos organizativos para limitar los datos a una unidad de negocio o región específica. - Paginación de la API: Para conjuntos de datos grandes, use los parámetros OData
$topy$skippara recuperar los datos en páginas más pequeñas. Así evitará que se agote el tiempo de espera de la API y reducirá el consumo de memoria en el cliente. A menudo resulta eficaz usar páginas de entre 1.000 y 5.000 filas. - Requisitos previos: La persona usuaria o la cuenta de servicio que realice la extracción necesita autorización para acceder a los servicios OData subyacentes (objeto de autorización S_SERVICE) y a los datos de negocio de las vistas CDS. Los servicios correspondientes deben estar activados en SAP Gateway (
/IWFND/MAINT_SERVICE).
Consulta de ejemplo 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' Pasos
- Confirme que dispone de acceso de lectura directa al esquema SAP TM HANA mediante un cliente SQL aprobado, una vista de base de datos o un servicio de extracción. Solicite la cadena de conexión, las credenciales, el nombre del esquema y las autorizaciones necesarias para leer las tablas pertinentes de SAP TM. No consulte directamente el entorno de producción sin las aprobaciones de seguridad y gestión de cambios correspondientes.
- Confirme los nombres físicos de las tablas y columnas de su sistema. La consulta siguiente usa /SCMTMS/D_TORROT y /SCMTMS/D_TOSTOP como tablas principales, pero los datos de estado, interlocutores, fechas, costes, aduanas, documentos y pagos pueden almacenarse en tablas adicionales o extensiones, según la versión y la implementación de SAP TM. Sustituya únicamente los marcadores documentados, después de validarlos con el catálogo del sistema y el modelo de datos.
- Defina el período de extracción con [Start timestamp] y [End timestamp]. Para el análisis inicial, suele ser adecuado un período móvil de tres a seis meses. Use un período más amplio solo después de confirmar el rendimiento de la consulta y el tiempo de conservación del historial de eventos.
- Identifique la clave del caso de envío. La consulta usa TOR_ID de /SCMTMS/D_TORROT como identificador del envío. Si su implementación usa otro identificador estable, sustituya la clave del caso de forma coherente en todas las ramas de actividad y conserve el identificador original del documento como atributo de auditoría adicional, si está disponible.
- Asigne cada actividad de negocio a una condición explícita de origen. ProcessMind lee el registro de eventos tal como está, por lo que la consulta crea una fila por cada actividad extraída. No deduce hitos a partir del orden de los documentos, de marcas de tiempo ausentes ni de la progresión de estados.
- Valide las asignaciones de estados y marcas de tiempo con el personal de planificación del transporte y las personas responsables de los procesos de negocio. En particular, confirme los valores que representan la creación de solicitudes, la planificación, la asignación del transportista, la confirmación del transportista, la recogida, la presentación de documentos aduaneros, el despacho de aduanas, el cambio de ruta, la entrega, la recepción del comprobante de entrega (POD), la liquidación de flete, las disputas, la verificación de facturas, la cancelación y el pago.
- Ejecute la consulta en el cliente SQL aprobado. Revise que haya una fila por evento, que ShipmentId y ActivityName no sean nulos y que EventTime sea válido. Compruebe si hay filas duplicadas causadas por uniones de uno a varios y, si es necesario, ajuste las asignaciones de origen o la lógica de agregación.
- Enriquezca el resultado con los atributos recomendados cuando estén disponibles los campos de origen correspondientes. La consulta incluye marcadores de posición descriptivos para los campos cuyos nombres no se pueden determinar de forma segura sin metadatos específicos del sistema. Sustituya esos marcadores solo por columnas verificadas o vistas aprobadas.
- Aplique las reglas finales de calidad de datos. Elimine las filas sin identificador de caso o marca de tiempo del evento, normalice las marcas de tiempo a una sola zona horaria, conserve las marcas de tiempo de origen para fines de auditoría y asegúrese de que EndTime no sea anterior a EventTime. No cree eventos sintéticos para registros de origen ausentes.
- Exporte el resultado como CSV UTF-8 u otro formato tabular compatible con ProcessMind. Use exactamente los nombres de columna requeridos: ShipmentId, ActivityName y EventTime. Incluya EndTime y los atributos recomendados cuando tengan valores. Cargue el archivo o conecte a ProcessMind el resultado de la consulta aprobada y, después, compruebe que los campos del identificador del caso de envío y del nombre de la actividad estén asignados correctamente.
Configuración
- Tablas de origen principales: Use /SCMTMS/D_TORROT para los datos raíz de las órdenes de transporte o de flete y /SCMTMS/D_TOSTOP para los datos de paradas e hitos. Valide todos los objetos de origen adicionales en el sistema SAP TM de destino antes de la implementación.
- Identificador del caso: Use un identificador estable del envío o de la orden de flete. La consulta de ejemplo usa TOR_ID como ShipmentId. Confirme que este identificador se mantenga estable durante la planificación, la ejecución, la liquidación y los registros de pagos del ERP.
- Asignación de actividades: Configure condiciones de origen explícitas para las 15 actividades requeridas. Cada actividad debe generar una fila de evento en el registro. ProcessMind no deduce actividades a partir de otras filas.
- Intervalo de fechas: Empiece con un historial de tres a seis meses. Aplique cuanto antes los predicados de EventTime en cada rama de origen. Para las cargas incrementales, use un punto de control controlado y añada un breve período de solapamiento para capturar actualizaciones tardías.
- Filtros de negocio: Configure los filtros de código de sociedad, organización de compras, organización de ventas, tipo de documento, modo de transporte, transportista, planta, ubicación y estado según la implementación. Use marcadores como [Company code filter] cuando no se haya verificado el campo correspondiente.
- Gestión de marcas de tiempo: Convierta las marcas de tiempo de origen a una zona horaria uniforme. Si una fuente almacena la fecha y la hora en campos separados, combínelas con la conversión específica del sistema que admita la versión de HANA. Conserve la marca de tiempo original de origen cuando sea necesario para la auditoría.
- Atributos recomendados: Complete CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost e IsOnTimeDelivery con campos de origen verificados o vistas de cálculo aprobadas. Deje los valores nulos cuando la fuente no contenga un valor fiable.
- Rendimiento: Limite el período, seleccione solo las columnas necesarias, aplique filtros antes de las uniones, evite los análisis completos de tablas sin restricciones y revise el plan de ejecución de HANA. Para conjuntos de datos grandes, use predicados que tengan en cuenta las particiones, extracción incremental, tablas de preparación o una vista de cálculo aprobada.
- Control de duplicados: Las uniones de uno a varios pueden generar varias filas para una actividad. Use una clave de evento verificada, una clave de documento de origen o una regla de agregación determinista. No aplique una deduplicación arbitraria que pueda eliminar eventos repetidos legítimos.
- Requisitos previos: Se necesitan las autorizaciones de base de datos, acceso a los datos de SAP TM y a los datos de cualquier ERP o sistema de liquidación conectado, herramientas de extracción aprobadas y confirmación de que los módulos, las integraciones y las mejoras personalizadas pertinentes de SAP TM estén activos.
- Asignaciones específicas del sistema: Los códigos de estado, los roles de interlocutor, los hitos aduaneros y los estados de liquidación, facturas y pagos varían según la versión y la configuración. Mantenga las asignaciones en un documento de configuración controlado y pruébelas después de cada actualización.
Consulta de ejemplo 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; Pasos
- Defina los requisitos de datos: Antes de empezar, confirme la lógica exacta de cada una de las 15 actividades requeridas y de todos los atributos. Para ello, asigne cada actividad a cambios de estado, eventos de creación o vínculos entre documentos específicos de su sistema SAP TM. Por ejemplo, determine el estado de ejecución exacto que indica «Mercancía recogida».
- Acceda al entorno de desarrollo ABAP: Inicie sesión en SAP GUI y abra el editor ABAP con el código de transacción
SE38. Introduzca un nombre para el nuevo programa, por ejemplo,ZTM_PROCESS_EXTRACT, y seleccione «Crear». Indique un título y establezca el tipo de programa como «Programa ejecutable». - Cree la pantalla de selección: Defina en el programa la pantalla de selección que verán las personas usuarias. Debe incluir parámetros para filtrar los datos, como un intervalo de fechas para la fecha de creación de la orden de flete (
SO_CREDT), y opciones de selección para los tipos de documento (SO_TYPE) o los transportistas (SO_CARR). - Defina la estructura de salida: Defina una estructura de tabla interna que coincida con el formato requerido del registro de eventos. Debe incluir los campos
ShipmentId,ActivityName,EventTime,EndTime,CarrierName,RequestedDeliveryDate,ModeOfTransport,TotalFreightCosteIsOnTimeDelivery. - Implemente la lógica de selección de datos: Escriba la lógica ABAP principal para seleccionar los datos de cada una de las 15 actividades. Normalmente, esto implica consultar varias tablas de SAP TM. Empiece por seleccionar los documentos principales del envío, como las órdenes de flete, dentro del intervalo de fechas especificado.
- Extraiga los eventos de planificación y ejecución: Para cada documento de envío seleccionado, por ejemplo, una orden de flete, consulte las tablas y los objetos de negocio relacionados para encontrar las marcas de tiempo de los distintos eventos. Use la tabla
/SCMTMS/D_TORROTpara obtener la creación de la orden de flete («Envío planificado»), la asignación del transportista («Transportista asignado») y los cambios de estado de ejecución correspondientes a «Mercancía recogida» y «Mercancía entregada». La creación de la orden de expedición anterior (/SCMTMS/D_TRQROT) puede indicar la actividad «Solicitud de transporte recibida». - Extraiga la confirmación del transportista y los cambios de ruta: Consulte las tablas de estado o los documentos de modificación (CDHDR/CDPOS) asociados a la orden de flete para identificar cuándo se estableció el estado
CONFIRMATION, que registra «Envío confirmado por el transportista». Del mismo modo, busque cambios importantes en la información de ruta para registrar «Envío con cambio de ruta». - Extraiga los eventos aduaneros: Si usa SAP Global Trade Services (GTS) o un módulo similar, los eventos aduaneros («Declaración aduanera presentada» y «Despacho de aduanas completado») suelen registrarse en documentos vinculados. La lógica debe leer el flujo de documentos (
/SCMTMS/D_TORDOC) de la orden de flete para encontrar esos documentos relacionados y las horas de creación o de cambio de estado. - Extraiga los eventos de liquidación y disputa: Consulte la tabla de cabecera del documento de liquidación de flete (
/SCMTMS/D_SFIRHD) y sus partidas y estados relacionados para registrar los eventos «Liquidación de flete creada», «Disputa de flete creada» y «Factura verificada». Vincúlelos con elShipmentIdoriginal. - Consolide los datos: Cree un registro nuevo en la tabla interna final por cada evento encontrado. Complete
ActivityNamecon la actividad correspondiente,EventTimecon la marca de tiempo del evento yShipmentIdcon el ID de la orden o reserva de flete. Complete los demás atributos con los datos de los documentos de origen. - Dé formato al archivo y expórtelo: Cuando haya completado la tabla interna final, dé formato a los datos como archivo plano. Use los comandos
OPEN DATASET,LOOP AT... TRANSFER...yCLOSE DATASETpara escribir el contenido de la tabla interna en un archivo CSV o TXT del servidor de aplicaciones SAP, al que se puede acceder mediante la transacción AL11. - Programe la ejecución y recupere el archivo: Puede programar el programa ABAP como un trabajo en segundo plano (transacción SM36) para extraer los datos automáticamente. Después, descargue el archivo generado del servidor de aplicaciones a un equipo local mediante la transacción
CG3Yy cárguelo en ProcessMind.
Configuración
- Intervalo de fechas: La pantalla de selección debe incluir un intervalo de fechas obligatorio para la fecha de creación del documento de transporte principal, por ejemplo, la orden de flete. Para el análisis inicial, se recomienda un intervalo de 3 a 6 meses que proporcione un conjunto de datos representativo sin prolongar demasiado la ejecución.
- Filtro por tipo de documento: Incluya un filtro para el tipo de documento de transporte, por ejemplo, orden o reserva de flete. Es fundamental para centrar el análisis en procesos específicos, como el transporte por carretera o marítimo.
- Filtro por transportista: Permita filtrar por transportistas específicos. Esto facilita el análisis del rendimiento de cada socio logístico.
- Filtros organizativos: Incluya filtros para las unidades organizativas pertinentes, como la organización de compras o el código de sociedad, para limitar la extracción a áreas de negocio específicas.
- Optimización del rendimiento: Para conjuntos de datos grandes, asegúrese de que el código ABAP use campos indexados de la base de datos en las cláusulas
WHERE, evite los bucles anidados siempre que sea posible y seleccione solo los campos necesarios para reducir al mínimo el consumo de memoria. - Requisitos previos: La persona que ejecute el informe necesita autorización para ejecutar programas ABAP. Quien desarrolle el programa necesita la autorización
S_DEVELOP. El programa requiere autorizaciones para acceder al sistema de archivos del servidor de aplicaciones (objetoS_DATASET) y a las tablas de la base de datos de TM y los objetos BOPF pertinentes.
Consulta de ejemplo 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. ¿Listo para comenzar?
Use esta plantilla para iniciar el camino hacia procesos de transporte optimizados y entregas más rápidas y económicas. ¡Empiece hoy mismo a descubrir oportunidades de mejora!
Elimine hoy los cuellos de botella de Transportation Management
Detecte ineficiencias, optimice rutas y reduzca el tiempo de ciclo en un 30 %.
No se requiere tarjeta de crédito. Configuración en minutos.