Su Template de datos para la gestión del inventario
Su Template de datos para la gestión del inventario
- Atributos recomendados para recopilar
- Actividades clave que debe seguir para descubrir el proceso
- Guía de extracción adaptada a SAP S/4HANA
Atributos de la gestión de inventario
| Nombre | Descripción | ||
|---|---|---|---|
| Hora del evento EventTime | La fecha y hora exactas en que la actividad de inventario se registró en el sistema. | ||
| Descripción La hora del evento es la marca de tiempo que registra exactamente cuándo ocurrió una actividad. Este dato es esencial para ordenar cronológicamente los eventos y reconstruir el flujo del proceso de cada lote de inventario. Constituye la base de todos los análisis de Process Mining basados en el tiempo. La precisión de la hora del evento es fundamental para calcular indicadores clave de rendimiento, como tiempos de ciclo, plazos y duraciones. Permite analizar el rendimiento del proceso en distintos periodos, ayuda a identificar cuándo se producen cuellos de botella y proporciona una base objetiva para comprender los retrasos, como el tiempo que un lote permanece en inspección de calidad antes de ser liberado. Por qué es importante Esta marca de tiempo ordena cronológicamente los eventos y constituye la base de todos los cálculos de duración y rendimiento. Dónde obtenerlo Normalmente es una combinación de la fecha de contabilización (MKPF-BUDAT) y la hora de entrada (MKPF-CPUTM) de la tabla de cabecera de documentos de material MKPF. Ejemplos 2023-10-26T09:00:00Z2023-11-15T14:35:10Z2024-01-05T23:15:00Z | |||
| Lote de inventario InventoryBatchLot | El identificador único de una cantidad específica de un producto, que sirve como ID de caso para realizar el seguimiento de su ciclo de vida. | ||
| Descripción El número de lote de inventario es el identificador principal del caso que agrupa todas las actividades relacionadas con una cantidad específica y diferenciada de un producto. Esto permite obtener una visión cronológica completa del recorrido de una cantidad de existencias, desde su recepción inicial en el almacén, pasando por diversos movimientos internos y cambios de estado, hasta su salida para una venta, producción o eliminación. En el análisis de procesos, este atributo es fundamental. Permite rastrear el flujo de extremo a extremo de cada lote, medir los tiempos de ciclo con precisión, identificar variaciones del proceso y comprender cómo se gestiona cada lote. Analizar los procesos a nivel de lote es esencial en sectores donde la trazabilidad, el control de calidad y la gestión de las fechas de caducidad son críticos, como el farmacéutico, el de alimentos y bebidas y el químico. Por qué es importante Es el identificador central que conecta todos los eventos de inventario relacionados en un único caso y hace posible el análisis del proceso de extremo a extremo. Dónde obtenerlo Normalmente es el número de lote, que se encuentra en tablas de SAP como MCHA (Batch Master) o MCH1 (Batches), en el campo CHARG. Ejemplos B001-A452023L202405-XYZ789456123BATCH-05-24 | |||
| Actividad ActivityName | El nombre del evento empresarial que ocurrió en un momento concreto del proceso de gestión de inventario. | ||
| Descripción El atributo Actividad describe un único paso o evento dentro del ciclo de vida del inventario de un lote. Estos eventos representan acciones empresariales clave, como recibir mercancías, mover existencias, realizar una inspección de calidad o entregar materiales. Cada actividad registra algo que ocurrió con el lote de inventario en un momento concreto. El análisis de actividades es la base del Process Mining. Permite visualizar el flujo del proceso, identificar rutas frecuentes y poco habituales, detectar cuellos de botella donde las actividades se retrasan y analizar bucles de retrabajo. Al comprender la secuencia y frecuencia de actividades como «Stock Scrapped» o «Quality Inspection», las empresas pueden localizar áreas de mejora del proceso y aumentar la eficiencia operativa. Por qué es importante Define los pasos del proceso y permite visualizar y analizar el ciclo de vida del inventario. Dónde obtenerlo Es un atributo derivado que normalmente se asigna a partir de SAP Movement Types (MSEG-BWART) o Transaction Codes (MKPF-TCODE2) para obtener nombres fáciles de usar. Ejemplos Entrada de mercancías registradaTransferencia de almacenamiento contabilizadaSalida de mercancías para entrega contabilizadaExistencias desechadas | |||
| Cantidad Quantity | La cantidad de material implicada en el movimiento de inventario. | ||
| Descripción Este atributo representa la cantidad de material que se movió, recibió, expidió o ajustó en una actividad determinada. Se registra en la unidad base de medida del material. Analizar la cantidad es fundamental para comprender la escala y el impacto de los procesos de inventario. Permite crear Dashboards que visualizan el volumen de mercancías gestionadas, como «Rendimiento de salidas de mercancías por SKU». También se utiliza para calcular KPI como el «Índice de mercancías desechadas o eliminadas», aportando una dimensión cuantitativa al análisis del proceso que va más allá del simple recuento de eventos. Por qué es importante Cuantifica el volumen de material de cada actividad y permite analizar el rendimiento, el volumen de desechos y el impacto de los ajustes. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, en el campo MENGE (Quantity). Ejemplos 10012.55000-10 | |||
| Centro Plant | La unidad organizativa que representa una instalación donde se encuentra el inventario, como una fábrica o un centro de distribución. | ||
| Descripción Un centro es una unidad organizativa central en SAP que puede representar una planta de producción, una ubicación de almacenamiento central o una sede corporativa. Todo el inventario se encuentra física o lógicamente dentro de un centro. Analizar por centro es fundamental para comparar el rendimiento del proceso entre distintas ubicaciones físicas. Ayuda a responder preguntas como «¿Qué centro tiene el tiempo de ciclo de almacenamiento más largo?» o «¿La tasa de discrepancias de inventario es mayor en el centro A que en el centro B?». Esta segmentación geográfica u organizativa es clave para identificar problemas específicos de cada ubicación y compartir buenas prácticas en toda la organización. Por qué es importante Permite comparar los procesos y el rendimiento del inventario entre distintas ubicaciones de la empresa. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, en el campo WERKS (Plant). Ejemplos 10001710DE01US01 | |||
| Código de motivo del movimiento MovementReasonCode | Un código que especifica el motivo de un movimiento de inventario. | ||
| Descripción El código de motivo del movimiento proporciona contexto adicional sobre la razón por la que se realizó un movimiento de mercancías. A menudo se utiliza para explicar movimientos no planificados, como ajustes de inventario, devoluciones o desechos. Este atributo es muy valioso para el análisis de causas raíz. En el panel «Manual Inventory Adjustment Drivers», analizar por código de motivo puede revelar por qué se producen las discrepancias, por ejemplo, debido a daños, robos o errores de introducción de datos. Esta información ayuda a las empresas a abordar los problemas subyacentes en lugar de limitarse a corregir los síntomas. Por qué es importante Explica el motivo de los movimientos de inventario no planificados y permite realizar un análisis específico de las causas raíz. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, en el campo GRUND (Reason for Movement). Ejemplos 00010005102 | |||
| Nombre de usuario UserName | El ID de usuario de la persona que ejecutó la transacción en SAP. | ||
| Descripción Este atributo captura el ID de usuario de SAP de la persona que contabilizó el documento o ejecutó la actividad. Proporciona trazabilidad al mostrar quién es responsable de acciones concretas dentro del proceso de gestión de inventario. Analizar por usuario es esencial para comprender el rendimiento, el cumplimiento y las necesidades de formación. Por ejemplo, el panel «Manual Inventory Adjustment Drivers» utiliza este atributo para identificar quién realiza más ajustes. Puede ayudar a detectar usuarios que necesitan formación adicional, poner de manifiesto actividades no autorizadas o reconocer a quienes obtienen mejores resultados. Por qué es importante Proporciona responsabilidad y ayuda a identificar comportamientos específicos de cada usuario, necesidades de formación o problemas de cumplimiento. Dónde obtenerlo Se encuentra en la tabla de cabecera de documentos de material MKPF, en el campo USNAM (User Name). Ejemplos JSMITHMBROWNWAREHOUSE_OPS | |||
| Número de material MaterialNumber | El identificador único del producto o material gestionado. | ||
| Descripción El número de material, a menudo denominado SKU (Stock Keeping Unit), es el código único asignado a un producto específico. Es un elemento fundamental de los datos maestros de gestión de inventario y se utiliza para realizar el seguimiento de las cantidades, los valores y los movimientos de las mercancías. En Process Mining, analizar por número de material permite obtener una visión del inventario centrada en el producto. Ayuda a responder preguntas como qué productos tienen los tiempos de inspección de calidad más largos, cuáles se desechan con mayor frecuencia o cuáles presentan el mayor volumen de transferencias internas. Esta segmentación es esencial para identificar problemas específicos de cada producto y optimizar las estrategias de inventario para distintos tipos de mercancías. Por qué es importante Permite segmentar el análisis por producto y revelar patrones y problemas específicos de determinados artículos. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, en el campo MATNR. Los datos maestros están en la tabla MARA. Ejemplos RM-1001FG-2050-B100-400-A | |||
| Tipo de movimiento MovementType | Una clave de tres dígitos en SAP que controla cómo se contabiliza un movimiento de mercancías. | ||
| Descripción El Movement Type es una clave de control fundamental en SAP Inventory Management que determina las características de un movimiento de material. Especifica qué cuentas se actualizan, cómo aparece el diseño de pantalla de la transacción y qué campos de cantidad o valor se actualizan. Por ejemplo, «101» corresponde a una entrada de mercancías, «311» a una transferencia y «551» a un desecho. Este atributo suele ser la fuente para derivar el nombre de Actividad, más fácil de usar. Analizar los procesos por Movement Type permite obtener una visión técnica detallada del flujo del inventario. Es esencial para validar la precisión del mapa de procesos e identificar tipos concretos de transacciones que pueden estar provocando cuellos de botella o desviaciones. Por qué es importante Proporciona una clasificación técnica precisa de cada evento de inventario, fundamental para derivar actividades y realizar análisis detallados. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, en el campo BWART (Movement Type). Ejemplos 101311261551601 | |||
| Ubicación de almacenamiento StorageLocation | Una ubicación específica dentro de un centro donde se almacenan físicamente las existencias. | ||
| Descripción Una ubicación de almacenamiento es una unidad organizativa que permite diferenciar las existencias de materiales dentro de un centro. Por ejemplo, un centro puede tener ubicaciones separadas para materias primas, productos terminados y existencias en inspección de calidad. Este atributo proporciona un nivel de detalle de ubicación más preciso que el centro. Se utiliza para analizar los movimientos entre distintas áreas de existencias, como el plazo de las transferencias desde el área de recepción hasta el almacén principal. Analizar el uso del espacio y la frecuencia de los movimientos por ubicación ayuda a optimizar la distribución del almacén y la logística interna. Por qué es importante Proporciona una visión detallada de la ubicación de las existencias dentro de un centro y ayuda a analizar los movimientos internos y la eficiencia del almacenamiento. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, en el campo LGORT (Storage Location). Ejemplos 0001RM01FG01QI01 | |||
| Bin de almacenamiento StorageBin | La unidad de almacenamiento más detallada de un almacén, donde se encuentran físicamente los materiales. | ||
| Descripción Un bin de almacenamiento representa una coordenada específica del almacén, como la ubicación de una estantería. Este nivel de detalle suele utilizarse cuando se implementa SAP Warehouse Management (WM) o Extended Warehouse Management (EWM). En el panel «Warehouse Storage Utilization», este atributo es fundamental. Permite analizar la eficacia con la que se utiliza el espacio del almacén, identificar posibles puntos de congestión y detectar rutas ineficientes de almacenamiento o picking. Analizar los movimientos entre bins de almacenamiento ayuda a optimizar la distribución del almacén y reducir el tiempo de desplazamiento del personal. Por qué es importante Proporciona los datos de ubicación más detallados y permite analizar el uso del espacio del almacén y la eficiencia operativa. Dónde obtenerlo Si se utiliza WM, puede encontrarse en tablas de Transfer Order como LTAK/LTAP. En los documentos de inventario, podría estar en MSEG-LGPBE. Consulte la documentación de SAP S/4HANA. Ejemplos A-01-01-AB-05-10-CRCV-AREA-01 | |||
| Fecha de caducidad ExpirationDate | La fecha en la que caduca el lote de material y deja de ser utilizable. | ||
| Descripción La fecha de caducidad de la vida útil (SLED) es un dato maestro fundamental para mercancías perecederas o sensibles al tiempo. Se gestiona a nivel de lote y determina cuándo un producto deja de poder venderse o consumirse. Este atributo es esencial para el panel «Obsolete & Expired Stock Analysis». Al analizar las actividades en relación con la fecha de caducidad, las empresas pueden identificar lotes en riesgo de caducar y tomar medidas preventivas. También ayuda a medir la eficacia de las políticas de rotación de inventario, como First-Expired-First-Out (FEFO), y a cuantificar las pérdidas derivadas de existencias caducadas desechadas. Por qué es importante Permite analizar las existencias obsoletas y caducadas, lo que ayuda a minimizar los residuos y las pérdidas financieras. Dónde obtenerlo Se encuentra en la tabla maestra de lotes MCH1 o MCHA, en el campo VFDAT (Shelf Life Expiration Date). Ejemplos 2024-12-312025-06-302024-09-01 | |||
| Número de documento de material MaterialDocumentNumber | El número único que identifica el documento de material donde se registra el movimiento de mercancías. | ||
| Descripción Cuando se contabiliza un movimiento de mercancías en SAP, el sistema genera un documento de material como comprobante del movimiento. Este atributo es el identificador único de dicho documento. Un solo documento de material puede contener varias posiciones o actividades. En Process Mining, el número de documento de material es un identificador transaccional clave que puede utilizarse para agrupar eventos contabilizados conjuntamente. También es esencial para las auditorías y para acceder desde el análisis del proceso al sistema de origen con el fin de investigar transacciones concretas. Por qué es importante Sirve como clave transaccional para las auditorías y permite agrupar actividades ejecutadas conjuntamente. Dónde obtenerlo Se encuentra en las tablas MKPF (cabecera) y MSEG (posición), en el campo MBLNR (Number of Material Document). Ejemplos 490000123450000056784900002345 | |||
| Sistema de origen SourceSystem | Identifica el sistema de origen del que se extrajeron los datos. | ||
| Descripción Este atributo especifica el sistema de registro donde se originaron los datos de gestión de inventario. En este contexto, sería la instancia específica de SAP S/4HANA. Esta información es fundamental en entornos donde los datos pueden proceder de varios ERP, sistemas de gestión de almacenes o plataformas heredadas. Aunque pueda parecer estático en un análisis de un solo sistema, resulta esencial al combinar datos de distintas fuentes para crear una visión integral del proceso. Ayuda en la gobernanza de datos, la resolución de problemas de extracción y la trazabilidad clara de los datos. Por qué es importante Proporciona contexto sobre el origen de los datos, algo esencial para la gobernanza de datos y el análisis de varios sistemas. Dónde obtenerlo Normalmente es un valor codificado durante el proceso de transformación de datos para identificar la instancia específica de SAP S/4HANA. Ejemplos S4H_PROD_100SAP_S4_FINANCES4HANA_GLOBAL | |||
| Tiempo de ciclo de preparación del pedido OrderFulfillmentCycleTime | La duración de extremo a extremo desde el inicio del picking hasta la salida de mercancías para la entrega. | ||
| Descripción Es una métrica calculada que mide el tiempo total transcurrido entre la actividad «Picking Initiated» y la actividad «Goods Issue for Delivery Posted». Representa el tiempo total que necesita el almacén para preparar y enviar un pedido de cliente una vez iniciado el proceso. Este atributo mide directamente el KPI «Order Fulfillment Cycle Time». Analizar esta duración ayuda a las empresas a comprender su capacidad de respuesta ante la demanda de los clientes. Puede desglosarse por producto, almacén o cliente para identificar dónde se producen retrasos en el proceso de picking, embalaje y envío, con un impacto directo en la satisfacción del cliente y la eficiencia logística. Por qué es importante Mide la velocidad y eficiencia del proceso de salida del almacén, un factor clave para la satisfacción del cliente. Dónde obtenerlo Este es un atributo calculado, obtenido al calcular la diferencia de tiempo entre los eventos «Picking Initiated» y «Goods Issue for Delivery Posted» para cada lote. Ejemplos 7200144003600 | |||
| Tipo de existencias StockType | Indica el estado del inventario, por ejemplo, sin restricciones, en inspección de calidad o bloqueado. | ||
| Descripción El tipo de existencias clasifica el inventario según su disponibilidad de uso. Los tipos principales son existencias sin restricciones (disponibles libremente), existencias en inspección de calidad (a la espera de controles de calidad) y existencias bloqueadas (no disponibles para su uso). Los movimientos de mercancías suelen implicar un cambio de tipo de existencias. El seguimiento de los cambios en el tipo de existencias es fundamental para comprender el proceso de disponibilidad del inventario. Es compatible directamente con actividades como «Stock Posted to Quality Inspection» y «Stock Status Changed to Blocked». Analizar el tiempo que las existencias permanecen en cada tipo, especialmente en «inspección de calidad», es clave para identificar retrasos que afectan a la disponibilidad de las mercancías para la venta o la producción. Por qué es importante Realiza el seguimiento del estado de disponibilidad del inventario, algo fundamental para analizar los retrasos en la inspección de calidad y la disponibilidad de existencias. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, en el campo INSMK (Stock Type). Ejemplos Uso sin restriccionesInspección de calidadInventario bloqueado | |||
| Última actualización de datos LastDataUpdate | La marca de tiempo que indica cuándo se actualizaron por última vez los datos de este registro desde el sistema de origen. | ||
| Descripción Este atributo registra la fecha y hora de la extracción o actualización más reciente de datos desde el sistema de origen. Proporciona metadatos esenciales sobre la actualidad de la información analizada. Ayuda a comprender si se están consultando datos casi en tiempo real o una instantánea de un periodo anterior. En cualquier análisis, conocer la actualidad de los datos es fundamental para obtener conclusiones pertinentes y precisas. Este campo permite a analistas y usuarios de negocio confirmar que los datos están actualizados y suele mostrarse en Dashboards para contextualizar la información presentada. Por qué es importante Informa sobre la actualidad de los datos y garantiza que los análisis se basen en información actualizada. Dónde obtenerlo Esta marca de tiempo se genera y añade durante el proceso de extracción, transformación y carga (ETL) de datos. Ejemplos 2024-05-21T08:00:00Z2024-05-20T08:00:00Z | |||
| Unidad de medida UnitOfMeasure | La unidad en la que se mide la cantidad de material, por ejemplo, unidades o kilogramos. | ||
| Descripción La unidad de medida especifica la unidad del atributo «Cantidad». Algunos ejemplos habituales son unidades (PC), kilogramos (KG), litros (L) o cajas (BOX). Proporciona el contexto necesario para interpretar el campo de cantidad. Aunque a menudo se utiliza como un descriptor sencillo, este atributo es importante para garantizar la calidad de los datos y realizar análisis en los que sea necesario convertir distintas unidades a un estándar común. Por ejemplo, para calcular con precisión el valor total del inventario desechado, es necesario comprender y, posiblemente, convertir las cantidades expresadas en distintas unidades. Por qué es importante Proporciona el contexto necesario para el atributo «Cantidad» y garantiza una interpretación precisa de los volúmenes de material. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, en el campo MEINS (Base Unit of Measure). Ejemplos PCKGEAM | |||
Actividades de gestión de inventario
| Actividad | Descripción | ||
|---|---|---|---|
| Ajuste de inventario contabilizado | Registra un cambio en la cantidad de existencias como resultado de un recuento físico u otra discrepancia. Este evento ajusta explícitamente el inventario contable para que coincida con el recuento físico. | ||
| Por qué es importante Estos ajustes son fundamentales para mantener la exactitud del inventario. Una alta frecuencia de ajustes indica problemas subyacentes en la manipulación de existencias, la seguridad o la introducción de datos. Dónde obtenerlo Se registra en la tabla MATDOC. Se identifica mediante Movement Types (BWART) de inventario físico, como 701 (ganancia de inventario) o 702 (pérdida de inventario). Recopilar Se captura a partir de documentos de material en MATDOC con tipos de movimiento de ajuste de inventario físico, por ejemplo, 701 y 702. Tipo de evento explicit | |||
| Entrada de mercancías registrada | Marca la entrada inicial de un lote de inventario en el almacén, normalmente procedente de un proveedor o de la producción. Este evento se captura explícitamente en SAP S/4HANA, ya que al recibir las mercancías se crea un documento de material. | ||
| Por qué es importante Este es el evento de inicio principal del ciclo de vida del inventario. Analizar el tiempo transcurrido desde esta actividad hasta otras, como el almacenamiento, es fundamental para medir la eficiencia del muelle de recepción. Dónde obtenerlo Se registra en la tabla MATDOC. Se identifica mediante tipos de movimiento específicos (BWART), como 101 para entradas de pedidos de compra o 103 para entradas de mercancías en stock bloqueado. Recopilar Se captura a partir de documentos de material en MATDOC con los tipos de movimiento correspondientes a la entrada de mercancías. Tipo de evento explicit | |||
| Existencias desechadas | Marca la disposición final de un lote de inventario y lo elimina permanentemente de los registros de inventario. Normalmente ocurre con existencias caducadas, dañadas u obsoletas. | ||
| Por qué es importante Es un evento final que representa una pérdida financiera. Analizar los eventos de desecho ayuda a identificar problemas relacionados con el envejecimiento del inventario, los procedimientos de manipulación o la previsión de la demanda. Dónde obtenerlo Se registra en la tabla MATDOC. Se identifica mediante Movement Types (BWART) de desecho, como 551 (desde sin restricciones), 553 (desde inspección de calidad) o 555 (desde bloqueado). Recopilar Se captura a partir de documentos de material en MATDOC con tipos de movimiento de desecho, por ejemplo, 551. Tipo de evento explicit | |||
| Salida de mercancías para entrega contabilizada | Registra el paso final del proceso de salida, en el que la propiedad del lote se transfiere a un cliente o transportista. Es una transacción explícita que reduce el inventario y se contabiliza en la contabilidad. | ||
| Por qué es importante Es un evento clave de finalización del proceso de preparación de pedidos. Resulta esencial para medir las entregas a tiempo y calcular el tiempo total del ciclo de preparación del pedido. Dónde obtenerlo Se registra en la tabla MATDOC. Se identifica mediante el Movement Type (BWART) correspondiente a la salida de mercancías para una entrega de pedido de ventas, normalmente el 601. Recopilar Se captura a partir de documentos de material en MATDOC con el Movement Type 601. Tipo de evento explicit | |||
| Salida de mercancías para producción contabilizada | Representa el consumo de un lote de inventario por parte de una orden de producción o de proceso. Esta transacción reduce el inventario y asigna el coste del material a la orden de fabricación. | ||
| Por qué es importante Es un evento principal de consumo que marca el final del ciclo de vida del inventario de los componentes. Resulta fundamental para analizar la disponibilidad de materiales para producción y los patrones de consumo. Dónde obtenerlo Se registra en la tabla MATDOC. Se identifica mediante Movement Types (BWART) de salida de mercancías para una orden, como el 261. Recopilar Se captura a partir de documentos de material en MATDOC con el Movement Type 261. Tipo de evento explicit | |||
| Stock de inspección de calidad liberado | Indica que un lote ha superado la inspección de calidad y ya está disponible para su uso o almacenamiento. Se registra como una contabilización de transferencia explícita desde el stock de calidad a otro tipo de stock, como el de uso libre. | ||
| Por qué es importante Este hito marca la finalización del proceso de calidad y hace que el inventario esté disponible. Los retrasos en este punto pueden causar problemas importantes en las operaciones posteriores de producción o cumplimiento de pedidos. Dónde obtenerlo Se registra en la tabla MATDOC como una contabilización de transferencia. Normalmente se identifica mediante el tipo de movimiento (BWART) 321, que traslada el stock de 'Quality Inspection' a 'Unrestricted-use'. Recopilar Se captura a partir de documentos de material en MATDOC con el tipo de movimiento 321. Tipo de evento explicit | |||
| Transferencia de almacenamiento contabilizada | Representa el movimiento físico del lote desde un área de recepción o preparación hasta su ubicación o bin de almacenamiento final. Se registra como un documento de material de transferencia en SAP. | ||
| Por qué es importante Completa el proceso de recepción de entrada. El tiempo necesario para completar esta actividad, conocido como tiempo de almacenamiento, es un KPI fundamental para la eficiencia del almacén. Dónde obtenerlo Se registra en la tabla MATDOC como una transferencia, a menudo entre ubicaciones de almacenamiento, por ejemplo, con el Movement Type 311. El movimiento específico puede variar según la estructura del almacén. Recopilar Se identifica mediante documentos de transferencia en MATDOC que mueven existencias desde una ubicación de almacenamiento provisional o de recepción hasta una ubicación de almacenamiento final. Tipo de evento explicit | |||
| Devolución de ventas recibida | Registra la devolución al almacén, por parte de un cliente, de un lote que se había entregado anteriormente. Es una transacción explícita que aumenta el inventario. | ||
| Por qué es importante El seguimiento de las devoluciones es esencial para comprender los problemas de calidad del producto y la insatisfacción de los clientes. El proceso de gestión y disposición de las devoluciones también puede ser una fuente de ineficiencias. Dónde obtenerlo Se registra en la tabla MATDOC. Se identifica mediante Movement Types (BWART) de devoluciones de ventas, como 651 (a sin restricciones) o 653 (a inspección de calidad). Recopilar Se captura a partir de documentos de material en MATDOC con tipos de movimiento de devoluciones de ventas, por ejemplo, 651 y 653. Tipo de evento explicit | |||
| Estado de las existencias cambiado a bloqueado | Representa un cambio en el estado del lote que lo deja no disponible para su salida, normalmente debido a daños, solicitudes de retención u otros motivos. En SAP, se trata de una transferencia explícita. | ||
| Por qué es importante Pone de manifiesto interrupciones en la disponibilidad del inventario. Una alta frecuencia de eventos de bloqueo puede indicar problemas de manipulación, condiciones de almacenamiento o calidad del proveedor. Dónde obtenerlo Se registra en la tabla MATDOC como una transferencia. Normalmente utiliza el Movement Type (BWART) 344 para mover existencias de «Blocked» a «Unrestricted», y el 343 para moverlas de «Unrestricted» a «Blocked». Esta actividad corresponde al 343. Recopilar Se identifica mediante documentos de material en MATDOC con el Movement Type 343. Tipo de evento explicit | |||
| Estado de las existencias cambiado a sin restricciones | Representa un cambio en el estado del lote que lo libera de un bloqueo o una retención de calidad y lo deja disponible para su uso. Se registra como una transferencia explícita. | ||
| Por qué es importante Esta actividad marca la resolución de una retención de inventario. El tiempo que las existencias permanecen bloqueadas puede analizarse para mejorar los procesos de resolución. Dónde obtenerlo Se registra en la tabla MATDOC como una transferencia. El Movement Type (BWART) 344 mueve las existencias de «Blocked» a «Unrestricted-use». Recopilar Se identifica mediante documentos de material en MATDOC con el Movement Type 344. Tipo de evento explicit | |||
| Estado del lote cambiado | Refleja un cambio en el registro maestro del lote, como pasar su estado de «Unrestricted» a «Restricted». No es un movimiento de material, sino un cambio en los datos maestros que queda registrado. | ||
| Por qué es importante Los cambios en el estado del lote afectan directamente a su uso en ventas o producción. Analizarlos puede revelar problemas relacionados con existencias próximas a caducar o con el control de calidad que no implican un movimiento físico. Dónde obtenerlo Se infiere a partir de los registros de cambios de las tablas maestras de lotes (MCH1, MCHA). Las tablas CDHDR y CDPOS registran los cambios en el campo de estado del lote (MCH1-ZUSTD). Recopilar Se deriva de los documentos de cambio de CDHDR/CDPOS correspondientes al campo de estado del registro maestro del lote (MCH1-ZUSTD). Tipo de evento inferred | |||
| Picking iniciado | Marca el inicio del proceso de preparación de pedidos, cuando se crea una tarea de almacén para recoger un lote de su bin de almacenamiento. Normalmente se captura cuando se crea una Transfer Order o una Warehouse Task. | ||
| Por qué es importante Esta actividad activa el proceso de picking. Analizar el tiempo transcurrido entre este evento y la finalización del picking ayuda a medir la eficiencia del personal del almacén e identificar retrasos. Dónde obtenerlo Normalmente no se encuentra en MATDOC. En sistemas con Warehouse Management (WM/EWM), se infiere a partir de la marca de tiempo de creación de una Transfer Order (tabla LTAK) o de una Warehouse Task. Recopilar Se infiere a partir del registro de creación de una Transfer Order en WM o de una Warehouse Task en EWM vinculada al lote de material. Tipo de evento inferred | |||
| Stock contabilizado para inspección de calidad | Representa el traslado de un lote recibido a un estado de retención para inspección de calidad, lo que lo deja no disponible para su uso hasta que se libere. Se trata de una transacción explícita en SAP que cambia el tipo de stock del lote. | ||
| Por qué es importante Esta actividad inicia el proceso de inspección de calidad. La duración entre este evento y la liberación del stock de inspección de calidad es un indicador clave para comprender los retrasos relacionados con la calidad. Dónde obtenerlo Se registra en la tabla MATDOC. Puede tratarse de un movimiento de entrada de mercancías, por ejemplo, 101, con el tipo de stock (INSMK) establecido en 'Q' (inspección de calidad), o de una contabilización de transferencia, por ejemplo, 322. Recopilar Se identifica mediante documentos de material en MATDOC que colocan el inventario en el tipo de stock 'Quality Inspection'. Tipo de evento explicit | |||
| Transferencia interna de existencias contabilizada | Registra el movimiento de un lote de inventario entre distintas ubicaciones o bins de almacenamiento dentro del mismo centro. Es una transacción explícita que crea un documento de material. | ||
| Por qué es importante El seguimiento de las transferencias internas ayuda a analizar la eficiencia operativa del almacén, identificar movimientos innecesarios y medir el plazo de reposición de existencias entre ubicaciones. Dónde obtenerlo Se registra en la tabla MATDOC. Normalmente se identifica mediante el Movement Type (BWART) 311 para transferencias entre ubicaciones de almacenamiento. Recopilar Se captura a partir de documentos de material en MATDOC con tipos de movimiento para movimientos internos de existencias, por ejemplo, 311. Tipo de evento explicit | |||
Guías de extracción
Pasos
- Establezca el acceso al sistema: Asegúrese de disponer de un usuario con las autorizaciones necesarias para consultar las vistas Core Data Services (CDS) del sistema SAP S/4HANA. Normalmente, un administrador del sistema debe conceder este acceso.
- Elija un cliente SQL: Seleccione una herramienta de cliente SQL que pueda conectarse a la base de datos SAP HANA. Algunas opciones habituales son SAP HANA Studio, SAP HANA Database Explorer o herramientas de terceros como DBeaver.
- Configure la conexión a la base de datos: Cree una nueva conexión de base de datos en su cliente SQL. Necesitará el nombre de host de la base de datos HANA, el número de puerto, normalmente 3<instance_number>15, y las credenciales del usuario de la base de datos.
- Prepare la consulta SQL: Copie la consulta SQL completa proporcionada en la sección «query» de este documento y péguela en el editor de su cliente SQL.
- Defina los parámetros de la consulta: Localice los valores de marcador de posición dentro de la consulta. Debe sustituir
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'por el intervalo de fechas que desee, por ejemplo,BETWEEN '20230101' AND '20230630'. Actualice también los filtros específicos de la empresa o del centro, comoMaterialDocumentItem.Plant IN ('Plant1', 'Plant2'), para adaptarlos a la estructura de su organización. - Ejecute la consulta: Ejecute la consulta SQL modificada en la base de datos S/4HANA. El tiempo de ejecución variará según el intervalo de fechas y el volumen de datos de inventario del sistema.
- Revise los datos: Cuando finalice la consulta, revise los resultados en su cliente SQL para comprobar que sean correctos y completos. Verifique que aparezcan distintas actividades y que los atributos clave estén cumplimentados.
- Exporte el Registro de eventos: Exporte todo el conjunto de resultados desde su cliente SQL a un archivo CSV. Asegúrese de utilizar la codificación UTF-8 para evitar problemas con los caracteres.
- Prepare la carga: Asigne a las columnas exactamente los mismos nombres que aparecen como alias en la consulta, por ejemplo,
InventoryBatchLot,ActivityName,EventTime, etc. El archivo ya está listo para cargarse en una herramienta de Process Mining.
Configuración
- Autorizaciones: El usuario que ejecute la consulta necesita permisos
SELECTen las siguientes vistas CDS:I_MaterialDocumentItem,I_BatchChangeDocumenteI_WarehouseTask. También se requiere acceso al esquema de base de datos subyacente donde residen estas vistas. - Filtrado por intervalo de fechas: Es fundamental aplicar un filtro de intervalo de fechas a los campos
PostingDate,ChangeDocumentCreationDateoWarehouseTaskCreationDate. Un intervalo habitual para el análisis es de 3 a 12 meses. Consultar varios años puede provocar problemas importantes de rendimiento. - Filtros organizativos: Para mejorar el rendimiento y orientar el análisis, añada cláusulas
WHEREpara filtrar porPlantoCompanyCode. Esto reduce el volumen de datos y centra la extracción en las áreas relevantes del negocio. - Volumen de datos: Tenga en cuenta que los sistemas de gestión del inventario generan un gran volumen de datos. Un intervalo amplio puede producir millones de filas y afectar tanto al sistema de origen durante la extracción como al rendimiento de su herramienta cliente.
- Extended Warehouse Management (EWM): La actividad «Picking Initiated» depende de la vista CDS
I_WarehouseTask, que solo se completa si utiliza SAP Extended Warehouse Management. Si su organización utiliza el módulo anterior Warehouse Management (WM) o únicamente Inventory Management (IM), esta actividad específica no se extraerá.
a Consulta de ejemplo sql
SELECT
mat_doc.Batch AS "InventoryBatchLot",
CASE
WHEN mat_doc.MovementType = '101' AND mat_doc.InventoryStockType = '2' THEN 'Stock Posted to Quality Inspection'
WHEN mat_doc.MovementType = '101' THEN 'Goods Receipt Posted'
WHEN mat_doc.MovementType = '321' THEN 'Quality Inspection Stock Released'
WHEN mat_doc.MovementType = '311' THEN 'Internal Stock Transfer Posted'
WHEN mat_doc.MovementType = '344' THEN 'Stock Status Changed to Blocked'
WHEN mat_doc.MovementType IN ('343', '322') THEN 'Stock Status Changed to Unrestricted'
WHEN mat_doc.MovementType IN ('701', '702') THEN 'Inventory Adjustment Posted'
WHEN mat_doc.MovementType = '601' THEN 'Goods Issue for Delivery Posted'
WHEN mat_doc.MovementType = '261' THEN 'Goods Issue for Production Posted'
WHEN mat_doc.MovementType IN ('651', '653') THEN 'Sales Return Received'
WHEN mat_doc.MovementType = '551' THEN 'Stock Scrapped'
WHEN mat_doc.MovementType = '313' THEN 'Put-Away Transfer Posted' -- Example for two-step transfers
ELSE 'Unknown Material Movement'
END AS "ActivityName",
TO_TIMESTAMP(mat_doc.PostingDate || LPAD(mat_doc.CreationTime, 6, '0'), 'YYYYMMDDHH24MISS') AS "EventTime",
mat_doc.Material AS "MaterialNumber",
mat_doc.CreatedByUser AS "UserName",
mat_doc.MovementType AS "MovementType",
mat_doc.Plant AS "Plant",
mat_doc.StorageLocation AS "StorageLocation",
mat_doc.QuantityInEntryUnit AS "Quantity",
mat_doc.ReasonForMovement AS "MovementReasonCode"
FROM
I_MaterialDocumentItem AS mat_doc
WHERE
mat_doc.Batch IS NOT NULL AND mat_doc.Batch <> ''
AND mat_doc.PostingDate BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
-- AND mat_doc.Plant IN ('Plant1', 'Plant2') -- Placeholder: Add filters for relevant plants
UNION ALL
SELECT
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 3) AS "InventoryBatchLot",
'Batch Status Changed' AS "ActivityName",
change_doc.ChangeDocumentCreationDateTime AS "EventTime",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 1) AS "MaterialNumber",
change_doc.ChangedByUser AS "UserName",
NULL AS "MovementType",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 2) AS "Plant",
NULL AS "StorageLocation",
NULL AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_BatchChangeDocument AS change_doc
WHERE
change_doc.ChangeDocumentTable = 'MCHA' AND change_doc.ChangeDocumentTableFieldName = 'ZUSTD'
AND TO_VARCHAR(change_doc.ChangeDocumentCreationDate) BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
UNION ALL
SELECT
wh_task.Batch AS "InventoryBatchLot",
'Picking Initiated' AS "ActivityName",
wh_task.WarehouseTaskCreationDateTime AS "EventTime",
wh_task.Product AS "MaterialNumber",
wh_task.CreatedByUser AS "UserName",
NULL AS "MovementType",
wh_task.Plant AS "Plant",
wh_task.SourceStorageLocation AS "StorageLocation",
wh_task.TargetQuantity AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_WarehouseTask AS wh_task
WHERE
wh_task.Batch IS NOT NULL AND wh_task.Batch <> ''
AND wh_task.WarehouseProcessType IN ('P210', 'P220') -- Placeholder: Adjust process types based on your picking configuration
AND TO_VARCHAR(wh_task.WarehouseTaskCreationDate) BETWEEN '20230101' AND '20231231'; -- Placeholder: Set your date range Pasos
- Confirme que el acceso directo mediante SQL a SAP HANA está aprobado y que el usuario de extracción tiene acceso de lectura a MATDOC y a las tablas maestras de lotes necesarias para el sistema. Confirme el propietario del esquema físico y sustituya [Your SAP HANA schema] por el nombre de esquema aprobado.
- Confirme los campos disponibles de MATDOC y de las tablas de lotes en la versión de SAP S/4HANA de destino. La consulta siguiente utiliza campos habituales de MATDOC y campos de MCHA, pero la disponibilidad y los nombres pueden variar según la versión, la implementación y el alcance activado. Sustituya cualquier campo marcado como [Configure based on your system] antes de ejecutar la consulta.
- Defina el periodo de extracción sustituyendo [Start timestamp] y [End timestamp] por valores de marca de tiempo ISO. Utilice un periodo de tres a seis meses para la extracción inicial y amplíelo después de validar el volumen y el rendimiento.
- Ejecute la consulta en un cliente SQL aprobado, SAP HANA Database Explorer o una herramienta de base de datos autorizada equivalente. Limite el resultado a los códigos de empresa, centros, tipos de documento o tipos de movimiento necesarios sustituyendo los marcadores de filtro correspondientes.
- Revise la asignación de tipos de movimiento en la actividad CTE. Los tipos de movimiento dependen de la configuración del sistema y del negocio. Sustituya las listas de ejemplo por los tipos de movimiento configurados en el sistema de destino para entrada de mercancías, inspección de calidad, liberación, ubicación, transferencia interna, existencias bloqueadas, existencias de libre utilización, ajuste de inventario, preparación, salida para entrega, salida para producción, devolución de ventas y desguace.
- Valide que cada fila de salida contenga InventoryBatchLot, ActivityName y EventTime. Confirme que el identificador del lote sea suficientemente estable para utilizarlo como identificador de caso de ProcessMind. Si el caso de negocio requiere distinguir valores de lote idénticos entre unidades organizativas, utilice el identificador de caso compuesto configurado en lugar del valor del lote por sí solo.
- Valide el orden de los eventos, las filas duplicadas, los documentos de reversión, los documentos cancelados y la gestión de zonas horarias. MATDOC registra las contabilizaciones de documentos, por lo que los registros de reversión y cancelación pueden aparecer como eventos independientes salvo que se excluyan o asignen explícitamente.
- Exporte el resultado de la consulta como un archivo plano con una fila por evento y las columnas InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity y MovementReasonCode. Mantenga las marcas de tiempo en un formato ISO 8601 coherente y conserve los ceros iniciales de los valores de material, lote, centro y ubicación de almacenamiento.
- Cargue el Registro de eventos resultante en ProcessMind y asigne InventoryBatchLot como identificador de caso, ActivityName como actividad y EventTime como marca de tiempo del evento. No dependa de ProcessMind para inferir actividades, combinar registros o derivar eventos ausentes.
Configuración
- Método de extracción: consulta SQL directa sobre los datos de inventario y lotes de SAP HANA. La consulta lee MATDOC y combina los datos maestros de lotes de MCHA. Añada MCH1 u otra tabla de lotes solo después de confirmar los campos relevantes y el nivel de lote del sistema de destino.
- Intervalo de fechas: comience con tres a seis meses. Utilice EventTime basándose en la fecha y hora de contabilización del documento de material disponibles en MATDOC. Para cargas incrementales, utilice una ventana de solapamiento controlada que permita capturar contabilizaciones tardías y elimine después los duplicados mediante los identificadores de documento y posición configurados.
- Filtros obligatorios: configure el código de empresa, el centro, el tipo de documento de material, el tipo de movimiento, la presencia del lote y la fecha de contabilización según el alcance del proceso. Los campos de código de empresa y tipo de documento deben confirmarse para la versión instalada antes de añadirlos a la consulta.
- Asignación de actividades: el significado de los tipos de movimiento depende de la configuración. Mantenga una tabla de asignación aprobada o sustituya las listas de tipos de movimiento de la consulta por los valores utilizados por el negocio. No trate las listas de ejemplo como una semántica universal de SAP.
- Alcance de los lotes: la consulta excluye las filas sin valor de lote porque el identificador de caso es InventoryBatchLot. Si necesita derivar el lote de otra fuente, configure explícitamente esa fuente antes de la extracción.
- Granularidad de los eventos: cada posición de MATDOC que cumpla los criterios se genera como una fila de evento. La consulta no infiere la preparación, las decisiones de calidad, los cambios de estado del lote ni otras actividades a partir de registros posteriores.
- Cambios en los datos maestros de lotes: los cambios de estado de los lotes no se representan de forma fiable únicamente en MATDOC. Configure una fuente de documentos de modificación o de historial de lotes para la actividad Batch Status Changed. La consulta incluye una rama de marcador de posición que debe conectarse a una fuente verificada antes de ejecutarse.
- Preparación: el inicio de la preparación suele pertenecer a los datos de ejecución del almacén y no a una contabilización de MATDOC. Configure una fuente verificada de tareas de almacén u órdenes de traslado y sustituya la rama de marcador de posición antes de ejecutar la consulta.
- Rendimiento: filtre por marca de tiempo o fecha de contabilización, centro, código de empresa y tipos de movimiento relevantes. Seleccione solo las columnas necesarias, evite los análisis históricos sin restricciones y ejecute la extracción durante una ventana de carga aprobada. Para grandes volúmenes de MATDOC, se recomienda una extracción particionada o incremental.
- Autorizaciones y requisitos previos: obtenga la conectividad de base de datos aprobada, acceso al esquema, autorización de lectura, acceso a los datos de inventario de SAP S/4HANA y acceso a cualquier fuente de ejecución del almacén o historial de modificaciones utilizada para las dos actividades que no proceden de MATDOC. Confirme que el acceso directo a la base de datos cumple el modelo operativo y la política de soporte de SAP de su organización.
- Zonas horarias: confirme las zonas horarias de la base de datos y de la aplicación. Convierta EventTime de forma coherente antes de cargarlo en ProcessMind.
- Protección de datos: aplique los controles de su organización para los ID de usuario, los datos de materiales, los datos relacionados con clientes y las credenciales de la base de datos. No incluya credenciales en el texto de la consulta.
a Consulta de ejemplo sql
WITH
params AS (
SELECT
TO_TIMESTAMP('[Start timestamp]') AS start_ts,
TO_TIMESTAMP('[End timestamp]') AS end_ts
FROM DUMMY
),
movement_map AS (
SELECT '101' AS movement_type, 'Goods Receipt Posted' AS activity_name FROM DUMMY
UNION ALL SELECT '105', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '107', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '109', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '321', 'Stock Posted to Quality Inspection' FROM DUMMY
UNION ALL SELECT '322', 'Quality Inspection Stock Released' FROM DUMMY
UNION ALL SELECT '343', 'Stock Status Changed to Unrestricted' FROM DUMMY
UNION ALL SELECT '344', 'Stock Status Changed to Blocked' FROM DUMMY
UNION ALL SELECT '311', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '301', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '311', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '701', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '702', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '703', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '704', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '705', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '706', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '601', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '602', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '261', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '262', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '651', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '653', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '654', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '551', 'Stock Scrapped' FROM DUMMY
UNION ALL SELECT '552', 'Stock Scrapped' FROM DUMMY
),
matdoc_events AS (
SELECT
m.MATNR AS MaterialNumber,
m.CHARG AS InventoryBatchLot,
COALESCE(m.BUDAT_MKPF, m.BUDAT) AS EventTime,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(m.BWART AS NVARCHAR(3)) AS MovementType,
m.WERKS AS Plant,
m.LGORT AS StorageLocation,
m.MENGE AS Quantity,
m.GRUND AS MovementReasonCode,
mm.activity_name AS ActivityName,
m.MBLNR AS MaterialDocumentNumber,
m.MJAHR AS MaterialDocumentYear,
m.ZEILE AS MaterialDocumentItem
FROM [Your SAP HANA schema].MATDOC m
INNER JOIN movement_map mm
ON CAST(m.BWART AS NVARCHAR(3)) = mm.movement_type
CROSS JOIN params p
WHERE m.CHARG IS NOT NULL
AND TRIM(m.CHARG) <> ''
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) >= p.start_ts
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) < p.end_ts
AND m.WERKS IN ([Configure based on your system])
),
batch_enriched_events AS (
SELECT
e.InventoryBatchLot,
e.ActivityName,
e.EventTime,
e.MaterialNumber,
e.UserName,
e.MovementType,
e.Plant,
e.StorageLocation,
e.Quantity,
e.MovementReasonCode,
e.MaterialDocumentNumber,
e.MaterialDocumentYear,
e.MaterialDocumentItem,
c.CUOBJ_BM AS BatchObjectNumber
FROM matdoc_events e
LEFT JOIN [Your SAP HANA schema].MCHA c
ON c.MATNR = e.MaterialNumber
AND c.CHARG = e.InventoryBatchLot
AND c.WERKS = e.Plant
),
verified_batch_status_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Batch Status Changed' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
verified_picking_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
all_events AS (
SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM batch_enriched_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_batch_status_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_picking_events
)
SELECT
InventoryBatchLot,
ActivityName,
EventTime,
MaterialNumber,
UserName,
MovementType,
Plant,
StorageLocation,
Quantity,
MovementReasonCode
FROM all_events
WHERE InventoryBatchLot IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY InventoryBatchLot, EventTime, MaterialDocumentYear, MaterialDocumentNumber, MaterialDocumentItem, ActivityName; Pasos
- Acceda al editor ABAP: Inicie sesión en su sistema SAP S/4HANA. Abra el editor ABAP mediante el código de transacción
SE38. - Cree un programa nuevo: Introduzca el nombre del programa nuevo en el campo «Program», por ejemplo,
Z_PM_INVENTORY_EXTRACT, y haga clic en el botón «Create». Proporcione un título descriptivo, establezca «Type» como «Executable Program» y guárdelo en un paquete. - Defina los parámetros del programa: En el editor del programa, defina la pantalla de selección que servirá como interfaz de usuario para la extracción. Esto permite especificar parámetros como el intervalo de fechas y el centro para extraer los datos.
- Implemente la lógica de extracción: Copie el código ABAP completo proporcionado en la sección «Query» y péguelo en el editor ABAP. Este código está diseñado para seleccionar datos de las 14 actividades de inventario requeridas desde distintas tablas de SAP.
- Comprenda la lógica principal: El programa selecciona los datos de cada actividad de inventario diferenciada desde sus tablas de origen, como
MKPFyMSEGpara los movimientos de material oCDHDRyCDPOSpara los cambios de datos maestros. Después, combina cada selección medianteUNION ALLen una única tabla interna que representa el Registro de eventos. - Configure la salida del archivo: La parte final del código escribe los datos consolidados de la tabla interna en un archivo. Utiliza la instrucción
OPEN DATASETpara crear un archivo en el servidor de aplicaciones SAP. Debe especificar una ruta válida del servidor en la que el usuario del sistema SAP tenga permisos de escritura. - Ejecute el programa: Guarde y active el programa ABAP (Ctrl+F3). Ejecútelo pulsando F8. En la pantalla de selección, introduzca el intervalo de fechas deseado y cualquier otro filtro relevante, como Plant o Company Code.
- Ejecútelo como tarea en segundo plano: Para grandes volúmenes de datos, es fundamental ejecutar el programa como una tarea en segundo plano para evitar tiempos de espera de la sesión. Desde la pantalla de ejecución (F8), vaya al menú
Program -> Execute in Background. Programe la tarea para que se ejecute fuera de las horas punta. - Recupere el archivo de salida: Cuando finalice la tarea, localice el archivo de salida en el servidor de aplicaciones SAP. Utilice el código de transacción
AL11para explorar los directorios del servidor y encontrar el archivo. Utilice la transacciónCG3Ypara descargarlo del servidor de aplicaciones a su equipo local. - Prepare la carga: Abra el archivo descargado en un editor de texto o un programa de hojas de cálculo. Asegúrese de que tenga formato CSV, una fila de encabezados, la coma como delimitador y las comillas dobles como calificador de texto. Verifique que los nombres de las columnas coincidan con los requisitos antes de cargarlo en la herramienta de Process Mining.
Configuración
- Intervalo de fechas de contabilización: Este es el parámetro más importante. Recomendamos extraer los datos en bloques manejables, como periodos de 3 a 6 meses, para garantizar un buen rendimiento y evitar tiempos de espera del sistema.
- Filtro de centros: Es muy recomendable filtrar por uno o varios centros específicos (
WERKS). Ejecutar la extracción para todos los centros a la vez puede consumir muchos recursos. - Filtro de código de empresa: Puede añadir un filtro opcional para Company Code (
BUKRS) con el fin de limitar aún más el alcance de los datos si su organización opera con varios códigos de empresa en el mismo sistema. - Ruta del archivo en el servidor de aplicaciones: El programa ABAP requiere una ruta de directorio válida y predefinida en el servidor de aplicaciones SAP. Asegúrese de que el usuario del sistema SAP (
SY-UNAME) tenga los permisos necesarios a nivel del sistema operativo para escribir archivos en este directorio. - Autorizaciones: El usuario que ejecute esta extracción necesita autorizaciones para la transacción
SE38, para crear y ejecutar el programa, acceso de visualización a las tablasMKPF,MSEG,MCH1,CDHDR,CDPOS,LTAKyLTAP, y capacidad para programar tareas en segundo plano (SM36/SM37).
a Consulta de ejemplo abap
REPORT Z_PM_INVENTORY_EXTRACT.
" ====================================================================
" SELECTION SCREEN
" ====================================================================
SELECT-OPTIONS: s_budat FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: s_werks FOR mseg-werks.
PARAMETERS: p_fpath TYPE string DEFAULT '/usr/sap/trans/tmp/inventory_log.csv' OBLIGATORY.
" ====================================================================
" DATA STRUCTURES
" ====================================================================
TYPES: BEGIN OF ty_event_log,
InventoryBatchLot TYPE charg,
ActivityName TYPE string,
EventTime TYPE string,
MaterialNumber TYPE matnr,
UserName TYPE xubname,
MovementType TYPE bwart,
Plant TYPE werks_d,
StorageLocation TYPE lgort_d,
Quantity TYPE menge_d,
MovementReasonCode TYPE grund,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log.
" ====================================================================
" DATA SELECTION
" ====================================================================
START-OF-SELECTION.
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Receipt Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('101', '103', '105', '501', '521', '561')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~shkzg
WHEN 'H' THEN 'Stock Posted to Quality Inspection'
WHEN 'S' THEN 'Quality Inspection Stock Released'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '321' " For QI to Unrestricted
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Put-Away Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '311' AND mseg~shkzg = 'H' " Assume put-away is the credit side
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Internal Stock Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('301', '311', '313', '315')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~bwart
WHEN '343' THEN 'Stock Status Changed to Blocked'
WHEN '344' THEN 'Stock Status Changed to Unrestricted'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('343', '344')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Inventory Adjustment Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('701', '702', '711', '712')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Delivery Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '601'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Production Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '261'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Sales Return Received' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('651', '653')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Stock Scrapped' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '551'
UNION ALL
SELECT
ltap~charg AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CONCAT( ltak~bdatu, ltak~bzeit ) AS EventTime,
ltap~matnr AS MaterialNumber,
ltak~bname AS UserName,
ltak~bwart AS MovementType,
ltap~werks AS Plant,
ltap~lgort AS StorageLocation,
ltap~nista AS Quantity,
'' AS MovementReasonCode
FROM ltap
JOIN ltak ON ltak~tanum = ltap~tanum
WHERE ltak~bdatu IN s_budat
AND ltap~werks IN s_werks
AND ltap~charg IS NOT NULL AND ltap~charg <> ''
UNION ALL
SELECT
SUBSTRING( cdhdr~objectid, 5, 18 ) AS InventoryBatchLot, " Object ID for BATCH is MATNR+WERKS+CHARG
'Batch Status Changed' AS ActivityName,
CONCAT( cdhdr~udate, cdhdr~utime ) AS EventTime,
SUBSTRING( cdhdr~objectid, 1, 4 ) AS MaterialNumber,
cdhdr~username AS UserName,
'' AS MovementType,
'' AS Plant,
'' AS StorageLocation,
0 AS Quantity,
'' AS MovementReasonCode
FROM cdhdr
JOIN cdpos ON cdpos~objectclas = cdhdr~objectclas
AND cdpos~objectid = cdhdr~objectid
AND cdpos~changenr = cdhdr~changenr
WHERE cdhdr~udate IN s_budat
AND cdhdr~objectclas = 'BATCH'
AND cdpos~tabname = 'MCH1'
AND cdpos~fname = 'ZUSTD'
INTO TABLE @lt_event_log.
" ====================================================================
" WRITE OUTPUT FILE
" ====================================================================
DATA: lv_string TYPE string.
DATA: lo_conv TYPE REF TO cl_abap_conv_out_ce.
lo_conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
OPEN DATASET p_fpath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
RETURN.
ENDIF.
" Write Header
lv_string = 'InventoryBatchLot,ActivityName,EventTime,MaterialNumber,UserName,MovementType,Plant,StorageLocation,Quantity,MovementReasonCode'.
TRANSFER lv_string TO p_fpath.
" Write Data
LOOP AT lt_event_log ASSIGNING FIELD-SYMBOL(<fs_log>).
CONCATENATE
<fs_log>-InventoryBatchLot
<fs_log>-ActivityName
<fs_log>-EventTime
<fs_log>-MaterialNumber
<fs_log>-UserName
<fs_log>-MovementType
<fs_log>-Plant
<fs_log>-StorageLocation
<fs_log>-Quantity
<fs_log>-MovementReasonCode
INTO lv_string
SEPARATED BY ','.
TRANSFER lv_string TO p_fpath.
ENDLOOP.
CLOSE DATASET p_fpath.
WRITE: 'Extraction complete. File written to:', p_fpath. ¿Listo para comenzar?
Utilice este Template para preparar sus datos con confianza y obtener información valiosa sobre sus operaciones de gestión del inventario. Comience hoy mismo a mejorar la eficiencia y reducir los costes.
Optimice la gestión de su inventario en SAP S/4HANA
Localice las ineficiencias, reduzca el tiempo de ciclo un 30 % y ahorre costes.
No se requiere tarjeta de crédito • Configuración en minutos