Su Template de datos para planificación de producción
Su Template de datos para planificación de producción
- Atributos recomendados para recopilar
- Actividades clave que conviene seguir
- Recomendaciones prácticas para la extracción
Atributos de planificación de producción
| Nombre | Descripción | ||
|---|---|---|---|
| Hora del evento EventTime | Marca de tiempo precisa que indica cuándo se produjo la actividad. | ||
| Descripción La hora del evento registra la fecha y la hora en que se ejecutó una actividad específica o se anotó un estado en el sistema. Esta marca de tiempo es fundamental para todos los análisis de procesos basados en el tiempo, incluido el cálculo de los tiempos de ciclo, los tiempos de espera y la duración total del proceso. Las marcas de tiempo precisas son esenciales para ordenar correctamente los eventos y analizar el rendimiento. Permiten medir el tiempo entre actividades, identificar demoras y evaluar el rendimiento frente a los programas o los acuerdos de nivel de servicio. En la planificación de la producción, ayudan a comprender cuánto dura cada etapa de planificación y ejecución. Por qué es importante Este atributo establece la secuencia cronológica de los eventos, esencial para calcular duraciones, analizar el rendimiento e identificar cuellos de botella. Dónde obtenerlo Se obtiene de diversos campos de fecha y hora asociados a transacciones y cambios de estado, como BUDAT (fecha de contabilización) de los documentos de material o las marcas de tiempo de los cambios 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 | Nombre del evento empresarial o del sistema que se produjo en un momento determinado para una orden de producción. | ||
| Descripción El nombre de la actividad describe un paso específico o un cambio de estado dentro del proceso de planificación de la producción. Estos eventos se extraen de registros de cambios, actualizaciones de estado y registros de transacciones de SAP ECC PP, y representan hitos clave como 'Orden de producción creada', 'Disponibilidad de materiales comprobada' o 'Entrada de mercancías contabilizada'. Este atributo es la base del mapa de procesos: permite visualizar la secuencia de eventos, descubrir variantes del proceso e identificar cuellos de botella o ciclos de retrabajo. La claridad y el nivel de detalle de los nombres de las actividades son fundamentales para crear un modelo de proceso preciso que refleje la realidad operativa. Por qué es importante Define los pasos del mapa de procesos y permite visualizar, analizar y comprender el flujo de trabajo de producción. Dónde obtenerlo Se genera a partir de diversas fuentes, como los cambios de estado en las tablas JEST/JSTO, los registros de transacciones y los documentos de modificación de CDHDR/CDPOS. Ejemplos Orden de producción liberadaSalida de mercancías contabilizadaConfirmación final registradaOrden completada técnicamente | |||
| Orden de producción ProductionOrder | Identificador único de una orden de producción, que sirve como identificador principal del caso en 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 que se asigna a cada orden de fabricación en SAP ECC PP. Es el objeto central que vincula todas las actividades relacionadas, desde la creación y la planificación hasta la ejecución y la liquidación final. En Process Mining, este atributo es esencial para agrupar todos los eventos de una misma ejecución de producción. Así se puede analizar de principio a fin todo el ciclo de vida de una orden, seguir su avance, medir los tiempos de ciclo e identificar desviaciones respecto al proceso estándar. Analizar los procesos por orden de producción permite ver con claridad cómo se atiende cada solicitud de fabricación. Por qué es importante Este es el identificador principal que conecta todos los eventos relacionados del proceso y permite reconstruir y analizar cada ciclo de producción de principio a fin. Dónde obtenerlo Este atributo se encuentra en la tabla SAP AUFK, campo AUFNR. Ejemplos 1000345100034610003471000348 | |||
| Sistema de origen SourceSystem | Identifica el sistema del que se extrajeron los datos. | ||
| Descripción Este atributo especifica el sistema de origen del registro, como el nombre o el ID de una instancia concreta de SAP ECC. En las organizaciones que utilizan varios sistemas ERP o combinan plataformas antiguas y modernas, este campo es fundamental para conocer el linaje y el contexto de los datos. En los análisis, permite filtrar los procesos según su sistema de origen. Esto resulta útil para comparar el rendimiento de los procesos entre distintos sistemas o para aislar datos durante proyectos de consolidación de varios sistemas. Por qué es importante Aporta contexto esencial sobre el origen de los datos, especialmente en entornos con varias instancias de SAP o sistemas integrados. Dónde obtenerlo Suele añadirse durante la extracción de datos, a menudo a partir del ID del sistema SAP (SY-SYSID). Ejemplos ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Última actualización de datos LastDataUpdate | Marca de tiempo que indica cuándo se actualizaron o extrajeron por última vez los datos de este evento. | ||
| Descripción Este atributo registra la fecha y la hora en que los datos se transfirieron del sistema de origen a la herramienta de Process Mining. No representa un evento empresarial, sino una marca de tiempo técnica para la gestión de datos. Su función principal es confirmar que los datos están actualizados y ayudar a administradores y analistas a saber cuán recientes son los datos que están analizando. Es fundamental para validar que el análisis del proceso se basa en información actualizada, sobre todo al supervisar operaciones en curso. Por qué es importante Confirma que los datos están actualizados y garantiza que los análisis se basen en la información más reciente disponible. Dónde obtenerlo Este valor suele generarlo y registrarlo la herramienta o el script de extracción, transformación y carga de datos (ETL) durante la ingesta. Ejemplos 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Cantidad entregada DeliveredQuantity | Cantidad real del producto fabricado y recibido en el inventario. | ||
| Descripción La cantidad entregada, también llamada cantidad de entrada de mercancías, es el total de producto terminado cuya fabricación se ha confirmado para una orden de producción. Este valor se actualiza cuando se producen eventos de 'Entrada de mercancías contabilizada'. Este atributo complementa la cantidad planificada y es esencial para calcular el KPI «Diferencia entre la cantidad planificada y la real». Proporciona una medida definitiva de la producción y permite identificar diferencias que pueden deberse a desechos, pérdidas de rendimiento u otros problemas de producción. Comparar las cantidades entregadas entre centros, productos o periodos permite detectar problemas de eficiencia. Por qué es importante Mide la producción real y permite compararla directamente con los objetivos planificados para evaluar el rendimiento. Dónde obtenerlo Se encuentra en la tabla SAP AFPO, campo WEMNG (cantidad de mercancías recibidas). Ejemplos 984950751255 | |||
| Cantidad planificada PlannedQuantity | Cantidad total del producto cuya fabricación está programada en la orden. | ||
| Descripción La cantidad planificada representa el volumen de producción objetivo de una orden, definido durante la fase de planificación. Sirve como referencia para medir la producción real. Este atributo es fundamental para los KPI de rendimiento de producción y cumplimiento del programa, como «Diferencia entre la cantidad planificada y la real». Ayuda a evaluar la precisión de la planificación e identificar problemas sistemáticos de sobreproducción o producción insuficiente. Analizar este valor es clave para comprender hasta qué punto la ejecución de la producción se ajusta a los planes iniciales. Por qué es importante Este atributo sirve de referencia para medir las diferencias en la producción y evaluar la precisión de la planificación. Dónde obtenerlo Este valor está disponible en la tabla SAP AFKO, campo GAMNG (cantidad total de la orden). Ejemplos 1005000751250 | |||
| Centro de producción ProductionPlant | Instalación o ubicación donde se ejecuta la orden de producción. | ||
| Descripción El centro de producción es una unidad organizativa clave de SAP que representa una instalación de fabricación. Se asigna a cada orden de producción e indica dónde se llevarán a cabo físicamente las actividades de producción. Analizar el proceso por centro de producción permite comparar el rendimiento entre distintas ubicaciones. Esto ayuda a identificar qué centros son más eficientes, cuáles sufren más demoras o falta de materiales y dónde se pueden compartir las mejores prácticas. Es una dimensión fundamental para analizar las causas raíz en los Dashboards relacionados con el rendimiento y la utilización de recursos. Por qué es importante Permite comparar el rendimiento entre distintas ubicaciones de fabricación e identificar problemas específicos de cada centro o buenas prácticas. Dónde obtenerlo Este atributo se almacena en la tabla SAP AUFK, campo WERKS. Ejemplos 100017102000DE01 | |||
| Código de producto ProductCode | Identificador único del material o producto que se fabrica. | ||
| Descripción El código de producto, también llamado número de material, identifica el artículo que se fabricará según la orden de producción. Es un elemento central de los datos maestros que conecta la planificación de la producción con la gestión del inventario, las ventas y los costes. En Process Mining, filtrar o segmentar por código de producto es fundamental para comprender los procesos de fabricación específicos de cada producto. Permite responder preguntas como «¿Qué productos tienen los tiempos de ciclo más largos?» o «¿Hay productos más propensos a problemas de calidad o demoras por falta de materiales?». Este análisis es esencial para gestionar la cartera de productos e identificar oportunidades de estandarización u optimización de procesos para determinados tipos de materiales. Por qué es importante Permite analizar los procesos por producto e identificar los materiales asociados a ineficiencias, demoras o costes elevados. Dónde obtenerlo Se encuentra en la tabla SAP AFPO, campo MATNR. Ejemplos FG-123RM-45AHALB-7890CHEM-22 | |||
| Fecha de finalización real ActualEndDate | Marca de tiempo de la última actividad de producción, que indica la finalización real de la orden. | ||
| Descripción La fecha de fin real es la marca de tiempo del evento que indica que se han completado todas las actividades de producción de una orden. Suele obtenerse de la marca de tiempo del evento «Registro de confirmación final» o del último evento «Contabilización de entrada de mercancías». Este atributo es esencial para medir el tiempo total del ciclo de producción y analizar el cumplimiento del programa. Al comparar la «Fecha de fin real» con la «Fecha de fin planificada», se determina si la orden se completó a tiempo. El tiempo transcurrido entre la «Fecha de inicio real» y la «Fecha de fin real» permite calcular el tiempo real de producción. Por qué es importante Indica que la producción ha finalizado y permite medir con precisión el rendimiento de las entregas a tiempo y el tiempo total de ejecución. Dónde obtenerlo Se obtiene del registro de eventos al buscar la marca de tiempo más reciente de actividades clave de finalización, como «Registro de confirmación final» o «Contabilización de entrada de mercancías». Ejemplos 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| Fecha de inicio real ActualStartDate | Marca de tiempo de la primera actividad de producción registrada, que indica el inicio real de la ejecución. | ||
| Descripción La fecha de inicio real es la marca de tiempo del primer evento que indica el comienzo del trabajo de producción física. Normalmente, se obtiene de la primera confirmación de producción o de la primera salida de materias primas para la orden. Este atributo derivado es fundamental para analizar el cumplimiento del programa. Proporciona el punto de inicio real que se compara con la fecha de inicio planificada para calcular con precisión las diferencias en la hora de inicio. Comprender la diferencia entre las fechas de inicio planificada y real ayuda a localizar demoras previas a la producción relacionadas con la preparación de materiales, la puesta a punto de las máquinas o la disponibilidad de recursos. Por qué es importante Proporciona el punto de inicio real de la ejecución de la producción y permite calcular con precisión las demoras iniciales y el tiempo total de producción. Dónde obtenerlo Se obtiene del Registro de eventos buscando, para cada orden de producción, la marca de tiempo mínima de actividades de ejecución específicas, como 'Primera confirmación registrada' o 'Salida de mercancías contabilizada'. Ejemplos 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Disponibilidad de materiales MaterialAvailabilityStatus | Indica si están disponibles todos los componentes necesarios para la orden de producción. | ||
| Descripción El estado de disponibilidad de materiales es un indicador clave de la preparación para la producción. El sistema lo determina comprobando la disponibilidad de todos los componentes necesarios para la orden. El estado «Disponible» significa que la producción puede continuar sin demoras relacionadas con los materiales, mientras que «Faltante» indica un problema. Este atributo es esencial para el Dashboard «Análisis del impacto de la falta de materiales». Al analizar cuánto tiempo esperan las órdenes cuando faltan materiales, las empresas pueden cuantificar el impacto de los problemas de la cadena de suministro en los programas de producción. Esto ayuda a identificar proveedores poco fiables o componentes problemáticos que suelen causar demoras. Por qué es importante Permite identificar directamente las demoras causadas por la falta de materiales, una causa frecuente y significativa de las desviaciones del programa de producción. Dónde obtenerlo No se trata de un único campo almacenado, sino del resultado de una comprobación de disponibilidad (comprobación ATP). Los resultados suelen estar visibles en la transacción CO02 o en la comprobación colectiva de disponibilidad COHV. Es posible que se registre el propio estado, por ejemplo, MACM (material comprometido). Consulte la documentación de SAP ECC PP. Ejemplos DisponibleFaltanteParcialmente disponibleSin comprobar | |||
| Estado de cumplimiento del programa ScheduleAdherenceStatus | Indicador que señala si la orden de producción se completó antes de la fecha de fin planificada. | ||
| Descripción El estado de cumplimiento del programa es un atributo booleano o categórico calculado que ofrece una visión rápida del rendimiento en cuanto a puntualidad. Se obtiene al comparar la «Fecha de fin real» con la «Fecha de fin planificada». Si la fecha real es igual o anterior a la planificada, el estado es «A tiempo»; de lo contrario, es «Con retraso». Este atributo simplifica el análisis y la visualización en los Dashboards. Permite filtrar y agrupar datos fácilmente para calcular el KPI «Tasa de cumplimiento del programa» e identificar las principales causas de las órdenes con retraso, como determinados productos, plantas o faltantes de materiales. Por qué es importante Simplifica el análisis del rendimiento al clasificar las órdenes como «A tiempo» o «Con retraso», lo que facilita medir y comunicar la fiabilidad del programa. Dónde obtenerlo Campo calculado: IF('ActualEndDate' <= 'PlannedEndDate', 'On-Time', 'Late'). Ejemplos A tiempoCon retraso | |||
| Estado de la orden de producción ProductionOrderStatus | Estado actual de procesamiento de la orden de producción, por ejemplo, Creada, Liberada o Cerrada técnicamente. | ||
| Descripción El estado de la orden de producción indica la etapa actual de la orden en su ciclo de vida. SAP utiliza códigos de estado para gestionar su avance, como CRTD (Creada), REL (Liberada), CNF (Confirmada), DLV (Entregada) y TECO (Cerrada técnicamente). Analizar cuánto tiempo permanecen las órdenes en cada estado es fundamental en Process Mining para producción. Permite identificar cuánto esperan las órdenes para su liberación después de crearse o cuánto tiempo permanecen parcialmente entregadas. El seguimiento de los cambios de estado como actividades ofrece una visión general del flujo del proceso. Por qué es importante Ofrece una instantánea del avance de una orden y ayuda a detectar cuellos de botella en los que las órdenes quedan detenidas durante mucho tiempo. Dónde obtenerlo La información de estado se almacena en las tablas JEST y JSTO, vinculadas al número de objeto de la orden (AUFK-OBJNR). El texto del estado se encuentra en TJ02T. Para consultar el estado, suele utilizarse un módulo de función como STATUS_TEXT_EDIT. Ejemplos CRTD (Creada)REL (Liberada)DLV (Entregada)TECO (Cerrada técnicamente) | |||
| Fecha de finalización planificada PlannedEndDate | Fecha programada para completar la producción de la orden. | ||
| Descripción La fecha de finalización planificada es la fecha objetivo para completar una orden de producción, establecida durante la programación. Define el periodo previsto para terminar todas las actividades de producción, incluidas las confirmaciones finales y la entrada de mercancías. Esta fecha es esencial para calcular el KPI de cumplimiento del programa. Comparar la fecha de finalización planificada con la hora real de finalización, por ejemplo, la marca de tiempo de la actividad 'Entrada de mercancías contabilizada' o 'Confirmación final registrada', permite saber si las órdenes se completan a tiempo. Este análisis ayuda a evaluar la fiabilidad de los programas de producción e identificar las causas raíz de las entregas tardías. Por qué es importante Es la referencia para determinar si las órdenes de producción se completan a tiempo, lo que influye directamente en la satisfacción del cliente y la fiabilidad de la planificación. Dónde obtenerlo Es la fecha de finalización básica, que se encuentra en la tabla SAP AFKO, campo GLTRP. Ejemplos 2023-05-152023-06-282023-07-05 | |||
| Fecha de inicio planificada PlannedStartDate | Fecha programada para el inicio de la producción de la orden. | ||
| Descripción La fecha de inicio planificada es un parámetro clave de programación que se determina durante la planificación y la programación de la producción. Indica la fecha objetivo para comenzar las actividades de producción de una orden. Este atributo es fundamental para medir el cumplimiento del programa. Al comparar la fecha de inicio planificada con la hora real de inicio de la producción, por ejemplo, la marca de tiempo de la actividad 'Primera confirmación registrada', las organizaciones pueden identificar demoras en el inicio. Analizar las causas de estas demoras es uno de los principales usos de Process Mining en este ámbito. Por qué es importante Sirve de referencia para medir el cumplimiento del programa e identificar demoras en el inicio de la ejecución de la producción. Dónde obtenerlo Es la fecha de inicio básica, que se encuentra en la tabla SAP AFKO, campo GSTRP. Ejemplos 2023-05-102023-06-222023-07-01 | |||
| Grupo de planificación PlannerGroup | Grupo de responsables de planificación de necesidades de material (MRP) o planificadores de producción a cargo de la orden. | ||
| Descripción El grupo de planificación es un elemento organizativo que representa a un conjunto de personas responsables de planificar y gestionar determinados materiales u órdenes de producción. Asignar las órdenes a grupos de planificación ayuda a distribuir la carga de trabajo y a definir claramente quién se encarga de cada una. En Process Mining, este atributo permite analizar el rendimiento según el equipo de planificación responsable. Puede ayudar a responder preguntas como «¿Qué grupo de planificación registra más desviaciones del programa?» o «¿Hay diferencias en el tiempo de ciclo de las órdenes gestionadas por distintos grupos?». Esta información permite equilibrar la carga de trabajo e identificar necesidades de formación. Por qué es importante Permite segmentar el análisis del rendimiento por equipo responsable e identificar diferencias en la eficacia de la planificación y la carga de trabajo. Dónde obtenerlo Corresponde al responsable de planificación de necesidades de material (MRP), que se encuentra en el campo DISPO de la tabla AFKO de SAP. Ejemplos 001002P01P02 | |||
| Prioridad de producción ProductionPriority | Clasificación que indica la urgencia o prioridad de la orden de producción. | ||
| Descripción La prioridad de producción es un campo que indica la importancia relativa de una orden de producción. Permite que quienes planifican la producción y el personal de planta prioricen el trabajo y agilicen el procesamiento de las órdenes críticas. Analizar este atributo ayuda a evaluar la eficacia del sistema de prioridades. Al comparar el tiempo de ciclo de las órdenes de prioridad alta con el de las de prioridad baja, la empresa puede determinar si las órdenes urgentes se procesan realmente más rápido. De no ser así, podría haber problemas de comunicación, asignación de recursos o ejecución general del proceso. Por qué es importante Ayuda a evaluar la eficacia del sistema de gestión de prioridades y a comprobar si las órdenes más urgentes se completan antes que las estándar. Dónde obtenerlo A menudo no es un campo estándar de la cabecera de la orden de producción. Puede ser un campo personalizado, derivarse de la prioridad de la orden de venta o formar parte de un sistema de clasificación. Consulte la documentación de SAP ECC PP o la configuración del sistema. Ejemplos AltaMediaBajaUrgente | |||
| Usuario responsable ResponsibleUser | 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 SAP asociada a eventos clave del ciclo de vida de la orden de producción, como su creación o liberación. Esto permite atribuir y rastrear las acciones realizadas en el sistema. En Process Mining, este atributo sirve para analizar las variaciones del proceso según el comportamiento de los usuarios. Puede ayudar a identificar quiénes podrían necesitar formación adicional o siguen procedimientos no estándar. También facilita el análisis de recursos al mostrar cómo se distribuye el trabajo entre los distintos usuarios. Por qué es importante Vincula las actividades del proceso con personas concretas, lo que permite analizar el rendimiento por usuario y fomenta la rendición de cuentas. Dónde obtenerlo El usuario que creó la orden figura en AUFK-ERNAM. El último usuario que la modificó figura en AUFK-AENAM. Los documentos de modificación (CDHDR-USERNAME) proporcionan el historial de usuarios para cambios específicos. Ejemplos JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
| Variación de cantidad QuantityVariance | Diferencia entre la cantidad de producción planificada y la cantidad realmente entregada. | ||
| Descripción La variación de cantidad es una métrica calculada que mide la diferencia entre la producción obtenida y el plan inicial. Se calcula como «Cantidad entregada» menos «Cantidad planificada». Una variación positiva indica sobreproducción; una negativa, producción insuficiente o pérdida de rendimiento. Este atributo es esencial para el Dashboard «Producción planificada frente a producción real» y su KPI correspondiente. Analizar la variación ayuda a identificar problemas relacionados con el rendimiento de producción, las tasas de desperdicio o los errores de entrada de datos. Ofrece una medida directa de la fiabilidad del proceso de producción para alcanzar sus objetivos. Por qué es importante Cuantifica la precisión de la producción obtenida frente a lo planificado y pone de manifiesto posibles problemas de rendimiento, desperdicio o control del proceso. Dónde obtenerlo 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, desde el punto de vista de la planta de producción, se han completado todas las operaciones de la orden. 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. El tiempo entre la primera y la última confirmación representa el tiempo real de ejecución de la producción. Dónde obtenerlo Se registra cuando se asigna el estado del sistema 'CNF' (I0009, confirmado). Normalmente, esto ocurre al introducir la confirmación final en la tabla AFRU (AFRU-AUERU = 'X'). El cambio de estado queda registrado en JCDS. Capturar Identifique la marca de tiempo en que se asigna el estado 'CNF' o localice el último registro de confirmación en AFRU. Tipo de evento explicit | |||
| Entrada de mercancías contabilizada | Este evento registra la entrada en el inventario del producto terminado procedente de la orden de producción. Indica que los productos fabricados ya están disponibles para su envío o para continuar su procesamiento. | ||
| Por qué es importante Este es un hito clave de finalización que representa el resultado final del proceso de producción. El tiempo entre la liberación y la entrada de mercancías corresponde al tiempo total de producción. Dónde obtenerlo Se registra como documento de material en las tablas MKPF/MSEG, con un tipo de movimiento, normalmente '101', que hace referencia a la orden de producción. También se asigna a la orden el estado del sistema 'DLV' (I0012, entregada). Capturar Registre la fecha de contabilización del documento de material con tipo de movimiento '101' o la marca de tiempo del cambio al estado 'DLV'. Tipo de evento explicit | |||
| Orden completada técnicamente | Este paso administrativo cierra la orden de producción desde el punto de vista logístico. Impide nuevos movimientos de materiales o confirmaciones y permite realizar la liquidación financiera. | ||
| Por qué es importante Este es el punto final definitivo del ciclo de vida de la orden desde el punto de vista logístico. Analizar este evento ayuda a comprender la duración total del proceso, incluidas las tareas administrativas posteriores a la producción. Dónde obtenerlo Se registra explícitamente cuando se asigna a la orden el estado del sistema 'TECO' (I0045, completada técnicamente). El cambio queda registrado con una marca de tiempo en la tabla JCDS. Capturar Identifique en JCDS la marca de tiempo en que se activa el estado 'TECO' para la orden. Tipo de evento explicit | |||
| Orden de producción creada | Este evento marca la creación de una nueva orden de producción, normalmente a partir de una ejecución de planificación o de una entrada manual. Se registra explícitamente cuando se guarda en el sistema un nuevo registro de orden, al que se asigna el estado 'CRTD' (creada). | ||
| Por qué es importante Este es el punto de partida de cada caso de orden de producción. Analizar el tiempo transcurrido entre este evento y la liberación ayuda a identificar demoras en la planificación previa a la producción y en la preparación administrativa. Dónde obtenerlo Este evento se obtiene de la fecha de creación (AUFK-ERDAT) y la hora (AUFK-ERZET) de la orden de producción. Se asigna el estado del sistema 'CRTD' (I0001), que se registra en las tablas JEST y JCDS y se vincula al número de objeto de la orden (AUFK-OBJNR). Capturar Registre 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 indica la aprobación oficial y la liberación de la orden de producción para su ejecución. Una vez liberada, se activan las reservas de materiales y pueden comenzar actividades de producción como la salida de mercancías y las confirmaciones. | ||
| Por qué es importante Este es un hito clave que marca el traspaso de la planificación a la ejecución. El tiempo entre la creación y la liberación es un indicador importante de la eficiencia de la planificación. Dónde obtenerlo Se registra explícitamente cuando se asigna a la orden de producción el estado del sistema 'REL' (I0002). El cambio queda registrado con una marca de tiempo en la tabla JCDS, vinculada al número de objeto de la orden (AUFK-OBJNR). Capturar Identifique la marca de tiempo en que se activa el estado 'REL' para la orden. Tipo de evento explicit | |||
| Primera confirmación registrada | Este evento indica el inicio del trabajo de producción real de la orden. Se registra cuando se introduce en el sistema la primera confirmación de tiempo de una operación de la orden de producción. | ||
| Por qué es importante Esta actividad proporciona la hora real de inicio de la producción, esencial para medir el cumplimiento del programa e identificar demoras entre la asignación de recursos y el comienzo del trabajo. Dónde obtenerlo Se deduce buscando la fecha de contabilización más temprana (AFRU-BUDAT) entre todas las confirmaciones de la orden registradas en la tabla AFRU. La primera entrada marca el inicio de la producción física. Capturar Identifique el primer registro de confirmación de la orden según la fecha de contabilización de la tabla AFRU. Tipo de evento inferred | |||
| Anulación de la orden registrada | Este evento indica que una orden de producción se ha anulado antes de completarse. Normalmente, se asigna un estado específico o un indicador de borrado para impedir que continúe el procesamiento. | ||
| Por qué es importante Se trata de un resultado desfavorable que conviene seguir. Analizar las órdenes anuladas puede revelar problemas en la previsión de la demanda, la precisión de la planificación o la gestión de datos maestros. Dónde obtenerlo Puede deducirse de la asignación del estado 'DLFL' (I0076, indicador de borrado) o de un estado específico de anulación, si está configurado. El cambio queda registrado con una marca de tiempo en la tabla JCDS. Capturar Identifique la marca de tiempo en que se asigna a la orden el indicador de borrado ('DLFL') o un estado de anulación. Tipo de evento inferred | |||
| Confirmación intermedia registrada | Representa una actualización del avance de una orden de producción mediante la confirmación parcial de una operación. Es habitual en órdenes de larga duración, en las que es necesario hacer un seguimiento del avance antes de la finalización. | ||
| Por qué es importante Analizar las confirmaciones intermedias ayuda a supervisar el avance de los 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 obtenerlo Se obtiene de los registros de confirmación de la tabla AFRU que no están marcados como confirmación final. Cada entrada incluye una fecha (AFRU-BUDAT) y una hora de contabilización. Capturar Extraiga de AFRU todos los registros de confirmación que no estén marcados como confirmación final de una operación. Tipo de evento explicit | |||
| Datos de la orden modificados | Este evento registra modificaciones importantes realizadas en una orden de producción después de su creación, como cambios en la cantidad planificada, las fechas o la lista de materiales (BOM). El sistema registra estos cambios con 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 frecuencia elevada de cambios puede indicar una planificación inicial deficiente, una demanda volátil o datos inexactos. Dónde obtenerlo Los cambios en campos clave de tablas como AFKO (cabecera de la orden) y AFPO (posición de la orden) se registran en las tablas de documentos de modificación CDHDR (cabecera) y CDPOS (posición). Cada cambio pertinente 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 la orden de producción. Tipo de evento explicit | |||
| Disponibilidad de materiales comprobada | Representa la ejecución de una comprobación para determinar si están disponibles todos los componentes necesarios para la orden de producción. Puede tratarse de una comprobación automática al crear o liberar la orden, o de una acción iniciada manualmente. | ||
| Por qué es importante Esta actividad es fundamental para comprender las demoras causadas por la falta de materiales. Las comprobaciones frecuentes o el tiempo prolongado hasta que los materiales están disponibles pueden indicar problemas en la cadena de suministro o en la gestión del inventario. Dónde obtenerlo El sistema asigna un estado como 'MACM' (material comprometido) o 'MSPT' (falta de material). La ejecución puede deducirse de la marca de tiempo de este cambio de estado en las tablas JEST/JCDS. Los resultados aparecen en la cabecera de la orden. Capturar Dedúzcalo a partir de la marca de tiempo de los cambios de estado relacionados con la disponibilidad de materiales, como 'MACM' o 'MSPT'. Tipo de evento inferred | |||
| Liquidación de la orden ejecutada | Representa la liquidación financiera de la orden de producción, en la que los costes acumulados se asignan a los objetos de coste correspondientes. Desde el punto de vista del control de gestión, este es el último paso del ciclo de vida de la orden. | ||
| Por qué es importante Aunque se trata de una actividad financiera, las demoras en la liquidación pueden indicar problemas en la notificación de costes o en la exactitud de los datos de la orden. Este evento marca el cierre financiero efectivo del proceso de producción. Dónde obtenerlo Puede deducirse cuando el saldo de la orden llega a cero o cuando al estado del sistema 'SETC' (I0076, regla de liquidación creada) le siguen registros de ejecución de liquidación. La liquidación efectiva se registra en tablas de control de gestión como COSP y COSS. Capturar Dedúzcalo a partir de los documentos de liquidación vinculados a la orden en las tablas de CO o de la activación del estado 'SETC'. Tipo de evento inferred | |||
| Salida de mercancías contabilizada | Esta actividad representa la retirada del inventario de los materiales componentes que se utilizarán en la orden de producción. Confirma que las materias primas o los productos semielaborados necesarios están preparados para la producción. | ||
| Por qué es importante Este evento marca el inicio del consumo de materiales. Las demoras entre la liberación de la orden y la salida de mercancías pueden revelar problemas de logística de almacén, preparación de materiales o exactitud del inventario. Dónde obtenerlo Se registra como documento de material en las tablas MKPF (cabecera) y MSEG (posición), con un tipo de movimiento, normalmente '261', que hace referencia al número de orden de producción (MSEG-AUFNR). Capturar Registre la fecha de contabilización (MKPF-BUDAT) de los documentos de material con tipo de movimiento '261' vinculados a la orden. Tipo de evento explicit | |||
Guías de extracción
Pasos
- Cree un InfoSet en SAP Query: Use el código de transacción
SQ02. Cree un InfoSet, por ejemplo,ZPP_EVENTLOG. Seleccione la opción de origen de datos «Unión de tablas con tabla base». UseAUFK(datos maestros de la orden) como tabla base inicial. - Una las tablas necesarias: Añada las siguientes tablas a la unión del InfoSet. Es posible que el sistema proponga las uniones, pero compruebe que sean correctas:
AUFKconAFKO(datos de cabecera de las órdenes PP):AUFK-AUFNR = AFKO-AUFNRAUFKconJEST(estado de objetos individuales):AUFK-OBJNR = JEST-OBJNRJESTconJCDS(documentos de modificación de estados de sistema y usuario):JEST-OBJNR = JCDS-OBJNRANDJEST-STAT = JCDS-STAT. Nota: esta unión permite consultar el historial de cambios de estado.AUFKconAFRU(confirmaciones de finalización de la orden):AUFK-AUFNR = AFRU-AUFNRAUFKconMSEG(segmento de documento: material):AUFK-AUFNR = MSEG-AUFNRMSEGconMKPF(cabecera: documento de material):MSEG-MBLNR = MKPF-MBLNRANDMSEG-MJAHR = MKPF-MJAHR
- Defina los grupos de campos: Arrastre los campos necesarios de las tablas de origen a los grupos de campos. Incluya todos los campos que necesite la consulta final, como
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATEyMKPF-BUDAT. - Añada campos personalizados y código: En el InfoSet, vaya a la pestaña «Extras». Deberá definir campos personalizados para
ActivityName,EventTime,SourceSystemyLastDataUpdate, y escribir código ABAP para completarlos según la lógica definida en la sección de consulta. La lógica deberá recorrer los cambios de estado, las confirmaciones y los documentos de material para generar un registro distinto por cada evento de negocio. Este es el paso más complejo, ya que transforma datos tabulares en un registro de eventos mediante las secciones de código del InfoSet. - Genere y guarde el InfoSet: Cuando haya configurado todas las uniones, los campos y el código personalizado, guarde y genere el InfoSet.
- Cree una SAP Query: Use el código de transacción
SQ01. Cree una consulta, por ejemplo,ZPP_EVENTS, basada en el InfoSet creado en los pasos anteriores. - Diseñe la disposición de la consulta: En el diseñador de consultas, defina los campos de la pantalla de selección. Puede incluir la orden de producción
AUFNR, la plantaWERKS, el tipo de ordenAUARTy un intervalo de fechas para la creación de la ordenAUFK-ERDAT. - Defina la lista de resultados: Seleccione los campos que se mostrarán en el informe. La lista debe coincidir exactamente con las columnas necesarias para el registro de eventos, incluidos los campos personalizados como
ActivityNameyEventTime. - Ejecute la consulta: Ejecútela con los criterios de selección deseados, por ejemplo, para las órdenes de producción de los últimos 3 a 6 meses.
- Exporte los datos: Cuando aparezcan los resultados, exporte la lista. Los formatos más habituales y fiables son «Hoja de cálculo» o «Archivo local» con valores separados por tabulaciones o en formato CSV.
- Prepare el archivo para ProcessMind: Abra el archivo exportado en un programa de hojas de cálculo. Compruebe que los encabezados de columna coincidan con los atributos necesarios (
ProductionOrder,ActivityName,EventTime, etc.) y que el formato de fecha y hora deEventTimesea uniforme y cumpla el estándar requerido, por ejemplo, YYYY-MM-DD HH:MI:SS. Guarde el archivo como CSV para cargarlo.
Configuración
- Uniones del InfoSet: Este método se basa en un InfoSet complejo que une tablas de cabecera, estado, confirmaciones y movimientos de materiales. Las uniones principales son
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUyAUFK->MSEG->MKPF. Las uniones incorrectas o poco eficientes pueden reducir el rendimiento o generar datos inexactos. - Criterios de selección: Es fundamental definir un intervalo de selección manejable para evitar problemas de rendimiento del sistema. En la pantalla inicial de la consulta, incluya estos campos de selección clave:
- Planta 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 periodo móvil de 3 a 6 meses para mantener un volumen manejable.
- Planta de producción (
- Estados del sistema: La lógica para identificar eventos como «Creada», «Liberada», «Cerrada técnicamente» y «Cancelada» depende de códigos de estado específicos del sistema, como I0001, I0002, I0045 e I0047. Por lo general, son estándar en los sistemas SAP, pero conviene verificarlos.
- Clases de movimiento: Los eventos como «Salida de mercancías» y «Entrada de mercancías» se identifican mediante sus clases de movimiento específicas (
MSEG-BWART), normalmente «261» y «101», respectivamente. Compruebe que estos valores coincidan con la configuración de su organización. - Autorizaciones: Quien ejecute la consulta necesita autorización para acceder a las transacciones
SQ01,SQ02ySQ03, además de permisos de visualización para todas las tablas subyacentes (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF).
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
- Configure el acceso a la base de datos: Obtenga credenciales de solo lectura para la base de datos subyacente de SAP ECC. 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 imprescindible y debe coordinarse con los equipos de administración de SAP Basis y de la base de datos.
- Identifique el esquema de SAP: Determine el esquema de base de datos donde se almacenan las tablas de SAP. Suele ser
SAPSR3u otro nombre específico del sistema. Deberá sustituir el marcador[Your SAP Schema]de la consulta por este valor. - Prepare la consulta SQL: Copie la consulta SQL completa que se proporciona en la sección
query. Está diseñada para extraer todas las actividades especificadas en un único formato de registro de eventos. - Configure los parámetros de la consulta: Antes de ejecutarla, modifique los marcadores de posición de la consulta. Defina
[Start Date]y[End Date]para establecer el periodo de extracción. También se recomienda filtrar por planta de producción (WERKS) o tipo de orden (AUART) para limitar el volumen de datos. - Conéctese y ejecute la consulta: Use un cliente SQL estándar, como DBeaver o SAP HANA Studio, o un script personalizado en Python o Java, para conectarse a la base de datos de SAP con las credenciales del paso 1.
- Ejecute la consulta: Pegue la consulta SQL configurada en el cliente y ejecútela. Según el intervalo de fechas y el tamaño del sistema, el proceso puede tardar varios minutos.
- Revise los resultados preliminares: Cuando termine la consulta, revise brevemente las primeras centenas de filas para comprobar que las columnas
ProductionOrder,ActivityNameyEventTimeestén completas y tengan sentido. - Exporte a CSV: Exporte todo el conjunto de resultados del cliente SQL a un archivo CSV. Compruebe que use la codificación UTF-8 para evitar problemas con los caracteres.
- Prepare el CSV para cargarlo: Abra el archivo CSV y compruebe que los encabezados de columna coincidan con los atributos necesarios (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate, etc.). Asegúrese de que la columnaEventTimetenga un formato uniforme, por ejemplo,YYYY-MM-DD HH:MI:SS. - Cargue el archivo en ProcessMind: El archivo CSV preparado ya está listo para cargarse en la plataforma ProcessMind y analizarse.
Configuración
- Esquema de la base de datos: Debe especificar el esquema de SAP donde se encuentran las tablas de planificación de producción. Sustituya el marcador
[Your SAP Schema]de la consulta por el nombre correcto de su entorno, por ejemplo,SAPSR3. - Intervalo de fechas: Filtrar por un intervalo de fechas específico es fundamental para el rendimiento. La consulta filtra por la fecha de creación de la orden (
AUFK.ERDAT). Recomendamos empezar con un periodo reciente de 3 a 6 meses para mantener un volumen de datos manejable. - Tipo de orden de producción: Para delimitar el análisis, filtre la consulta por el campo de tipo de orden de producción (
AUFK.AUART). Así podrá incluir o excluir tipos específicos, como órdenes de producción estándar, órdenes de proceso u órdenes de reproceso. - Planta de producción: Es muy recomendable filtrar por una o varias plantas de producción (
AFKO.WERKS). Extraer datos de todas las plantas a la vez puede consumir muchos recursos. - Acceso a la base de datos: Este método requiere un usuario de base de datos con permisos de lectura, como mínimo, para las siguientes tablas:
AUFK,AFKO,JCDS,JEST,AFRU,MSEG,MKPF. El acceso directo a la base de datos no está habilitado para todos los usuarios de SAP y requiere una autorización especial.
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
- Confirme que estén disponibles SAP ECC PP, el procesamiento de órdenes de producción, las confirmaciones, la gestión de inventario y los datos de controlling. Verifique también que el usuario de extracción tenga autorización para leer las tablas de aplicación necesarias y ejecutar informes ABAP personalizados.
- En ABAP Workbench, por ejemplo, mediante la transacción SE38 o SE80, cree un informe ejecutable específico, como [Your custom report name]. Use una pantalla de selección con parámetros de fecha obligatorios, como [Start date] y [End date], además de filtros opcionales para [Company Code], [Production Plant], [Order Type], [Material] y [Production Order].
- Lea los datos maestros y de cabecera de las órdenes de producción de AUFK y de las tablas de órdenes de producción configuradas en su sistema SAP ECC. Use JCDS y la configuración de estados correspondiente para identificar cambios de estado explícitos, incluidos CRTD, liberado, completado técnicamente y los estados relacionados con la cancelación. No dé por sentado que un código de estado representa un evento si el historial de estados no contiene un cambio con marca de tiempo.
- Lea los resultados de la comprobación de disponibilidad de materiales de los datos de comprobación de disponibilidad de órdenes de producción configurados en su sistema. Si la comprobación no se conserva en una tabla que pueda vincularse de forma fiable con la orden y la marca de tiempo, implemente la ampliación de SAP, el registro de aplicación o la fuente de auditoría configurados y aprobados por su equipo de SAP. No deduzca que se realizó una comprobación únicamente a partir de la creación o liberación de la orden.
- Lea el historial de cambios de las órdenes de producción a partir de los objetos de documentos de modificación configurados y sus tablas asociadas. Extraiga solo los cambios relevantes, como la cantidad planificada, las fechas, la lista de materiales, la hoja de ruta u otros campos aprobados por la persona responsable del proceso. Use la marca de tiempo del documento de modificación como EventTime.
- Lea las contabilizaciones de salida y entrada de mercancías de los datos de documentos de material de inventario configurados en su sistema. Vincule las contabilizaciones con la orden de producción mediante la referencia a la orden disponible en los datos del documento de material. Clasifique las retiradas de componentes como Goods Issue Posted y las entradas de productos terminados como Goods Receipt Posted. Use la fecha y la hora de contabilización cuando estén disponibles.
- Lea los datos de confirmación de la fuente de confirmaciones de producción configurada en su sistema. Ordene las confirmaciones por orden de producción y marca de tiempo de confirmación. Genere First Confirmation Recorded para la primera confirmación, Intermediate Confirmation Recorded para las confirmaciones intermedias que cumplan los criterios y Final Confirmation Recorded para una confirmación marcada explícitamente como final o identificada como tal mediante la lógica de finalización de confirmaciones configurada. No deduzca que una confirmación es final porque sea la última fila devuelta por una consulta arbitraria.
- Lea los datos de ejecución de liquidaciones de la fuente de liquidaciones de controlling configurada en su sistema. Genere Order Settlement Ran solo cuando un registro de ejecución de liquidación, un documento de liquidación o un historial de estados aprobado proporcione una marca de tiempo explícita vinculada a la orden de producción.
- Cree una fila de evento interna para cada actividad extraída. Rellene ProductionOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ProductionPlant, ProductCode, PlannedQuantity, DeliveredQuantity, ActualStartDate y ActualEndDate. Aplique una conversión de marcas de tiempo estable y conserve la zona horaria del sistema de origen. Si existen esos eventos, establezca ActualStartDate en la marca de tiempo de la primera confirmación y ActualEndDate en la de la confirmación final.
- Ordene las filas de eventos por ProductionOrder y EventTime, con un criterio secundario determinista para las marcas de tiempo iguales. Elimine solo los registros de origen exactamente duplicados, no los eventos repetidos legítimos. Valide que el esquema de salida incluya los doce nombres de actividad obligatorios y que cada fila generada tenga un identificador de caso, un nombre de actividad y una marca de tiempo del evento.
- Escriba el resultado en un archivo del servidor de aplicaciones mediante una interfaz de archivos ABAP aprobada y una ruta lógica configurada. Use un delimitador y una codificación de texto acordados con la configuración de ingesta de ProcessMind, incluya una fila de encabezado, entrecomille los valores que contengan delimitadores y aplique un formato uniforme a las marcas de tiempo, preferiblemente YYYY-MM-DDThh:mm:ss.
- Descargue el archivo mediante el procedimiento aprobado de transferencia de archivos de SAP, revíselo de forma independiente y cárguelo en ProcessMind como un registro de eventos. Configure ProductionOrder como identificador del caso, ActivityName como actividad y EventTime como marca de tiempo del evento. Confirme que ProcessMind esté configurado para leer las filas tal como están y que no se espere que deduzca actividades faltantes.
Configuración
- Intervalo de fechas: Para el análisis inicial, use una ventana de extracción móvil de tres a seis meses. Amplíe el intervalo solo después de evaluar el rendimiento y el volumen de datos. Incluya un periodo retrospectivo para las órdenes creadas antes de la fecha de inicio seleccionada que hayan estado activas durante el periodo de análisis.
- Filtros de selección: Incluya filtros para [Company Code], [Production Plant], [Order Type], [Material], [Production Order], el estado de la orden y las fechas de creación o modificación. Configure los campos exactos según la implementación de SAP ECC, ya que la disponibilidad de los campos de las órdenes de producción puede variar según la versión y las personalizaciones.
- Alcance de los eventos: Extraiga las doce actividades obligatorias como filas de eventos explícitas: Production Order Created, Material Availability Checked, Production Order Released, Order Data Changed, Goods Issue Posted, First Confirmation Recorded, Intermediate Confirmation Recorded, Final Confirmation Recorded, Goods Receipt Posted, Order Technically Completed, Order Settlement Ran y Order Cancellation Set.
- Criterio para las marcas de tiempo: Priorice la fecha y la hora del evento de origen. Si solo existe una fecha, documente la menor precisión y use una hora configurada uniforme, en lugar de presentar una hora precisa inventada. Convierta todas las marcas de tiempo a la zona horaria que espera ProcessMind.
- Gestión de estados: Use el historial de estados con marcas de tiempo para los eventos de estado. Configure la correspondencia entre los valores de estado internos y las actividades de negocio según la configuración de estados del sistema y la aprobación de la persona responsable del proceso.
- Comprobaciones de disponibilidad: Configure la fuente aprobada para la ejecución de las comprobaciones de disponibilidad. No genere una fila Material Availability Checked a partir de la creación o liberación de la orden, las reservas o una salida de mercancías correcta, salvo que la fuente aprobada por el negocio registre explícitamente la comprobación.
- Gestión de confirmaciones: Configure las reglas que distinguen las confirmaciones iniciales, intermedias y finales. Una confirmación solo puede considerarse final si la fuente la identifica explícitamente como tal o si la lógica de confirmación configurada en SAP determina que el proceso ha concluido.
- Cantidades: Siempre que sea posible, conserve la unidad de medida de origen. Si agrega cantidades, documente si la agregación se realiza por orden, material, movimiento, confirmación o evento. DeliveredQuantity debe representar las entradas contabilizadas de productos terminados, no solo el rendimiento confirmado, salvo que la persona responsable del proceso apruebe esa interpretación.
- LastDataUpdate: Rellene este campo con la marca de tiempo de la ejecución de extracción o con la marca de tiempo de actualización de la fuente. Aplique la misma convención documentada a todas las filas de una ejecución.
- Rendimiento: Limite el intervalo de selección, seleccione solo los campos necesarios, procese los datos en paquetes, aplique filtros en la base de datos, evite lecturas anidadas de la base de datos dentro de bucles grandes y cree o use índices aprobados únicamente mediante el proceso de administración de bases de datos de SAP. Escriba los resultados de forma incremental si el uso de memoria supone un problema.
- Archivo de salida: Configure el directorio del servidor de aplicaciones, el nombre lógico del archivo, el delimitador, la codificación, el formato decimal, el formato de las marcas de tiempo y el comportamiento del encabezado según las especificaciones de carga de ProcessMind. No incluya credenciales en el informe ni en el archivo de salida.
- Requisitos previos: Confirme que estén activos, según corresponda, SAP ECC PP, la gestión de inventario, las confirmaciones, la gestión de estados de las órdenes de producción y los datos de liquidación de controlling. Antes de la ejecución, deben concederse las autorizaciones necesarias, aprobarse el desarrollo personalizado y su transporte, y habilitarse el acceso a los archivos del servidor de aplicaciones y a la ingesta de ProcessMind.
- Configuración específica del sistema: Confirme los nombres de tablas y campos, los códigos de estado, los objetos de documentos de modificación y las fuentes de confirmaciones, comprobaciones de disponibilidad y liquidaciones en el sistema SAP ECC de destino. Use [Configure based on your system] cuando la implementación no proporcione una fuente estándar y fiable.
Consulta de ejemplo abap
REPORT [Your custom report name].
* This executable ABAP report is a complete extraction framework for the twelve required activities.
* Replace only the marked system-specific source sections, selection parameters, and file configuration.
* Confirm every table and field against the target SAP ECC system before activation.
PARAMETERS p_from TYPE sydatum OBLIGATORY.
PARAMETERS p_to TYPE sydatum OBLIGATORY.
PARAMETERS p_file TYPE string OBLIGATORY DEFAULT '[Application server file path]'.
PARAMETERS p_src TYPE string OBLIGATORY DEFAULT '[SAP ECC system identifier]'.
SELECT-OPTIONS s_werks FOR [Production plant field].
SELECT-OPTIONS s_aufnr FOR [Production order field].
SELECT-OPTIONS s_auart FOR [Production order type field].
SELECT-OPTIONS s_bukrs FOR [Company code field].
TYPES: BEGIN OF ty_event,
productionorder TYPE string,
activityname TYPE string,
eventtime TYPE string,
sourcesystem TYPE string,
lastdataupdate TYPE string,
productionplant TYPE string,
productcode TYPE string,
plannedquantity TYPE string,
deliveredquantity TYPE string,
actualstartdate TYPE string,
actualenddate TYPE string,
END OF ty_event.
DATA gt_events TYPE STANDARD TABLE OF ty_event WITH EMPTY KEY.
DATA gs_event TYPE ty_event.
DATA gv_update_timestamp TYPE string.
DATA gv_line TYPE string.
GET TIME STAMP FIELD DATA(gv_update_ts).
gv_update_timestamp = |{ gv_update_ts TIMESTAMP = ISO }|.
* Production Order Created
SELECT [Production order field], [Production plant field], [Product field], [Planned quantity field], [Creation date field], [Creation time field]
FROM [Production order header table]
INTO TABLE @DATA(lt_created)
WHERE [Creation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks
AND [Production order type field] IN @s_auart
AND [Company code field] IN @s_bukrs.
LOOP AT lt_created ASSIGNING FIELD-SYMBOL(<created>).
CLEAR gs_event.
gs_event-productionorder = |{ <created>-[Production order field] }|.
gs_event-activityname = 'Production Order Created'.
gs_event-eventtime = |{ <created>-[Creation date field] } { <created>-[Creation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <created>-[Production plant field] }|.
gs_event-productcode = |{ <created>-[Product field] }|.
gs_event-plannedquantity = |{ <created>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Material Availability Checked
SELECT [Production order field], [Production plant field], [Product field], [Availability check date field], [Availability check time field]
FROM [Availability check source table]
INTO TABLE @DATA(lt_availability)
WHERE [Availability check date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_availability ASSIGNING FIELD-SYMBOL(<availability>).
CLEAR gs_event.
gs_event-productionorder = |{ <availability>-[Production order field] }|.
gs_event-activityname = 'Material Availability Checked'.
gs_event-eventtime = |{ <availability>-[Availability check date field] } { <availability>-[Availability check time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <availability>-[Production plant field] }|.
gs_event-productcode = |{ <availability>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Production Order Released
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field], [Planned quantity field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_released)
WHERE [Status field] = '[Released status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_released ASSIGNING FIELD-SYMBOL(<released>).
CLEAR gs_event.
gs_event-productionorder = |{ <released>-[Production order field] }|.
gs_event-activityname = 'Production Order Released'.
gs_event-eventtime = |{ <released>-[Status change date field] } { <released>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <released>-[Production plant field] }|.
gs_event-productcode = |{ <released>-[Product field] }|.
gs_event-plannedquantity = |{ <released>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Data Changed
SELECT [Production order field], [Change date field], [Change time field], [Production plant field], [Product field], [Changed field name]
FROM [Production order change document source table]
INTO TABLE @DATA(lt_changed)
WHERE [Change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Changed field name] IN ('[Planned quantity field]', '[Basic start date field]', '[Basic finish date field]', '[BOM field]', '[Routing field]').
LOOP AT lt_changed ASSIGNING FIELD-SYMBOL(<changed>).
CLEAR gs_event.
gs_event-productionorder = |{ <changed>-[Production order field] }|.
gs_event-activityname = 'Order Data Changed'.
gs_event-eventtime = |{ <changed>-[Change date field] } { <changed>-[Change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <changed>-[Production plant field] }|.
gs_event-productcode = |{ <changed>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Issue Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gi)
WHERE [Movement type field] IN ('[Goods issue movement type 1]', '[Goods issue movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gi ASSIGNING FIELD-SYMBOL(<gi>).
CLEAR gs_event.
gs_event-productionorder = |{ <gi>-[Production order field] }|.
gs_event-activityname = 'Goods Issue Posted'.
gs_event-eventtime = |{ <gi>-[Posting date field] } { <gi>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gi>-[Production plant field] }|.
gs_event-productcode = |{ <gi>-[Product field] }|.
gs_event-deliveredquantity = |{ <gi>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* First Confirmation Recorded
SELECT [Production order field], [Confirmation date field], [Confirmation time field], [Production plant field], [Product field], [Confirmed quantity field]
FROM [Production confirmation source table]
INTO TABLE @DATA(lt_confirmations)
WHERE [Confirmation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
SORT lt_confirmations BY [Production order field] [Confirmation date field] [Confirmation time field].
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<confirmation>) GROUP BY <confirmation>-[Production order field] ASSIGNING FIELD-SYMBOL(<confirmation_group>).
LOOP AT GROUP <confirmation_group> ASSIGNING FIELD-SYMBOL(<first_confirmation>).
CLEAR gs_event.
gs_event-productionorder = |{ <first_confirmation>-[Production order field] }|.
gs_event-activityname = 'First Confirmation Recorded'.
gs_event-eventtime = |{ <first_confirmation>-[Confirmation date field] } { <first_confirmation>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <first_confirmation>-[Production plant field] }|.
gs_event-productcode = |{ <first_confirmation>-[Product field] }|.
gs_event-actualstartdate = gs_event-eventtime.
APPEND gs_event TO gt_events.
EXIT.
ENDLOOP.
ENDLOOP.
* Intermediate Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<intermediate>) GROUP BY <intermediate>-[Production order field] ASSIGNING FIELD-SYMBOL(<intermediate_group>).
DATA(lv_intermediate_index) = 0.
DATA(lv_intermediate_count) = GROUP SIZE.
LOOP AT GROUP <intermediate_group> ASSIGNING FIELD-SYMBOL(<intermediate_row>).
lv_intermediate_index = lv_intermediate_index + 1.
IF lv_intermediate_index < lv_intermediate_count AND <intermediate_row>-[Final confirmation indicator field] <> '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <intermediate_row>-[Production order field] }|.
gs_event-activityname = 'Intermediate Confirmation Recorded'.
gs_event-eventtime = |{ <intermediate_row>-[Confirmation date field] } { <intermediate_row>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <intermediate_row>-[Production plant field] }|.
gs_event-productcode = |{ <intermediate_row>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDIF.
ENDLOOP.
ENDLOOP.
* Final Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<final>) WHERE [Final confirmation indicator field] = '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <final>-[Production order field] }|.
gs_event-activityname = 'Final Confirmation Recorded'.
gs_event-eventtime = |{ <final>-[Confirmation date field] } { <final>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <final>-[Production plant field] }|.
gs_event-productcode = |{ <final>-[Product field] }|.
gs_event-actualenddate = gs_event-eventtime.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Receipt Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gr)
WHERE [Movement type field] IN ('[Goods receipt movement type 1]', '[Goods receipt movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gr ASSIGNING FIELD-SYMBOL(<gr>).
CLEAR gs_event.
gs_event-productionorder = |{ <gr>-[Production order field] }|.
gs_event-activityname = 'Goods Receipt Posted'.
gs_event-eventtime = |{ <gr>-[Posting date field] } { <gr>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gr>-[Production plant field] }|.
gs_event-productcode = |{ <gr>-[Product field] }|.
gs_event-deliveredquantity = |{ <gr>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Technically Completed
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_teco)
WHERE [Status field] = '[Technically completed status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_teco ASSIGNING FIELD-SYMBOL(<teco>).
CLEAR gs_event.
gs_event-productionorder = |{ <teco>-[Production order field] }|.
gs_event-activityname = 'Order Technically Completed'.
gs_event-eventtime = |{ <teco>-[Status change date field] } { <teco>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <teco>-[Production plant field] }|.
gs_event-productcode = |{ <teco>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Settlement Ran
SELECT [Production order field], [Settlement date field], [Settlement time field], [Production plant field], [Product field]
FROM [Order settlement source table]
INTO TABLE @DATA(lt_settlement)
WHERE [Settlement date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_settlement ASSIGNING FIELD-SYMBOL(<settlement>).
CLEAR gs_event.
gs_event-productionorder = |{ <settlement>-[Production order field] }|.
gs_event-activityname = 'Order Settlement Ran'.
gs_event-eventtime = |{ <settlement>-[Settlement date field] } { <settlement>-[Settlement time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <settlement>-[Production plant field] }|.
gs_event-productcode = |{ <settlement>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Cancellation Set
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_cancelled)
WHERE [Status field] IN ('[Cancellation status code]', '[Deletion status code]')
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_cancelled ASSIGNING FIELD-SYMBOL(<cancelled>).
CLEAR gs_event.
gs_event-productionorder = |{ <cancelled>-[Production order field] }|.
gs_event-activityname = 'Order Cancellation Set'.
gs_event-eventtime = |{ <cancelled>-[Status change date field] } { <cancelled>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <cancelled>-[Production plant field] }|.
gs_event-productcode = |{ <cancelled>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
SORT gt_events BY productionorder eventtime activityname.
DELETE ADJACENT DUPLICATES FROM gt_events COMPARING productionorder activityname eventtime productionplant productcode.
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'The application server output file could not be opened' TYPE 'E'.
ENDIF.
TRANSFER 'ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProductionPlant,ProductCode,PlannedQuantity,DeliveredQuantity,ActualStartDate,ActualEndDate' TO p_file.
LOOP AT gt_events INTO gs_event.
gv_line = |{ gs_event-productionorder },{ gs_event-activityname },{ gs_event-eventtime },{ gs_event-sourcesystem },{ gs_event-lastdataupdate },{ gs_event-productionplant },{ gs_event-productcode },{ gs_event-plannedquantity },{ gs_event-deliveredquantity },{ gs_event-actualstartdate },{ gs_event-actualenddate }|.
TRANSFER gv_line TO p_file.
ENDLOOP.
CLOSE DATASET p_file.
MESSAGE |Event log written to { p_file }| TYPE 'S'. ¿Todo listo para empezar?
Aproveche este Template para preparar sus datos y avanzar hacia un proceso de planificación de producción más optimizado. Obtenga información útil y agilice sus operaciones desde hoy.
Optimice ahora la planificación de producción para mejorar la eficiencia
Detecte ineficiencias, reduzca el tiempo de ciclo un 30 % y alcance sus objetivos.
No se requiere tarjeta de crédito. Empiece a optimizar hoy.