Su Template de Datos para Gestión de Inventario
Su Template de Datos para Gestión de Inventario
- Atributos recomendados para recopilar
- `Actividades` clave para rastrear en el descubrimiento de procesos
- Guía de extracción adaptada para SAP S/4HANA
Atributos de Gestión de Inventario
| Nombre | Descripción | ||
|---|---|---|---|
| Hora del Evento EventTime | La fecha y hora precisas en que la actividad de inventario fue registrada en el sistema. | ||
| Descripción
La precisión del Por qué es importante Esta marca de tiempo ordena los eventos cronológicamente y es la base para todos los cálculos de duración y rendimiento. Dónde obtener Esto es típicamente una combinación de la fecha de contabilización (MKPF-BUDAT) y la hora de entrada (MKPF-CPUTM) de la tabla de cabecera del documento de material MKPF. Ejemplos 2023-10-26T09:00:00Z2023-11-15T14:35:10Z2024-01-05T23:15:00Z | |||
| Lote/Partida de Inventario InventoryBatchLot | El identificador único para una cantidad específica de un producto, que sirve como ID de caso para rastrear su ciclo de vida. | ||
| Descripción El número de Lote o Partida de Inventario es el identificador de caso principal que agrupa todas las actividades relacionadas con una cantidad específica y distinta de un producto. Esto permite una vista cronológica completa del recorrido de una cantidad de stock, desde su recepción inicial en el almacén, a través de varios movimientos internos y cambios de estado, hasta su eventual emisión para una venta, producción o disposición. En el análisis de procesos, este atributo es fundamental. Le permite rastrear el flujo de principio a fin para cada lote, medir con precisión los tiempos de ciclo, identificar variaciones en el proceso y comprender cómo se manejan los diferentes lotes. Analizar los procesos a nivel de lote es crucial para industrias donde la trazabilidad, el control de calidad y la gestión de la fecha de caducidad son críticos, como la farmacéutica, la alimentaria y de bebidas, y la química. Por qué es importante Este es el identificador central que conecta todos los eventos de inventario relacionados en un solo caso, haciendo posible el análisis de procesos de principio a fin. Dónde obtener Este es típicamente el Número de Lote, que se encuentra en tablas SAP como MCHA (Maestro de Lotes) o MCH1 (Lotes) en el campo CHARG. Ejemplos B001-A452023L202405-XYZ789456123BATCH-05-24 | |||
| Actividad ActivityName | El nombre del evento de negocio que ocurrió en un punto específico 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 comerciales clave como la recepción de mercancías, el movimiento de existencias, la realización de una inspección de calidad o la emisión de materiales. Cada actividad es un registro de algo que le sucedió al lote de inventario en un momento específico. El análisis de actividades es la base de Process Mining. Permite la visualización del flujo del proceso, la identificación de rutas frecuentes y raras, la detección de cuellos de botella donde las actividades se retrasan y el análisis de bucles de retrabajo. Al comprender la secuencia y frecuencia de actividades como 'Stock Desechado' o 'Inspección de Calidad', las empresas pueden identificar áreas para la mejora de procesos y la eficiencia operativa. Por qué es importante Define los pasos del proceso, permitiendo la visualización y el análisis del ciclo de vida del inventario. Dónde obtener Este es un atributo derivado, a menudo mapeado desde Tipos de Movimiento SAP (MSEG-BWART) o Códigos de Transacción (MKPF-TCODE2) a nombres amigables para el usuario. Ejemplos Entrada de Mercancías RegistradaTransferencia de Ubicación ContabilizadaSalida de Mercancías para Entrega ContabilizadaStock desguazado | |||
| Cantidad Quantity | La cantidad de material involucrada en el movimiento de inventario. | ||
| Descripción Este atributo representa la cantidad de material que fue movido, recibido, emitido o ajustado en una actividad dada. Se registra en la unidad de medida base para el material. Analizar la cantidad es crucial para comprender la escala y el impacto de los procesos de inventario. Permite la creación de dashboards que visualizan el volumen de mercancías que se manejan, como 'Rendimiento de Salida de Mercancías por SKU'. También se utiliza para calcular KPIs como la 'Ratio de Stock Desechado/Dispuesto', proporcionando una dimensión cuantitativa al análisis de procesos que va más allá de solo contar eventos. Por qué es importante Cuantifica el volumen de material en cada actividad, permitiendo el análisis del rendimiento, el volumen de desecho y el impacto de los ajustes. Dónde obtener Se encuentra en la tabla de posición de Ejemplos 10012.55000-10 | |||
| Código de motivo de movimiento MovementReasonCode | Un código que especifica el motivo de un movimiento de inventario. | ||
| Descripción El código de Motivo de Movimiento proporciona contexto adicional sobre por qué se realizó un movimiento de mercancías. A menudo se utiliza para explicar movimientos no planificados, como ajustes de inventario, devoluciones o desecho. Este atributo es extremadamente valioso para el análisis de causa raíz. Para el dashboard 'Factores de Ajuste Manual de Inventario', analizar por código de motivo puede revelar por qué ocurren discrepancias, como daños, robos o errores de entrada de datos. Este conocimiento ayuda a las empresas a abordar los problemas subyacentes en lugar de solo corregir los síntomas. Por qué es importante Explica el 'porqué' detrás de los movimientos de inventario no planificados, permitiendo un análisis de causa raíz dirigido. Dónde obtener Se encuentra en la tabla de posición de 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 SAP del empleado que contabilizó el documento o ejecutó la actividad. Proporciona trazabilidad al mostrar quién es responsable de acciones específicas dentro del proceso de gestión de inventario. Analizar por usuario es esencial para comprender el rendimiento, el cumplimiento y las necesidades de capacitación. Por ejemplo, el dashboard 'Factores de Ajuste Manual de Inventario' utiliza este atributo para ver quién realiza la mayoría de los ajustes. Puede ayudar a identificar usuarios que pueden requerir capacitación adicional, resaltar actividades no autorizadas o reconocer a los de mejor rendimiento. Por qué es importante Proporciona rendición de cuentas y ayuda a identificar comportamientos específicos de usuarios, necesidades de capacitación o problemas de cumplimiento. Dónde obtener Se encuentra en la tabla de cabecera de Ejemplos JSMITHMBROWNWAREHOUSE_OPS | |||
| Número de Material MaterialNumber | El identificador único para el producto o material que se está gestionando. | ||
| Descripción El Número de Material, a menudo conocido como SKU (Stock Keeping Unit), es el código único asignado a un producto específico. Es un elemento fundamental de los datos maestros en la gestión de inventario, utilizado para rastrear cantidades, valores y movimientos de mercancías. En Process Mining, analizar por Número de Material permite una vista centrada en el producto de los procesos de inventario. 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 tienen el mayor volumen de transferencias internas. Esta segmentación es crucial para identificar problemas específicos del producto y optimizar las estrategias de inventario para diferentes tipos de mercancías. Por qué es importante Permite la segmentación del análisis por producto, revelando patrones y problemas específicos de ciertos artículos. Dónde obtener Se encuentra en la tabla de posición de Ejemplos RM-1001FG-2050-B100-400-A | |||
| Planta Plant | La unidad organizacional que representa una instalación donde se encuentra el inventario, como una fábrica o un centro de distribución. | ||
| Descripción Un Analizar por Por qué es importante Permite comparar los procesos y el rendimiento del inventario en diferentes ubicaciones de la empresa. Dónde obtener Se encuentra en la tabla de posición de Ejemplos 10001710DE01US01 | |||
| 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 Tipo de Movimiento es una clave de control crítica en la Gestión de Inventario de SAP que determina las características de un movimiento de material. Especifica qué cuentas se actualizan, cómo aparece el diseño de la pantalla para la transacción y qué campos de cantidad o valor se actualizan. Por ejemplo, '101' es para entrada de mercancías, '311' es para un traspaso, y '551' es para desecho. Este atributo es a menudo la fuente para derivar el nombre de 'Actividad' amigable para el usuario. Analizar procesos por Tipo de Movimiento permite una vista técnica detallada de cómo fluye el inventario. Es esencial para validar la precisión del mapa de procesos y para identificar tipos específicos de transacciones que pueden estar causando cuellos de botella o desviaciones. Por qué es importante Ofrece una clasificación técnica precisa de cada evento de inventario, crucial para derivar actividades y para un análisis detallado. Dónde obtener Se encuentra en la tabla de posición de Ejemplos 101311261551601 | |||
| Ubicación de Almacenamiento StorageLocation | Una ubicación específica dentro de un `Plant` donde el stock se almacena físicamente. | ||
| Descripción Una Este Por qué es importante Proporciona una vista granular de la ubicación del stock dentro de una planta, ayudando a analizar los movimientos internos y la eficiencia del almacenamiento. Dónde obtener Se encuentra en la tabla de posición de Ejemplos 0001RM01FG01QI01 | |||
| Contenedor de Almacenamiento StorageBin | La unidad de almacenamiento más granular en un almacén donde los materiales están ubicados físicamente. | ||
| Descripción Un Para el Por qué es importante Proporciona los datos de ubicación más granulares, permitiendo el análisis de la utilización del espacio del almacén y la eficiencia operativa. Dónde obtener Si utiliza WM, esto se puede encontrar en tablas de órdenes de traslado como LTAK/LTAP. Para Ejemplos A-01-01-AB-05-10-CRCV-AREA-01 | |||
| Fecha de Vencimiento ExpirationDate | La fecha en la que el lote de material caduca y ya no es utilizable. | ||
| Descripción La Fecha de Caducidad (SLED) es una pieza crítica de los datos maestros para bienes perecederos o sensibles al tiempo. Se gestiona a nivel de lote y dicta cuándo un producto ya no puede ser vendido o consumido. Este atributo es esencial para el dashboard 'Análisis de Stock Obsoleto y Caducado'. Al analizar las actividades en el contexto de la fecha de caducidad, las empresas pueden identificar lotes en riesgo de caducar y tomar medidas proactivas. Ayuda a medir la efectividad de las políticas de rotación de inventario como Primero en Caducar, Primero en Salir (FEFO) y a cuantificar las pérdidas debidas a stock caducado desechado. Por qué es importante Permite el análisis de existencias obsoletas y caducadas, ayudando a minimizar el desperdicio y las pérdidas financieras. Dónde obtener Se encuentra en la tabla maestra de lotes MCH1 o MCHA, campo VFDAT (Fecha de Caducidad/Vencimiento). 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 que registra el movimiento de mercancías. | ||
| Descripción Cuando se registra un movimiento de mercancías en SAP, el sistema genera un documento de material como prueba del movimiento. Este atributo es el identificador único de dicho documento. Un solo documento de material puede contener múltiples partidas o actividades. En el Process Mining, el número de documento de material es un identificador transaccional clave que se puede utilizar para agrupar eventos relacionados que se registraron conjuntamente. También es esencial para la auditoría y para profundizar desde el análisis del proceso hasta el sistema de origen para investigar transacciones específicas. Por qué es importante Sirve como clave transaccional para auditoría y permite agrupar actividades que se ejecutaron juntas. Dónde obtener Se encuentra en las tablas MKPF (cabecera) y MSEG (posición), campo MBLNR (Número de Documento de Material). Ejemplos 490000123450000056784900002345 | |||
| Source System 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 crucial en entornos donde los datos pueden extraerse de múltiples ERP, sistemas de gestión de almacenes o plataformas heredadas. Aunque pueda parecer estático en un análisis de un solo sistema, se vuelve vital al fusionar datos de diferentes fuentes para crear una vista holística del proceso. Ayuda en la gobernanza de datos, la resolución de problemas de extracción de datos y garantiza que el linaje de los datos sea claro. Por qué es importante Proporciona contexto sobre el origen de los datos, lo cual es esencial para la gobernanza de datos y el análisis multisistema. Dónde obtener Este es típicamente un valor fijo establecido 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 Inspección de Calidad QualityInspectionCycleTime | La duración que un lote permanece en inspección de calidad antes de ser liberado. | ||
| Descripción Esta métrica calculada mide el tiempo transcurrido entre la actividad 'Stock Contabilizado a Inspección de Calidad' y la actividad 'Stock de Inspección de Calidad Liberado' para un lote de inventario dado. Representa el tiempo que las mercancías no están disponibles para su uso debido a los procesos de control de calidad. Este atributo apoya directamente el KPI y el dashboard 'Tiempo de Ciclo de Inspección de Calidad'. Al calcular y analizar esta duración, las empresas pueden identificar cuellos de botella en el proceso de calidad, comparar el rendimiento entre diferentes materiales o plantas, y encontrar oportunidades para agilizar las inspecciones para mejorar la disponibilidad general del stock y reducir los tiempos de entrega. Por qué es importante Cuantifica las demoras causadas por el control de calidad, destacando oportunidades para aumentar la disponibilidad de existencias y la velocidad del proceso. Dónde obtener Este es un campo calculado, derivado al encontrar la diferencia de tiempo entre las marcas de tiempo de las actividades de inicio y fin de la fase de inspección de calidad. Ejemplos 2880086400172800 | |||
| Tiempo de Ciclo de Preparación de Pedidos OrderFulfillmentCycleTime | La duración de principio a fin desde que comienza el picking hasta que se emiten las mercancías para la entrega. | ||
| Descripción Esta es una métrica calculada que mide el tiempo total desde la actividad 'Picking Iniciado' hasta la actividad 'Salida de Mercancías para Entrega Contabilizada'. Representa el tiempo total que tarda el almacén en preparar y enviar un pedido de cliente una vez que comienza el proceso. Este atributo es una medida directa del KPI 'Tiempo de Ciclo de Preparación 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 dónde se producen demoras en el proceso de picking, embalaje y envío, lo que impacta directamente 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 en la satisfacción del cliente. Dónde obtener Este es un atributo calculado, derivado al computar la diferencia de tiempo entre los eventos 'Picking Iniciado' y 'Salida de Mercancías para Entrega Contabilizada' para cada lote. Ejemplos 7200144003600 | |||
| Tipo de Stock StockType | Indica el estado del inventario, como libre utilización, en inspección de calidad o bloqueado. | ||
| Descripción El Tipo de Stock categoriza el inventario según su usabilidad. Los tipos principales son el stock de libre utilización (disponible libremente), el stock en inspección de calidad (pendiente de controles de calidad) y el stock bloqueado (no disponible para uso). Los movimientos de mercancías a menudo implican cambiar el tipo de stock. El seguimiento de los cambios en el tipo de stock es fundamental para comprender el proceso de disponibilidad de inventario. Apoya directamente actividades como 'Stock Contabilizado a Inspección de Calidad' y 'Estado del Stock Cambiado a Bloqueado'. Analizar el tiempo que se permanece en cada tipo de stock, especialmente en 'inspección de calidad', es clave para identificar demoras que impactan la disponibilidad de mercancías para la venta o producción. Por qué es importante Rastrea el estado de usabilidad del inventario, lo cual es crucial para analizar las demoras en la inspección de calidad y la disponibilidad del stock. Dónde obtener Se encuentra en la tabla de posición de Ejemplos Libre UtilizaciónInspección de calidadStock Bloqueado | |||
| Última actualización de datos LastDataUpdate | El timestamp 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 de datos más reciente del sistema de origen. Proporciona metadatos cruciales sobre la actualidad de la información que se analiza. Esto ayuda a los usuarios a comprender si están viendo datos casi en tiempo real o una instantánea de un período anterior. En cualquier análisis, conocer la puntualidad de los datos es clave para sacar conclusiones relevantes y precisas. Este campo permite a los analistas y usuarios de negocio confirmar la actualidad de los datos y a menudo se muestra en los dashboards para proporcionar contexto a los conocimientos presentados. Por qué es importante Informa a los usuarios sobre la actualidad de los datos, asegurando que los análisis se basen en información actualizada. Dónde obtener Este Ejemplos 2024-05-21T08:00:00Z2024-05-20T08:00:00Z | |||
| Unidad de Medida UnitOfMeasure | La unidad en la que se mide la cantidad del material (ej. piezas, kilogramos). | ||
| Descripción La Unidad de Medida especifica la unidad para el atributo 'Cantidad'. Ejemplos comunes incluyen piezas (PC), kilogramos (KG), litros (L) o cajas (BOX). Esto proporciona un contexto esencial para el campo de cantidad. Aunque a menudo se usa como un simple descriptor, este atributo es importante para garantizar la calidad de los datos y para análisis donde diferentes unidades necesitan ser convertidas a un estándar común. Por ejemplo, para calcular con precisión el valor total del inventario desechado, las cantidades en diferentes unidades deben entenderse y potencialmente convertirse. Por qué es importante Proporciona un contexto esencial al atributo 'Cantidad', asegurando una interpretación precisa de los volúmenes de material. Dónde obtener Se encuentra en la tabla de posición de Ejemplos PCKGEAM | |||
Actividades de Gestión de Inventario
| Actividad | Descripción | ||
|---|---|---|---|
| Ajuste de Inventario Contabilizado | Registra un cambio en la cantidad de stock resultante de un recuento de inventario 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 críticos para mantener la precisión del inventario. Una alta frecuencia de ajustes indica problemas subyacentes en el manejo del stock, la seguridad o la entrada de datos. Dónde obtener Registrado en la tabla MATDOC. Identificado por Tipos de Movimiento de inventario físico (BWART), como 701 (ganancia de inventario) o 702 (pérdida de inventario). Capturar Capturado de Tipo de evento explicit | |||
| Entrada de Mercancías Registrada | Marca la entrada inicial de un lote de inventario en el almacén, generalmente de un proveedor o de producción. Este evento se captura explícitamente en SAP S/4HANA al crear un documento de material al recibir las mercancías. | ||
| Por qué es importante Este es el evento de inicio principal para el ciclo de vida del inventario. Analizar el tiempo desde esta actividad hasta otras, como la ubicación, es crucial para medir la eficiencia del muelle de recepción. Dónde obtener Registrado en la tabla MATDOC. Identificado por Tipos de Movimiento (BWART) específicos, como 101 para recepciones de Pedido de Compra o 103 para Entrada de Mercancías a stock bloqueado. Capturar Capturado de Tipo de evento explicit | |||
| Salida de Mercancías para Entrega Contabilizada | Registra el paso final del proceso de salida, donde la propiedad del lote se transfiere a un cliente o transportista. Esta es una transacción explícita que reduce el inventario y contabiliza en contabilidad. | ||
| Por qué es importante Este es un evento clave de finalización para el proceso de preparación de pedidos. Es crucial para medir la entrega a tiempo y calcular el tiempo de ciclo total de la preparación de pedidos. Dónde obtener Registrado en la tabla MATDOC. Identificado por el Tipo de Movimiento (BWART) para la salida de mercancías a una entrega de pedido de venta, típicamente 601. Capturar Capturado de Tipo de evento explicit | |||
| Salida de Mercancías para Producción Contabilizada | Representa el consumo de un lote de inventario por una orden de producción o proceso. Esta transacción reduce el inventario y asigna el costo del material a la orden de fabricación. | ||
| Por qué es importante Este es un evento de consumo primario, que marca el final del ciclo de vida del inventario para los componentes. Es crítico para analizar la disponibilidad de material para la producción y los patrones de consumo. Dónde obtener Registrado en la tabla MATDOC. Comúnmente identificado por Tipos de Movimiento (BWART) para la salida de mercancías a un pedido, como 261. Capturar Capturado de Tipo de evento explicit | |||
| Stock de Inspección de Calidad Liberado | Indica que un lote ha pasado la inspección de calidad y ahora está disponible para su uso o `ubicación`. Esto se registra como un traspaso explícito de stock de calidad a otro tipo de stock, como el de libre utilización. | ||
| Por qué es importante Este hito marca la finalización del proceso de calidad, haciendo que el inventario esté disponible. Las demoras aquí pueden causar problemas significativos en la producción o en la preparación de pedidos. Dónde obtener Registrado en la tabla MATDOC como un traspaso. Típicamente identificado por el Tipo de Movimiento (BWART) 321, moviendo el stock de 'Inspección de Calidad' a 'Libre Utilización'. Capturar Capturado de Tipo de evento explicit | |||
| Stock desguazado | Marca la disposición final de un lote de inventario, eliminándolo permanentemente de los registros. Esto suele ocurrir con existencias caducadas, dañadas u obsoletas. | ||
| Por qué es importante Este es un evento final que representa una pérdida financiera. El análisis de los eventos de desecho ayuda a identificar problemas con el envejecimiento del inventario, los procedimientos de manejo o la previsión de la demanda. Dónde obtener Registrado en la tabla MATDOC. Identificado por Tipos de Movimiento (BWART) para desecho, como 551 (de libre utilización), 553 (de control de calidad) o 555 (de bloqueado). Capturar Capturado de Tipo de evento explicit | |||
| Transferencia de Ubicación Contabilizada | Representa el movimiento físico del lote desde un área de recepción o preparación a su ubicación o compartimento de almacenamiento final. Esto se registra como un documento de material de traspaso en SAP. | ||
| Por qué es importante Completa el proceso de recepción de entrada. El tiempo que lleva completar esta actividad, conocido como tiempo de Dónde obtener Registrado en la tabla MATDOC como un traspaso, a menudo entre ubicaciones de almacenamiento (ej. Tipo de Movimiento 311). El movimiento específico puede variar según la estructura del almacén. Capturar Identificado por Tipo de evento explicit | |||
| Devolución de Venta Recibida | Captura la devolución de un lote previamente emitido por un cliente al almacén. Esta 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 del cliente. El proceso de manejo y disposición de las devoluciones también puede ser una fuente de ineficiencia. Dónde obtener Registrado en la tabla MATDOC. Identificado por Tipos de Movimiento (BWART) para devoluciones de ventas, como 651 (a libre utilización) o 653 (a inspección de calidad). Capturar Capturado de Tipo de evento explicit | |||
| Estado de Lote Modificado | Refleja un cambio en el registro maestro del lote, como cambiar su estado de 'Libre Utilización' a 'Restringido'. Esto 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 impactan directamente su usabilidad en ventas o producción. Analizar estos cambios puede revelar problemas con stock que caduca o control de calidad que no implican movimiento físico. Dónde obtener Inferido de los logs de cambios para las tablas maestras de lotes (MCH1, MCHA). Las tablas CDHDR y CDPOS rastrean los cambios en el campo de estado del lote (MCH1-ZUSTD). Capturar Derivado de Tipo de evento inferred | |||
| Estado del Stock Cambiado a Bloqueado | Representa un cambio en el estado del lote, haciéndolo no disponible para su emisión, a menudo debido a daños, solicitudes de retención u otras razones. Este es un traspaso explícito en SAP. | ||
| Por qué es importante Destaca las interrupciones en la disponibilidad del inventario. Una alta frecuencia de Dónde obtener Registrado en la tabla MATDOC como un traspaso. Comúnmente utiliza el Tipo de Movimiento (BWART) 344 para mover stock de 'Bloqueado' a 'Libre Utilización', y 343 para mover de 'Libre Utilización' a 'Bloqueado'. Esta actividad es para 343. Capturar Identificado por Tipo de evento explicit | |||
| Estado del Stock Cambiado a Libre Utilización | Representa un cambio en el estado del lote, liberándolo de una retención por bloqueo o calidad y haciéndolo disponible para su uso. Esto se registra como un traspaso explícito. | ||
| Por qué es importante Esta actividad marca la resolución de una retención de inventario. El tiempo que el stock permanece en estado bloqueado puede analizarse para mejorar los procesos de resolución. Dónde obtener Registrado en la tabla MATDOC como un traspaso. El Tipo de Movimiento (BWART) 344 mueve el stock de 'Bloqueado' a 'Libre Utilización'. Capturar Identificado por Tipo de evento explicit | |||
| Picking Iniciado | Marca el inicio del proceso de preparación de pedidos, donde se crea una tarea de almacén para recoger un lote de su ubicación de almacenamiento. Esto a menudo se captura cuando se crea una Orden de Transferencia o una Tarea de Almacén. | ||
| Por qué es importante Esta actividad es el desencadenante del proceso de picking. Analizar el tiempo desde este evento hasta la finalización del picking ayuda a medir la eficiencia del operador del almacén e identificar demoras. Dónde obtener Esto típicamente no está en MATDOC. En sistemas con Warehouse Management (WM/EWM), se infiere de la marca de tiempo de creación de una Orden de Transferencia (tabla LTAK) o Tarea de Almacén. Capturar Inferido del registro de creación de una Orden de Traslado (en WM) o una Tipo de evento inferred | |||
| Stock Contabilizado a Inspección de Calidad | Representa el movimiento de un lote recibido a un estado de retención de inspección de calidad, haciéndolo no disponible para su uso hasta que sea liberado. Esta es 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 esta y la liberación del control de calidad es una métrica clave para comprender las demoras relacionadas con la calidad. Dónde obtener Registrado en la tabla MATDOC. Esto puede ser un movimiento de entrada de mercancías (ej. 101) con el Tipo de Stock (INSMK) establecido en 'Q' (Inspección de Calidad) o un traspaso (ej. 322). Capturar Identificado por Tipo de evento explicit | |||
| Traspaso Interno de Stock Contabilizado | Captura el movimiento de un lote de inventario entre diferentes `storage locations` o `bins` dentro del mismo `Plant`. Esta 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 tiempo de entrega para el reabastecimiento de stock entre ubicaciones. Dónde obtener Registrado en la tabla MATDOC. Comúnmente identificado por Tipos de Movimiento (BWART) 311 para transferencias de ubicación de almacenamiento a ubicación de almacenamiento. Capturar Capturado de Tipo de evento explicit | |||
Guías de Extracción
Pasos
- Establecer Acceso al Sistema: Asegúrese de tener un usuario con las autorizaciones necesarias para consultar vistas de Core Data Services (CDS) en el sistema SAP S/4HANA. Esto normalmente requiere acceso concedido por un administrador de sistema.
- Elegir un Cliente SQL: Seleccione una herramienta cliente SQL que pueda conectarse a la base de
datosSAP HANA. Las opciones comunes incluyen SAP HANA Studio, SAP HANA Database Explorer o herramientas de terceros como DBeaver. - Configurar la Conexión a la Base de
Datos: Usando su cliente SQL, cree una nueva conexión a la base dedatos. Necesitará el nombre de host de la base dedatosHANA, el número de puerto (típicamente 315) y sus credenciales de usuario de la base de datos. - Preparar la Consulta SQL: Copie la consulta SQL completa proporcionada en la sección 'Query' de este documento en el editor de su cliente SQL.
- Establecer Parámetros de Consulta: Localice los valores de los marcadores de posición dentro de la consulta. Debe reemplazar
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'con su rango de fechas deseado, por ejemplo,BETWEEN '20230101' AND '20230630'. Además, actualice cualquier filtro específico deCompanyoPlantcomoMaterialDocumentItem.Plant IN ('Plant1', 'Plant2')para que coincida con su estructura organizacional. - Ejecutar la Consulta: Ejecute la consulta SQL modificada contra la base de
datosS/4HANA. El tiempo de ejecución variará según el rango de fechas y el volumen dedatosde inventario en su sistema. - Revisar los
Datos: Una vez que la consulta finalice, revise los resultados en su cliente SQL para asegurarse de que son correctos y completos. Verifique la presencia de diferentes actividades y la población deatributosclave. - Exportar el
Registro de Eventos: Exporte el conjunto completo de resultados de su cliente SQL a un archivo CSV. Asegúrese de que la configuración de exportación utilice codificación UTF-8 para evitar problemas de caracteres. - Preparar para
Upload: Nombre las columnas del archivo CSV exactamente como sealiasen la consulta, por ejemplo,InventoryBatchLot,ActivityName,EventTime, y así sucesivamente. Este archivo ya está listo para serupload(subido) a una herramienta deProcess Mining.
Configuración
- Autorizaciones: El usuario que ejecuta la consulta necesita permisos de
SELECTen las siguientes vistas CDS:I_MaterialDocumentItem,I_BatchChangeDocumenteI_WarehouseTask. También se requiere acceso al esquema de base dedatossubyacente donde residen estas vistas. - Filtrado por Rango de Fechas: Es crucial aplicar un filtro de rango de fechas a los campos
PostingDate,ChangeDocumentCreationDateoWarehouseTaskCreationDate. Un rango típico para el análisis es de 3 a 12 meses. Consultardatosde varios años puede causar problemas significativos de rendimiento. - Filtros Organizacionales: Para un mejor rendimiento y un análisis más dirigido, añada cláusulas
WHEREpara filtrar porPlantoCompanyCode. Esto reduce el volumen dedatosy enfoca la extracción en las partes relevantes del negocio. - Volumen de
Datos: Tenga en cuenta que los sistemas de gestión de inventario generan un alto volumen dedatos. Un rango de fechas amplio puede resultar en millones de filas, lo que podría afectar tanto al sistema de origen durante la extracción como al rendimiento de su herramienta cliente. - Extended Warehouse Management (EWM): La actividad 'Picking Iniciado' depende de la vista CDS
I_WarehouseTask, que solo se rellena 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 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
- Establecer Acceso al Sistema: Asegúrese de tener un usuario con las autorizaciones necesarias para consultar vistas de Core Data Services (CDS) en el sistema SAP S/4HANA. Esto normalmente requiere acceso concedido por un administrador de sistema.
- Elegir un Cliente SQL: Seleccione una herramienta cliente SQL que pueda conectarse a la base de
datosSAP HANA. Las opciones comunes incluyen SAP HANA Studio, SAP HANA Database Explorer o herramientas de terceros como DBeaver. - Configurar la Conexión a la Base de
Datos: Usando su cliente SQL, cree una nueva conexión a la base dedatos. Necesitará el nombre de host de la base dedatosHANA, el número de puerto (típicamente 315) y sus credenciales de usuario de la base de datos. - Preparar la Consulta SQL: Copie la consulta SQL completa proporcionada en la sección 'Query' de este documento en el editor de su cliente SQL.
- Establecer Parámetros de Consulta: Localice los valores de los marcadores de posición dentro de la consulta. Debe reemplazar
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'con su rango de fechas deseado, por ejemplo,BETWEEN '20230101' AND '20230630'. Además, actualice cualquier filtro específico deCompanyoPlantcomoMaterialDocumentItem.Plant IN ('Plant1', 'Plant2')para que coincida con su estructura organizacional. - Ejecutar la Consulta: Ejecute la consulta SQL modificada contra la base de
datosS/4HANA. El tiempo de ejecución variará según el rango de fechas y el volumen dedatosde inventario en su sistema. - Revisar los
Datos: Una vez que la consulta finalice, revise los resultados en su cliente SQL para asegurarse de que son correctos y completos. Verifique la presencia de diferentes actividades y la población deatributosclave. - Exportar el
Registro de Eventos: Exporte el conjunto completo de resultados de su cliente SQL a un archivo CSV. Asegúrese de que la configuración de exportación utilice codificación UTF-8 para evitar problemas de caracteres. - Preparar para
Upload: Nombre las columnas del archivo CSV exactamente como sealiasen la consulta, por ejemplo,InventoryBatchLot,ActivityName,EventTime, y así sucesivamente. Este archivo ya está listo para serupload(subido) a una herramienta deProcess Mining.
Configuración
- Autorizaciones: El usuario que ejecuta la consulta necesita permisos de
SELECTen las siguientes vistas CDS:I_MaterialDocumentItem,I_BatchChangeDocumenteI_WarehouseTask. También se requiere acceso al esquema de base dedatossubyacente donde residen estas vistas. - Filtrado por Rango de Fechas: Es crucial aplicar un filtro de rango de fechas a los campos
PostingDate,ChangeDocumentCreationDateoWarehouseTaskCreationDate. Un rango típico para el análisis es de 3 a 12 meses. Consultardatosde varios años puede causar problemas significativos de rendimiento. - Filtros Organizacionales: Para un mejor rendimiento y un análisis más dirigido, añada cláusulas
WHEREpara filtrar porPlantoCompanyCode. Esto reduce el volumen dedatosy enfoca la extracción en las partes relevantes del negocio. - Volumen de
Datos: Tenga en cuenta que los sistemas de gestión de inventario generan un alto volumen dedatos. Un rango de fechas amplio puede resultar en millones de filas, lo que podría afectar tanto al sistema de origen durante la extracción como al rendimiento de su herramienta cliente. - Extended Warehouse Management (EWM): La actividad 'Picking Iniciado' depende de la vista CDS
I_WarehouseTask, que solo se rellena 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 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
- Acceder al Editor ABAP: Inicie sesión en su sistema SAP S/4HANA. Abra el Editor ABAP utilizando el código de transacción
SE38. - Crear un Nuevo Programa: Introduzca un nombre para el nuevo programa en el campo 'Programa', por ejemplo,
Z_PM_INVENTORY_EXTRACT, y haga clic en el botón 'Crear'. Proporcione un título descriptivo, establezca el 'Tipo' como 'Programa Ejecutable' y guárdelo en un paquete. - Definir Parámetros del Programa: En el editor de programas, defina la pantalla de selección que servirá como interfaz de usuario para la extracción. Esto permite a los usuarios especificar parámetros como el rango de fechas y el
Plantpara la extracción dedatos. - Implementar 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
datosde las 14 actividades de inventario requeridas de varias tablas SAP. - Comprender la Lógica Central: El programa funciona seleccionando
datospara cada actividad de inventario distinta de sus tablas de origen, comoMKPFyMSEGpara movimientos de material oCDHDRyCDPOSpara cambios endatosmaestros. Cada selección se combina luego utilizandoUNION ALLen una única tabla interna que representa elregistro de eventos. - Configurar la Salida del Archivo: La parte final del código gestiona la escritura de los
datosconsolidados de la tabla interna a un archivo. Utiliza la declaraciónOPEN DATASETpara crear un archivo en el servidor de aplicaciones SAP. Debe especificar una ruta de servidor válida donde el usuario del sistema SAP tenga permisos de escritura. - Ejecutar el Programa: Guarde y active el programa ABAP (Ctrl+F3). Ejecútelo presionando F8. En la pantalla de selección, introduzca el rango de fechas deseado y cualquier otro filtro relevante, como
PlantoCompanyCode. - Ejecutar como
Background Job: Para grandes volúmenes dedatos, es crítico ejecutar el programa como unbackground jobpara evitar tiempos de espera de sesión. Desde la pantalla de ejecución (F8), vaya al menúProgram -> Execute in Background. Programe eljobpara que se ejecute durante las horas de menor actividad. - Recuperar el Archivo de Salida: Una vez que el
jobse complete, localice el archivo de salida en el servidor de aplicaciones SAP. Utilice el código de transacciónAL11para navegar por los directorios del servidor y encontrar su archivo. Utilice la transacciónCG3Yparadownload(descargar) el archivo del servidor de aplicaciones a su ordenador local. - Preparar para
Upload: Abra el archivo descargado en un editor de texto o software de hoja de cálculo. Asegúrese de que esté formateado como un archivo CSV con una fila de encabezado, utilizando una coma como delimitador y comillas dobles como calificador de texto. Verifique que los nombres de las columnas coincidan con los requisitos antes deupload(subir) a la herramienta deProcess Mining.
Configuración
- Rango de Fechas de Contabilización: Este es el parámetro más crítico. Recomendamos extraer los
datosen lotes manejables, de 3 a 6 meses a la vez, para asegurar un buen rendimiento y evitar tiempos de espera del sistema. - Filtro por
Plant: Es altamente recomendable filtrar por uno o variosPlantespecíficos (WERKS). Ejecutar la extracción para todos losPlantsimultáneamente puede consumir muchos recursos. - Filtro por
CompanyCode: Puede añadir un filtro opcional porCompanyCode(BUKRS) para limitar aún más el alcance de losdatossi su organización opera con múltiplesCompanyCodedentro del mismo sistema. - Ruta de Archivo en Servidor de Aplicaciones: El programa ABAP requiere una ruta de directorio predefinida y válida en el servidor de aplicaciones SAP. Asegúrese de que el usuario del sistema SAP (
SY-UNAME) tenga los permisos de nivel de sistema operativo necesarios para escribir archivos en este directorio. - Autorizaciones: El usuario que ejecuta esta extracción requiere 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 la capacidad de programarjobsen 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.