Su Template de datos de planificación de la producción
Su Template de datos de planificación de la producción
- Atributos recomendados para recopilar
- Actividades clave que debe seguir
- Recomendaciones prácticas para la extracción
Atributos de la planificación de la producción
| Nombre | Descripción | ||
|---|---|---|---|
| Hora del evento EventTime | La marca de tiempo exacta que indica cuándo tuvo lugar la actividad. | ||
| Descripción La hora del evento registra la fecha y la hora en que se ejecutó una actividad concreta 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, incluido el cálculo de tiempos de ciclo, tiempos de espera y duración total del proceso. Las marcas de tiempo precisas son esenciales para ordenar correctamente los eventos y analizar el rendimiento. Permiten medir la duración entre actividades, identificar retrasos y evaluar el rendimiento frente a los programas o los acuerdos de nivel de servicio. En el contexto de la planificación de la producción, ayudan a comprender cuánto tarda cada etapa de la planificación y la ejecución. Por qué es importante Este atributo proporciona la secuencia cronológica de los eventos, esencial para calcular duraciones, analizar el rendimiento e identificar cuellos de botella. Dónde obtenerlo Se deriva 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 modificación 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 empresarial o del sistema que tuvo lugar en un momento concreto 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 modificaciones, 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 constituye la base del mapa de procesos, ya que permite a los analistas 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 y útil que refleje la realidad operativa. Por qué es importante Define los pasos del mapa de procesos y permite visualizar, analizar y comprender el Workflow de producción. Dónde obtenerlo Se genera a partir de diversas fuentes, incluidos los cambios de estado de 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 | El identificador único de una orden de producción, que sirve como identificador principal del caso para el proceso de planificación y ejecución de la producción. | ||
| Descripción El número de la orden de producción es una clave alfanumérica única asignada a cada orden de fabricación en SAP ECC PP. Actúa como 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 pertenecientes a una misma ejecución de producción. Esto permite analizar de principio a fin todo el ciclo de vida de una orden de producción, incluido el seguimiento de su progreso, la medición de los tiempos de ciclo y la identificación de desviaciones respecto al proceso estándar. Analizar los procesos por orden de producción ofrece una visión clara de cómo se atienden las solicitudes de fabricación individuales. Por qué es importante Es el identificador central que conecta todos los eventos relacionados del proceso y permite reconstruir y analizar cada recorrido de producción de principio a fin. Dónde obtenerlo Este atributo se encuentra en la tabla AUFK de SAP, en el campo AUFNR. Ejemplos 1000345100034610003471000348 | |||
| Sistema de origen 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 una instancia concreta de SAP ECC. En organizaciones con varios sistemas ERP o una combinación de plataformas heredadas y modernas, este campo es fundamental para la trazabilidad y el contexto de los datos. Para el análisis, permite filtrar los procesos según su sistema de origen. Puede resultar útil para comparar el rendimiento de los procesos entre distintos sistemas o aislar datos durante proyectos de consolidación de datos procedentes de varios sistemas. Por qué es importante Proporciona un contexto esencial sobre el origen de los datos, especialmente en entornos con varias instancias de SAP o sistemas integrados. Dónde obtenerlo Normalmente se añade durante el proceso de extracción de datos y suele derivarse 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 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 extrajeron del sistema de origen y se incorporaron a la herramienta de Process Mining. No representa un evento empresarial, sino una marca de tiempo técnica para fines de gestión de datos. Su uso principal es garantizar la actualización de los datos y ayudar a administradores y analistas a comprender la antigüedad de la información que analizan. Es fundamental para validar que el análisis del proceso se basa en información actualizada, especialmente 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 generarse y registrarse mediante la herramienta o el script de extracción, transformación y carga (ETL) durante el proceso de incorporación 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 se ha fabricado y recibido en el inventario. | ||
| Descripción La cantidad entregada, también conocida como cantidad de entrada de mercancías, es la cantidad total de producto terminado cuya fabricación se ha confirmado para una orden de producción determinada. Este valor se actualiza cuando se producen eventos de «Entrada de mercancías contabilizada». Este atributo es la contrapartida de la «Cantidad planificada» y resulta esencial para calcular el KPI «Variación entre la cantidad planificada y la real». Proporciona una medida definitiva de la producción obtenida y permite identificar discrepancias causadas por desperdicios, pérdidas de rendimiento u otros problemas de producción. Comparar las cantidades entregadas entre centros, productos o periodos permite detectar áreas con problemas de eficiencia. Por qué es importante Mide la producción real del proceso productivo, lo que 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 | La cantidad total del producto cuya fabricación está programada en la orden. | ||
| Descripción La cantidad planificada representa la producción objetivo de una orden de producción, definida durante la fase de planificación. Este valor sirve como referencia para medir la producción real. Este atributo es fundamental para los KPI relacionados con el rendimiento de la producción y el cumplimiento del programa, como «Variación entre la cantidad planificada y la real». Ayuda a evaluar la precisión de la planificación de la producción e identificar problemas sistémicos relacionados con la sobreproducción o la 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 la variación de la producción y evaluar la precisión de la planificación. Dónde obtenerlo Este valor está disponible en la tabla AFKO de SAP, en el campo GAMNG (cantidad total de la orden). Ejemplos 1005000751250 | |||
| Centro de producción ProductionPlant | La instalación o ubicación de fabricación donde se ejecuta la orden de producción. | ||
| Descripción El centro de producción es una unidad organizativa clave en 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 retrasos o escasez de materiales y dónde pueden compartirse las buenas prácticas. Es una dimensión fundamental para el análisis de causas raíz en 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 y ayuda a identificar problemas específicos de cada centro o mejores prácticas. Dónde obtenerlo Este atributo se almacena en la tabla AUFK de SAP, en el campo WERKS. Ejemplos 100017102000DE01 | |||
| Código de producto ProductCode | El identificador único del material o producto que se fabrica. | ||
| Descripción El código de producto, o número de material, identifica el artículo que la orden de producción debe fabricar. 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 el cálculo de 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. Ayuda a responder preguntas como «¿Qué productos tienen los tiempos de ciclo más largos?» o «¿Hay productos más propensos a problemas de calidad o retrasos de materiales?». Este análisis es esencial para gestionar la cartera de productos e identificar oportunidades de estandarización u optimización del proceso para tipos de materiales concretos. Por qué es importante Permite analizar el proceso por producto y revela qué materiales están asociados a ineficiencias, retrasos o costes elevados. Dónde obtenerlo Se encuentra en la tabla AFPO de SAP, en el campo MATNR. Ejemplos FG-123RM-45AHALB-7890CHEM-22 | |||
| Fecha de finalización real ActualEndDate | La marca de tiempo de la última actividad de producción, que señala la finalización real del pedido. | ||
| Descripción La fecha de finalización real es la marca de tiempo del evento que indica que se han completado todas las actividades de producción de un pedido. Normalmente se obtiene de la marca de tiempo del evento «Final Confirmation Recorded» o del último evento «Goods Receipt Posted». Este atributo es esencial para medir el tiempo total del ciclo de producción y analizar el cumplimiento del programa. Comparar la «Fecha de finalización real» con la «Fecha de finalización planificada» permite determinar si el pedido se completó a tiempo. Analizar la duración entre la «Fecha de inicio real» y la «Fecha de finalización real» proporciona el tiempo real de producción. Por qué es importante Marca la finalización de la producción 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 buscando la marca de tiempo máxima de actividades clave de finalización, como «Final Confirmation Recorded» o «Goods Receipt Posted». 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 señala 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 físico de producción. Normalmente se obtiene del primer evento de confirmación de producción o de la primera salida de mercancías de materias primas para el pedido. 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», lo que permite calcular con precisión las desviaciones en la hora de inicio. Comprender la diferencia entre las fechas de inicio planificada y real ayuda a localizar retrasos previos a la producción relacionados con la preparación de materiales, la configuración 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, lo que permite calcular con precisión los retrasos iniciales y el plazo total de producción. Dónde obtenerlo Se obtiene del registro de eventos buscando la marca de tiempo mínima de actividades de ejecución específicas, como «First Confirmation Recorded» o «Goods Issue Posted», para cada orden de producción. Ejemplos 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Desviación de cantidad QuantityVariance | La diferencia entre la cantidad de producción planificada y la cantidad entregada real. | ||
| Descripción La desviació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 desviación positiva indica sobreproducción, mientras que una desviación negativa indica producción insuficiente o pérdida de rendimiento. Este atributo es esencial para el Dashboard «Producción planificada frente a real» y su KPI correspondiente. Analizar la desviación ayuda a identificar problemas relacionados con el rendimiento de producción, los índices de desperdicio o los errores de registro de datos. Proporciona una medida directa de la fiabilidad del proceso productivo para alcanzar sus objetivos de producción. Por qué es importante Cuantifica la precisión de la producción obtenida frente al plan y pone de relieve posibles problemas de rendimiento, desperdicio o control del proceso. Dónde obtenerlo Campo calculado: 'DeliveredQuantity' - 'PlannedQuantity'. Ejemplos -2-5005 | |||
| 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 fundamental de la preparación para la producción. El sistema lo determina comprobando la disponibilidad de todos los materiales componentes necesarios para el pedido. El estado «Available» significa que la producción puede continuar sin retrasos relacionados con los materiales, mientras que «Shortage» indica que existe un problema. Este atributo es esencial para el Dashboard «Análisis del impacto de la escasez de materiales». Al analizar el tiempo que los pedidos esperan debido a una escasez de 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 provocan retrasos con frecuencia. Por qué es importante Pone de manifiesto directamente los retrasos causados por la escasez de materiales, una causa raíz frecuente y significativa de las desviaciones del programa de producción. Dónde obtenerlo No es un único campo almacenado. Es el 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. El propio estado, por ejemplo, MACM (material comprometido), puede quedar registrado. Consulte la documentación de SAP ECC PP. Ejemplos DisponibleFaltanteParcialmente disponibleNo comprobada | |||
| Estado de cumplimiento del programa ScheduleAdherenceStatus | Un indicador que señala si la orden de producción se completó antes de su fecha de finalización 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 de las entregas a tiempo. Se obtiene comparando la «Fecha de finalización real» con la «Fecha de finalización planificada». Si la finalización real coincide con la fecha planificada o es anterior, 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 agregar datos fácilmente para calcular el KPI «Tasa de cumplimiento del programa» e identificar los principales factores de los pedidos retrasados, como determinados productos, centros o escasez de materiales. Por qué es importante Simplifica el análisis del rendimiento al clasificar los pedidos 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 | El estado actual de procesamiento de la orden de producción, como Creada, Liberada o Completada técnicamente. | ||
| Descripción El estado de la orden de producción indica la etapa actual del pedido en su ciclo de vida. SAP utiliza un sistema de códigos de estado para gestionar la evolución del pedido, por ejemplo, CRTD (Creada), REL (Liberada), CNF (Confirmada), DLV (Entregada) y TECO (Completada técnicamente). Analizar el tiempo que los pedidos pasan en los distintos estados es una parte esencial de Process Mining aplicado a la producción. Ayuda a identificar cuánto esperan los pedidos para ser liberados después de su creación o cuánto tiempo permanecen en un estado de entrega parcial. El seguimiento de los cambios de estado como actividades proporciona una visión general del flujo del proceso. Por qué es importante Proporciona una visión del avance de un pedido y ayuda a identificar cuellos de botella en los que los pedidos quedan bloqueados durante periodos prolongados. Dónde obtenerlo La información de estado se almacena en las tablas JEST y JSTO, vinculadas al número de objeto del pedido (AUFK-OBJNR). El texto del estado se encuentra en TJ02T. La lectura del estado suele realizarse mediante módulos de funciones como STATUS_TEXT_EDIT. Ejemplos CRTD (Creada)REL (Liberada)DLV (Entregada)TECO (Completada técnicamente) | |||
| Fecha de finalización planificada PlannedEndDate | La fecha programada en la que está previsto que finalice la producción del pedido. | ||
| Descripción La fecha de finalización planificada es la fecha objetivo de finalización de una orden de producción, establecida durante el proceso de programación. Define el plazo previsto para completar todas las actividades de producción, incluidas las confirmaciones finales y la entrada de mercancías. Esta fecha es esencial para calcular el KPI «Tasa 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 «Goods Receipt Posted» o «Final Confirmation Recorded», permite saber si los pedidos se terminan 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 utilizada 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 | La fecha programada en la que está previsto que comience la producción del pedido. | ||
| Descripción La fecha de inicio planificada es un parámetro clave de programación que se determina durante la fase de planificación y programación de la producción. Representa la fecha objetivo para iniciar las actividades de producción de un pedido. 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 «First Confirmation Recorded», las organizaciones pueden identificar retrasos en el inicio de la producción. Analizar las causas de estos retrasos es uno de los principales casos de uso de Process Mining en este ámbito. Por qué es importante Sirve como referencia para medir el cumplimiento del programa e identificar retrasos 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 | El grupo de responsables de MRP o planificadores de producción encargado del pedido. | ||
| 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 pedidos a grupos de planificación ayuda a distribuir la carga de trabajo y establecer responsabilidades claras. 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 los tiempos de ciclo de los pedidos gestionados por distintos grupos?». Esto proporciona información útil para equilibrar la carga de trabajo e identificar necesidades de capacitación. Por qué es importante Permite segmentar el análisis del rendimiento por equipo responsable, lo que ayuda a identificar diferencias en la eficacia de la planificación y la distribución de la carga de trabajo. Dónde obtenerlo Es el responsable 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 que indica la importancia relativa de una orden de producción. Permite a los responsables de programar la producción y al personal de planta priorizar su trabajo para garantizar que los pedidos críticos avancen con mayor rapidez por el proceso. Analizar este atributo ayuda a evaluar la eficacia del sistema de prioridades. Al comparar los tiempos de ciclo de los pedidos de alta prioridad con los de baja prioridad, la empresa puede determinar si los pedidos urgentes se procesan realmente más rápido. Si no es así, podría indicar problemas de comunicación, asignación de recursos o ejecución general del proceso. Por qué es importante Ayuda a evaluar si el sistema de gestión de prioridades es eficaz y garantiza que los pedidos más urgentes se completen antes que los pedidos 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 del pedido de ventas 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 | 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 a eventos clave del ciclo de vida de la orden de producción, como su creación o liberación. Esto proporciona responsabilidad y trazabilidad sobre las acciones realizadas en el sistema. En Process Mining, este atributo se utiliza para analizar las variaciones del proceso según el comportamiento de los usuarios. Puede ayudar a identificar a quienes podrían necesitar capacitación adicional o seguir 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 a nivel de usuario y fomenta la responsabilidad. Dónde obtenerlo El usuario que creó el pedido se encuentra en AUFK-ERNAM. El usuario que lo modificó por última vez se encuentra en AUFK-AENAM. Los documentos de modificación (CDHDR-USERNAME) proporcionan el historial de usuarios de cambios específicos. Ejemplos JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
Actividades de la planificación de la producción
| Actividad | Descripción | ||
|---|---|---|---|
| Confirmación final registrada | Esta actividad indica que todas las operaciones de la orden de producción han finalizado desde la perspectiva de la planta. Se marca mediante 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 entre la primera y la última confirmación representa el tiempo real de ejecución de la producción. Dónde obtenerlo Se captura cuando se establece el estado del sistema «CNF» (I0009, confirmada). Normalmente, esto se activa mediante la entrada de confirmación final en la tabla AFRU (AFRU-AUERU = «X»). El cambio de estado se registra en JCDS. Recopilar Identifique la marca de tiempo en la que se establece el estado «CNF» o busque el último registro de confirmación en AFRU. Tipo de evento explicit | |||
| Entrada de mercancías contabilizada | Este evento registra la entrada del producto terminado de la orden de producción en el inventario. Indica que los productos fabricados ya están disponibles para su envío o para un procesamiento posterior. | ||
| 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 es el plazo 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. El estado del sistema «DLV» (I0012, entregada) también se establece en la orden. Recopilar Capture la fecha de contabilización del documento de material con el tipo de movimiento «101» o la marca de tiempo del cambio de estado «DLV». Tipo de evento explicit | |||
| Orden completada técnicamente | Este es un paso administrativo de cierre que finaliza una orden de producción desde el punto de vista logístico. Impide nuevos movimientos de materiales o confirmaciones y permite la liquidación financiera. | ||
| Por qué es importante Este es el punto final definitivo del ciclo de vida logístico de la orden. 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 captura explícitamente cuando se asigna a la orden el estado del sistema «TECO» (I0045, completada técnicamente). El cambio se registra con una marca de tiempo en la tabla JCDS. Recopilar Identifique en JCDS la marca de tiempo en la que el estado «TECO» pasa a estar activo 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 iniciada a partir de una ejecución de planificación o de una entrada manual. Se registra explícitamente cuando se guarda un nuevo registro de orden en el sistema y 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 retrasos en la planificación previa a la producción y en la configuración administrativa. Dónde obtenerlo Este evento se registra a partir de la fecha de creación (AUFK-ERDAT) y la hora (AUFK-ERZET) de la orden de producción. El estado del sistema «CRTD» (I0001) se asigna y se registra en las tablas JEST y JCDS, vinculadas al número de objeto de la orden (AUFK-OBJNR). Recopilar 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 representa la aprobación y liberación oficiales de la orden de producción para su ejecución. Una vez liberada, las reservas de materiales se activan y pueden comenzar 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 obtenerlo Se registra explícitamente cuando se asigna a la orden de producción el estado del sistema «REL» (I0002). El cambio se registra con una marca de tiempo en la tabla JCDS, vinculada al número de objeto de la orden (AUFK-OBJNR). Recopilar Identifique la marca de tiempo en la que el estado «REL» pasa a estar activo para la orden. Tipo de evento explicit | |||
| Primera confirmación registrada | Este evento marca el inicio del trabajo de producción real en la orden. Se registra cuando se introduce en el sistema la primera confirmación de tiempo de cualquier 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 retrasos entre la asignación de recursos y el comienzo del trabajo. Dónde obtenerlo Se infiere buscando la fecha de contabilización más antigua (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. Recopilar 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 | |||
| Cancelación de la orden establecida | Este evento indica que una orden de producción se ha cancelado antes de completarse. Normalmente, esto se realiza estableciendo un estado específico o un indicador de borrado que impide cualquier procesamiento posterior. | ||
| Por qué es importante Este es un resultado negativo que conviene supervisar. Analizar las órdenes canceladas 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 inferirse a partir de la asignación del estado «DLFL» (I0076, indicador de borrado) o de un estado específico «Cancelada», si está configurado. El cambio se registra con una marca de tiempo en la tabla JCDS. Recopilar Identifique la marca de tiempo en la que se establece para la orden el indicador de borrado («DLFL») o un estado de cancelación. Tipo de evento inferred | |||
| Confirmación intermedia registrada | Representa una actualización del progreso 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 resulta necesario realizar un seguimiento del progreso antes de la finalización. | ||
| Por qué es importante Analizar las confirmaciones intermedias ayuda a supervisar el progreso 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 captura a partir 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. Recopilar 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 inicial, como cambios en la cantidad planificada, las fechas o la 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 alta frecuencia de cambios puede indicar una planificación inicial deficiente, volatilidad de la demanda 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 relevante puede extraerse como una actividad. Recopilar Extraiga las entradas del registro de modificaciones 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 activada manualmente. | ||
| Por qué es importante Esta actividad es fundamental para comprender los retrasos causados por la falta de materiales. Las comprobaciones frecuentes o los largos periodos 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 establece un estado como «MACM» (material comprometido) o «MSPT» (falta de material). La ejecución puede inferirse a partir de la marca de tiempo de este cambio de estado en las tablas JEST/JCDS. Los resultados son visibles en la cabecera de la orden. Recopilar Infiera el evento 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. Es el último paso del ciclo de vida de la orden desde la perspectiva de controlling. | ||
| Por qué es importante Aunque se trata de una actividad financiera, los retrasos en la liquidación pueden indicar problemas en la notificación de costes o en la exactitud de los datos de la orden. Marca el verdadero cierre financiero del proceso de producción. Dónde obtenerlo Puede inferirse 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 una ejecución de liquidación. La liquidación real se registra en tablas de controlling como COSP y COSS. Recopilar Infiera el evento 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 se han preparado para la producción. | ||
| Por qué es importante Este evento marca el inicio del consumo de materiales. Los retrasos entre la liberación de la orden y la salida de mercancías pueden poner de manifiesto problemas en la logística del almacén, la preparación de materiales o la 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 la orden de producción (MSEG-AUFNR). Recopilar Capture la fecha de contabilización (MKPF-BUDAT) de los documentos de material con el tipo de movimiento «261» vinculados a la orden. Tipo de evento explicit | |||
Guías de extracción
Pasos
- Crear un InfoSet en SAP Query: Utilice el código de transacción
SQ02. Cree un InfoSet nuevo, por ejemplo,ZPP_EVENTLOG. Seleccione la opción de fuente de datos «Unión de tablas mediante tabla base». UtiliceAUFK(datos maestros del pedido) como tabla base inicial. - Unir las tablas necesarias: Añada las siguientes tablas a la unión del InfoSet. Es posible que el sistema proponga las uniones, pero verifique que sean correctas:
AUFKconAFKO(datos de cabecera de órdenes PP):AUFK-AUFNR = AFKO-AUFNRAUFKconJEST(estado de objeto individual):AUFK-OBJNR = JEST-OBJNRJESTconJCDS(documentos de modificación de estados del sistema o del usuario):JEST-OBJNR = JCDS-OBJNRYJEST-STAT = JCDS-STAT. Nota: esta unión sirve para leer el historial de cambios de estado.AUFKconAFRU(confirmaciones de finalización del pedido):AUFK-AUFNR = AFRU-AUFNRAUFKconMSEG(segmento de documento: material):AUFK-AUFNR = MSEG-AUFNRMSEGconMKPF(cabecera: documento de material):MSEG-MBLNR = MKPF-MBLNRYMSEG-MJAHR = MKPF-MJAHR
- Definir los grupos de campos: Arrastre los campos necesarios de las tablas de origen a los grupos de campos. Asegúrese de incluir todos los campos necesarios para la consulta final, como
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATEyMKPF-BUDAT. - Añadir 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 rellenarlos según la lógica definida en la sección de la consulta. La lógica consistirá en recorrer los cambios de estado, las confirmaciones y los documentos de material para generar un registro distinto por cada evento empresarial. Este es el paso más complejo, ya que transforma los datos tabulares en un formato de registro de eventos dentro de las secciones de código del InfoSet. - Generar y guardar el InfoSet: Cuando haya configurado todas las uniones, los campos y el código personalizado, guarde y genere el InfoSet.
- Crear una SAP Query: Utilice el código de transacción
SQ01. Cree una consulta nueva, 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. Algunas selecciones recomendadas son la orden de producción
AUFNR, el centroWERKS, la clase de pedidoAUARTy un intervalo de fechas para la creación del pedidoAUFK-ERDAT. - Definir 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. - Ejecutar la consulta: Ejecute la consulta con los criterios de selección deseados, por ejemplo, para las órdenes de producción de los últimos 3 a 6 meses.
- Exportar los datos: Cuando la consulta muestre los resultados, exporte la lista. El formato más habitual y fiable es «Hoja de cálculo» o «Archivo local» con formato separado por tabulaciones o CSV.
- Dar formato para ProcessMind: Abra el archivo exportado en un programa de hojas de cálculo. Verifique que las cabeceras de columna coincidan con los atributos necesarios (
ProductionOrder,ActivityName,EventTime, etc.) y asegúrese de que el formato de fecha y hora deEventTimesea coherente 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: El núcleo de este método depende de una unión compleja de las tablas de cabecera, estado, confirmaciones y movimientos de material del InfoSet. Las uniones principales son
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUyAUFK->MSEG->MKPF. Las uniones incorrectas o ineficientes pueden provocar un rendimiento deficiente o datos inexactos. - Criterios de selección: Es fundamental definir un intervalo de selección manejable para evitar problemas de rendimiento del sistema. Los campos de selección clave de la pantalla inicial de la consulta deben incluir:
- Centro de producción (
AUFK-WERKS) - Clase de orden de producción (
AUFK-AUART) - Fecha de creación del pedido (
AUFK-ERDAT): recomendamos extraer datos de un periodo móvil de 3 a 6 meses para mantener un tamaño de conjunto de datos manejable.
- Centro de producción (
- Estados del sistema: La lógica para identificar eventos como «Created», «Released», «Technically Completed» y «Cancelled» depende de códigos de estado del sistema específicos, por ejemplo, I0001, I0002, I0045 e I0047. Por lo general, son estándar en los sistemas SAP, pero deben verificarse.
- Clases de movimiento: Los eventos como «Goods Issue» y «Goods Receipt» se identifican mediante sus clases de movimiento específicas (
MSEG-BWART), normalmente «261» y «101», respectivamente. Confirme que estos valores coincidan con la configuración de su organización. - Autorizaciones: La persona usuaria que ejecute 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 y 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 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 esencial y debe coordinarse con los equipos de SAP Basis y administración de bases de datos.
- Identificar el esquema de SAP: Determine el esquema de base de datos correcto donde se almacenan las tablas de SAP. A menudo es
SAPSR3u otro nombre específico del sistema. Deberá sustituir el marcador[Your SAP Schema]de la consulta por este valor. - Preparar la consulta SQL: Copie la consulta SQL completa proporcionada en la sección
query. Está diseñada para extraer todas las actividades especificadas en un único formato de registro de eventos. - Configurar los parámetros de la consulta: Antes de ejecutarla, debe modificar los marcadores de posición de la consulta. Establezca
[Start Date]y[End Date]para definir el periodo de extracción. También se recomienda filtrar por centro de producción (WERKS) o clase de pedido (AUART) para limitar el volumen de datos. - Conectarse y ejecutar: Utilice 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 SAP con las credenciales del paso 1.
- Ejecutar 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.
- Revisar los resultados preliminares: Cuando termine la consulta, revise brevemente las primeras cientos de filas para comprobar que columnas como
ProductionOrder,ActivityNameyEventTimeestén completas y sean coherentes. - Exportar a CSV: Exporte todo el conjunto de resultados desde el cliente SQL a un archivo CSV. Asegúrese de que el archivo utilice codificación UTF-8 para evitar problemas con los caracteres.
- Finalizar el CSV para la carga: Abra el archivo CSV y verifique que las cabeceras de columna coincidan con los atributos necesarios (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate, etc.). Asegúrese de que la columnaEventTimetenga un formato coherente, por ejemplo,YYYY-MM-DD HH:MI:SS. - Cargar en ProcessMind: El archivo CSV preparado ya está listo para cargarse en la plataforma ProcessMind para su análisis.
Configuración
- Esquema de la base de datos: Debe especificar el esquema de SAP donde se encuentran las tablas de planificación de la 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 del pedido (
AUFK.ERDAT). Recomendamos comenzar con un periodo reciente de 3 a 6 meses para mantener un volumen de datos manejable. - Clase de orden de producción: Para centrar el análisis, filtre la consulta por el campo de clase de orden de producción (
AUFK.AUART). Esto permite incluir o excluir tipos específicos, como órdenes de producción estándar, órdenes de proceso u órdenes de reproceso. - Centro de producción: Es muy recomendable filtrar por uno o varios centros de producción (
AFKO.WERKS). Extraer datos de todos los centros a la vez puede consumir 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 sobre las siguientes tablas:
AUFK,AFKO,JCDS,JEST,AFRU,MSEGyMKPF. El acceso directo a la base de datos no es estándar para todas las personas usuarias de SAP y requiere una 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
- 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, y verifique 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 [Nombre de su informe personalizado]. Utilice una pantalla de selección con parámetros de fecha obligatorios, como [Fecha de inicio] y [Fecha de finalización], además de filtros opcionales para [Código de sociedad], [Centro de producción], [Clase de orden], [Material] y [Orden de producción].
- Lea los datos maestros y de cabecera de las órdenes de producción desde AUFK y desde las tablas de órdenes de producción configuradas en su sistema SAP ECC. Utilice JCDS y la configuración de estados correspondiente para identificar cambios de estado explícitos, incluidos los estados relacionados con CRTD, liberación, finalización técnica y cancelación. No dé por hecho 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 las comprobaciones de disponibilidad de materiales desde los datos de comprobación de disponibilidad de las órdenes de producción configurados en su sistema. Si la comprobación no se conserva en una tabla que pueda vincularse de forma fiable a la orden y a 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 infiera una comprobación únicamente a partir de la creación o liberación de la orden.
- Lea el historial de modificaciones de las órdenes desde los objetos de documentos de modificación de órdenes de producción configurados y sus tablas de documentos de modificación asociadas. Extraiga únicamente cambios importantes, como cantidad planificada, fechas, BOM, hoja de ruta u otros campos aprobados por la persona responsable del proceso. Utilice la marca de tiempo del documento de modificación como EventTime.
- Lea las contabilizaciones de salidas y entradas de mercancías desde los datos de documentos de material de inventario configurados en su sistema. Vincule las contabilizaciones a 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. Utilice la fecha y la hora de contabilización cuando estén disponibles.
- Lea los datos de confirmación desde 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. Emita First Confirmation Recorded para la primera confirmación, Intermediate Confirmation Recorded para las confirmaciones no finales que cumplan los criterios y Final Confirmation Recorded para una confirmación marcada explícitamente como final o identificada de otro modo mediante la lógica configurada de finalización de confirmaciones. No infiera que una confirmación es final a partir de la última fila devuelta por una consulta arbitraria.
- Lea los datos de ejecución de liquidaciones desde la fuente de liquidaciones de controlling configurada en su sistema. Emita Order Settlement Ran únicamente cuando un registro de ejecución de liquidación, un documento de liquidación o un historial de estados de liquidación 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. Utilice una conversión de marcas de tiempo estable y conserve la zona horaria del sistema de origen. Establezca ActualStartDate en la marca de tiempo de la primera confirmación y ActualEndDate en la marca de tiempo de la confirmación final cuando existan esos eventos.
- Ordene las filas de eventos por ProductionOrder y EventTime, con un criterio secundario determinista para las marcas de tiempo iguales. Elimine únicamente los registros de origen exactamente duplicados, no los eventos repetidos legítimos. Valide que los doce nombres de actividad obligatorios estén representados en el esquema de salida y que cada fila emitida 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 de archivo lógica configurada. Utilice un delimitador y una codificación de texto acordados con la configuración de incorporación de ProcessMind, incluya una fila de cabecera, entrecomille los valores que contengan delimitadores y formatee las marcas de tiempo de forma coherente, preferiblemente como 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, con 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 espera que infiera actividades ausentes.
Configuración
- Rango de fechas: Utilice una ventana de extracción móvil de tres a seis meses para el análisis inicial. Amplíe el rango 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, pero activas durante el periodo de análisis.
- Filtros de selección: Admite filtros por [Código de sociedad], [Centro de producción], [Tipo de orden], [Material], [Orden de producción], estado de la orden y fecha 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 requeridas 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.
- Política de marcas de tiempo: Priorice la fecha y hora del evento de origen. Si solo existe una fecha, documente la precisión reducida y utilice una hora configurada de forma coherente, en lugar de presentar una hora precisa inventada. Convierta todas las marcas de tiempo a la zona horaria esperada por ProcessMind.
- Gestión de estados: Utilice el historial de estados con marcas de tiempo para las actividades 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 la comprobación de disponibilidad. No cree una fila Material Availability Checked a partir de la creación de la orden, la liberación, las reservas o una salida de mercancías correcta, salvo que la fuente aprobada por el negocio registre explícitamente dicha comprobación.
- Gestión de confirmaciones: Configure las reglas que distinguen entre confirmaciones iniciales, intermedias y finales. Una confirmación solo puede ser final cuando la fuente la identifica explícitamente como tal o cuando la lógica de confirmación de SAP configurada establece que el proceso ha finalizado.
- Cantidades: Conserve, siempre que sea posible, 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 producto terminado, no simplemente el rendimiento confirmado, salvo que la persona responsable del proceso apruebe esa interpretación.
- LastDataUpdate: Complete 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, y aplique la misma convención documentada a todas las filas de una ejecución.
- Rendimiento: Limite el rango de selección, seleccione solo los campos necesarios, procese los datos en paquetes, utilice filtros en la base de datos, evite lecturas anidadas de la base de datos dentro de bucles grandes y cree o utilice índices aprobados únicamente mediante el proceso de administración de bases de datos de SAP. Escriba los resultados de forma incremental cuando el uso de memoria sea una preocupación.
- Salida de archivos: 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 de la cabecera según la especificación de carga de ProcessMind. No exponga credenciales en el informe ni en el archivo de salida.
- Requisitos previos: Confirme que 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 estén activos cuando corresponda. Las autorizaciones necesarias, la gobernanza del desarrollo personalizado, la aprobación de transportes, el acceso a los archivos del servidor de aplicaciones y el acceso a la ingesta de ProcessMind deben concederse antes de la ejecución.
- Configuración específica del sistema: Los nombres de tablas, campos, códigos de estado, objetos de documentos de modificación, fuentes de confirmación, fuentes de comprobación de disponibilidad y fuentes de liquidación deben confirmarse en el sistema SAP ECC de destino. Utilice [Configure based on your system] cuando la implementación no proporcione una fuente estándar y fiable.
a 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'. ¿Listo para comenzar?
Utilice este Template para preparar sus datos y comenzar el camino hacia un proceso de planificación de la producción más optimizado. Descubra información valiosa y agilice sus operaciones hoy mismo.
Optimice ahora la planificación de la producción para alcanzar la máxima eficiencia
Descubra ineficiencias, reduzca el tiempo de ciclo un 30 % y alcance sus objetivos.
No necesita tarjeta de crédito. Empiece a optimizar hoy mismo.