Su Plantilla de Datos de Planificación de Producción
Su Plantilla de Datos de Planificación de Producción
- Atributos recomendados para recopilar
- Actividades clave para el seguimiento
- Guía práctica de extracción
Atributos de Planificación de Producción
| Nombre | Descripción | ||
|---|---|---|---|
| Hora del Evento EventTime | La marca de tiempo precisa que indica cuándo ocurrió la actividad. | ||
| Descripción El Tiempo del Evento registra la fecha y hora en que se ejecutó una actividad específica o se registró un estado en el sistema. Esta marca de tiempo es fundamental para todos los análisis de procesos basados en el tiempo, incluyendo el cálculo de tiempos de ciclo, tiempos de espera y la duración total del proceso. Las marcas de tiempo precisas son cruciales para secuenciar correctamente los eventos y para el análisis de rendimiento. Permiten a los analistas medir la duración entre actividades, identificar retrasos y evaluar el rendimiento frente a los cronogramas o acuerdos de nivel de servicio. En el contexto de la planificación de la producción, esto ayuda a comprender cuánto tiempo lleva cada etapa de planificación y ejecución. Por qué es importante Este atributo proporciona la secuencia cronológica de eventos, que es esencial para calcular duraciones, analizar el rendimiento e identificar cuellos de botella. Dónde obtener Derivado de varios campos de fecha y hora asociados con transacciones y cambios de estado, como BUDAT (Fecha de Contabilización) de documentos de material o marcas de tiempo de cambio de CDHDR. Ejemplos 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| Nombre de la Actividad ActivityName | El nombre del evento de negocio o del sistema que ocurrió en un punto específico en el tiempo para una orden de producción. | ||
| Descripción El Nombre de la Actividad describe un paso específico o cambio de estado dentro del proceso de planificación de producción. Estos eventos se extraen de los logs de cambios, actualizaciones de estado y registros de transacciones dentro de SAP ECC PP, representando hitos clave como 'Orden de Producción Creada', 'Disponibilidad de Material Verificada' o 'Entrada de Mercancías Contabilizada'. Este atributo forma la columna vertebral del mapa de procesos, permitiendo a los analistas visualizar la secuencia de eventos, descubrir variantes de proceso e identificar cuellos de botella o bucles de reelaboración. La claridad y granularidad de los nombres de las actividades son críticas para construir un modelo de proceso preciso y perspicaz que refleje la realidad de las operaciones. Por qué es importante Define los pasos en el mapa de procesos, lo que permite visualizar, analizar y comprender el flujo de trabajo de producción. Dónde obtener Generado a partir de varias fuentes, incluyendo cambios de estado en las tablas JEST/JSTO, registros de transacciones y documentos de cambio en CDHDR/CDPOS. Ejemplos Orden de Producción LiberadaSalida de Mercancías ContabilizadaConfirmación Final RegistradaPedido Técnicamente Completado | |||
| Orden de Producción ProductionOrder | El identificador único para una orden de producción, que sirve como identificador principal de caso para el proceso de planificación y ejecución de la producción. | ||
| Descripción El número de Orden de Producción es una clave alfanumérica única asignada a cada orden de fabricación en SAP ECC PP. Actúa como el objeto central que vincula todas las actividades relacionadas, desde la creación y planificación hasta la ejecución y liquidación final. En Process Mining, este atributo es esencial para agrupar todos los eventos pertenecientes a una única ejecución de producción. Esto permite un análisis de principio a fin de todo el ciclo de vida de una orden de producción, incluyendo el seguimiento de su progreso, la medición de los tiempos de ciclo y la identificación de cualquier desviación del proceso estándar. Analizar los procesos por Orden de Producción proporciona una vista clara de cómo se cumplen las solicitudes de fabricación individuales. Por qué es importante Este es el identificador central que conecta todos los eventos de proceso relacionados, permitiendo la reconstrucción y el análisis de cada trayecto de producción de principio a fin. Dónde obtener Este atributo se puede encontrar en la tabla SAP AUFK, campo AUFNR. Ejemplos 1000345100034610003471000348 | |||
| Source System SourceSystem | Identifica el sistema específico del que se extrajeron los datos. | ||
| Descripción Este atributo especifica el sistema de origen del registro, como el nombre o ID de la instancia específica de SAP ECC. En organizaciones con múltiples sistemas ERP o una mezcla de plataformas heredadas y modernas, este campo es crucial para la trazabilidad y el contexto de los datos. Para el análisis, permite filtrar procesos basándose en su sistema de origen. Esto puede ser útil para comparar el rendimiento de procesos en diferentes sistemas o para aislar datos durante proyectos de consolidación de datos de múltiples sistemas. Por qué es importante Proporciona un contexto crucial sobre el origen de los datos, especialmente en entornos con múltiples instancias de SAP o sistemas integrados. Dónde obtener Se añade típicamente durante el proceso de extracción de datos, a menudo derivado del ID del sistema SAP (SY-SYSID). Ejemplos ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Última actualización de datos LastDataUpdate | La marca de tiempo que indica la última vez que se actualizaron o extrajeron los datos de este evento. | ||
| Descripción Este atributo registra la fecha y hora en que los datos fueron extraídos del sistema de origen a la herramienta de process mining. No representa un evento de negocio, sino que es una marca de tiempo técnica para fines de gestión de datos. Su uso principal es asegurar la frescura de los datos y ayudar a los administradores y analistas a comprender la actualidad de los datos que están analizando. Es crítico para validar que el análisis del proceso se basa en información actualizada, especialmente al monitorear operaciones en curso. Por qué es importante Confirma la actualidad de los datos, asegurando que los análisis se basen en la información más reciente disponible. Dónde obtener Este valor se genera y sella típicamente mediante la herramienta o script de extracción, transformación y carga de datos (ETL) durante el proceso de ingesta de datos. Ejemplos 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Cantidad Entregada DeliveredQuantity | La cantidad real del producto que ha sido producido y recibido en inventario. | ||
| Descripción La Cantidad Entregada, también conocida como Cantidad de Entrada de Mercancías, es la cantidad total de producto terminado que se ha confirmado como producido para una orden de producción determinada. Este valor se actualiza cuando ocurren eventos de 'Entrada de Mercancías Contabilizada'. Este atributo es la contraparte de la 'Cantidad Planificada' y es esencial para calcular el KPI de 'Variación de Cantidad Planificada vs. Real'. Proporciona una medida definitiva de la producción, permitiendo a los analistas identificar discrepancias que pueden ser causadas por desperdicio, pérdida de rendimiento u otros problemas de producción. Comparar las cantidades entregadas entre plantas, productos o períodos de tiempo resalta áreas con problemas de eficiencia. Por qué es importante Mide la producción real del proceso de producción, permitiendo una comparación directa con los objetivos planificados para evaluar el rendimiento. Dónde obtener Se encuentra en la tabla SAP AFPO, campo WEMNG (Cantidad de Mercancías Recibidas). Ejemplos 984950751255 | |||
| Cantidad Planificada PlannedQuantity | La cantidad total del producto programada para ser producida en la orden. | ||
| Descripción La Cantidad Planificada representa el objetivo de producción de una orden de fabricación, definido durante la fase de planificación. Este valor sirve como referencia para medir la producción real. Este atributo es fundamental para los KPIs relacionados con el rendimiento de la producción y el cumplimiento del cronograma, como la 'Varianza de Cantidad Planificada vs. Real'. Ayuda a evaluar la precisión de la planificación de la producción y a identificar problemas sistémicos relacionados con la sobreproducción o la subproducción. Analizar este valor es clave para comprender qué tan bien se alinea la ejecución de la producción con los planes iniciales. Por qué es importante Este atributo es la línea base para medir la varianza de la producción y evaluar la precisión de la planificación. Dónde obtener Este valor está disponible en la tabla SAP AFKO, campo GAMNG (Cantidad Total del Pedido). Ejemplos 1005000751250 | |||
| Código de Producto ProductCode | El identificador único para el material o producto que se está fabricando. | ||
| Descripción El Código de Producto, o Número de Material, identifica el artículo que la orden de producción está destinada a producir. Este es un elemento central de datos maestros que vincula la planificación de producción con la gestión de inventario, ventas y costes. En Process Mining, filtrar o segmentar por Código de Producto es crítico para comprender los procesos de fabricación específicos del producto. Ayuda a responder preguntas como '¿Qué productos tienen los tiempos de ciclo más largos?' o '¿Ciertos productos son más propensos a problemas de calidad o retrasos de material?'. Este análisis es vital para la gestión de la cartera de productos y la identificación de oportunidades para la estandarización u optimización de procesos para tipos de materiales específicos. Por qué es importante Permite un análisis de procesos específico por producto, revelando qué materiales están asociados con ineficiencias de proceso, retrasos o altos costos. Dónde obtener Esto se puede encontrar en la tabla SAP AFPO, campo MATNR. Ejemplos FG-123RM-45AHALB-7890CHEM-22 | |||
| Fecha de Fin Real ActualEndDate | La marca de tiempo de la actividad final de producción, que marca la finalización real de la orden. | ||
| Descripción La Fecha de Fin Real es la marca de tiempo del evento que significa la finalización de todas las actividades de producción para una orden. Esto se deriva comúnmente de la marca de tiempo de la 'Confirmación Final Registrada' o del último evento de 'Entrada de Mercancías Contabilizada'. Este atributo es esencial para medir el tiempo total del ciclo de producción y para el análisis de cumplimiento del cronograma. Comparar la 'Fecha de Fin Real' con la 'Fecha de Fin Planificada' determina si una orden se completó a tiempo. Analizar la duración entre la 'Fecha de Inicio Real' y la 'Fecha de Fin Real' arroja el verdadero tiempo de rendimiento de producción. Por qué es importante Marca la finalización de la producción, permitiendo una medición precisa del rendimiento de entrega a tiempo y el tiempo total de ejecución. Dónde obtener Derivado del registro de eventos al encontrar la marca de tiempo máxima de actividades clave de finalización como 'Confirmación Final Registrada' o 'Entrada de Mercancías Contabilizada'. Ejemplos 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| Fecha de Inicio Real ActualStartDate | La marca de tiempo de la primera actividad de producción registrada, que marca el inicio real de la ejecución. | ||
| Descripción La Fecha de Inicio Real es la marca de tiempo del primer evento que significa el comienzo del trabajo de producción física. Esto se deriva típicamente del primer evento de confirmación de producción o de la primera salida de mercancías de materias primas para la orden. Este atributo derivado es crucial para el análisis de cumplimiento del cronograma. Proporciona el punto de inicio real para comparar con la 'Fecha de Inicio Planificada', permitiendo el cálculo preciso de las varianzas del tiempo de inicio. Comprender la brecha entre las fechas de inicio planificadas y reales ayuda a identificar los retrasos previos a la producción relacionados con la preparación de materiales, la configuración de máquinas o la disponibilidad de recursos. Por qué es importante Proporciona el verdadero punto de partida de la ejecución de la producción, permitiendo un cálculo preciso de los retrasos de inicio y el tiempo total de entrega de la producción. Dónde obtener Derivado del registro de eventos al encontrar la marca de tiempo mínima de actividades de ejecución específicas como 'Primera Confirmación Registrada' o 'Salida de Mercancías Contabilizada' para cada orden de producción. Ejemplos 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Planta de Producción ProductionPlant | La instalación o ubicación de fabricación donde se ejecuta la orden de producción. | ||
| Descripción La Planta de Producción es una unidad organizacional clave en SAP que representa una instalación de fabricación. Se asigna a cada orden de producción y dicta dónde se llevarán a cabo físicamente las actividades de producción. Analizar el proceso por Planta de Producción permite comparar el rendimiento entre diferentes ubicaciones. Esto ayuda a identificar qué plantas son más eficientes, cuáles enfrentan más retrasos o faltas de material, y dónde se pueden compartir las mejores prácticas. Es una dimensión fundamental para el análisis de la causa raíz en dashboards relacionados con el rendimiento y la utilización de recursos. Por qué es importante Permite comparar el rendimiento entre diferentes ubicaciones de fabricación, ayudando a identificar problemas específicos del sitio o mejores prácticas. Dónde obtener Este atributo se almacena en la tabla SAP AUFK, campo WERKS. Ejemplos 100017102000DE01 | |||
| Disponibilidad de Materiales MaterialAvailabilityStatus | Indica si todos los componentes requeridos para la orden de producción están disponibles. | ||
| Descripción El Estado de Disponibilidad de Materiales es un indicador crítico de la preparación para la producción. Se determina mediante la verificación por parte del sistema de la disponibilidad de todos los materiales componentes requeridos para la orden. Un estado de 'Disponible' significa que la producción puede continuar sin retrasos relacionados con el material, mientras que 'Escasez' indica un problema. Este atributo es esencial para el Dashboard de 'Análisis de Impacto por Escasez de Materiales'. Al analizar el tiempo que las órdenes pasan esperando por una escasez de material, las empresas pueden cuantificar el impacto de los problemas de la cadena de suministro en los cronogramas de producción. Esto ayuda a identificar proveedores poco fiables o componentes problemáticos que con frecuencia causan retrasos. Por qué es importante Destaca directamente los retrasos causados por la escasez de materiales, una causa raíz común y significativa de las desviaciones en el cronograma de producción. Dónde obtener Esto no es un campo almacenado único. Es el resultado de una verificación de disponibilidad (verificación ATP). Los resultados suelen ser visibles en la transacción CO02 o en la verificación de disponibilidad colectiva COHV. El estado en sí (p. ej., MACM - Material comprometido) podría estar registrado. Consulte la documentación de SAP ECC PP. Ejemplos DisponibleEscasezParcialmente DisponibleNo Verificado | |||
| Estado de Cumplimiento del Cronograma ScheduleAdherenceStatus | Un indicador que señala si la orden de producción se completó en su fecha de fin planificada. | ||
| Descripción El Estado de Cumplimiento del Cronograma es un atributo booleano o categórico calculado que ofrece una vista sencilla y rápida del rendimiento de entrega a tiempo. Se deriva comparando la 'Actual End Date' con la 'Planned End Date'. Si la finalización real es en o antes de la fecha planificada, el estado es 'On-Time'; de lo contrario, es 'Late'. Este atributo simplifica el análisis y la visualización en dashboards. Permite un fácil filtrado y agregación para calcular el KPI 'Tasa de Cumplimiento del Cronograma' e identificar los principales impulsores de los pedidos atrasados, como productos específicos, plantas o faltas de material. Por qué es importante Simplifica el análisis de rendimiento al categorizar las órdenes como 'A tiempo' o 'Retrasado', facilitando la medición y el informe sobre la fiabilidad del cronograma. Dónde obtener Campo calculado: SI('ActualEndDate' <= 'PlannedEndDate', 'A Tiempo', 'Retrasado'). Ejemplos A tiempoRetrasado | |||
| Estado de la Orden de Producción ProductionOrderStatus | El estado actual de procesamiento de la orden de producción, como Creada, Liberada o Técnicamente Completada. | ||
| Descripción El Estado de la Orden de Producción indica la etapa actual de la orden en su ciclo de vida. SAP utiliza un sistema de códigos de estado para gestionar la progresión de la orden, por ejemplo, CRTD (Creada), REL (Liberada), CNF (Confirmada), DLV (Entregada) y TECO (Técnicamente Completada). Analizar el tiempo transcurrido en diferentes estados es una parte central del process mining para la producción. Ayuda a identificar cuánto tiempo esperan las órdenes para su liberación después de la creación o cuánto tiempo permanecen en un estado de entrega parcial. El seguimiento de los cambios de estado como actividades proporciona una vista de alto nivel del flujo del proceso. Por qué es importante Ofrece una instantánea del progreso de una orden y ayuda a identificar cuellos de botella donde las órdenes se estancan por períodos prolongados. Dónde obtener La información de estado se almacena en las tablas JEST y JSTO, vinculada al número de objeto de la orden (AUFK-OBJNR). El texto de estado está en TJ02T. La lectura del estado a menudo se realiza a través de módulos de función como STATUS_TEXT_EDIT. Ejemplos CRTD (Creado)REL (Liberado)DLV (Entregado)TECO (Técnicamente Completado) | |||
| Fecha de Fin Planificada PlannedEndDate | La fecha programada en la que se prevé que finalice la producción de la orden. | ||
| Descripción La Fecha de Fin Planificada es la fecha objetivo de finalización para una orden de producción, establecida durante el proceso de programación. Define el plazo esperado para terminar todas las actividades de producción, incluyendo confirmaciones finales y entrada de mercancías. Esta fecha es esencial para calcular el KPI de 'Tasa de Cumplimiento del Cronograma'. Comparar la 'Fecha de Fin Planificada' con el tiempo de finalización real (ej., la marca de tiempo de la actividad 'Entrada de Mercancías Contabilizada' o 'Confirmación Final Registrada') revela si las órdenes se están terminando a tiempo. Este análisis ayuda a evaluar la fiabilidad de los cronogramas de producción y a identificar las causas raíz de los retrasos en las entregas. Por qué es importante Es el punto de referencia utilizado para determinar si las órdenes de producción se completan a tiempo, impactando directamente en la satisfacción del cliente y la fiabilidad de la planificación. Dónde obtener Esta es la fecha básica de fin, que se encuentra en la tabla SAP AFKO, campo GLTRP. Ejemplos 2023-05-152023-06-282023-07-05 | |||
| Fecha de Inicio Planificada PlannedStartDate | La fecha programada en la que se prevé que comience la producción de la orden. | ||
| Descripción La Fecha de Inicio Planificada es un parámetro clave de programación determinado durante la fase de planificación y programación de la producción. Representa la fecha objetivo para que las actividades de producción comiencen para una orden. Este atributo es crucial para medir el cumplimiento del cronograma. Al comparar la 'Fecha de Inicio Planificada' con el tiempo de inicio real de la producción (ej., la marca de tiempo de la actividad 'Primera Confirmación Registrada'), las organizaciones pueden identificar retrasos en el inicio de la producción. Analizar las razones de estos retrasos es un caso de uso principal para el process mining en esta área. Por qué es importante Sirve como base para medir la adherencia al cronograma e identificar retrasos en el inicio de la ejecución de la producción. Dónde obtener Esta es la fecha básica de inicio, que se encuentra en la tabla SAP AFKO, campo GSTRP. Ejemplos 2023-05-102023-06-222023-07-01 | |||
| Grupo de Planificación PlannerGroup | El grupo de controladores de MRP o planificadores de producción responsables de la orden. | ||
| Descripción El Grupo de Planificadores es un elemento organizacional que representa un grupo de individuos responsables de planificar y gestionar un conjunto específico de materiales u órdenes de producción. Asignar órdenes a grupos de planificadores ayuda a distribuir la carga de trabajo y a establecer una clara responsabilidad. En Process Mining, este atributo permite el análisis de rendimiento basado en el equipo de planificación responsable. Puede ayudar a responder preguntas como '¿Qué grupo de planificadores experimenta la mayoría de las desviaciones del cronograma?' o '¿Existe una diferencia en los tiempos de ciclo para las órdenes gestionadas por diferentes grupos?'. Esto proporciona insights para el equilibrio de la carga de trabajo y la identificación de necesidades de capacitación. Por qué es importante Permite segmentar el análisis de rendimiento por el equipo responsable, ayudando a identificar diferencias en la efectividad de la planificación y la carga de trabajo. Dónde obtener Este es el Controlador de MRP, que se encuentra en la tabla SAP AFKO, campo DISPO. Ejemplos 001002P01P02 | |||
| Prioridad de Producción ProductionPriority | Una clasificación que indica la urgencia o prioridad de la orden de producción. | ||
| Descripción La Prioridad de Producción es un campo utilizado para señalar la importancia relativa de una orden de fabricación. Esto permite a los programadores de producción y al personal de planta priorizar su trabajo, asegurando que las órdenes críticas se agilicen a través del proceso. Analizar este atributo ayuda a evaluar la efectividad del sistema de prioridades. Al comparar los tiempos de ciclo de las órdenes de alta prioridad con las de baja prioridad, una empresa puede determinar si las órdenes urgentes se están procesando realmente más rápido. Si no, podría indicar problemas con la comunicación, la asignación de recursos o el proceso de ejecución general. Por qué es importante Ayuda a evaluar si el sistema de gestión de prioridades es efectivo, asegurando que las órdenes de alta urgencia se completen más rápido que las estándar. Dónde obtener Esto a menudo no es un campo estándar en la cabecera de la orden de producción. Puede ser un campo personalizado, derivado de la prioridad de la orden de venta o parte de un sistema de clasificación. Consulte la documentación o configuración del sistema de SAP ECC PP. Ejemplos AltoMedioBajoUrgente | |||
| Tiempo de Ciclo CycleTime | El tiempo total transcurrido desde la liberación de la orden de producción hasta su finalización definitiva. | ||
| Descripción El Tiempo de Ciclo es un indicador clave de rendimiento que mide la duración de la fase de ejecución de la producción. Se calcula como la diferencia de tiempo entre el evento 'Orden de Producción Liberada' y un evento de finalización como 'Confirmación Final Registrada' o 'Entrada de Mercancías Contabilizada'. Esta métrica calculada es fundamental para evaluar la eficiencia de la fabricación. Analizar las tendencias del tiempo de ciclo y compararlas entre productos, plantas o períodos de tiempo ayuda a identificar oportunidades para reducir los plazos de entrega, mejorar el rendimiento y aumentar la capacidad total de producción. Es una métrica central para muchos de los Dashboards y KPIs requeridos. Por qué es importante Mide directamente la eficiencia y velocidad del proceso de ejecución de la producción, destacando oportunidades para la reducción del tiempo de entrega. Dónde obtener Campo calculado: Marca de tiempo de 'Orden de Producción Completada' menos la marca de tiempo de 'Orden de Producción Liberada'. Ejemplos 3 días 4 horas10 horas 15 minutos7 días 0 horas1 día 12 horas | |||
| Usuario Responsable ResponsibleUser | El ID de usuario de la persona que creó o modificó por última vez la orden de producción. | ||
| Descripción El Usuario Responsable identifica la cuenta de usuario de SAP asociada con eventos clave en el ciclo de vida de la orden de producción, como la creación o liberación. Esto proporciona responsabilidad y trazabilidad para las acciones realizadas dentro del sistema. En Process Mining, este atributo se utiliza para analizar las variaciones del proceso basándose en el comportamiento del usuario. Puede ayudar a identificar usuarios que podrían necesitar capacitación adicional o que siguen procedimientos no estándar. También apoya el análisis de recursos mostrando cómo se distribuye el trabajo entre diferentes usuarios. Por qué es importante Vincula las actividades del proceso a individuos específicos, permitiendo un análisis de rendimiento a nivel de usuario y promoviendo la rendición de cuentas. Dónde obtener El usuario que creó la orden está en AUFK-ERNAM. El usuario que la modificó por última vez está en AUFK-AENAM. Los documentos de cambio (CDHDR-USERNAME) proporcionan un historial de usuarios para cambios específicos. Ejemplos JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
| Variación de Cantidad QuantityVariance | La diferencia entre la cantidad de producción planificada y la cantidad real entregada. | ||
| Descripción La Varianza de Cantidad es una métrica calculada que mide la desviación de la producción respecto al plan inicial. Se calcula como 'Cantidad Entregada' menos 'Cantidad Planificada'. Una varianza positiva indica sobreproducción, mientras que una negativa indica subproducción o pérdida de rendimiento. Este atributo es esencial para el dashboard de 'Producción Planificada vs. Real' y el KPI correspondiente. Analizar la varianza ayuda a identificar problemas relacionados con el rendimiento de la producción, tasas de desecho o errores de entrada de datos. Proporciona una medida directa de la fiabilidad del proceso de producción para cumplir sus objetivos de resultados. Por qué es importante Mide la precisión de la producción frente a lo planificado, señalando posibles problemas de rendimiento, mermas o control del proceso. Dónde obtener Campo calculado: 'DeliveredQuantity' - 'PlannedQuantity'. Ejemplos -2-5005 | |||
Actividades de Planificación de Producción
| Actividad | Descripción | ||
|---|---|---|---|
| Confirmación Final Registrada | Esta actividad indica que todas las operaciones de la orden de producción están completadas desde la perspectiva de planta. Se marca con una entrada de confirmación final para la última operación. | ||
| Por qué es importante Este hito marca el final de las actividades de producción física. La duración desde la primera hasta la última confirmación representa el tiempo real de ejecución de la producción. Dónde obtener Esto se captura cuando se establece el estado del sistema 'CNF' (I0009, Confirmada). Típicamente se activa por la entrada de confirmación final en la tabla AFRU (AFRU-AUERU = 'X'). El cambio de estado se registra en JCDS. Capturar Identifique la marca de tiempo cuando se establece el estado 'CNF', o encuentre el último registro de confirmación en AFRU. Tipo de evento explicit | |||
| Entrada de Mercancías Registrada | Este evento registra la recepción del producto terminado de la orden de producción en el inventario. Significa que los bienes manufacturados ahora están disponibles para envío o procesamiento posterior. | ||
| Por qué es importante Este es un hito clave de finalización, que representa el producto final del proceso de producción. El tiempo desde la liberación hasta la entrada de mercancías es el tiempo total de entrega de la producción. Dónde obtener Registrado como un documento de material en las tablas MKPF/MSEG con un tipo de movimiento, típicamente '101', haciendo referencia a la orden de producción. El estado del sistema 'DLV' (I0012, Entregado) también se establece en la orden. Capturar Capture la fecha de contabilización del documento de material de clase de movimiento '101' o la marca de tiempo del cambio de estado 'DLV'. Tipo de evento explicit | |||
| Orden de Producción Creada | Este evento marca la creación de una nueva orden de producción, típicamente iniciada desde una ejecución de planificación o entrada manual. Se captura explícitamente cuando se guarda un nuevo registro de orden en el sistema, recibiendo el estado 'CRTD' (Creada). | ||
| Por qué es importante Este es el punto de partida para cada caso de orden de producción. Analizar el tiempo desde este evento hasta la liberación ayuda a identificar retrasos en la planificación previa a la producción y la configuración administrativa. Dónde obtener Este evento se captura a partir de la fecha (AUFK-ERDAT) y hora (AUFK-ERZET) de creación de la orden de producción. Se asigna el estado del sistema 'CRTD' (I0001), registrado en las tablas JEST y JCDS vinculadas al número de objeto de la orden (AUFK-OBJNR). Capturar Rastree la marca de tiempo de creación y la asignación del estado 'CRTD'. Tipo de evento explicit | |||
| Orden de Producción Liberada | Esta actividad significa la aprobación oficial y la liberación de la orden de producción para su ejecución. Una vez liberada, las reservas de material se activan y pueden comenzar las actividades de producción como la salida de mercancías y las confirmaciones. | ||
| Por qué es importante Este es un hito crítico que representa el traspaso de la planificación a la ejecución. El tiempo entre la creación y la liberación es un indicador clave de la eficiencia de la planificación. Dónde obtener Capturado explícitamente cuando el estado del sistema 'REL' (I0002) se asigna a la orden de producción. El cambio se registra con una marca de tiempo en la tabla JCDS, vinculado al número de objeto de la orden (AUFK-OBJNR). Capturar Identifique la marca de tiempo cuando el estado 'REL' se activa para la orden. Tipo de evento explicit | |||
| Pedido Técnicamente Completado | Este es un paso de cierre administrativo que finaliza una orden de producción desde el punto de vista logístico. Impide movimientos de material o confirmaciones adicionales y permite la liquidación financiera. | ||
| Por qué es importante Este es el punto final definitivo para el ciclo de vida de la orden en logística. Analizar este evento ayuda a comprender la duración total del proceso, incluidas las tareas administrativas post-producción. Dónde obtener Capturado explícitamente cuando el estado del sistema 'TECO' (I0045, Completado Técnicamente) se asigna a la orden. El cambio se registra con una marca de tiempo en la tabla JCDS. Capturar Identifique la marca de tiempo cuando el estado 'TECO' se activa para la orden en JCDS. Tipo de evento explicit | |||
| Primera Confirmación Registrada | Este evento significa el inicio del trabajo de producción real en la orden. Se captura cuando se introduce en el sistema la primera confirmación de tiempo para cualquier operación en la orden de producción. | ||
| Por qué es importante Esta actividad proporciona la hora de inicio real de la producción, lo cual es esencial para medir el cumplimiento del cronograma e identificar retrasos entre la asignación de recursos y el inicio del trabajo. Dónde obtener Esto se infiere al encontrar la fecha de contabilización más temprana (AFRU-BUDAT) entre todas las confirmaciones registradas para la orden en la tabla AFRU. La primera entrada marca el inicio de la producción física. Capturar Identifique el primer registro de confirmación para la orden basándose en la fecha de contabilización en la tabla AFRU. Tipo de evento inferred | |||
| Cancelación de Pedido Establecida | Este evento indica que una orden de producción ha sido cancelada antes de su finalización. Esto se hace típicamente estableciendo un estado específico o un indicador de borrado, impidiendo cualquier procesamiento posterior. | ||
| Por qué es importante Este es un resultado negativo importante de rastrear. Analizar las órdenes canceladas puede revelar problemas con la previsión de la demanda, la precisión de la planificación o la gestión de datos maestros. Dónde obtener Esto se puede inferir de la asignación del estado 'DLFL' (I0076, Indicador de borrado) o de un estado 'Cancelado' específico si está configurado. El cambio se registra con una marca de tiempo en la tabla JCDS. Capturar Identifique la marca de tiempo cuando se establece el indicador de borrado ('DLFL') o un estado de cancelación para la orden. Tipo de evento inferred | |||
| Confirmación Intermedia Registrada | Representa una actualización de progreso de una orden de producción a través de una confirmación parcial de una operación. Esto es común para órdenes de larga duración donde es necesario seguir el progreso antes de la finalización definitiva. | ||
| Por qué es importante Analizar las confirmaciones intermedias ayuda a monitorear el progreso de ciclos de producción largos e identificar cuellos de botella dentro del propio proceso de producción, no solo al principio o al final. Dónde obtener Capturado de los registros de confirmación en la tabla AFRU que no están marcados como la confirmación final. Cada entrada tiene una fecha de contabilización (AFRU-BUDAT) y una hora. Capturar Extraiga todos los registros de confirmación de AFRU que no estén marcados como la confirmación final para una operación. Tipo de evento explicit | |||
| Datos del Pedido Modificados | Este evento captura modificaciones significativas realizadas en una orden de producción después de su creación inicial, como cambios en la cantidad planificada, fechas o lista de materiales (BOM). Estos cambios son registrados por el sistema para fines de auditoría. | ||
| Por qué es importante El seguimiento de estos cambios ayuda a identificar la inestabilidad del proceso y la replanificación frecuente. Una alta frecuencia de cambios puede indicar una planificación inicial deficiente, volatilidad de la demanda o inexactitudes en los datos. Dónde obtener Los cambios en campos clave de tablas como AFKO (cabecera de orden) y AFPO (posición de orden) se registran en las tablas de documentos de cambio CDHDR (cabecera) y CDPOS (posición). Cada cambio relevante puede extraerse como una actividad. Capturar Extraiga las entradas del registro de cambios de las tablas CDHDR y CDPOS para la clase de objeto de orden de producción. Tipo de evento explicit | |||
| Disponibilidad de Materiales Verificada | Representa la ejecución de una verificación para determinar si todos los componentes necesarios para la orden de producción están disponibles. Esto puede ser una verificación automatizada al crear o liberar la orden, o una acción activada manualmente. | ||
| Por qué es importante Esta actividad es crucial para entender los retrasos causados por la escasez de materiales. Las verificaciones frecuentes o los largos períodos hasta la disponibilidad del material pueden indicar problemas en la cadena de suministro o en la gestión de inventario. Dónde obtener El sistema establece un estado como 'MACM' (material comprometido) o 'MSPT' (falta de material). La ejecución puede inferirse de la marca de tiempo de este cambio de estado en las tablas JEST/JCDS. Los resultados son visibles en la cabecera del pedido. Capturar Inferir de la marca de tiempo de los cambios de estado relacionados con la disponibilidad de material, como 'MACM' o 'MSPT'. Tipo de evento inferred | |||
| Liquidación de Pedido Ejecutada | Representa la liquidación financiera de la orden de producción, donde los costos recopilados se asignan a los objetos de costo apropiados. Este es el paso final en el ciclo de vida de la orden desde una perspectiva de control. | ||
| Por qué es importante Aunque es una actividad financiera, los retrasos en la liquidación pueden indicar problemas con la elaboración de informes de costos o la exactitud de los datos de pedidos. Marca el verdadero cierre financiero del proceso de producción. Dónde obtener Esto puede inferirse cuando el saldo de la orden llega a cero o cuando el estado del sistema 'SETC' (I0076, Regla de liquidación creada) es seguido por registros de ejecución de liquidación. La liquidación real se registra en tablas de control como COSP y COSS. Capturar Inferir de los documentos de liquidación vinculados a la orden en las tablas CO o de la activación del estado 'SETC'. Tipo de evento inferred | |||
| Salida de Mercancías Contabilizada | Esta actividad representa la retirada de materiales componentes del inventario para ser utilizados en la orden de producción. Confirma que las materias primas o productos semiacabados necesarios han sido preparados para la producción. | ||
| Por qué es importante Este evento marca el inicio del consumo de material. Los retrasos entre la liberación de la orden y la salida de mercancías pueden resaltar problemas en la logística del almacén, la preparación de materiales o la precisión del inventario. Dónde obtener Registrado como documentos de material en las tablas MKPF (cabecera) y MSEG (posición) con un tipo de movimiento, típicamente '261', haciendo referencia al número de orden de producción (MSEG-AUFNR). Capturar Capture la fecha de contabilización (MKPF-BUDAT) de los documentos de material con clase de movimiento '261' vinculados a la orden. Tipo de evento explicit | |||
Guías de Extracción
Pasos
- Crear un InfoSet en la Consulta SAP: Utilice el código de transacción
SQ02. Cree un nuevo InfoSet, por ejemplo,ZPP_EVENTLOG. Seleccione la opción de fuente de datos 'Unión de tabla utilizando tabla base'. UtiliceAUFK(Datos maestros de orden) como tabla base inicial. - Unir Tablas Requeridas: Agregue las siguientes tablas a la unión del InfoSet. El sistema puede proponer uniones, pero verifique que sean correctas:
AUFKconAFKO(Datos de cabecera de orden, órdenes PP):AUFK-AUFNR = AFKO-AUFNRAUFKconJEST(Estado de Objeto Individual):AUFK-OBJNR = JEST-OBJNRJESTconJCDS(Documentos de Cambio para Estados de Sistema/Usuario):JEST-OBJNR = JCDS-OBJNRYJEST-STAT = JCDS-STAT. Nota: Esta unión es para leer el historial de cambios de estado.AUFKconAFRU(Confirmaciones de finalización de orden):AUFK-AUFNR = AFRU-AUFNRAUFKconMSEG(Segmento de Documento: Material):AUFK-AUFNR = MSEG-AUFNRMSEGconMKPF(Cabecera: Documento de Material):MSEG-MBLNR = MKPF-MBLNRYMSEG-MJAHR = MKPF-MJAHR
- Definir Grupos de Campos: Arrastre los campos requeridos de las tablas de origen a los grupos de campos. Asegúrese de que todos los campos necesarios para la consulta final, como
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATE,MKPF-BUDAT, estén incluidos. - Agregar Campos Personalizados y Código: En el InfoSet, navegue a la pestaña 'Extras'. Necesitará definir campos personalizados para
ActivityName,EventTime,SourceSystemyLastDataUpdate, y escribir código ABAP para poblarlos según la lógica definida en la sección de consulta. La lógica implicará iterar a través de cambios de estado, confirmaciones y documentos de material para generar un registro distinto para cada evento de negocio. Este es el paso más complejo, ya que está transformando datos tabulares en un formato de registro de eventos dentro de las secciones de código del InfoSet. - Generar y Guardar el InfoSet: Una vez que todas las uniones, campos y código personalizado estén en su lugar, guarde y genere el InfoSet.
- Crear una Consulta SAP: Utilice el código de transacción
SQ01. Cree una nueva consulta, por ejemplo,ZPP_EVENTS, basada en el InfoSet creado en los pasos anteriores. - Diseñar el Diseño de la Consulta: En el diseñador de consultas, defina los campos de la pantalla de selección. Buenas selecciones incluyen Orden de Producción
AUFNR, CentroWERKS, Tipo de OrdenAUARTy un rango de fechas para la creación de la ordenAUFK-ERDAT. - Definir la Lista de Salida: Seleccione los campos a mostrar en la salida del informe. Esta lista debe coincidir exactamente con las columnas requeridas para el registro de eventos, incluyendo los campos personalizados como
ActivityNameyEventTime. - Ejecutar la Consulta: Ejecute la consulta con los criterios de selección deseados, por ejemplo, para los últimos 3 a 6 meses de órdenes de producción.
- Exportar los Datos: Una vez que la consulta muestre los resultados, exporte la lista. El formato más común y fiable para esto es 'Hoja de cálculo' o 'Archivo local' con formato separado por tabulaciones o CSV.
- Formato para ProcessMind: Abra el archivo exportado en un programa de hoja de cálculo. Verifique que los encabezados de columna coincidan con los atributos requeridos (
ProductionOrder,ActivityName,EventTime, etc.) y asegúrese de que el formato de fecha y hora paraEventTimesea consistente y cumpla con el estándar requerido (ej., YYYY-MM-DD HH:MI:SS). Guarde el archivo como CSV para cargar.
Configuración
- Uniones de InfoSet: El núcleo de este método se basa en un InfoSet complejo que une tablas de cabecera, estado, confirmación y movimiento de material. Las uniones principales son
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRU, yAUFK->MSEG->MKPF. Uniones incorrectas o ineficientes pueden generar un bajo rendimiento o datos inexactos. - Criterios de Selección: Es fundamental definir un rango de selección manejable para evitar problemas de rendimiento del sistema. Los campos de selección clave en la pantalla de inicio de la consulta deben incluir:
- Centro de Producción (
AUFK-WERKS) - Tipo de Orden de Producción (
AUFK-AUART) - Fecha de Creación de la Orden (
AUFK-ERDAT): Recomendamos extraer datos de un período continuo de 3 a 6 meses para mantener el tamaño del conjunto de datos manejable.
- Centro de Producción (
- Estados del Sistema: La lógica para identificar eventos como 'Creado', 'Liberado', 'Técnicamente Completado' y 'Anulado' depende de códigos de estado de sistema específicos (ej., I0001, I0002, I0045, I0047). Estos son generalmente estándar en los sistemas SAP, pero deben verificarse.
- Clases de Movimiento: Eventos como 'Salida de Mercancías' y 'Entrada de Mercancías' se identifican por sus Clases de Movimiento específicas (
MSEG-BWART), típicamente '261' y '101' respectivamente. Confirme que estos valores se alinean con la configuración de su organización. - Autorizaciones: El usuario que ejecuta la consulta necesita autorización para acceder a las transacciones
SQ01,SQ02ySQ03, así como acceso de visualización a todas las tablas subyacentes (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF).
a Consulta de ejemplo abap
/*
The following ABAP-style SQL script represents the complete logic required to build the event log.
This logic must be implemented within the code sections of the SQ02 InfoSet, as a direct SQL query of this nature is not run.
Each SELECT block corresponds to a specific business activity.
*/
-- 1. Production Order Created
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Created' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0001' AND JCDS.INACT = ''
UNION ALL
-- 2. Material Availability Checked (using 'Material shortage' status as an indicator)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Material Availability Checked' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0033' AND JCDS.INACT = '' -- I0033 is MSPT (Material Shortage)
UNION ALL
-- 3. Production Order Released
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Released' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0002' AND JCDS.INACT = ''
UNION ALL
-- 4. Order Data Changed (using last change date as a proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Data Changed' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime, -- Time is not available in AUFK
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.AEDAT IS NOT NULL AND AUFK.AEDAT > AUFK.ERDAT
UNION ALL
-- 5. Goods Issue Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Issue Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
CONF.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
CONF.EventTime,
CONF.ProductionPlant,
CONF.ProductCode,
CONF.PlannedQuantity,
CONF.DeliveredQuantity,
CONF.ActualStartDate,
CONF.ActualEndDate,
CONF.SourceSystem,
CONF.LastDataUpdate
FROM (
SELECT
AUFK.AUFNR AS ProductionOrder,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
ROW_NUMBER() OVER(PARTITION BY AUFK.AUFNR ORDER BY AFRU.BUDAT, AFRU.ERFZEIT) as rn
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
) AS CONF
WHERE CONF.rn = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'T' -- T = Partial Confirmation
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'E' -- E = Final Confirmation
UNION ALL
-- 9. Goods Receipt Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Technically Completed' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0045' AND JCDS.INACT = ''
UNION ALL
-- 11. Order Settlement Ran (using 'Closed' status as proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Settlement Ran' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0046' AND JCDS.INACT = '' -- I0046 is CLSD (Closed)
UNION ALL
-- 12. Order Cancellation Set
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0047' AND JCDS.INACT = '' -- I0047 is CNF (Confirmed), use I0076 for Canceled. Recorrecting. Use Deletion Flag instead.
-- Corrected Logic for Cancellation:
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.LOEKZ = 'X'; Pasos
- Establecer Acceso a la Base de Datos: Obtenga credenciales de solo lectura para la base de datos SAP ECC subyacente. Necesitará la dirección del servidor, el puerto, el nombre de la base de datos, el nombre de usuario y la contraseña. Este acceso es esencial y debe coordinarse con sus equipos de SAP Basis y administración de bases de datos.
- Identificar Esquema SAP: Determine el esquema de base de datos correcto donde se almacenan las tablas de SAP. A menudo es
SAPSR3o un nombre similar específico del sistema. Deberá reemplazar el marcador de posición[Su Esquema SAP]en la consulta con este valor. - Preparar la Consulta SQL: Copie la consulta SQL completa proporcionada en la sección
query. Esta consulta está diseñada para extraer todas las actividades especificadas en un formato de registro de eventos único. - Configurar Parámetros de Consulta: Antes de ejecutar, debe modificar los marcadores de posición dentro de la consulta. Establezca la
[Fecha de Inicio]y la[Fecha de Fin]para definir la ventana de tiempo para la extracción. También es muy recomendable filtrar por centro de producción (WERKS) o tipo de orden (AUART) para limitar el volumen de datos. - Conectar y Ejecutar: Utilice un cliente SQL estándar, como DBeaver, SAP HANA Studio o un script personalizado (Python, Java), para conectarse a la base de datos de SAP utilizando las credenciales del paso 1.
- Ejecutar la Consulta: Pegue la consulta SQL configurada en su cliente y ejecútela. Dependiendo del rango de fechas y el tamaño del sistema, esto puede tardar varios minutos en completarse.
- Revisar Resultados Preliminares: Una vez que la consulta finalice, inspeccione brevemente las primeras cien filas para asegurarse de que columnas como
ProductionOrder,ActivityNameyEventTimeestén pobladas correctamente y tengan sentido. - Exportar a CSV: Exporte el conjunto completo de resultados de su cliente SQL a un archivo CSV. Asegúrese de que el archivo utilice codificación UTF-8 para evitar problemas de caracteres.
- Finalizar CSV para Carga: Abra el archivo CSV y verifique que los encabezados de columna coincidan con los atributos requeridos (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate, etc.). Asegúrese de que la columnaEventTimetenga un formato consistente, por ejemploYYYY-MM-DD HH:MI:SS. - Cargar en ProcessMind: El archivo CSV preparado ahora está listo para ser cargado en la plataforma ProcessMind para su análisis.
Configuración
- Esquema de Base de Datos: Debe especificar el esquema de SAP donde residen sus tablas de planificación de producción. Reemplace el marcador de posición
[Su Esquema SAP]en la consulta con el nombre correcto de su entorno, por ejemploSAPSR3. - Rango de Fechas: Filtrar por un rango de fechas específico es fundamental para el rendimiento. La consulta filtra por la fecha de creación de la orden (
AUFK.ERDAT). Recomendamos comenzar con un período reciente de 3 a 6 meses para asegurar un volumen de datos manejable. - Tipo de Orden de Producción: Para enfocar el análisis, filtre la consulta por el campo de tipo de orden de producción (
AUFK.AUART). Esto le permite incluir o excluir tipos específicos como órdenes de producción estándar, órdenes de proceso u órdenes de retrabajo. - Centro de Producción: Es muy recomendable filtrar por uno o más centros de producción (
AFKO.WERKS). Extraer datos de todos los centros a la vez puede requerir muchos recursos. - Acceso a la Base de Datos: Este método requiere un usuario de base de datos con, como mínimo, permisos de lectura en las siguientes tablas:
AUFK,AFKO,JCDS,JEST,AFRU,MSEG,MKPF. El acceso directo a la base de datos no es estándar para todos los usuarios de SAP y requiere autorización especial.
a Consulta de ejemplo sql
WITH Orders AS (
SELECT
aufk.AUFNR AS ProductionOrder,
afko.WERKS AS ProductionPlant,
afko.PLNBEZ AS ProductCode,
afko.GAMNG AS PlannedQuantity,
afko.GMEIN AS PlannedUnit,
afko.GEMNG AS DeliveredQuantity,
CASE
WHEN afko.GSTRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GSTRI || afko.GSUZI, 'YYYYMMDDHH24MISS')
END AS ActualStartDate,
CASE
WHEN afko.GETRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GETRI || afko.GEUZI, 'YYYYMMDDHH24MISS')
END AS ActualEndDate,
aufk.OBJNR,
aufk.ERDAT AS CreationDate,
aufk.ERFAS AS CreationTime
FROM
"[Your SAP Schema]".AUFK aufk
JOIN
"[Your SAP Schema]".AFKO afko ON aufk.AUFNR = afko.AUFNR
WHERE
aufk.AUTYP = '10' -- Filter for Production Orders
AND aufk.ERDAT BETWEEN '[Start Date]' AND '[End Date]'
-- AND afko.WERKS IN ('[Your Plant]', '[Another Plant]') -- Optional: Filter by Plant
-- AND aufk.AUART IN ('[Your Order Type]') -- Optional: Filter by Order Type
),
Confirmations AS (
SELECT
o.ProductionOrder,
a.RUECK AS ConfirmationNumber,
a.RMZHL AS ConfirmationCounter,
TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
a.AUERU AS IsFinalConfirmation,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') ASC) as rn_asc,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') DESC) as rn_desc
FROM
Orders o
JOIN
"[Your SAP Schema]".AFRU a ON o.ProductionOrder = a.AUFNR
)
-- 1. Production Order Created
SELECT
o.ProductionOrder,
'Production Order Created' AS ActivityName,
TO_TIMESTAMP(o.CreationDate || o.CreationTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
UNION ALL
-- 2. Material Availability Checked (using 'Material Committed' status as proxy)
SELECT
o.ProductionOrder,
'Material Availability Checked' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0006' AND jcds.INACT != 'X'
UNION ALL
-- 3. Production Order Released
SELECT
o.ProductionOrder,
'Production Order Released' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0002' AND jcds.INACT != 'X'
UNION ALL
-- 4. Order Data Changed
SELECT
o.ProductionOrder,
'Order Data Changed' AS ActivityName,
TO_TIMESTAMP(aufk.AEDAT || aufk.AEZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".AUFK aufk ON o.ProductionOrder = aufk.AUFNR
WHERE aufk.AEDAT > o.CreationDate
UNION ALL
-- 5. Goods Issue Posted
SELECT
o.ProductionOrder,
'Goods Issue Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
c.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
c.ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc > 1 AND c.IsFinalConfirmation IS NULL
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
c.ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.IsFinalConfirmation = 'X'
UNION ALL
-- 9. Goods Receipt Posted
SELECT
o.ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
o.ProductionOrder,
'Order Technically Completed' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0045' AND jcds.INACT != 'X'
UNION ALL
-- 11. Order Settlement Ran
SELECT
o.ProductionOrder,
'Order Settlement Ran' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0046' AND jcds.INACT != 'X'
UNION ALL
-- 12. Order Cancellation Set
SELECT
o.ProductionOrder,
'Order Cancellation Set' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0076' AND jcds.INACT != 'X'; Pasos
- Crear un InfoSet en la Consulta SAP: Utilice el código de transacción
SQ02. Cree un nuevo InfoSet, por ejemplo,ZPP_EVENTLOG. Seleccione la opción de fuente de datos 'Unión de tabla utilizando tabla base'. UtiliceAUFK(Datos maestros de orden) como tabla base inicial. - Unir Tablas Requeridas: Agregue las siguientes tablas a la unión del InfoSet. El sistema puede proponer uniones, pero verifique que sean correctas:
AUFKconAFKO(Datos de cabecera de orden, órdenes PP):AUFK-AUFNR = AFKO-AUFNRAUFKconJEST(Estado de Objeto Individual):AUFK-OBJNR = JEST-OBJNRJESTconJCDS(Documentos de Cambio para Estados de Sistema/Usuario):JEST-OBJNR = JCDS-OBJNRYJEST-STAT = JCDS-STAT. Nota: Esta unión es para leer el historial de cambios de estado.AUFKconAFRU(Confirmaciones de finalización de orden):AUFK-AUFNR = AFRU-AUFNRAUFKconMSEG(Segmento de Documento: Material):AUFK-AUFNR = MSEG-AUFNRMSEGconMKPF(Cabecera: Documento de Material):MSEG-MBLNR = MKPF-MBLNRYMSEG-MJAHR = MKPF-MJAHR
- Definir Grupos de Campos: Arrastre los campos requeridos de las tablas de origen a los grupos de campos. Asegúrese de que todos los campos necesarios para la consulta final, como
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATE,MKPF-BUDAT, estén incluidos. - Agregar Campos Personalizados y Código: En el InfoSet, navegue a la pestaña 'Extras'. Necesitará definir campos personalizados para
ActivityName,EventTime,SourceSystemyLastDataUpdate, y escribir código ABAP para poblarlos según la lógica definida en la sección de consulta. La lógica implicará iterar a través de cambios de estado, confirmaciones y documentos de material para generar un registro distinto para cada evento de negocio. Este es el paso más complejo, ya que está transformando datos tabulares en un formato de registro de eventos dentro de las secciones de código del InfoSet. - Generar y Guardar el InfoSet: Una vez que todas las uniones, campos y código personalizado estén en su lugar, guarde y genere el InfoSet.
- Crear una Consulta SAP: Utilice el código de transacción
SQ01. Cree una nueva consulta, por ejemplo,ZPP_EVENTS, basada en el InfoSet creado en los pasos anteriores. - Diseñar el Diseño de la Consulta: En el diseñador de consultas, defina los campos de la pantalla de selección. Buenas selecciones incluyen Orden de Producción
AUFNR, CentroWERKS, Tipo de OrdenAUARTy un rango de fechas para la creación de la ordenAUFK-ERDAT. - Definir la Lista de Salida: Seleccione los campos a mostrar en la salida del informe. Esta lista debe coincidir exactamente con las columnas requeridas para el registro de eventos, incluyendo los campos personalizados como
ActivityNameyEventTime. - Ejecutar la Consulta: Ejecute la consulta con los criterios de selección deseados, por ejemplo, para los últimos 3 a 6 meses de órdenes de producción.
- Exportar los Datos: Una vez que la consulta muestre los resultados, exporte la lista. El formato más común y fiable para esto es 'Hoja de cálculo' o 'Archivo local' con formato separado por tabulaciones o CSV.
- Formato para ProcessMind: Abra el archivo exportado en un programa de hoja de cálculo. Verifique que los encabezados de columna coincidan con los atributos requeridos (
ProductionOrder,ActivityName,EventTime, etc.) y asegúrese de que el formato de fecha y hora paraEventTimesea consistente y cumpla con el estándar requerido (ej., YYYY-MM-DD HH:MI:SS). Guarde el archivo como CSV para cargar.
Configuración
- Uniones de InfoSet: El núcleo de este método se basa en un InfoSet complejo que une tablas de cabecera, estado, confirmación y movimiento de material. Las uniones principales son
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRU, yAUFK->MSEG->MKPF. Uniones incorrectas o ineficientes pueden generar un bajo rendimiento o datos inexactos. - Criterios de Selección: Es fundamental definir un rango de selección manejable para evitar problemas de rendimiento del sistema. Los campos de selección clave en la pantalla de inicio de la consulta deben incluir:
- Centro de Producción (
AUFK-WERKS) - Tipo de Orden de Producción (
AUFK-AUART) - Fecha de Creación de la Orden (
AUFK-ERDAT): Recomendamos extraer datos de un período continuo de 3 a 6 meses para mantener el tamaño del conjunto de datos manejable.
- Centro de Producción (
- Estados del Sistema: La lógica para identificar eventos como 'Creado', 'Liberado', 'Técnicamente Completado' y 'Anulado' depende de códigos de estado de sistema específicos (ej., I0001, I0002, I0045, I0047). Estos son generalmente estándar en los sistemas SAP, pero deben verificarse.
- Clases de Movimiento: Eventos como 'Salida de Mercancías' y 'Entrada de Mercancías' se identifican por sus Clases de Movimiento específicas (
MSEG-BWART), típicamente '261' y '101' respectivamente. Confirme que estos valores se alinean con la configuración de su organización. - Autorizaciones: El usuario que ejecuta la consulta necesita autorización para acceder a las transacciones
SQ01,SQ02ySQ03, así como acceso de visualización a todas las tablas subyacentes (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF).
a Consulta de ejemplo abap
/*
The following ABAP-style SQL script represents the complete logic required to build the event log.
This logic must be implemented within the code sections of the SQ02 InfoSet, as a direct SQL query of this nature is not run.
Each SELECT block corresponds to a specific business activity.
*/
-- 1. Production Order Created
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Created' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0001' AND JCDS.INACT = ''
UNION ALL
-- 2. Material Availability Checked (using 'Material shortage' status as an indicator)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Material Availability Checked' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0033' AND JCDS.INACT = '' -- I0033 is MSPT (Material Shortage)
UNION ALL
-- 3. Production Order Released
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Released' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0002' AND JCDS.INACT = ''
UNION ALL
-- 4. Order Data Changed (using last change date as a proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Data Changed' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime, -- Time is not available in AUFK
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.AEDAT IS NOT NULL AND AUFK.AEDAT > AUFK.ERDAT
UNION ALL
-- 5. Goods Issue Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Issue Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
CONF.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
CONF.EventTime,
CONF.ProductionPlant,
CONF.ProductCode,
CONF.PlannedQuantity,
CONF.DeliveredQuantity,
CONF.ActualStartDate,
CONF.ActualEndDate,
CONF.SourceSystem,
CONF.LastDataUpdate
FROM (
SELECT
AUFK.AUFNR AS ProductionOrder,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
ROW_NUMBER() OVER(PARTITION BY AUFK.AUFNR ORDER BY AFRU.BUDAT, AFRU.ERFZEIT) as rn
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
) AS CONF
WHERE CONF.rn = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'T' -- T = Partial Confirmation
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'E' -- E = Final Confirmation
UNION ALL
-- 9. Goods Receipt Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Technically Completed' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0045' AND JCDS.INACT = ''
UNION ALL
-- 11. Order Settlement Ran (using 'Closed' status as proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Settlement Ran' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0046' AND JCDS.INACT = '' -- I0046 is CLSD (Closed)
UNION ALL
-- 12. Order Cancellation Set
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0047' AND JCDS.INACT = '' -- I0047 is CNF (Confirmed), use I0076 for Canceled. Recorrecting. Use Deletion Flag instead.
-- Corrected Logic for Cancellation:
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.LOEKZ = 'X';