Seu Template de dados de planejamento da produção
Seu Template de dados de planejamento da produção
- Atributos recomendados para coleta
- Principais atividades a acompanhar
- Orientações práticas para extração
Atributos do planejamento da produção
| Nome | Descrição | ||
|---|---|---|---|
| Hora do evento EventTime | Data e hora exatas em que a atividade ocorreu. | ||
| Descrição A hora do evento registra a data e a hora em que uma atividade específica foi executada ou um status foi registrado no sistema. Essa informação é fundamental para todas as análises de processo baseadas em tempo, incluindo o cálculo de tempos de ciclo, tempos de espera e duração total do processo. Datas e horas precisas são essenciais para ordenar os eventos corretamente e analisar a performance. Elas permitem medir o tempo entre atividades, identificar atrasos e avaliar a performance em relação à programação ou aos acordos de nível de serviço. No Planejamento da Produção, isso ajuda a entender quanto tempo cada etapa do planejamento e da execução leva. Por que isso importa Este atributo fornece a sequência cronológica dos eventos, essencial para calcular durações, analisar a performance e identificar gargalos. Onde encontrar Derivado de vários campos de data e hora associados a transações e alterações de status, como BUDAT (Data de lançamento) em documentos de material ou as datas e horas de alteração em CDHDR. Exemplos 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| Nome da atividade ActivityName | Nome do evento de negócio ou do sistema que ocorreu em um determinado momento para uma ordem de produção. | ||
| Descrição O nome da atividade descreve uma etapa específica ou uma alteração de status no processo de Planejamento da Produção. Esses eventos são extraídos de registros de alterações, atualizações de status e registros de transações no SAP ECC PP. Eles representam marcos importantes, como 'Ordem de produção criada', 'Disponibilidade de materiais verificada' ou 'Entrada de mercadorias lançada'. Este atributo é a base do mapa de processos: permite que analistas visualizem a sequência de eventos, descubram variantes do processo e identifiquem gargalos ou ciclos de retrabalho. Nomes de atividades claros e detalhados são essenciais para criar um modelo de processo preciso e útil, que represente a realidade das operações. Por que isso importa Ele define as etapas do mapa de processos e permite visualizar, analisar e entender o fluxo de trabalho da produção. Onde encontrar Gerado a partir de várias fontes, incluindo alterações de status nas tabelas JEST/JSTO, registros de transações e documentos de alteração nas tabelas CDHDR/CDPOS. Exemplos Ordem de produção liberadaSaída de mercadorias lançadaConfirmação final registradaOrdem tecnicamente concluída | |||
| Ordem de produção ProductionOrder | Identificador exclusivo de uma ordem de produção, usado como identificador principal do caso no processo de planejamento e execução da produção. | ||
| Descrição O número da ordem de produção é uma chave alfanumérica exclusiva atribuída a cada ordem de fabricação no SAP ECC PP. Ele funciona como objeto central, vinculando todas as atividades relacionadas, da criação e do planejamento à execução e à liquidação final. No Process Mining, este atributo é essencial para agrupar todos os eventos de uma mesma execução de produção. Isso permite analisar de ponta a ponta todo o ciclo de vida da ordem, acompanhar seu andamento, medir os tempos de ciclo e identificar desvios do processo padrão. Analisar os processos por ordem de produção mostra com clareza como cada solicitação de fabricação é atendida. Por que isso importa Este é o identificador principal que conecta todos os eventos relacionados ao processo, permitindo reconstruir e analisar cada jornada de produção do início ao fim. Onde encontrar Este atributo está na tabela SAP AUFK, campo AUFNR. Exemplos 1000345100034610003471000348 | |||
| Sistema de origem SourceSystem | Identifica o sistema específico de onde os dados foram extraídos. | ||
| Descrição Este atributo especifica o sistema de origem do registro, como o nome ou ID de uma instância específica do SAP ECC. Em organizações com vários sistemas ERP ou uma combinação de plataformas antigas e modernas, este campo é essencial para rastrear a origem dos dados e entender seu contexto. Na análise, ele permite filtrar os processos pelo sistema de origem. Isso pode ser útil para comparar a performance dos processos entre diferentes sistemas ou para isolar dados durante projetos de consolidação de dados de vários sistemas. Por que isso importa Ele fornece informações importantes sobre a origem dos dados, especialmente em ambientes com várias instâncias SAP ou sistemas integrados. Onde encontrar Geralmente adicionado durante a extração de dados, muitas vezes com base no ID do sistema SAP (SY-SYSID). Exemplos ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Última atualização dos dados LastDataUpdate | Data e hora que indicam quando os dados deste evento foram atualizados ou extraídos pela última vez. | ||
| Descrição Este atributo registra a data e a hora em que os dados foram extraídos do sistema de origem e carregados na ferramenta de Process Mining. Ele não representa um evento de negócio, mas uma data e hora técnicas usadas para gerenciar os dados. Sua principal função é indicar se os dados estão atualizados e ajudar administradores e analistas a entender a idade dos dados que estão analisando. Ele é essencial para validar se a análise do processo usa informações atualizadas, especialmente no monitoramento de operações em andamento. Por que isso importa Ele confirma se os dados estão atualizados, garantindo que as análises usem as informações mais recentes disponíveis. Onde encontrar Em geral, esse valor é gerado e registrado pela ferramenta ou pelo script de extração, transformação e carregamento de dados (ETL) durante a ingestão dos dados. Exemplos 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Código do produto ProductCode | Identificador exclusivo do material ou produto fabricado. | ||
| Descrição O código do produto, também chamado de número do material, identifica o item que a ordem de produção deve fabricar. Este é um elemento central dos dados mestres, que conecta o planejamento da produção à gestão de estoque, às vendas e aos custos. No Process Mining, filtrar ou segmentar por código do produto é essencial para entender os processos de fabricação de cada produto. Isso ajuda a responder perguntas como: 'Quais produtos têm os maiores tempos de ciclo?' ou 'Alguns produtos apresentam mais problemas de qualidade ou atrasos de materiais?'. Essa análise é fundamental para a gestão do portfólio de produtos e para identificar oportunidades de padronização ou otimização do processo para tipos específicos de materiais. Por que isso importa Ele permite analisar os processos por produto e revela quais materiais estão associados a ineficiências, atrasos ou custos elevados. Onde encontrar Este atributo está na tabela SAP AFPO, campo MATNR. Exemplos FG-123RM-45AHALB-7890CHEM-22 | |||
| Data de início real ActualStartDate | Data e hora da primeira atividade de produção registrada, que marcam o início real da execução. | ||
| Descrição A data de início real corresponde à data e hora do primeiro evento que marca o início do trabalho de produção física. Em geral, ela é derivada do primeiro evento de confirmação da produção ou da primeira saída de matérias-primas para a ordem. Este atributo derivado é essencial para analisar o cumprimento da programação. Ele fornece o ponto de início real para comparação com a 'Data de início planejada' e permite calcular com precisão os desvios no horário de início. Entender a diferença entre as datas de início planejada e real ajuda a identificar atrasos antes da produção relacionados à separação de materiais, à preparação de máquinas ou à disponibilidade de recursos. Por que isso importa Ele fornece o ponto de partida real da execução da produção, permitindo calcular com precisão os atrasos no início e o prazo total de produção. Onde encontrar Derivado do Event Log, identificando a data e hora mais antiga de atividades específicas de execução, como 'Primeira confirmação registrada' ou 'Saída de mercadorias lançada', para cada ordem de produção. Exemplos 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Data de término real ActualEndDate | Data e hora da última atividade de produção, que marcam a conclusão real da ordem. | ||
| Descrição A Data de término real é o timestamp do evento que indica a conclusão de todas as atividades de produção de uma ordem. Em geral, ela é obtida a partir do timestamp do evento 'Confirmação final registrada' ou do último evento 'Entrada de mercadorias lançada'. Esse atributo é essencial para medir o tempo total de ciclo da produção e analisar o cumprimento do cronograma. A comparação entre a 'Data de término real' e a 'Data de término planejada' mostra se a ordem foi concluída no prazo. Ao analisar o intervalo entre a 'Data de início real' e a 'Data de término real', você obtém o tempo efetivo de produção. Por que isso importa Indica a conclusão da produção e permite medir com precisão a performance de entrega no prazo e o tempo total de execução. Onde encontrar Obtido no Event Log pela identificação do maior timestamp entre as atividades de conclusão principais, como 'Confirmação final registrada' ou 'Entrada de mercadorias lançada'. Exemplos 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| Quantidade entregue DeliveredQuantity | Quantidade real do produto fabricado e recebido em estoque. | ||
| Descrição A quantidade entregue, também chamada de quantidade recebida, é o total de produtos acabados cuja fabricação foi confirmada para uma determinada ordem de produção. Esse valor é atualizado quando ocorrem eventos de 'Entrada de mercadorias lançada'. Este atributo complementa a 'Quantidade planejada' e é essencial para calcular o KPI 'Diferença entre quantidade planejada e produzida'. Ele fornece uma medida definitiva da produção e permite identificar diferenças que podem ser causadas por sucata, perda de rendimento ou outros problemas de produção. Comparar as quantidades entregues entre unidades, produtos ou períodos destaca áreas com problemas de eficiência. Por que isso importa Ele mede a produção real e permite compará-la diretamente com as metas planejadas para avaliar a performance. Onde encontrar Está na tabela SAP AFPO, campo WEMNG (Quantidade recebida). Exemplos 984950751255 | |||
| Quantidade planejada PlannedQuantity | Quantidade total do produto programada para fabricação na ordem. | ||
| Descrição A quantidade planejada representa a produção prevista para uma ordem de produção, conforme definida durante a fase de planejamento. Esse valor serve de referência para comparar a produção real. Este atributo é fundamental para KPIs relacionados à performance da produção e ao cumprimento da programação, como 'Diferença entre quantidade planejada e produzida'. Ele ajuda a avaliar a precisão do planejamento da produção e a identificar problemas recorrentes de produção acima ou abaixo do previsto. Analisar esse valor é essencial para entender o quanto a execução da produção está alinhada aos planos iniciais. Por que isso importa Este atributo serve de referência para medir a diferença na produção e avaliar a precisão do planejamento. Onde encontrar Este valor está disponível na tabela SAP AFKO, campo GAMNG (Quantidade total da ordem). Exemplos 1005000751250 | |||
| Unidade de produção ProductionPlant | Instalação ou local de fabricação onde a ordem de produção é executada. | ||
| Descrição A unidade de produção é uma unidade organizacional importante no SAP que representa uma instalação de fabricação. Ela é atribuída a cada ordem de produção e determina onde as atividades de produção serão realizadas. Analisar o processo por unidade de produção permite comparar a performance entre diferentes locais. Isso ajuda a identificar quais unidades são mais eficientes, quais enfrentam mais atrasos ou falta de materiais e onde é possível compartilhar boas práticas. É uma dimensão fundamental para a análise de causa raiz em Dashboards relacionados à produtividade e à utilização de recursos. Por que isso importa Ele permite comparar a performance entre diferentes locais de fabricação e ajuda a identificar problemas específicos de cada unidade ou boas práticas. Onde encontrar Este atributo está armazenado na tabela SAP AUFK, campo WERKS. Exemplos 100017102000DE01 | |||
| Data de início planejada PlannedStartDate | Data programada para o início da produção da ordem. | ||
| Descrição A data de início planejada é um parâmetro importante de programação, definido durante as etapas de planejamento e programação da produção. Ela representa a data prevista para o início das atividades de produção de uma ordem. Este atributo é essencial para medir o cumprimento da programação. Ao comparar a 'Data de início planejada' com a hora real de início da produção, como a data e hora da atividade 'Primeira confirmação registrada', as organizações podem identificar atrasos no início da produção. Analisar as causas desses atrasos é um dos principais usos do Process Mining nesta área. Por que isso importa Ela serve de referência para medir o cumprimento da programação e identificar atrasos no início da execução da produção. Onde encontrar Esta é a data básica de início, disponível na tabela SAP AFKO, campo GSTRP. Exemplos 2023-05-102023-06-222023-07-01 | |||
| Data de término planejada PlannedEndDate | Data programada para a conclusão da produção da ordem. | ||
| Descrição A data de término planejada é a data prevista para a conclusão de uma ordem de produção, definida durante o processo de programação. Ela estabelece o prazo esperado para concluir todas as atividades de produção, incluindo as confirmações finais e a entrada de mercadorias. Esta data é essencial para calcular o KPI 'Taxa de cumprimento da programação'. Comparar a 'Data de término planejada' com a hora real de conclusão, como a data e hora da atividade 'Entrada de mercadorias lançada' ou 'Confirmação final registrada', revela se as ordens estão sendo concluídas no prazo. Essa análise ajuda a avaliar a confiabilidade da programação da produção e a identificar as causas raiz dos atrasos nas entregas. Por que isso importa Ela é a referência para determinar se as ordens de produção são concluídas no prazo, o que afeta diretamente a satisfação dos clientes e a confiabilidade do planejamento. Onde encontrar Esta é a data básica de término, disponível na tabela SAP AFKO, campo GLTRP. Exemplos 2023-05-152023-06-282023-07-05 | |||
| Disponibilidade de materiais MaterialAvailabilityStatus | Indica se todos os componentes necessários para a ordem de produção estão disponíveis. | ||
| Descrição O status de disponibilidade de materiais é um indicador essencial da prontidão para a produção. O sistema determina esse status verificando a disponibilidade de todos os componentes necessários para a ordem. O status 'Disponível' significa que a produção pode prosseguir sem atrasos relacionados a materiais, enquanto 'Falta de material' indica um problema. Esse atributo é essencial para o Dashboard 'Análise do impacto da falta de materiais'. Ao analisar o tempo que as ordens aguardam por falta de material, as empresas podem quantificar o impacto de problemas na cadeia de suprimentos sobre os cronogramas de produção. Isso ajuda a identificar fornecedores pouco confiáveis ou componentes problemáticos que causam atrasos com frequência. Por que isso importa Evidencia diretamente os atrasos causados pela falta de materiais, uma causa raiz comum e significativa dos desvios no cronograma de produção. Onde encontrar Não se trata de um único campo armazenado. O status é resultado de uma verificação de disponibilidade (verificação ATP). Os resultados costumam estar visíveis na transação CO02 ou na verificação coletiva de disponibilidade COHV. O próprio status, por exemplo, MACM (material comprometido), pode ser registrado. Consulte a documentação do SAP ECC PP. Exemplos DisponívelFalta de materialParcialmente disponívelNão verificado | |||
| Grupo de planejamento PlannerGroup | Grupo de controladores MRP ou planejadores de produção responsável pela ordem. | ||
| Descrição O grupo de planejamento é um elemento organizacional que representa um conjunto de pessoas responsáveis por planejar e gerenciar determinados materiais ou ordens de produção. Atribuir ordens a grupos de planejamento ajuda a distribuir a carga de trabalho e definir claramente as responsabilidades. No Process Mining, esse atributo permite analisar a performance por equipe de planejamento responsável. Ele ajuda a responder perguntas como 'Qual grupo de planejamento tem mais desvios de cronograma?' ou 'Há diferença no tempo de ciclo das ordens gerenciadas por grupos diferentes?'. Essas informações ajudam a equilibrar a carga de trabalho e identificar necessidades de treinamento. Por que isso importa Permite segmentar a análise de performance por equipe responsável e identificar diferenças na eficácia do planejamento e na carga de trabalho. Onde encontrar É o controlador MRP, encontrado na tabela SAP AFKO, campo DISPO. Exemplos 001002P01P02 | |||
| Prioridade de produção ProductionPriority | Classificação que indica a urgência ou prioridade da ordem de produção. | ||
| Descrição A prioridade de produção indica a importância relativa de uma ordem de produção. Com ela, os responsáveis pela programação da produção e as equipes do chão de fábrica podem priorizar o trabalho e garantir que as ordens críticas avancem mais rapidamente pelo processo. A análise desse atributo ajuda a avaliar a eficácia do sistema de prioridades. Ao comparar o tempo de ciclo de ordens de alta e baixa prioridade, a empresa pode verificar se as ordens urgentes estão realmente sendo processadas mais rápido. Caso contrário, isso pode indicar problemas de comunicação, alocação de recursos ou execução do processo. Por que isso importa Ajuda a avaliar a eficácia do sistema de gestão de prioridades e a verificar se as ordens mais urgentes são concluídas antes das ordens padrão. Onde encontrar Esse campo geralmente não faz parte do cabeçalho padrão da ordem de produção. Pode ser um campo personalizado, derivado da prioridade da ordem de venda ou parte de um sistema de classificação. Consulte a documentação do SAP ECC PP ou a configuração do sistema. Exemplos AltaMédiaBaixaUrgente | |||
| Status da ordem de produção ProductionOrderStatus | Status atual de processamento da ordem de produção, como Criada, Liberada ou Concluída tecnicamente. | ||
| Descrição O status da ordem de produção indica a etapa atual da ordem em seu ciclo de vida. O SAP usa códigos de status para gerenciar o andamento da ordem, como CRTD (Criada), REL (Liberada), CNF (Confirmada), DLV (Entregue) e TECO (Concluída tecnicamente). Analisar o tempo em cada status é uma parte essencial do Process Mining na produção. Isso ajuda a identificar quanto tempo as ordens aguardam liberação após a criação ou permanecem parcialmente entregues. Acompanhar as mudanças de status como atividades oferece uma visão geral do fluxo do processo. Por que isso importa Oferece uma visão do andamento da ordem e ajuda a identificar gargalos que fazem as ordens ficarem paradas por muito tempo. Onde encontrar As informações de status ficam armazenadas nas tabelas JEST e JSTO, vinculadas ao número do objeto da ordem (AUFK-OBJNR). O texto do status está na TJ02T. A leitura do status costuma ser feita por módulos de função como STATUS_TEXT_EDIT. Exemplos CRTD (Criada)REL (Liberada)DLV (Entregue)TECO (Concluída tecnicamente) | |||
| Status de cumprimento do cronograma ScheduleAdherenceStatus | Indicador que mostra se a ordem de produção foi concluída até a data de término planejada. | ||
| Descrição O status de cumprimento do cronograma é um atributo booleano ou categórico calculado que oferece uma visão rápida da performance no prazo. Ele é obtido pela comparação entre a 'Data de término real' e a 'Data de término planejada'. Se a data real for igual ou anterior à planejada, o status será 'No prazo'; caso contrário, será 'Atrasada'. Esse atributo simplifica a análise e a visualização em Dashboards. Ele permite filtrar e agregar dados facilmente para calcular o KPI 'Taxa de cumprimento do cronograma' e identificar os principais fatores por trás dos atrasos, como produtos específicos, fábricas ou falta de materiais. Por que isso importa Simplifica a análise de performance ao classificar as ordens como 'No prazo' ou 'Atrasada', facilitando a medição e o acompanhamento da confiabilidade do cronograma. Onde encontrar Campo calculado: IF('ActualEndDate' <= 'PlannedEndDate', 'No prazo', 'Atrasada'). Exemplos No prazoAtrasada | |||
| Usuário responsável ResponsibleUser | ID do usuário que criou ou alterou a ordem de produção pela última vez. | ||
| Descrição O usuário responsável identifica a conta de usuário do SAP associada a eventos importantes do ciclo de vida da ordem de produção, como criação ou liberação. Isso permite atribuir responsabilidades e rastrear as ações realizadas no sistema. No Process Mining, esse atributo é usado para analisar variações do processo com base no comportamento dos usuários. Ele pode ajudar a identificar quem precisa de treinamento adicional ou segue procedimentos fora do padrão. Também contribui para a análise de recursos, mostrando como o trabalho é distribuído entre diferentes usuários. Por que isso importa Vincula as atividades do processo a pessoas específicas, permitindo analisar a performance por usuário e promovendo a responsabilização. Onde encontrar O usuário que criou a ordem está em AUFK-ERNAM. O usuário que fez a última alteração está em AUFK-AENAM. Os documentos de alteração (CDHDR-USERNAME) registram o histórico de usuários responsáveis por alterações específicas. Exemplos JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
| Variação de quantidade QuantityVariance | Diferença entre a quantidade de produção planejada e a quantidade efetivamente entregue. | ||
| Descrição A variação de quantidade é uma métrica calculada que mede o desvio entre a produção realizada e o plano inicial. O cálculo é 'Quantidade entregue' menos 'Quantidade planejada'. Uma variação positiva indica superprodução, enquanto uma variação negativa indica produção abaixo do planejado ou perda de rendimento. Esse atributo é essencial para o Dashboard 'Produção planejada versus realizada' e para o KPI correspondente. Analisar a variação ajuda a identificar problemas relacionados ao rendimento da produção, às taxas de refugo ou a erros de entrada de dados. Ela mede diretamente a confiabilidade do processo de produção em relação às metas de produção. Por que isso importa Quantifica a precisão da produção em relação ao planejado e evidencia possíveis problemas de rendimento, refugo ou controle do processo. Onde encontrar Campo calculado: 'DeliveredQuantity' - 'PlannedQuantity'. Exemplos -2-5005 | |||
Atividades do planejamento da produção
| Atividade | Descrição | ||
|---|---|---|---|
| Confirmação final registrada | Esta atividade indica que todas as operações da ordem de produção foram concluídas no chão de fábrica. Ela é marcada pela entrada de uma confirmação final para a última operação. | ||
| Por que isso importa Este marco indica o fim das atividades de produção física. O período entre a primeira e a última confirmação representa o tempo real de execução da produção. Onde encontrar O evento é registrado quando o sistema define o status 'CNF' (I0009, Confirmado). Isso geralmente ocorre após a entrada da confirmação final na tabela AFRU (AFRU-AUERU = 'X'). A alteração de status é registrada na JCDS. Coleta Identifique a data e hora em que o status 'CNF' é definido ou localize o último registro de confirmação na AFRU. Tipo de evento explicit | |||
| Entrada de mercadorias lançada | Este evento registra a entrada em estoque do produto acabado da ordem de produção. Ele indica que os produtos fabricados estão disponíveis para envio ou processamento adicional. | ||
| Por que isso importa Este é um marco importante de conclusão, que representa o resultado final do processo de produção. O tempo entre a liberação e a entrada de mercadorias corresponde ao prazo total de produção. Onde encontrar O evento é registrado como documento de material nas tabelas MKPF/MSEG, com um tipo de movimento, geralmente '101', e referência à ordem de produção. O status do sistema 'DLV' (I0012, Entregue) também é definido na ordem. Coleta Registre a data de lançamento do documento de material com tipo de movimento '101' ou a data e hora da alteração do status 'DLV'. Tipo de evento explicit | |||
| Ordem de produção criada | Este evento marca a criação de uma nova ordem de produção, geralmente iniciada por uma execução de planejamento ou por um lançamento manual. O sistema registra o evento quando um novo registro de ordem é salvo e recebe o status 'CRTD' (Criado). | ||
| Por que isso importa Este é o ponto de partida de cada caso de ordem de produção. Analisar o tempo entre este evento e a liberação ajuda a identificar atrasos no planejamento pré-produção e na preparação administrativa. Onde encontrar Este evento é registrado com base na data de criação (AUFK-ERDAT) e na hora (AUFK-ERZET) da ordem de produção. O status do sistema 'CRTD' (I0001) é atribuído e registrado nas tabelas JEST e JCDS, vinculadas ao número do objeto da ordem (AUFK-OBJNR). Coleta Registre a data e hora da criação e a atribuição do status 'CRTD'. Tipo de evento explicit | |||
| Ordem de produção liberada | Esta atividade indica a aprovação oficial e a liberação da ordem de produção para execução. Após a liberação, as reservas de materiais são ativadas e atividades de produção, como a saída de mercadorias e as confirmações, podem começar. | ||
| Por que isso importa Este é um marco importante que representa a transferência do planejamento para a execução. O tempo entre a criação e a liberação é um indicador essencial da eficiência do planejamento. Onde encontrar O sistema registra o evento quando atribui à ordem de produção o status 'REL' (I0002). A alteração é registrada com data e hora na tabela JCDS, vinculada ao número do objeto da ordem (AUFK-OBJNR). Coleta Identifique a data e hora em que o status 'REL' é ativado para a ordem. Tipo de evento explicit | |||
| Ordem tecnicamente concluída | Esta é uma etapa administrativa de encerramento que finaliza a ordem de produção do ponto de vista logístico. Ela impede novas movimentações de materiais ou confirmações e permite a liquidação financeira. | ||
| Por que isso importa Este é o ponto final definitivo do ciclo de vida logístico da ordem. Analisar este evento ajuda a entender a duração total do processo, incluindo as tarefas administrativas após a produção. Onde encontrar O evento é registrado quando o sistema atribui à ordem o status 'TECO' (I0045, Tecnicamente concluído). A alteração é registrada com data e hora na tabela JCDS. Coleta Identifique na JCDS a data e hora em que o status 'TECO' é ativado para a ordem. Tipo de evento explicit | |||
| Primeira confirmação registrada | Este evento indica o início do trabalho de produção na ordem. Ele é registrado quando a primeira confirmação de tempo de qualquer operação da ordem de produção é inserida no sistema. | ||
| Por que isso importa Esta atividade informa a hora real de início da produção, essencial para medir o cumprimento da programação e identificar atrasos entre a alocação de recursos e o início do trabalho. Onde encontrar O evento é inferido pela data de lançamento mais antiga (AFRU-BUDAT) entre todas as confirmações da ordem registradas na tabela AFRU. A primeira entrada marca o início da produção física. Coleta Identifique o primeiro registro de confirmação da ordem com base na data de lançamento na tabela AFRU. Tipo de evento inferred | |||
| Cancelamento da ordem definido | Este evento indica que uma ordem de produção foi cancelada antes da conclusão. Em geral, isso é feito definindo um status específico ou um indicador de exclusão, o que impede qualquer processamento adicional. | ||
| Por que isso importa Este é um resultado negativo que merece acompanhamento. Analisar ordens canceladas pode revelar problemas na previsão de demanda, na precisão do planejamento ou na gestão de dados mestres. Onde encontrar O evento pode ser inferido pela atribuição do status 'DLFL' (I0076, Indicador de exclusão) ou de um status específico de cancelamento, se configurado. A alteração é registrada com data e hora na tabela JCDS. Coleta Identifique a data e hora em que o indicador de exclusão ('DLFL') ou um status de cancelamento é definido para a ordem. Tipo de evento inferred | |||
| Confirmação intermediária registrada | Representa uma atualização do andamento da ordem de produção por meio da confirmação parcial de uma operação. Isso é comum em ordens de longa duração, nas quais é necessário acompanhar o progresso antes da conclusão final. | ||
| Por que isso importa Analisar as confirmações intermediárias ajuda a acompanhar o andamento de ciclos de produção longos e a identificar gargalos no próprio processo produtivo, não apenas no início ou no fim. Onde encontrar O evento é registrado com base nas confirmações da tabela AFRU que não estão marcadas como finais. Cada entrada tem uma data de lançamento (AFRU-BUDAT) e uma hora. Coleta Extraia todos os registros de confirmação da AFRU que não estejam marcados como confirmação final de uma operação. Tipo de evento explicit | |||
| Dados da ordem alterados | Este evento registra alterações importantes feitas na ordem de produção após sua criação, como mudanças na quantidade planejada, nas datas ou na lista técnica de materiais (BOM). O sistema registra essas alterações para fins de auditoria. | ||
| Por que isso importa Acompanhar essas alterações ajuda a identificar instabilidade no processo e replanejamentos frequentes. Muitas alterações podem indicar problemas no planejamento inicial, variações na demanda ou dados imprecisos. Onde encontrar As alterações em campos importantes de tabelas como AFKO (cabeçalho da ordem) e AFPO (item da ordem) são registradas nas tabelas de documentos de alteração CDHDR (cabeçalho) e CDPOS (item). Cada alteração relevante pode ser extraída como uma atividade. Coleta Extraia as entradas do registro de alterações nas tabelas CDHDR e CDPOS para a classe de objeto da ordem de produção. Tipo de evento explicit | |||
| Disponibilidade de materiais verificada | Representa a execução de uma verificação para determinar se todos os componentes necessários para a ordem de produção estão disponíveis. Essa verificação pode ser automática, na criação ou liberação da ordem, ou iniciada manualmente. | ||
| Por que isso importa Esta atividade é essencial para entender os atrasos causados pela falta de materiais. Verificações frequentes ou longos períodos até a disponibilidade dos materiais podem indicar problemas na cadeia de suprimentos ou na gestão de estoque. Onde encontrar O sistema define um status como 'MACM' (material comprometido) ou 'MSPT' (falta de material). A execução pode ser inferida pela data e hora dessa alteração de status nas tabelas JEST/JCDS. Os resultados ficam visíveis no cabeçalho da ordem. Coleta Infira o evento pela data e hora das alterações de status relacionadas à disponibilidade de materiais, como 'MACM' ou 'MSPT'. Tipo de evento inferred | |||
| Liquidação da ordem executada | Representa a liquidação financeira da ordem de produção, na qual os custos acumulados são alocados aos objetos de custo apropriados. Do ponto de vista do controle de custos, esta é a etapa final do ciclo de vida da ordem. | ||
| Por que isso importa Embora seja uma atividade financeira, atrasos na liquidação podem indicar problemas nos relatórios de custos ou na precisão dos dados da ordem. Ela marca o encerramento financeiro efetivo do processo de produção. Onde encontrar O evento pode ser inferido quando o saldo da ordem chega a zero ou quando o status do sistema 'SETC' (I0076, Regra de liquidação criada) é seguido pelos registros de execução da liquidação. A liquidação efetiva é registrada em tabelas de controle de custos, como COSP e COSS. Coleta Infira o evento pelos documentos de liquidação vinculados à ordem nas tabelas CO ou pela ativação do status 'SETC'. Tipo de evento inferred | |||
| Saída de mercadorias lançada | Esta atividade representa a retirada do estoque dos materiais componentes que serão usados na ordem de produção. Ela confirma que as matérias-primas ou os produtos semiacabados necessários foram separados para a produção. | ||
| Por que isso importa Este evento marca o início do consumo de materiais. Atrasos entre a liberação da ordem e a saída de mercadorias podem indicar problemas na logística do armazém, na separação de materiais ou na precisão do estoque. Onde encontrar O evento é registrado como documento de material nas tabelas MKPF (cabeçalho) e MSEG (item), com um tipo de movimento, geralmente '261', e referência ao número da ordem de produção (MSEG-AUFNR). Coleta Registre a data do lançamento (MKPF-BUDAT) dos documentos de material com tipo de movimento '261' vinculados à ordem. Tipo de evento explicit | |||
Guias de extração
Etapas
- Crie um InfoSet no SAP Query: Use o código de transação
SQ02. Crie um InfoSet, por exemplo,ZPP_EVENTLOG. Selecione a opção de fonte de dados 'Junção de tabelas usando tabela-base'. UseAUFK(dados mestres da ordem) como tabela-base inicial. - Faça a junção das tabelas necessárias: Adicione as tabelas a seguir à junção do InfoSet. O sistema pode sugerir junções, mas confira se estão corretas:
AUFKcomAFKO(dados do cabeçalho de ordens PP):AUFK-AUFNR = AFKO-AUFNRAUFKcomJEST(status de objeto individual):AUFK-OBJNR = JEST-OBJNRJESTcomJCDS(documentos de alteração de status do sistema/usuário):JEST-OBJNR = JCDS-OBJNRANDJEST-STAT = JCDS-STAT. Observação: essa junção serve para consultar o histórico de alterações de status.AUFKcomAFRU(confirmações de conclusão da ordem):AUFK-AUFNR = AFRU-AUFNRAUFKcomMSEG(segmento do documento: material):AUFK-AUFNR = MSEG-AUFNRMSEGcomMKPF(cabeçalho do documento de material):MSEG-MBLNR = MKPF-MBLNRANDMSEG-MJAHR = MKPF-MJAHR
- Defina os grupos de campos: Arraste os campos necessários das tabelas de origem para os grupos de campos. Inclua todos os campos necessários para a consulta final, como
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATEeMKPF-BUDAT. - Adicione campos personalizados e código: No InfoSet, acesse a guia 'Extras'. Defina campos personalizados para
ActivityName,EventTime,SourceSystemeLastDataUpdatee escreva código ABAP para preenchê-los com base na lógica definida na seção da consulta. Essa lógica envolve percorrer as alterações de status, as confirmações e os documentos de materiais para gerar um registro distinto para cada evento de negócio. Esta é a etapa mais complexa, pois os dados tabulares são transformados em um Event Log nas seções de código do InfoSet. - Gere e salve o InfoSet: Depois de configurar todas as junções, os campos e o código personalizado, salve e gere o InfoSet.
- Crie uma consulta SAP: Use o código de transação
SQ01. Crie uma consulta, por exemplo,ZPP_EVENTS, com base no InfoSet criado nas etapas anteriores. - Configure o layout da consulta: No designer de consultas, defina os campos da tela de seleção. Boas opções incluem Ordem de produção
AUFNR, FábricaWERKS, Tipo de ordemAUARTe um intervalo de datas para a criação da ordemAUFK-ERDAT. - Defina a lista de saída: Selecione os campos que serão exibidos no relatório. A lista deve corresponder exatamente às colunas necessárias para o Event Log, incluindo campos personalizados como
ActivityNameeEventTime. - Execute a consulta: Execute a consulta com os critérios de seleção desejados, por exemplo, para ordens de produção dos últimos 3 a 6 meses.
- Exporte os dados: Quando os resultados aparecerem, exporte a lista. Os formatos mais comuns e confiáveis são 'Planilha' ou 'Arquivo local', com separação por tabulação ou em formato CSV.
- Formate os dados para o ProcessMind: Abra o arquivo exportado em um programa de planilhas. Confira se os cabeçalhos das colunas correspondem aos atributos necessários (
ProductionOrder,ActivityName,EventTimeetc.) e se o formato de data e hora deEventTimeé consistente e segue o padrão exigido, por exemplo, AAAA-MM-DD HH:MI:SS. Salve o arquivo como CSV para carregá-lo.
Configuração
- Junções do InfoSet: Este método depende de um InfoSet complexo que combina tabelas de cabeçalho, status, confirmações e movimentações de materiais. As principais junções são
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUeAUFK->MSEG->MKPF. Junções incorretas ou ineficientes podem prejudicar a performance ou gerar dados imprecisos. - Critérios de seleção: Defina um intervalo de seleção viável para evitar problemas de performance no sistema. Os principais campos de seleção na tela inicial da consulta devem incluir:
- Fábrica de produção (
AUFK-WERKS) - Tipo de ordem de produção (
AUFK-AUART) - Data de criação da ordem (
AUFK-ERDAT): recomendamos extrair dados de um período móvel de 3 a 6 meses para manter o tamanho do conjunto de dados sob controle.
- Fábrica de produção (
- Status do sistema: A lógica para identificar eventos como 'Criada', 'Liberada', 'Concluída tecnicamente' e 'Cancelada' depende de códigos específicos de status do sistema, como I0001, I0002, I0045 e I0047. Em geral, eles são padrão nos sistemas SAP, mas devem ser verificados.
- Tipos de movimento: Eventos como 'Saída de mercadorias' e 'Entrada de mercadorias' são identificados por seus tipos de movimento específicos (
MSEG-BWART), geralmente '261' e '101', respectivamente. Confirme se esses valores correspondem à configuração da sua organização. - Autorizações: Quem executar a consulta precisa de autorização para acessar as transações
SQ01,SQ02eSQ03, além de permissão de visualização para todas as tabelas subjacentes (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF).
Consulta de exemplo 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'; Etapas
- Configure o acesso ao banco de dados: Obtenha credenciais somente de leitura para o banco de dados subjacente do SAP ECC. Você precisará do endereço do servidor, da porta, do nome do banco de dados, do nome de usuário e da senha. Esse acesso é essencial e deve ser coordenado com as equipes de administração do SAP Basis e do banco de dados.
- Identifique o esquema SAP: Determine o esquema correto do banco de dados onde as tabelas SAP estão armazenadas. Geralmente, ele se chama
SAPSR3ou tem outro nome específico do sistema. Substitua o marcador[Your SAP Schema]na consulta por esse valor. - Prepare a consulta SQL: Copie a consulta SQL completa fornecida na seção
query. Ela foi criada para extrair todas as atividades especificadas em um único formato de Event Log. - Configure os parâmetros da consulta: Antes de executar, altere os marcadores na consulta. Defina
[Start Date]e[End Date]para estabelecer o período da extração. Também recomendamos filtrar por fábrica de produção (WERKS) ou tipo de ordem (AUART) para limitar o volume de dados. - Conecte-se e execute: Use um cliente SQL padrão, como DBeaver ou SAP HANA Studio, ou um script personalizado em Python ou Java, para conectar-se ao banco de dados SAP com as credenciais da etapa 1.
- Execute a consulta: Cole a consulta SQL configurada no cliente e execute-a. Dependendo do intervalo de datas e do tamanho do sistema, a execução pode levar alguns minutos.
- Confira os resultados preliminares: Quando a consulta terminar, confira rapidamente as primeiras centenas de linhas para verificar se colunas como
ProductionOrder,ActivityNameeEventTimeestão preenchidas corretamente e fazem sentido. - Exporte para CSV: Exporte todo o conjunto de resultados do cliente SQL para um arquivo CSV. Use a codificação UTF-8 para evitar problemas com caracteres.
- Prepare o CSV para carregamento: Abra o arquivo CSV e confira se os cabeçalhos das colunas correspondem aos atributos necessários (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdateetc.). Verifique se a colunaEventTimeusa um formato consistente, comoYYYY-MM-DD HH:MI:SS. - Carregue os dados no ProcessMind: O arquivo CSV preparado está pronto para ser carregado na plataforma ProcessMind para análise.
Configuração
- Esquema do banco de dados: Especifique o esquema SAP onde estão as tabelas de planejamento da produção. Substitua o marcador
[Your SAP Schema]na consulta pelo nome correto do seu ambiente, por exemplo,SAPSR3. - Intervalo de datas: Filtrar por um intervalo de datas específico é essencial para a performance. A consulta filtra pela data de criação da ordem (
AUFK.ERDAT). Recomendamos começar com um período recente de 3 a 6 meses para manter o volume de dados sob controle. - Tipo de ordem de produção: Para direcionar a análise, filtre a consulta pelo campo de tipo de ordem de produção (
AUFK.AUART). Assim, você pode incluir ou excluir tipos específicos, como ordens de produção padrão, ordens de processo ou ordens de retrabalho. - Fábrica de produção: Recomendamos filtrar por uma ou mais fábricas de produção (
AFKO.WERKS). Extrair dados de todas as fábricas de uma só vez pode consumir muitos recursos. - Acesso ao banco de dados: Este método exige um usuário do banco de dados com, no mínimo, permissão de leitura nas seguintes tabelas:
AUFK,AFKO,JCDS,JEST,AFRU,MSEG,MKPF. O acesso direto ao banco de dados não é padrão para todos os usuários SAP e exige autorização especial.
Consulta de exemplo 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'; Etapas
- Confirme se os dados do SAP ECC PP, do processamento de ordens de produção, das confirmações, da gestão de estoque e do controlling estão disponíveis. Verifique também se o usuário de extração tem autorização para ler as tabelas de aplicação necessárias e executar relatórios ABAP personalizados.
- No ABAP Workbench, por exemplo, na transação SE38 ou SE80, crie um relatório executável dedicado, como [Nome do seu relatório personalizado]. Use uma tela de seleção com parâmetros de data obrigatórios, como [Data inicial] e [Data final], além de filtros opcionais para [Empresa], [Centro de produção], [Tipo de ordem], [Material] e [Ordem de produção].
- Leia os dados mestres e do cabeçalho da ordem de produção em AUFK e nas tabelas de ordens de produção configuradas no seu sistema SAP ECC. Use JCDS e a configuração de status correspondente para identificar alterações explícitas de status, incluindo CRTD, liberado, tecnicamente concluído e status relacionados a cancelamento. Não presuma que um código de status representa um evento, a menos que o histórico de status contenha uma alteração com data e hora.
- Leia os resultados da verificação de disponibilidade de material nos dados da verificação de disponibilidade da ordem de produção configurados no seu sistema. Se a verificação não for persistida em uma tabela que possa ser vinculada à ordem e à data e hora de forma confiável, implemente o enhancement SAP configurado, o log da aplicação ou a fonte de auditoria aprovada pela sua equipe SAP. Não infira que houve uma verificação apenas com base na criação ou liberação da ordem.
- Leia o histórico de alterações da ordem nos objetos de documentos de alteração de ordens de produção configurados e nas tabelas de documentos de alteração associadas. Extraia apenas alterações relevantes, como quantidade planejada, datas, lista técnica, roteiro ou outros campos aprovados pelo responsável pelo processo. Use a data e hora do documento de alteração como EventTime.
- Leia os lançamentos de saída e entrada de mercadorias nos dados de documentos de material de estoque configurados no seu sistema. Vincule os lançamentos à ordem de produção usando a referência à ordem disponível nos dados do documento de material. Classifique as retiradas de componentes como Goods Issue Posted e as entradas de produtos acabados como Goods Receipt Posted. Use a data e a hora do lançamento, quando disponíveis.
- Leia os dados de confirmação na fonte de confirmações de produção configurada no seu sistema. Ordene as confirmações por ordem de produção e data e hora da confirmação. Gere First Confirmation Recorded para a primeira confirmação, Intermediate Confirmation Recorded para confirmações intermediárias que atendam aos critérios e Final Confirmation Recorded para uma confirmação explicitamente marcada como final ou identificada pela lógica de conclusão de confirmações configurada. Não infira que uma confirmação é final por ser a última linha retornada por uma consulta arbitrária.
- Leia os dados de execução de liquidação na fonte de liquidação do controlling configurada no seu sistema. Gere Order Settlement Ran somente quando um registro de execução de liquidação, um documento de liquidação ou um histórico de status de liquidação aprovado fornecer uma data e hora explícitas vinculadas à ordem de produção.
- Crie uma linha interna de evento para cada atividade extraída. Preencha ProductionOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ProductionPlant, ProductCode, PlannedQuantity, DeliveredQuantity, ActualStartDate e ActualEndDate. Use uma conversão de data e hora estável e preserve o fuso horário do sistema de origem. Defina ActualStartDate como a data e hora da primeira confirmação e ActualEndDate como a data e hora da confirmação final, quando esses eventos existirem.
- Ordene as linhas de eventos por ProductionOrder e EventTime, usando uma ordenação secundária determinística para datas e horas iguais. Remova apenas registros de origem exatamente duplicados, não eventos repetidos legítimos. Valide se os doze nomes de atividades obrigatórios estão representados no esquema de saída e se cada linha gerada tem um identificador de caso, um nome de atividade e uma data e hora do evento.
- Grave o resultado em um arquivo no servidor de aplicação usando uma interface de arquivo ABAP aprovada e um caminho lógico configurado. Use um delimitador e uma codificação de texto compatíveis com a configuração de ingestão do ProcessMind, inclua uma linha de cabeçalho, coloque entre aspas os valores que contenham delimitadores e formate as datas e horas de maneira consistente, de preferência como YYYY-MM-DDThh:mm:ss.
- Baixe o arquivo usando o procedimento aprovado de transferência de arquivos SAP, inspecione-o de forma independente e carregue-o no ProcessMind como um Event Log, usando ProductionOrder como identificador do caso, ActivityName como atividade e EventTime como data e hora do evento. Confirme se o ProcessMind está configurado para ler as linhas como estão, sem inferir atividades ausentes.
Configuração
- Período de datas: use uma janela móvel de extração de três a seis meses para a análise inicial. Amplie o período somente depois de avaliar a performance e o volume de dados. Inclua um período retroativo para ordens criadas antes da data inicial selecionada, mas que estavam ativas durante o período de análise.
- Filtros de seleção: ofereça suporte a [Empresa], [Centro de produção], [Tipo de ordem], [Material], [Ordem de produção], status da ordem e filtros de data de criação ou alteração. Configure os campos exatos de acordo com a implementação do SAP ECC, pois a disponibilidade dos campos de ordem de produção pode variar conforme a versão e as personalizações.
- Escopo dos eventos: extraia as doze atividades obrigatórias como linhas 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 e Order Cancellation Set.
- Política de data e hora: prefira a data e a hora do evento na fonte. Se houver apenas uma data, documente a precisão reduzida e use um horário configurado de forma consistente, em vez de apresentar uma hora precisa inventada. Converta todas as datas e horas para o fuso horário esperado pelo ProcessMind.
- Tratamento de status: use o histórico de status com data e hora para os eventos de status. Configure o mapeamento dos valores de status internos para as atividades de negócio com base na configuração de status do sistema e na aprovação do responsável pelo processo.
- Verificações de disponibilidade: configure a fonte aprovada para a execução das verificações de disponibilidade. Não crie uma linha Material Availability Checked com base na criação ou liberação da ordem, em reservas ou em uma saída de mercadorias bem-sucedida, a menos que a fonte aprovada pelo negócio registre explicitamente a verificação.
- Tratamento de confirmações: configure as regras que diferenciam a primeira confirmação, as intermediárias e a final. Uma confirmação só pode ser considerada final quando a fonte a identificar explicitamente como tal ou quando a lógica de confirmação SAP configurada determinar a conclusão.
- Quantidades: preserve a unidade de medida da fonte sempre que possível. Se as quantidades forem agregadas, documente se a agregação é por ordem, material, movimentação, confirmação ou evento. DeliveredQuantity deve representar as entradas lançadas de produtos acabados, não apenas o rendimento confirmado, a menos que o responsável pelo processo aprove essa interpretação.
- LastDataUpdate: preencha este campo com a data e hora da execução da extração ou com a data e hora da atualização da fonte e aplique a mesma convenção documentada a todas as linhas de uma execução.
- Performance: limite o período de seleção, selecione apenas os campos necessários, processe os dados em lotes, aplique filtros no banco de dados, evite leituras aninhadas do banco em loops grandes e crie ou use índices aprovados somente pelo processo de administração do banco de dados SAP. Grave a saída de forma incremental se houver preocupação com o uso de memória.
- Arquivo de saída: configure o diretório do servidor de aplicação, o nome lógico do arquivo, o delimitador, a codificação, o formato decimal, o formato de data e hora e o comportamento do cabeçalho de acordo com a especificação de carregamento do ProcessMind. Não exponha credenciais no relatório nem no arquivo de saída.
- Pré-requisitos: confirme se SAP ECC PP, gestão de estoque, confirmações, gestão de status de ordens de produção e dados de liquidação do controlling estão ativos, conforme aplicável. As autorizações necessárias, a governança de desenvolvimento personalizado, a aprovação de transporte, o acesso a arquivos no servidor de aplicação e o acesso à ingestão do ProcessMind devem ser concedidos antes da execução.
- Configuração específica do sistema: confirme os nomes das tabelas, os campos, os códigos de status, os objetos de documentos de alteração, as fontes de confirmações, as fontes de verificações de disponibilidade e as fontes de liquidação no sistema SAP ECC de destino. Use [Configure de acordo com seu sistema] quando a implementação não oferecer uma fonte padrão e confiável.
Consulta de exemplo 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'. Pronto para começar?
Use este Template para preparar seus dados e começar a otimizar o processo de planejamento da produção. Encontre insights e simplifique suas operações hoje mesmo.
Otimize agora o planejamento da produção para alcançar mais eficiência
Revele ineficiências, reduza o tempo de ciclo em 30% e alcance suas metas.
Não é necessário informar cartão de crédito. Comece a otimizar hoje.