Su Template de datos para la gestión de inventario
Su Template de datos para la gestión de inventario
- Atributos recomendados para recopilar
- Actividades clave que debe seguir para descubrir el proceso
- Instrucciones de extracción para SAP S/4HANA
Atributos de gestión de inventario
| Nombre | Descripción | ||
|---|---|---|---|
| Hora del evento EventTime | Fecha y hora exactas en que se registró en el sistema la actividad de inventario. | ||
| Descripción La hora del evento es la marca de tiempo que registra exactamente cuándo se produjo una actividad. Este dato es esencial para ordenar cronológicamente los eventos y reconstruir el flujo del proceso de cada lote de inventario. Es la base de todos los análisis de Process Mining relacionados con el tiempo. La precisión de la hora del evento es fundamental para calcular indicadores clave de rendimiento, como los tiempos de ciclo, los tiempos de entrega y las duraciones. Permite analizar el rendimiento del proceso en distintos periodos, ayuda a identificar cuándo se producen cuellos de botella y aporta datos objetivos para comprender los retrasos, como el tiempo que un lote permanece en inspección de calidad antes de su liberación. Por qué es importante Esta marca de tiempo ordena cronológicamente los eventos y sirve de base para calcular duraciones y medir el rendimiento. Dónde obtenerlo Suele ser 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 | Identificador único de una cantidad concreta de un producto. Se utiliza como ID del caso para seguir 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 concreta de un producto. Permite consultar cronológicamente todo el recorrido de esa cantidad de existencias: desde su entrada inicial en el almacén, pasando por los distintos movimientos internos y cambios de estado, hasta su salida para la venta, la producción o su eliminación. Este atributo es fundamental para analizar los procesos. Permite seguir el flujo completo de cada lote, medir con precisión los tiempos de ciclo, identificar variaciones en los procesos y comprender cómo se gestionan los distintos lotes. Analizar los procesos por lote es esencial en sectores donde la trazabilidad, el control de calidad y la gestión de las fechas de caducidad son fundamentales, como el farmacéutico, el de alimentos y bebidas y el químico. Por qué es importante Es el identificador principal que vincula todos los eventos de inventario relacionados en un mismo caso y permite analizar el proceso de principio a fin. Dónde obtenerlo Suele ser el número de lote, que se encuentra en campos como CHARG de tablas de SAP como MCHA (registro maestro de lotes) o MCH1 (lotes). Ejemplos B001-A452023L202405-XYZ789456123BATCH-05-24 | |||
| Actividad ActivityName | Nombre del evento de negocio que se produjo en un momento concreto del proceso de gestión de inventario. | ||
| Descripción El atributo Actividad describe un paso o evento del ciclo de vida del inventario de un lote. Estos eventos representan acciones clave del negocio, como recibir mercancías, trasladar existencias, realizar una inspección de calidad o emitir materiales. Cada actividad registra algo que ocurrió con el lote de inventario en un momento concreto. El análisis de las actividades es la base de Process Mining. Permite visualizar el flujo del proceso, identificar recorridos frecuentes y poco habituales, detectar cuellos de botella donde se producen retrasos y analizar ciclos de retrabajo. Al comprender la secuencia y la frecuencia de actividades como 'Existencias desechadas' o 'Inspección de calidad', las empresas pueden localizar oportunidades para mejorar los procesos y 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 suele asignar nombres fáciles de entender a los tipos de movimiento de SAP (MSEG-BWART) o a los códigos de transacción (MKPF-TCODE2). Ejemplos Entrada de mercancías contabilizadaTraslado de almacenamiento contabilizadoSalida de mercancías para entrega contabilizadaExistencias desechadas | |||
| Almacén StorageLocation | Ubicación específica dentro de una planta donde se almacena físicamente el inventario. | ||
| Descripción Un almacén es una unidad organizativa que permite diferenciar las existencias de materiales dentro de una planta. Por ejemplo, una planta puede tener almacenes separados para materias primas, productos terminados y existencias pendientes de inspección de calidad. Este atributo ofrece una ubicación más detallada que la planta. Se utiliza para analizar los movimientos entre distintas zonas de existencias, como el tiempo de entrega de los traslados desde el área de recepción hasta el almacén principal. Analizar la utilización del espacio y la frecuencia de los movimientos por almacén ayuda a optimizar la disposición del almacén y la logística interna. Por qué es importante Ofrece una visión detallada de la ubicación de las existencias dentro de una planta 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, campo LGORT (almacén). Ejemplos 0001RM01FG01QI01 | |||
| Cantidad Quantity | Cantidad de material que interviene en el movimiento de inventario. | ||
| Descripción Este atributo representa la cantidad de material que se trasladó, recibió, entregó o ajustó durante una actividad. Se registra en la unidad de medida base del material. Analizar la cantidad es fundamental para comprender la escala y el impacto de los procesos de inventario. Permite crear Dashboards que muestran el volumen de mercancías gestionadas, como «Volumen de salidas de mercancías por SKU». También se utiliza para calcular KPI como la «Proporción de existencias desechadas o eliminadas», lo que añade una dimensión cuantitativa al análisis del proceso, más allá del simple recuento de eventos. Por qué es importante Cuantifica el volumen de material de cada actividad y permite analizar el flujo, el volumen desechado y el impacto de los ajustes. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, campo MENGE (cantidad). Ejemplos 10012.55000-10 | |||
| Centro Plant | Unidad organizativa que representa una instalación donde se encuentra el inventario, como una fábrica o un centro de distribución. | ||
| Descripción Una planta es una unidad organizativa central de SAP que puede representar una instalación de producción, un almacén central o la sede corporativa. Todo el inventario se encuentra física o lógicamente dentro de una planta. Analizar los datos por planta es fundamental para comparar el rendimiento de los procesos entre distintas ubicaciones. Permite responder preguntas como «¿En qué planta es más largo el tiempo de almacenamiento?» o «¿La tasa de discrepancias de inventario es mayor en la planta A que en la planta 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 de inventario y su rendimiento en las distintas ubicaciones de la empresa. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, campo WERKS (planta). Ejemplos 10001710DE01US01 | |||
| Código de motivo del movimiento MovementReasonCode | Código que especifica el motivo de un movimiento de inventario. | ||
| Descripción El código de motivo del movimiento aporta contexto sobre por qué se realizó un movimiento de mercancías. Suele utilizarse 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 Dashboard «Factores que provocan ajustes manuales de inventario», analizar los datos por código de motivo puede revelar por qué se producen discrepancias, por ejemplo, por daños, robos o errores de entrada de datos. Esta información ayuda a las empresas a resolver los problemas de fondo, en lugar de limitarse a corregir sus síntomas. Por qué es importante Explica por qué se producen movimientos de inventario no planificados y permite analizar las causas raíz de forma específica. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, campo GRUND (motivo del movimiento). Ejemplos 00010005102 | |||
| Nombre de usuario UserName | ID del usuario que ejecutó la transacción en SAP. | ||
| Descripción Este atributo registra el ID de SAP de la persona que contabilizó el documento o ejecutó la actividad. Permite hacer un seguimiento de las acciones y saber quién es responsable de cada una dentro del proceso de gestión de inventario. Analizar los datos por usuario es esencial para comprender el rendimiento, el cumplimiento y las necesidades de formación. Por ejemplo, el Dashboard 'Factores que generan ajustes manuales de inventario' utiliza este atributo para identificar quién realiza más ajustes. Puede ayudar a detectar quién necesita formación adicional, señalar actividades no autorizadas o reconocer a quienes obtienen mejores resultados. Por qué es importante Permite asignar responsabilidades e identificar comportamientos específicos de cada usuario, necesidades de formación o problemas de cumplimiento. Dónde obtenerlo Se encuentra en el campo USNAM (nombre de usuario) de la tabla de cabecera de documentos de material MKPF. Ejemplos JSMITHMBROWNWAREHOUSE_OPS | |||
| Número de material MaterialNumber | Identificador único del producto o material gestionado. | ||
| Descripción El número de material, también conocido como SKU (unidad de mantenimiento de existencias), es el código único asignado a un producto concreto. Es un elemento fundamental de los datos maestros de gestión de inventario y se utiliza para hacer un seguimiento de las cantidades, los valores y los movimientos de mercancías. En Process Mining, analizar los datos por número de material permite ver los procesos de inventario desde la perspectiva de cada producto. Ayuda a responder preguntas como qué productos tardan más en pasar la inspección de calidad, cuáles se desechan con mayor frecuencia o cuáles registran más traslados internos. Esta segmentación es fundamental para identificar problemas específicos de cada producto y optimizar las estrategias de inventario según el tipo de mercancía. Por qué es importante Permite segmentar el análisis por producto para revelar patrones y problemas específicos de determinados artículos. Dónde obtenerlo Se encuentra en el campo MATNR de la tabla de posiciones de documentos de material MSEG. Los datos maestros están en la tabla MARA. Ejemplos RM-1001FG-2050-B100-400-A | |||
| Tipo de movimiento MovementType | Clave de tres dígitos de SAP que determina cómo se contabiliza un movimiento de mercancías. | ||
| Descripción El tipo de movimiento es una clave de control fundamental de la gestión de inventario de SAP que determina las características de un movimiento de material. Especifica qué cuentas se actualizan, cómo se muestra la disposición de la 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 un traslado de existencias y '551' a un desecho. Este atributo suele utilizarse para asignar un nombre fácil de entender a la actividad. Analizar los procesos por tipo de movimiento permite obtener una visión técnica detallada del flujo de inventario. Es esencial para validar la precisión del mapa del proceso e identificar tipos concretos de transacciones que puedan causar cuellos de botella o desviaciones. Por qué es importante Ofrece una clasificación técnica precisa de cada evento de inventario, fundamental para determinar las actividades y realizar análisis detallados. Dónde obtenerlo Se encuentra en el campo BWART (tipo de movimiento) de la tabla de posiciones de documentos de material MSEG. Ejemplos 101311261551601 | |||
| Fecha de vencimiento ExpirationDate | Fecha en que vence un lote de material y deja de ser apto para su uso. | ||
| Descripción La fecha de vencimiento de la vida útil (SLED) es un dato maestro fundamental para los productos perecederos o sujetos a plazos. Se gestiona por lote e indica cuándo un producto deja de poder venderse o consumirse. Este atributo es esencial para el Dashboard «Análisis de existencias obsoletas y vencidas». Al analizar las actividades teniendo en cuenta la fecha de vencimiento, las empresas pueden identificar los lotes en riesgo de vencer y tomar medidas preventivas. También permite medir la eficacia de las políticas de rotación de inventario, como «primero en vencer, primero en salir» (FEFO), y cuantificar las pérdidas por productos vencidos que se desechan. Por qué es importante Permite analizar las existencias obsoletas y vencidas, y ayuda a reducir los desperdicios y las pérdidas económicas. Dónde obtenerlo Se encuentra en las tablas maestras de lotes MCH1 o MCHA, campo VFDAT (fecha de vencimiento de la vida útil). Ejemplos 2024-12-312025-06-302024-09-01 | |||
| Número de documento de material MaterialDocumentNumber | 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 ese documento. Un 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 permite agrupar eventos contabilizados conjuntamente. También es esencial para las auditorías y para pasar del análisis del proceso al sistema de origen e investigar transacciones específicas. Por qué es importante Sirve como clave transaccional para las auditorías y permite agrupar las actividades ejecutadas conjuntamente. Dónde obtenerlo Se encuentra en las tablas MKPF (cabecera) y MSEG (posición), campo MBLNR (número de documento de material). 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 del que proceden los datos de gestión de inventario. En este caso, sería la instancia concreta 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 en un análisis de un solo sistema pueda parecer un dato fijo, resulta esencial al combinar datos de distintas fuentes para obtener una visión integral del proceso. Ayuda a la gobernanza de datos, a resolver problemas de extracción y a garantizar la trazabilidad de los datos. Por qué es importante Indica el origen de los datos, algo esencial para la gobernanza de datos y el análisis de varios sistemas. Dónde obtenerlo Suele ser un valor codificado de forma fija durante la transformación de datos para identificar la instancia concreta de SAP S/4HANA. Ejemplos S4H_PROD_100SAP_S4_FINANCES4HANA_GLOBAL | |||
| Tiempo de ciclo del cumplimiento de pedidos OrderFulfillmentCycleTime | Tiempo total desde el inicio de la recogida hasta la emisión de las mercancías para su entrega. | ||
| Descripción Esta métrica calculada mide el tiempo total entre las actividades «Recogida iniciada» y «Salida de mercancías para entrega contabilizada». Representa el tiempo que tarda el almacén en preparar y enviar un pedido de cliente una vez iniciado el proceso. Este atributo mide directamente el KPI «Tiempo de ciclo del cumplimiento de pedidos». Analizar esta duración ayuda a las empresas a comprender su capacidad de respuesta a la demanda del cliente. Se puede desglosar por producto, almacén o cliente para identificar demoras en las etapas de recogida, embalaje y envío, que afectan directamente la satisfacción del cliente y la eficiencia logística. Por qué es importante Mide la rapidez y eficiencia del proceso de salida de mercancías del almacén, un factor clave para la satisfacción del cliente. Dónde obtenerlo Este atributo calculado se obtiene a partir de la diferencia de tiempo entre los eventos «Recogida iniciada» y «Salida de mercancías para entrega contabilizada» de cada lote. Ejemplos 7200144003600 | |||
| Tipo de existencias StockType | Indica el estado del inventario, por ejemplo, de libre utilización, en inspección de calidad o bloqueado. | ||
| Descripción El tipo de existencias clasifica el inventario según su disponibilidad para el uso. Los principales tipos son las existencias de libre utilización, las existencias en inspección de calidad y las existencias bloqueadas. Los movimientos de mercancías suelen implicar un cambio en el tipo de existencias. Seguir los cambios en el tipo de existencias es fundamental para comprender el proceso de disponibilidad del inventario. Esto permite analizar actividades como «Existencias contabilizadas para inspección de calidad» y «Estado de las existencias cambiado a bloqueado». Analizar el tiempo que las existencias permanecen en cada tipo, especialmente en inspección de calidad, es clave para identificar demoras que afectan la disponibilidad de los productos para la venta o la producción. Por qué es importante Registra la disponibilidad del inventario para el uso, un dato esencial para analizar las demoras en la inspección de calidad y la disponibilidad de las existencias. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, campo INSMK (tipo de existencias). Ejemplos Libre utilizaciónInspección de calidadExistencias bloqueadas | |||
| Ubicación de almacenamiento StorageBin | Unidad de almacenamiento más específica de un almacén, donde se ubican físicamente los materiales. | ||
| Descripción Una ubicación de almacenamiento representa una coordenada específica dentro de un almacén, como la posición de un estante. Este nivel de detalle suele utilizarse cuando se implementa SAP Warehouse Management (WM) o Extended Warehouse Management (EWM). Este atributo es fundamental para el Dashboard «Utilización del espacio del almacén». Permite analizar el aprovechamiento del espacio, identificar posibles zonas de congestión y detectar rutas ineficientes para almacenar o recoger productos. Analizar los movimientos entre ubicaciones ayuda a optimizar la disposición del almacén y reducir los desplazamientos del personal. Por qué es importante Ofrece los datos de ubicación más detallados y permite analizar el aprovechamiento del espacio y la eficiencia operativa del almacén. Dónde obtenerlo Si utiliza WM, puede encontrar este dato en tablas de órdenes de traslado como LTAK/LTAP. En los documentos de inventario, puede estar en MSEG-LGPBE. Consulte la documentación de SAP S/4HANA. Ejemplos A-01-01-AB-05-10-CZONA-REC-01 | |||
| Última actualización de datos LastDataUpdate | 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 los datos desde el sistema de origen. Proporciona metadatos importantes sobre la actualidad de la información analizada y permite saber si se trata de datos casi en tiempo real o de una instantánea de un periodo anterior. Para obtener conclusiones pertinentes y precisas, es fundamental saber cuándo se actualizaron los datos. Este campo permite a analistas y usuarios de negocio confirmar su vigencia y suele mostrarse en los Dashboards para contextualizar la información presentada. Por qué es importante Indica la actualidad de los datos y permite comprobar que los análisis se basan en información actualizada. Dónde obtenerlo Esta marca de tiempo se genera y se añade durante el proceso de extracción, transformación y carga de datos (ETL). Ejemplos 2024-05-21T08:00:00Z2024-05-20T08:00:00Z | |||
| Unidad de medida UnitOfMeasure | Unidad en la que se mide la cantidad de material (por ejemplo, piezas o kilogramos). | ||
| Descripción La unidad de medida especifica la unidad del atributo «Cantidad». Algunos ejemplos habituales son piezas (PC), kilogramos (KG), litros (L) y cajas (BOX). Esto aporta un contexto esencial al campo de cantidad. Aunque a menudo se utiliza como una descripción sencilla, este atributo es importante para garantizar la calidad de los datos y realizar análisis que requieren convertir distintas unidades a un estándar común. Por ejemplo, para calcular con precisión el valor total del inventario desechado, es necesario conocer las cantidades expresadas en distintas unidades y, posiblemente, convertirlas. Por qué es importante Aporta un contexto esencial al atributo «Cantidad» y permite interpretar correctamente los volúmenes de material. Dónde obtenerlo Se encuentra en la tabla de posiciones de documentos de material MSEG, campo MEINS (unidad de medida base). Ejemplos PiezasKilogramosUnidadesMetros | |||
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 las existencias contables para que coincidan con el recuento físico. | ||
| Por qué es importante Estos ajustes son fundamentales para mantener la precisión del inventario. Una frecuencia elevada puede indicar 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 tipos de movimiento (BWART) de inventario físico, como 701 (aumento de inventario) o 702 (disminución de inventario). Capturar Se captura a partir de los documentos de material de MATDOC con tipos de movimiento de ajuste de inventario físico (por ejemplo, 701, 702). Tipo de evento explicit | |||
| Entrada de mercancías contabilizada | Registra la entrada inicial de un lote de inventario en el almacén, normalmente procedente de un proveedor o de producción. SAP S/4HANA captura este evento de forma explícita al crear un documento de material cuando se reciben las mercancías. | ||
| 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. Capturar Se captura a partir de los documentos de material de MATDOC con los tipos de movimiento correspondientes a las entradas de mercancías. Tipo de evento explicit | |||
| Existencias de inspección de calidad liberadas | Indica que un lote ha superado la inspección de calidad y ya está disponible para su uso o almacenamiento. Se registra como un traslado explícito desde las existencias de calidad a otro tipo de existencias, como las de libre utilización. | ||
| Por qué es importante Este hito marca la finalización del proceso de calidad y deja el inventario disponible. Los retrasos en esta etapa pueden causar problemas importantes en la producción o el cumplimiento de pedidos. Dónde obtenerlo Se registra en la tabla MATDOC como un traslado de existencias. Normalmente se identifica mediante el tipo de movimiento (BWART) 321, que traslada las existencias de 'Inspección de calidad' a 'Libre utilización'. Capturar Se captura a partir de los documentos de material de MATDOC con el tipo de movimiento 321. Tipo de evento explicit | |||
| Existencias desechadas | Marca la eliminación definitiva de un lote de inventario y lo retira permanentemente de los registros. Suele ocurrir cuando las existencias han caducado, están dañadas o han quedado obsoletas. | ||
| Por qué es importante Este es un evento de fin que representa una pérdida financiera. Analizar los eventos de desecho ayuda a identificar problemas relacionados con la antigüedad de las existencias, los procedimientos de manipulación o la previsión de la demanda. Dónde obtenerlo Se registra en la tabla MATDOC. Se identifica mediante tipos de movimiento (BWART) de desecho, como 551 (desde libre utilización), 553 (desde inspección de calidad) o 555 (desde bloqueado). Capturar Se captura a partir de los documentos de material de 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 genera un asiento contable. | ||
| Por qué es importante Este es un evento clave para completar el proceso de cumplimiento de pedidos. Es fundamental para medir las entregas a tiempo y calcular el tiempo de ciclo total del cumplimiento de pedidos. Dónde obtenerlo Se registra en la tabla MATDOC. Se identifica mediante el tipo de movimiento (BWART) de salida de mercancías para una entrega de pedido de ventas, normalmente 601. Capturar Se captura a partir de los documentos de material de MATDOC con el tipo de movimiento 601. Tipo de evento explicit | |||
| Salida de mercancías para producción contabilizada | Representa el consumo de un lote de inventario en 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 Este es un evento principal de consumo que marca el final del ciclo de vida del inventario de los componentes. Es 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 tipos de movimiento (BWART) de salida de mercancías para una orden, como 261. Capturar Se captura a partir de los documentos de material de MATDOC con el tipo de movimiento 261. Tipo de evento explicit | |||
| Traslado de almacenamiento contabilizado | Representa el traslado físico del lote desde una zona de recepción o preparación hasta su ubicación o contenedor de almacenamiento definitivo. En SAP, se registra en un documento de material de traslado de existencias. | ||
| Por qué es importante Completa el proceso de recepción de mercancías. El tiempo que se tarda en realizar esta actividad, conocido como tiempo de almacenamiento, es un KPI clave para medir la eficiencia del almacén. Dónde obtenerlo Se registra en la tabla MATDOC como un traslado de existencias, a menudo entre ubicaciones de almacenamiento (por ejemplo, tipo de movimiento 311). El movimiento concreto puede variar según la estructura del almacén. Capturar Se identifica mediante documentos de traslado de existencias en MATDOC que mueven las existencias desde una ubicación provisional o de recepción hasta una ubicación de almacenamiento definitiva. Tipo de evento explicit | |||
| Devolución de ventas recibida | Registra la devolución al almacén de un lote que se había enviado previamente a un cliente. Es una transacción explícita que aumenta el inventario. | ||
| Por qué es importante El seguimiento de las devoluciones es fundamental para comprender los problemas de calidad de los productos y la insatisfacción de los clientes. La gestión y resolución de las devoluciones también pueden ser una fuente de ineficiencias. Dónde obtenerlo Se registra en la tabla MATDOC. Se identifica mediante tipos de movimiento (BWART) de devoluciones de ventas, como 651 (a libre utilización) o 653 (a inspección de calidad). Capturar Se captura a partir de los documentos de material de MATDOC con tipos de movimiento de devoluciones de ventas (por ejemplo, 651, 653). Tipo de evento explicit | |||
| Estado de las existencias cambiado a bloqueado | Representa un cambio en el estado del lote que impide su salida, a menudo debido a daños, solicitudes de retención u otros motivos. En SAP, se registra como un traslado explícito de existencias. | ||
| Por qué es importante Pone de manifiesto interrupciones en la disponibilidad del inventario. Una frecuencia elevada de bloqueos puede indicar problemas de manipulación, condiciones de almacenamiento o calidad de los proveedores. Dónde obtenerlo Se registra en la tabla MATDOC como un traslado de existencias. Se suele usar el tipo de movimiento (BWART) 344 para pasar las existencias de 'Bloqueado' a 'Libre utilización' y el 343 para pasar de 'Libre utilización' a 'Bloqueado'. Esta actividad corresponde al tipo 343. Capturar Se identifica mediante documentos de material en MATDOC con el tipo de movimiento 343. Tipo de evento explicit | |||
| Estado de las existencias cambiado a libre utilización | Representa un cambio en el estado del lote que lo libera de un bloqueo o de una retención por motivos de calidad y lo deja disponible para su uso. Se registra como un traslado explícito de existencias. | ||
| Por qué es importante Esta actividad marca la resolución de una retención de inventario. Analizar cuánto tiempo permanecen bloqueadas las existencias permite mejorar los procesos de resolución. Dónde obtenerlo Se registra en la tabla MATDOC como un traslado de existencias. El tipo de movimiento (BWART) 344 pasa las existencias de 'Bloqueado' a 'Libre utilización'. Capturar Se identifica mediante documentos de material en MATDOC con el tipo de movimiento 344. Tipo de evento explicit | |||
| Estado del lote cambiado | Refleja un cambio en el registro maestro del lote, como pasar su estado de 'Libre utilización' a 'Restringido'. 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 disponibilidad para la venta o la producción. Analizarlos puede revelar problemas relacionados con existencias próximas a caducar o con el control de calidad, aunque no haya movimientos físicos. Dónde obtenerlo Se deduce 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). Capturar Se obtiene de los documentos de cambios en CDHDR/CDPOS para el campo de estado del registro maestro del lote (MCH1-ZUSTD). Tipo de evento inferred | |||
| Existencias contabilizadas 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 impide su uso hasta que se autorice. En SAP, se registra como una transacción explícita que cambia el tipo de existencias del lote. | ||
| Por qué es importante Esta actividad inicia el proceso de inspección de calidad. El tiempo transcurrido hasta la liberación de las existencias 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 existencias (INSMK) establecido en 'Q' (inspección de calidad), o de un traslado de existencias (por ejemplo, 322). Capturar Se identifica mediante documentos de material en MATDOC que asignan las existencias al tipo 'Inspección de calidad'. Tipo de evento explicit | |||
| Preparación de pedidos iniciada | Marca el inicio del proceso de cumplimiento de pedidos, cuando se crea una tarea de almacén para recoger un lote de su ubicación de almacenamiento. A menudo se captura al crear una orden de traslado o una tarea de almacén. | ||
| Por qué es importante Esta actividad activa el proceso de preparación de pedidos. Analizar el tiempo transcurrido desde este evento hasta que finaliza la preparación permite medir la eficiencia del personal del almacén e identificar retrasos. Dónde obtenerlo Por lo general, este evento no figura en MATDOC. En los sistemas con gestión de almacenes (WM/EWM), se deduce de la marca de tiempo de creación de una orden de traslado (tabla LTAK) o de una tarea de almacén. Capturar Se deduce del registro de creación de una orden de traslado (en WM) o de una tarea de almacén (en EWM) vinculada al lote de material. Tipo de evento inferred | |||
| Traslado interno de existencias contabilizado | Registra el traslado de un lote de inventario entre distintas ubicaciones o contenedores de almacenamiento dentro de la misma planta. Es una transacción explícita que crea un documento de material. | ||
| Por qué es importante El seguimiento de los traslados internos permite analizar la eficiencia operativa del almacén, detectar movimientos innecesarios y medir el tiempo de entrega de la reposición de existencias entre ubicaciones. Dónde obtenerlo Se registra en la tabla MATDOC. Normalmente se identifica mediante el tipo de movimiento (BWART) 311, que corresponde a traslados entre ubicaciones de almacenamiento. Capturar Se captura a partir de los documentos de material de MATDOC con tipos de movimiento de existencias internas (por ejemplo, 311). Tipo de evento explicit | |||
Guías de extracción
Pasos
- Configure 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. Por lo general, un administrador del sistema debe concederle el acceso.
- Elija un cliente SQL: Seleccione una herramienta cliente SQL que pueda conectarse a la base de datos SAP HANA. Entre las opciones habituales se encuentran SAP HANA Studio, SAP HANA Database Explorer y herramientas de terceros como DBeaver.
- Configure la conexión a la base de datos: Cree una conexión nueva con 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 de la sección «query» de este documento en el editor de su cliente SQL.
- Configure los parámetros de la consulta: Localice los valores de marcador de posición en 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 empresa o planta, comoMaterialDocumentItem.Plant IN ('Plant1', 'Plant2'), para que coincidan con 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 dependerá del intervalo de fechas y del volumen de datos de inventario del sistema.
- Revise los datos: Cuando termine la consulta, revise los resultados en su cliente SQL para comprobar que sean correctos y estén completos. Verifique que aparezcan distintas actividades y que los atributos clave tengan datos.
- Exporte el Registro de eventos: Exporte todo el conjunto de resultados de su cliente SQL a un archivo CSV. Asegúrese de que la configuración de exportación utilice la codificación UTF-8 para evitar problemas con los caracteres.
- Prepare los datos para cargarlos: Asigne a las columnas del archivo CSV exactamente los nombres definidos como alias en la consulta, por ejemplo,
InventoryBatchLot,ActivityName,EventTime, entre otros. El archivo ya estará listo para cargarse en una herramienta de Process Mining.
Configuración
- Autorizaciones: El usuario que ejecute la consulta necesita permisos
SELECTpara las siguientes vistas CDS:I_MaterialDocumentItem,I_BatchChangeDocumentyI_WarehouseTask. También necesita acceso al esquema de base de datos donde se encuentran estas vistas. - Filtrado por intervalo de fechas: Es fundamental aplicar un filtro de fechas a los campos
PostingDate,ChangeDocumentCreationDateoWarehouseTaskCreationDate. Para el análisis, suele utilizarse un intervalo de 3 a 12 meses. Consultar varios años de datos puede causar problemas importantes de rendimiento. - Filtros organizativos: Para mejorar el rendimiento y orientar el análisis, añada cláusulas
WHEREque filtren porPlantoCompanyCode. Así se reduce el volumen de datos y la extracción se centra en las áreas pertinentes de la empresa. - Volumen de datos: Tenga en cuenta que los sistemas de gestión de inventario generan un gran volumen de datos. Un intervalo de fechas amplio puede producir millones de filas y afectar tanto al sistema de origen durante la extracción como al rendimiento de la herramienta cliente.
- Extended Warehouse Management (EWM): La actividad «Recogida iniciada» depende de la vista CDS
I_WarehouseTask, que solo contiene datos si utiliza SAP Extended Warehouse Management. Si su organización utiliza el módulo anterior Warehouse Management (WM) o solo Inventory Management (IM), esta actividad no se extraerá.
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 se haya aprobado el acceso directo a SAP HANA SQL y que el usuario de extracción tenga acceso de lectura a MATDOC y a las tablas maestras de lotes que requiere el sistema. Confirme quién es el propietario del esquema físico y sustituya [Your SAP HANA schema] por el nombre de esquema aprobado.
- Confirme qué campos de las tablas MATDOC y de lotes están disponibles en la versión de SAP S/4HANA de destino. La consulta siguiente utiliza campos habituales de MATDOC y MCHA, pero la disponibilidad y los nombres de los campos pueden variar según la versión, la implementación y el alcance activado. Antes de ejecutar la consulta, sustituya todos los campos marcados como [Configure based on your system].
- Defina el periodo de extracción sustituyendo [Start timestamp] y [End timestamp] por valores de marca de tiempo ISO. Para la extracción inicial, utilice un periodo de tres a seis meses 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 equivalente con autorización. Limite los resultados a los códigos de empresa, las plantas, los tipos de documento o los tipos de movimiento necesarios; para ello, sustituya los marcadores de posición de los filtros correspondientes.
- Revise la asignación de tipos de movimiento en la CTE de actividades. El significado de los tipos de movimiento depende 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 la recepción de mercancías, la inspección de calidad, la liberación, el almacenamiento, el traslado interno, las existencias bloqueadas, las existencias de libre utilización, los ajustes de inventario, la recogida, la salida para entrega, la salida para producción, las devoluciones de ventas y los desechos.
- Valide que cada fila de salida contenga InventoryBatchLot, ActivityName y EventTime. Confirme que el identificador del lote sea lo bastante estable para utilizarlo como identificador de caso de ProcessMind. Si el caso de negocio requiere distinguir valores de lote idénticos entre unidades organizativas por material, planta o almacén, 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 el tratamiento de las zonas horarias. MATDOC registra contabilizaciones de documentos, por lo que los registros de reversión y cancelación pueden aparecer como eventos separados, salvo que se excluyan o asignen explícitamente.
- Exporte los resultados 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 uniforme y conserve los ceros iniciales en los valores de material, lote, planta y almacén.
- 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 confíe en que ProcessMind infiera actividades, combine registros o derive eventos que falten.
Configuración
- Método de extracción: consulta SQL directa a 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 pertinentes y el nivel de lote en el sistema de destino.
- Intervalo de fechas: comience con tres a seis meses. Utilice EventTime basado en la fecha y la hora de contabilización del documento de material disponibles en MATDOC. Para las cargas incrementales, utilice una ventana de solapamiento controlada para capturar contabilizaciones tardías y elimine después los duplicados mediante los identificadores configurados de documento y posición.
- Filtros necesarios: configure el código de empresa, la planta, 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. Antes de añadir los campos de código de empresa y tipo de documento a la consulta, confirme que estén disponibles en la versión instalada.
- Asignación de actividades: el significado de los tipos de movimiento depende de la configuración. Mantenga una tabla de asignaciones aprobada o sustituya las listas de tipos de movimiento de la consulta por los valores que utiliza la empresa. No considere universales las listas de ejemplo ni su significado en SAP.
- Alcance de los lotes: la consulta excluye las filas sin valor de lote porque el identificador de caso es InventoryBatchLot. Si necesita obtener el lote a partir de otra fuente, configúrela explícitamente 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 actividades de recogida, decisiones de calidad, cambios en el estado del lote ni otras actividades a partir de registros posteriores.
- Cambios en los datos maestros de lotes: MATDOC por sí solo no representa de forma fiable los cambios de estado de los lotes. Configure una fuente de documentos de modificación o de historial de lotes para la actividad «Estado del lote cambiado». La consulta incluye una rama de marcador de posición que debe conectarse a una fuente verificada antes de ejecutarla.
- Recogida: el inicio de la recogida suele registrarse en los datos de ejecución del almacén, no como 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, planta, código de empresa y tipos de movimiento pertinentes. Seleccione solo las columnas necesarias, evite las consultas sin restricciones a todo el historial y ejecute la extracción durante un periodo de carga aprobado. Para grandes volúmenes de MATDOC, se recomienda realizar extracciones particionadas o incrementales.
- Autorizaciones y requisitos previos: obtenga conectividad de base de datos aprobada, acceso al esquema, autorización de lectura y acceso a los datos de inventario de SAP S/4HANA, así como a cualquier fuente de ejecución del almacén o de historial de modificaciones utilizada para las dos actividades que no proceden de MATDOC. Confirme que el acceso directo a la base de datos cumpla el modelo operativo y las políticas 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 uniforme antes de cargar los datos 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.
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 con el código de transacción
SE38. - Cree un programa nuevo: Introduzca un nombre para el programa en el campo «Programa», por ejemplo,
Z_PM_INVENTORY_EXTRACT, y haga clic en el botón «Crear». Añada un título descriptivo, seleccione «Programa ejecutable» en «Tipo» y guárdelo en un paquete. - Defina los parámetros del programa: En el editor, defina la pantalla de selección que servirá de interfaz para la extracción. Así, los usuarios podrán especificar parámetros como el intervalo de fechas y el centro para extraer los datos.
- Implemente la lógica de extracción: Copie todo el código ABAP de la sección «Consulta» y péguelo en el editor ABAP. Este código está diseñado para seleccionar datos de las 14 actividades de inventario requeridas en distintas tablas SAP.
- Comprenda la lógica principal: El programa selecciona los datos de cada actividad de inventario en sus tablas de origen, como
MKPFyMSEGpara los movimientos de materiales, oCDHDRyCDPOSpara los cambios en los 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 última parte del código escribe los datos consolidados de la tabla interna en un archivo. Para ello, utiliza la instrucción
OPEN DATASET, que crea 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 con F8. En la pantalla de selección, introduzca el intervalo de fechas deseado y los demás filtros pertinentes, como el centro o la sociedad.
- Ejecútelo como tarea en segundo plano: Si el volumen de datos es grande, es fundamental ejecutar el programa como tarea en segundo plano para evitar que se agote el tiempo de espera de la sesión. En la pantalla de ejecución (F8), vaya al menú
Programa -> Ejecutar en segundo plano. Programe la tarea para que se ejecute fuera de las horas de mayor actividad. - Recupere el archivo de salida: Cuando termine la tarea, localice el archivo de salida en el servidor de aplicaciones SAP. Use el código de transacción
AL11para explorar los directorios del servidor y encontrar el archivo. Use la transacciónCG3Ypara descargarlo del servidor de aplicaciones a su equipo. - Prepare el archivo para cargarlo: Abra el archivo descargado en un editor de texto o una hoja de cálculo. Compruebe que tenga formato CSV, una fila de encabezado, comas como delimitadores y comillas dobles para delimitar el texto. Antes de cargarlo en la herramienta de Process Mining, verifique que los nombres de las columnas coincidan con los requisitos.
Configuración
- Intervalo de fechas de contabilización: Es el parámetro más importante. Recomendamos extraer los datos en lotes manejables, por ejemplo, de 3 a 6 meses cada vez, para mantener un buen rendimiento y evitar que se agote el tiempo de espera del sistema.
- Filtro por centro: Se recomienda encarecidamente 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 por sociedad: Puede añadir un filtro opcional por sociedad (
BUKRS) para limitar aún más el alcance de los datos si su organización opera con varias sociedades en el mismo sistema. - Ruta del archivo en el servidor de aplicaciones: El programa ABAP requiere una ruta de directorio válida y definida previamente en el servidor de aplicaciones SAP. Compruebe que el usuario del sistema SAP (
SY-UNAME) tenga los permisos necesarios a nivel del sistema operativo para escribir archivos en ese directorio. - Autorizaciones: El usuario que ejecute la extracción necesita autorización para la transacción
SE38(para crear y ejecutar el programa), acceso de visualización a las tablasMKPF,MSEG,MCH1,CDHDR,CDPOS,LTAKyLTAP, y permiso para programar tareas en segundo plano (SM36/SM37).
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 las operaciones de gestión de inventario. Comience hoy mismo a mejorar la eficiencia y reducir los costes.
Optimice la gestión de inventario en SAP S/4HANA
Localice ineficiencias, reduzca el tiempo de ciclo un 30 % y ahorre costes.
No se requiere tarjeta de crédito • Configuración en minutos