Seu Template de dados de planejamento de produção
Seu Template de dados de planejamento de 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 | ||
|---|---|---|---|
| Horário do evento EventTime | O registro de data e hora preciso que indica quando a atividade ocorreu. | ||
| Descrição O horário do evento registra a data e a hora em que uma atividade específica foi executada ou um status foi registrado no sistema. Esse registro de data e hora é 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 geral do processo. Registros de data e hora precisos são essenciais para ordenar os eventos corretamente e analisar a performance. Eles permitem medir a duração entre as atividades, identificar atrasos e avaliar a performance em relação aos cronogramas ou aos acordos de nível de serviço. No contexto do Production Planning, 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 obter Derivado de vários campos de data e hora associados a transações e alterações de status, como BUDAT (data de lançamento) de documentos de material ou registros de data e hora de alterações da CDHDR. Exemplos 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| Nome da atividade ActivityName | O nome do evento de negócio ou do sistema que ocorreu em um momento específico 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 Production Planning. Esses eventos são extraídos de registros de alterações, atualizações de status e registros de transações no SAP ECC PP, representando marcos importantes como 'Ordem de produção criada', 'Disponibilidade de materiais verificada' ou 'Entrada de mercadorias registrada'. Este atributo é a base do mapa de processo, permitindo que os analistas visualizem a sequência de eventos, descubram variantes do processo e identifiquem gargalos ou loops de retrabalho. A clareza e o nível de detalhamento dos nomes das atividades são essenciais para criar um modelo de processo preciso e útil, que reflita a realidade das operações. Por que isso importa Ele define as etapas do mapa de processo, tornando possível visualizar, analisar e entender o Workflow de produção. Onde obter 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 em CDHDR/CDPOS. Exemplos Ordem de produção liberadaSaída de mercadorias registradaConfirmação final registradaOrdem tecnicamente concluída | |||
| Ordem de produção ProductionOrder | O identificador exclusivo de uma ordem de produção, que funciona como o 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 o objeto central que conecta todas as atividades relacionadas, desde a criação e o planejamento até a execução e a liquidação final. No Process Mining, esse atributo é essencial para agrupar todos os eventos pertencentes a uma única execução de produção. Isso permite analisar de ponta a ponta todo o ciclo de vida de uma ordem de produção, incluindo o acompanhamento do progresso, a medição dos tempos de ciclo e a identificação de desvios do processo padrão. Analisar os processos por ordem de produção oferece uma visão clara de como cada solicitação de fabricação é atendida. Por que isso importa Este é o identificador central que conecta todos os eventos relacionados do processo, permitindo reconstruir e analisar cada jornada de produção do início ao fim. Onde obter Este atributo pode ser encontrado na tabela SAP AUFK, no campo AUFNR. Exemplos 1000345100034610003471000348 | |||
| Sistema de origem SourceSystem | Identifica o sistema específico do qual 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 legadas e modernas, esse campo é essencial para a linhagem e o contexto dos dados. Na análise, ele permite filtrar os processos com base no 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 um contexto essencial sobre a origem dos dados, especialmente em ambientes com várias instâncias SAP ou sistemas integrados. Onde obter Normalmente adicionado durante o processo de extração de dados, muitas vezes derivado do ID do sistema SAP (SY-SYSID). Exemplos ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Última atualização dos dados LastDataUpdate | O registro de data e hora que indica 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 para a ferramenta de Process Mining. Ele não representa um evento de negócio, mas um registro de data e hora técnico para fins de gestão de dados. Seu principal uso é garantir a atualização dos dados e ajudar administradores e analistas a entender a recência dos dados analisados. Ele é essencial para validar se a análise do processo se baseia em informações atualizadas, especialmente durante o monitoramento de operações em andamento. Por que isso importa Ele confirma a atualização dos dados, garantindo que as análises se baseiem nas informações mais recentes disponíveis. Onde obter Esse valor normalmente é gerado e registrado pela ferramenta ou pelo script de extração, transformação e carregamento (ETL) durante o processo de ingestão de dados. Exemplos 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Código do produto ProductCode | O identificador exclusivo do material ou produto que está sendo fabricado. | ||
| Descrição O código do produto, ou número do material, identifica o item que a ordem de produção deve fabricar. Esse é um elemento central dos dados mestres que conecta o planejamento da produção à gestão de estoque, às vendas e ao custeio. No Process Mining, filtrar ou segmentar por código do produto é essencial para entender os processos de fabricação específicos de cada produto. Isso ajuda a responder perguntas como: 'Quais produtos têm os maiores tempos de ciclo?' ou 'Alguns produtos estão mais sujeitos a 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 o processo por produto, revelando quais materiais estão associados a ineficiências, atrasos ou custos elevados. Onde obter Pode ser encontrado na tabela SAP AFPO, no campo MATNR. Exemplos FG-123RM-45AHALB-7890CHEM-22 | |||
| Data de início real ActualStartDate | O registro de data e hora da primeira atividade de produção registrada, que marca o início real da execução. | ||
| Descrição A data de início real é o registro de data e hora do primeiro evento que indica o começo do trabalho físico de produção. Normalmente, 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 a análise da aderência ao cronograma. Ele fornece o ponto real de início para comparação com a 'Data de início planejada', permitindo calcular com precisão as variações no horário de início. Entender a diferença entre as datas de início planejada e real ajuda a identificar atrasos de pré-produção relacionados à separação de materiais, à preparação das máquinas ou à disponibilidade de recursos. Por que isso importa Ele fornece o verdadeiro ponto de início da execução da produção, permitindo calcular com precisão os atrasos de início e o lead time total de produção. Onde obter Derivada do Event Log, encontrando o menor registro de data e hora de atividades específicas de execução, como 'Primeira confirmação registrada' ou 'Saída de mercadorias registrada', 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 | O registro de data e hora da última atividade de produção, que marca a conclusão real da ordem. | ||
| Descrição A data de término real é o registro de data e hora do evento que indica a conclusão de todas as atividades de produção de uma ordem. Normalmente, ela é derivada do registro de data e hora da 'Confirmação final registrada' ou do último evento de 'Entrada de mercadorias registrada'. Este atributo é essencial para medir o tempo total do ciclo de produção e analisar a aderência ao cronograma. Comparar a 'Data de término real' com a 'Data de término planejada' determina se a ordem foi concluída no prazo. Analisar a duração entre a 'Data de início real' e a 'Data de término real' fornece o verdadeiro tempo de atravessamento da produção. Por que isso importa Ela marca a conclusão da produção, permitindo medir com precisão a performance das entregas no prazo e o tempo total de execução. Onde obter Derivado do Event Log ao encontrar o timestamp máximo de atividades importantes de conclusão, 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 | A quantidade real do produto que foi fabricada e recebida no estoque. | ||
| Descrição A quantidade entregue, também conhecida como quantidade de entrada de mercadorias, é o total de produtos acabados cuja produção foi confirmada para uma determinada ordem de produção. Esse valor é atualizado quando ocorrem eventos de 'Entrada de mercadorias registrada'. Este atributo é o equivalente da 'Quantidade planejada' e é essencial para calcular o KPI de 'Variação entre quantidade planejada e real'. Ele fornece uma medida definitiva da produção realizada, permitindo que os analistas identifiquem discrepâncias 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 do processo, permitindo uma comparação direta com as metas planejadas para avaliar a performance. Onde obter Encontrado na tabela SAP AFPO, no campo WEMNG (quantidade de entrada de mercadorias). Exemplos 984950751255 | |||
| Quantidade planejada PlannedQuantity | A quantidade total do produto programada para ser fabricada na ordem. | ||
| Descrição A quantidade planejada representa a produção-alvo de uma ordem de produção, conforme definida durante a fase de planejamento. Esse valor serve como base de comparação para medir a produção real. Este atributo é fundamental para KPIs relacionados à performance da produção e à aderência ao cronograma, como 'Variação entre quantidade planejada e real'. Ele ajuda a avaliar a precisão do planejamento da produção e a identificar problemas sistêmicos relacionados à superprodução ou à produção abaixo do planejado. 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 é a base para medir a variação da produção e avaliar a precisão do planejamento. Onde obter Esse valor está disponível na tabela SAP AFKO, no campo GAMNG (quantidade total da ordem). Exemplos 1005000751250 | |||
| Unidade produtiva ProductionPlant | A unidade fabril ou o local onde a ordem de produção é executada. | ||
| Descrição A unidade produtiva é 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 ocorrerão fisicamente. Analisar o processo por unidade produtiva 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 as melhores práticas podem ser compartilhadas. É uma dimensão fundamental para a análise de causas raiz em Dashboards relacionados a throughput e utilização de recursos. Por que isso importa Ela permite comparar a performance entre diferentes locais de fabricação, ajudando a identificar problemas específicos de cada unidade ou melhores práticas. Onde obter Este atributo é armazenado na tabela SAP AUFK, no campo WERKS. Exemplos 100017102000DE01 | |||
| Data de início planejada PlannedStartDate | A 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 a fase de planejamento e programação da produção. Ela representa a data-alvo para o início das atividades de produção de uma ordem. Este atributo é essencial para medir a aderência ao cronograma. Ao comparar a 'Data de início planejada' com o horário real de início da produção, por exemplo, o registro de data e hora da atividade 'Primeira confirmação registrada', as organizações podem identificar atrasos no início da produção. Analisar as razões desses atrasos é um dos principais casos de uso do Process Mining nessa área. Por que isso importa Ela serve como base para medir a aderência ao cronograma e identificar atrasos no início da execução da produção. Onde obter Esta é a data básica de início, encontrada na tabela SAP AFKO, no campo GSTRP. Exemplos 2023-05-102023-06-222023-07-01 | |||
| Data de término planejada PlannedEndDate | A data programada para a conclusão da produção da ordem. | ||
| Descrição A data de término planejada é a data-alvo de 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. Essa data é essencial para calcular o KPI de 'Taxa de aderência ao cronograma'. Comparar a 'Data de término planejada' com o horário real de conclusão, por exemplo, o registro de data e hora da atividade 'Entrada de mercadorias registrada' ou 'Confirmação final registrada', revela se as ordens estão sendo concluídas no prazo. Essa análise ajuda a avaliar a confiabilidade dos cronogramas de produção e a identificar as causas raiz das entregas atrasadas. Por que isso importa É o parâmetro usado para determinar se as ordens de produção são concluídas no prazo, impactando diretamente a satisfação do cliente e a confiabilidade do planejamento. Onde obter Esta é a data básica de término, encontrada na tabela SAP AFKO, no campo GLTRP. Exemplos 2023-05-152023-06-282023-07-05 | |||
| Disponibilidade de material 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 material é um indicador essencial da prontidão da produção. Ele é determinado pelo sistema, que verifica a disponibilidade de todos os materiais componentes necessários para a ordem. O status 'Disponível' significa que a produção pode prosseguir sem atrasos relacionados a materiais, enquanto 'Falta' indica um problema. Esse atributo é essencial para o Dashboard 'Análise do impacto da falta de material'. Ao analisar o tempo que as ordens passam aguardando devido à falta de material, as empresas podem quantificar o impacto de problemas da cadeia de suprimentos nos 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 Ele destaca diretamente os atrasos causados pela falta de materiais, uma causa-raiz comum e significativa dos desvios no cronograma de produção. Onde obter Esse não é um único campo armazenado. Ele é o 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ívelFaltaParcialmente disponívelNão verificado | |||
| Grupo de planejamento PlannerGroup | O grupo de controladores de MRP ou planejadores de produção responsável pela ordem. | ||
| Descrição O grupo de planejamento é um elemento organizacional que representa um grupo de pessoas responsável pelo planejamento e gerenciamento de um conjunto específico de materiais ou ordens de produção. Atribuir ordens a grupos de planejamento ajuda a distribuir a carga de trabalho e estabelecer uma responsabilidade clara. No Process Mining, esse atributo permite analisar a performance com base na equipe de planejamento responsável. Ele pode ajudar a responder perguntas como 'Qual grupo de planejamento apresenta mais desvios de programação?' ou 'Há diferença nos tempos de ciclo das ordens gerenciadas por grupos diferentes?'. Isso gera insights para equilibrar a carga de trabalho e identificar necessidades de treinamento. Por que isso importa Ele permite segmentar a análise de performance por equipe responsável, ajudando a identificar diferenças na eficácia do planejamento e na carga de trabalho. Onde obter É o controlador de MRP, encontrado na tabela AFKO do SAP, no campo DISPO. Exemplos 001002P01P02 | |||
| Prioridade de produção ProductionPriority | Uma classificação que indica a urgência ou a prioridade da ordem de produção. | ||
| Descrição A prioridade de produção é um campo usado para indicar a importância relativa de uma ordem de produção. Isso permite que os programadores da produção e as equipes do chão de fábrica priorizem o trabalho, garantindo que as ordens críticas avancem mais rapidamente pelo processo. Analisar esse atributo ajuda a avaliar a eficácia do sistema de prioridades. Ao comparar os tempos de ciclo de ordens de alta e baixa prioridade, a empresa pode determinar se as ordens urgentes estão realmente sendo processadas mais rapidamente. Caso contrário, isso pode indicar problemas de comunicação, alocação de recursos ou execução geral do processo. Por que isso importa Ele ajuda a avaliar se o sistema de gerenciamento de prioridades é eficaz, garantindo que as ordens mais urgentes sejam concluídas mais rapidamente que as ordens padrão. Onde obter Esse geralmente não é um campo padrão no cabeçalho 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 | O 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 um sistema de códigos de status para gerenciar o avanço da ordem, por exemplo, CRTD (Criada), REL (Liberada), CNF (Confirmada), DLV (Entregue) e TECO (Concluída tecnicamente). Analisar o tempo gasto em diferentes status é uma parte essencial do Process Mining para produção. Isso ajuda a identificar quanto tempo as ordens aguardam a liberação após a criação ou quanto tempo permanecem em um estado parcialmente entregue. Acompanhar as mudanças de status como atividades oferece uma visão de alto nível do fluxo do processo. Por que isso importa Ele oferece uma visão instantânea do progresso da ordem e ajuda a identificar gargalos nos quais as ordens ficam paradas por períodos prolongados. Onde obter As informações de status são armazenadas nas tabelas JEST e JSTO, vinculadas ao número do objeto da ordem (AUFK-OBJNR). O texto do status está em TJ02T. A leitura do status costuma ser feita por meio de módulos de função, como STATUS_TEXT_EDIT. Exemplos CRTD (Criada)REL (Liberada)DLV (Entregue)TECO (Concluída tecnicamente) | |||
| Status de aderência ao cronograma ScheduleAdherenceStatus | Um indicador que informa se a ordem de produção foi concluída até a data planejada de término. | ||
| Descrição O status de aderência ao cronograma é um atributo booleano ou categórico calculado que oferece uma visão simples e imediata da performance no prazo. Ele é derivado da comparação entre a 'Data real de término' e a 'Data planejada de término'. Se o término real ocorrer na data planejada ou antes dela, o status será 'No prazo'; caso contrário, será 'Atrasado'. Esse atributo simplifica a análise e a visualização nos Dashboards. Ele permite filtrar e agregar dados facilmente para calcular o KPI de 'Taxa de aderência ao cronograma' e identificar os principais fatores das ordens atrasadas, como produtos, plantas ou faltas de material específicos. Por que isso importa Ele simplifica a análise de performance ao categorizar as ordens como 'No prazo' ou 'Atrasado', facilitando a medição e o acompanhamento da confiabilidade do cronograma. Onde obter Campo calculado: IF('ActualEndDate' <= 'PlannedEndDate', 'No prazo', 'Atrasado'). Exemplos No prazoAtrasada | |||
| Usuário responsável ResponsibleUser | O 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 oferece responsabilidade e rastreabilidade para 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 usuários que precisam de treinamento adicional ou que seguem procedimentos fora do padrão. Também apoia a análise de recursos ao mostrar como o trabalho é distribuído entre diferentes usuários. Por que isso importa Ele vincula as atividades do processo a pessoas específicas, permitindo analisar a performance no nível do usuário e promovendo a responsabilidade. Onde obter 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) fornecem o histórico de usuários para alterações específicas. Exemplos JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
| Variação de quantidade QuantityVariance | A 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 da produção em relação ao plano inicial. Ela é calculada como '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 produção real' e para o KPI correspondente. Analisar a variação ajuda a identificar problemas relacionados ao rendimento da produção, às taxas de sucata ou a erros de entrada de dados. Ele oferece uma medida direta da confiabilidade do processo de produção no cumprimento das metas de saída. Por que isso importa Ele quantifica a precisão da produção em relação aos planos, destacando possíveis problemas de rendimento, sucata ou controle do processo. Onde obter Campo calculado: 'DeliveredQuantity' - 'PlannedQuantity'. Exemplos -2-5005 | |||
Atividades de 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 do ponto de vista do chão de fábrica. Ela é marcada por uma entrada de confirmação final para a última operação. | ||
| Por que isso importa Este marco marca o fim das atividades físicas de produção. A duração entre a primeira e a confirmação final representa o tempo real de execução da produção. Onde obter É capturado quando o status do sistema 'CNF' (I0009, Confirmado) é definido. Normalmente, isso é acionado pela entrada de confirmação final na tabela AFRU (AFRU-AUERU = 'X'). A alteração de status é registrada na JCDS. Captura Identifique o registro de data e hora em que o status 'CNF' é definido ou encontre o último registro de confirmação na AFRU. Tipo de evento explicit | |||
| Entrada de mercadorias registrada | Este evento registra a entrada do produto acabado da ordem de produção no estoque. Ele indica que os produtos fabricados já estão disponíveis para expedição 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 lead time total de produção. Onde obter É registrado como documento de material nas tabelas MKPF/MSEG, com um tipo de movimento, normalmente '101', referenciando a ordem de produção. O status do sistema 'DLV' (I0012, Entregue) também é definido na ordem. Captura Capture a data de lançamento do documento de material com o tipo de movimento '101' ou o registro de 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, normalmente iniciada por uma execução de planejamento ou por um lançamento manual. Ele é capturado explicitamente quando um novo registro de ordem é salvo no sistema e recebe o status 'CRTD' (Criado). | ||
| Por que isso importa Este é o ponto de partida de toda ordem de produção. Analisar o tempo entre este evento e a liberação ajuda a identificar atrasos no planejamento de pré-produção e na configuração administrativa. Onde obter Este evento é capturado a partir da data de criação (AUFK-ERDAT) e do horário (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). Captura Acompanhe o registro de data e hora da criação e a atribuição do status 'CRTD'. Tipo de evento explicit | |||
| Ordem de produção liberada | Esta atividade representa a aprovação oficial e a liberação da ordem de produção para execução. Depois da liberação, as reservas de materiais ficam ativas e atividades de produção, como saída de mercadorias e confirmações, podem começar. | ||
| Por que isso importa Este é um marco crítico que representa a transição do planejamento para a execução. O tempo entre a criação e a liberação é um indicador importante da eficiência do planejamento. Onde obter É capturado explicitamente quando o status do sistema 'REL' (I0002) é atribuído à ordem de produção. A alteração é registrada com data e hora na tabela JCDS, vinculada ao número do objeto da ordem (AUFK-OBJNR). Captura Identifique o registro de data e hora em que o status 'REL' se torna ativo para a ordem. Tipo de evento explicit | |||
| Ordem tecnicamente concluída | Esta é uma etapa administrativa de encerramento que finaliza uma ordem de produção do ponto de vista logístico. Ela impede novos movimentos 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 pós-produção. Onde obter É capturado explicitamente quando o status do sistema 'TECO' (I0045, Tecnicamente concluído) é atribuído à ordem. A alteração é registrada com data e hora na tabela JCDS. Captura Identifique o registro de data e hora em que o status 'TECO' se torna ativo para a ordem na JCDS. Tipo de evento explicit | |||
| Primeira confirmação registrada | Este evento representa o início do trabalho real de produção na ordem. Ele é capturado quando a primeira confirmação de horário de qualquer operação da ordem de produção é inserida no sistema. | ||
| Por que isso importa Esta atividade fornece o horário real de início da produção, essencial para medir a aderência ao cronograma e identificar atrasos entre a alocação de recursos e o início do trabalho. Onde obter Isso é inferido encontrando a data de lançamento mais antiga (AFRU-BUDAT) entre todas as confirmações registradas para a ordem na tabela AFRU. A primeira entrada marca o início da produção física. Captura Identifique o primeiro registro de confirmação da ordem com base na data de lançamento da 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. Normalmente, isso é feito definindo um status específico ou um indicador de exclusão, impedindo qualquer processamento adicional. | ||
| Por que isso importa Este é um resultado negativo que é importante acompanhar. Analisar ordens canceladas pode revelar problemas na previsão de demanda, na precisão do planejamento ou na gestão de dados mestres. Onde obter Isso pode ser inferido pela atribuição do status 'DLFL' (I0076, Indicador de exclusão) ou de um status específico de 'Cancelado', caso esteja configurado. A alteração é registrada com data e hora na tabela JCDS. Captura Identifique o registro de 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 progresso de uma 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 monitorar o progresso de ciclos de produção longos e a identificar gargalos dentro do próprio processo de produção, não apenas no início ou no fim. Onde obter É capturado a partir dos registros de confirmação da tabela AFRU que não estão marcados como confirmação final. Cada entrada tem uma data (AFRU-BUDAT) e um horário de lançamento. Captura Extraia todos os registros de confirmação da AFRU que não estejam sinalizados como confirmação final de uma operação. Tipo de evento explicit | |||
| Dados da ordem alterados | Este evento captura modificações significativas feitas em uma ordem de produção depois da criação inicial, como alterações na quantidade planejada, nas datas ou na 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. Uma alta frequência de mudanças pode indicar um planejamento inicial inadequado, volatilidade da demanda ou imprecisões nos dados. Onde obter 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. Captura Extraia as entradas do registro de alterações das 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, no momento da criação ou liberação da ordem, ou uma ação acionada 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 obter O sistema define um status como 'MACM' (material comprometido) ou 'MSPT' (falta de material). A execução pode ser inferida pelo registro de data e hora dessa alteração de status nas tabelas JEST/JCDS. Os resultados ficam visíveis no cabeçalho da ordem. Captura Faça a inferência a partir do registro de 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. Esta é a etapa final do ciclo de vida da ordem do ponto de vista de controladoria. | ||
| Por que isso importa Embora seja uma atividade financeira, atrasos na liquidação podem indicar problemas no reporte de custos ou na precisão dos dados da ordem. Ela marca o verdadeiro encerramento financeiro do processo de produção. Onde obter Isso 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 controladoria como COSP e COSS. Captura Faça a inferência a partir dos documentos de liquidação vinculados à ordem nas tabelas de CO ou da ativação do status 'SETC'. Tipo de evento inferred | |||
| Saída de mercadorias registrada | Esta atividade representa a retirada de materiais componentes do estoque para uso 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 obter É registrado como documento de material nas tabelas MKPF (cabeçalho) e MSEG (item), com um tipo de movimento, normalmente '261', referenciando o número da ordem de produção (MSEG-AUFNR). Captura Capture a data de lançamento (MKPF-BUDAT) dos documentos de material com o tipo de movimento '261' vinculado à ordem. Tipo de evento explicit | |||
Guias de extração
Etapas
- Criar um InfoSet no SAP Query: Use o código de transação
SQ02. Crie um novo InfoSet, por exemplo,ZPP_EVENTLOG. Selecione a opção de fonte de dados 'Junção de tabelas usando tabela-base'. UseAUFK(dados mestre da ordem) como tabela-base inicial. - Vincular as tabelas necessárias: Adicione as tabelas a seguir à junção do InfoSet. O sistema pode sugerir as junções, mas verifique se estão corretas:
AUFKcomAFKO(dados do cabeçalho das ordens PP):AUFK-AUFNR = AFKO-AUFNRAUFKcomJEST(status de objeto individual):AUFK-OBJNR = JEST-OBJNRJESTcomJCDS(documentos de alteração dos status do sistema/usuário):JEST-OBJNR = JCDS-OBJNREJEST-STAT = JCDS-STAT. Observação: essa junção serve para ler 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: documento de material):MSEG-MBLNR = MKPF-MBLNREMSEG-MJAHR = MKPF-MJAHR
- Definir grupos de campos: Arraste os campos necessários das tabelas de origem para os grupos de campos. Garanta que todos os campos necessários para a consulta final, como
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATE,MKPF-BUDAT, estejam incluídos. - Adicionar campos e código personalizados: No InfoSet, acesse a aba 'Extras'. Você precisará definir campos personalizados para
ActivityName,EventTime,SourceSystemeLastDataUpdatee escrever código ABAP para preenchê-los com base na lógica definida na seção da consulta. A lógica envolverá iterar pelas alterações de status, confirmações e documentos de material para gerar um registro distinto para cada evento de negócio. Essa é a etapa mais complexa, pois transforma dados tabulares em um formato de Event Log dentro das seções de código do InfoSet. - Gerar e salvar o InfoSet: Depois de configurar todas as junções, campos e códigos personalizados, salve e gere o InfoSet.
- Criar uma SAP Query: Use o código de transação
SQ01. Crie uma nova consulta, por exemplo,ZPP_EVENTS, com base no InfoSet criado nas etapas anteriores. - Projetar o layout da consulta: No designer da consulta, defina os campos da tela de seleção. Boas opções incluem Ordem de produção
AUFNR, PlantaWERKS, Tipo de ordemAUARTe um intervalo de datas para a criação da ordemAUFK-ERDAT. - Definir a lista de saída: Selecione os campos que serão exibidos na saída do relatório. Essa lista deve corresponder exatamente às colunas necessárias para o Event Log, incluindo campos personalizados como
ActivityNameeEventTime. - Executar a consulta: Execute a consulta com os critérios de seleção desejados, por exemplo, para as ordens de produção dos últimos 3 a 6 meses.
- Exportar os dados: Quando a consulta exibir os resultados, exporte a lista. O formato mais comum e confiável é 'Planilha' ou 'Arquivo local', com formato separado por tabulação ou CSV.
- Formatar para o ProcessMind: Abra o arquivo exportado em um programa de planilhas. Verifique se os cabeçalhos das colunas correspondem aos atributos necessários (
ProductionOrder,ActivityName,EventTimeetc.) e garanta que o formato de data e hora deEventTimeseja consistente e atenda ao padrão exigido, por exemplo, YYYY-MM-DD HH:MI:SS. Salve o arquivo como CSV para fazer o upload.
Configuração
- Junções do InfoSet: O método depende principalmente de uma junção complexa entre tabelas de cabeçalho, status, confirmações e movimentações de materiais no InfoSet. As principais junções são
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUeAUFK->MSEG->MKPF. Junções incorretas ou ineficientes podem causar baixa performance ou dados imprecisos. - Critérios de seleção: É fundamental definir um intervalo de seleção gerenciável para evitar problemas de performance do sistema. Os principais campos de seleção na tela inicial da consulta devem incluir:
- Planta 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.
- Planta 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. Eles geralmente 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), normalmente '261' e '101', respectivamente. Confirme se esses valores estão alinhados à configuração da sua organização. - Autorizações: O usuário que executa a consulta precisa de autorização para acessar as transações
SQ01,SQ02eSQ03, além de acesso de visualização a todas as tabelas subjacentes (AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF).
a 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
- Estabeleça o acesso ao banco de dados: obtenha credenciais somente 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 SAP Basis e administração de banco de dados.
- Identifique o esquema SAP: determine o esquema correto do banco de dados em que as tabelas SAP estão armazenadas. Geralmente, ele é
SAPSR3ou um nome semelhante específico do sistema. Você precisará substituir o espaço reservado[Your SAP Schema]na consulta por esse valor. - Prepare a consulta SQL: copie a consulta SQL completa fornecida na seção
query. Essa consulta foi desenvolvida para extrair todas as atividades especificadas em um único formato de registro de eventos. - Configure os parâmetros da consulta: antes de executar, modifique os espaços reservados na consulta. Defina
[Start Date]e[End Date]para estabelecer a janela de tempo da extração. Também é altamente recomendável filtrar por centro 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, SAP HANA Studio ou um script personalizado em Python ou Java, para se conectar ao banco de dados SAP usando 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, isso pode levar alguns minutos.
- Revise os resultados preliminares: quando a consulta for concluída, inspecione rapidamente as primeiras centenas de linhas para confirmar que 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. Confirme que o arquivo usa codificação UTF-8 para evitar problemas com caracteres.
- Finalize o CSV para carregamento: abra o arquivo CSV e confirme que os cabeçalhos das colunas correspondem aos atributos obrigatórios (
ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdateetc.). Confirme que a colunaEventTimeusa um formato consistente, por exemplo,YYYY-MM-DD HH:MI:SS. - Carregue no ProcessMind: agora, o arquivo CSV preparado está pronto para ser carregado na plataforma ProcessMind para análise.
Configuração
- Schema do banco de dados: Você deve especificar o schema do SAP onde estão as tabelas de planejamento de produção. Substitua o placeholder
[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 concentrar a análise, filtre a consulta pelo campo de tipo de ordem de produção (
AUFK.AUART). Isso permite incluir ou excluir tipos específicos, como ordens de produção padrão, ordens de processo ou ordens de retrabalho. - Planta de produção: É altamente recomendável filtrar por uma ou mais plantas de produção (
AFKO.WERKS). Extrair dados de todas as plantas de uma só vez pode consumir muitos recursos. - Acesso ao banco de dados: Esse método exige um usuário de banco de dados com, no mínimo, permissões 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 do SAP e exige uma autorização especial.
a 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 o SAP ECC PP, o processamento de ordens de produção, a gestão de estoques e os dados de 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 [Your custom report name]. Use uma tela de seleção com parâmetros de data obrigatórios, como [Start date] e [End date], além de filtros opcionais para [Company Code], [Production Plant], [Order Type], [Material] e [Production Order].
- Leia os dados mestres e do cabeçalho das ordens de produção na AUFK e nas tabelas de ordens de produção configuradas no seu sistema SAP ECC. Use a 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 registro de data e hora.
- Leia os resultados da verificação de disponibilidade de materiais nos dados de verificação de disponibilidade das ordens de produção configurados no seu sistema. Se a verificação não for persistida em uma tabela que possa ser vinculada de forma confiável à ordem e ao registro de data e hora, implemente o enhancement SAP configurado, o application log ou a fonte de auditoria aprovada pela sua equipe SAP. Não deduza a ocorrência da verificação apenas pela criação ou liberação da ordem.
- Leia o histórico de alterações das ordens nas estruturas de objetos de documentos de alteração de ordens de produção configuradas e nas respectivas tabelas de documentos de alteração. Extraia apenas alterações significativas, como quantidade planejada, datas, BOM, routing ou outros campos aprovados pelo responsável pelo processo. Use o registro de 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 da 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 o horário do lançamento quando estiverem 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 registro de data e hora da confirmação. Emita First Confirmation Recorded para a primeira confirmação, Intermediate Confirmation Recorded para confirmações intermediárias qualificadas e Final Confirmation Recorded para uma confirmação explicitamente marcada como final ou identificada de outra forma pela lógica configurada de conclusão da confirmação. Não deduza que a última linha retornada por uma consulta arbitrária seja a confirmação final.
- Leia os dados de execução de settlement na fonte de settlement de controlling configurada no seu sistema. Emita Order Settlement Ran somente quando um registro de execução de settlement, um documento de settlement ou um histórico de status de settlement aprovado fornecer um registro de data e hora explícito vinculado à ordem de produção.
- Crie uma linha de evento interna para cada atividade extraída. Preencha ProductionOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ProductionPlant, ProductCode, PlannedQuantity, DeliveredQuantity, ActualStartDate e ActualEndDate. Use uma conversão de registro de data e hora estável e preserve o fuso horário do sistema de origem. Defina ActualStartDate como o registro de data e hora da primeira confirmação e ActualEndDate como o registro de data e hora da confirmação final quando esses eventos existirem.
- Ordene as linhas de evento por ProductionOrder e EventTime, usando uma ordenação secundária determinística para registros com o mesmo horário. Remova apenas registros de origem exatamente duplicados, não eventos repetidos legítimos. Valide se os doze nomes de atividade obrigatórios estão representados no esquema de saída e se cada linha emitida contém um identificador de caso, um nome de atividade e um registro de 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 alinhados à configuração de ingestão do ProcessMind, inclua uma linha de cabeçalho, coloque entre aspas os valores que contêm delimitadores e formate os registros de data e hora de maneira consistente, de preferência como YYYY-MM-DDThh:mm:ss.
- Baixe o arquivo usando o procedimento aprovado de transferência de arquivos do 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 registro de data e hora do evento. Confirme se o ProcessMind está configurado para ler as linhas como estão e não deve inferir atividades ausentes.
Configuração
- Intervalo de datas: use uma janela de extração móvel de três a seis meses para a análise inicial. Amplie o intervalo somente depois de avaliar a performance e o volume de dados. Inclua um período de retrospectiva para ordens criadas antes da data inicial selecionada, mas ativas durante o período de análise.
- Filtros de seleção: ofereça suporte a [Company Code], [Production Plant], [Order Type], [Material], [Production Order], 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 ordens 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 evento 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 registros de data e hora: prefira a data e o horário do evento na fonte. Se houver apenas uma data, documente a precisão reduzida e use um horário configurado consistente, em vez de apresentar um horário preciso inventado. Converta todos os registros de data e hora para o fuso horário esperado pelo ProcessMind.
- Tratamento de status: use o histórico de status com registro de data e hora para as atividades 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 da verificação de disponibilidade. Não crie uma linha Material Availability Checked a partir da criação da ordem, liberação, reservas ou de uma saída de mercadorias bem-sucedida, a menos que a fonte aprovada pelo negócio registre explicitamente a verificação.
- Tratamento das confirmações: configure as regras que distinguem as confirmações inicial, intermediária e final. Uma confirmação só pode ser final quando a fonte a identificar explicitamente como final ou quando a lógica de confirmação SAP configurada estabelecer 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 é feita por ordem, material, movimento, confirmação ou evento. DeliveredQuantity deve representar as entradas lançadas de produtos acabados, e não apenas o rendimento confirmado, a menos que o responsável pelo processo aprove essa interpretação.
- LastDataUpdate: preencha este campo com o registro de data e hora da execução da extração ou da atualização da fonte e aplique a mesma convenção documentada a todas as linhas de uma execução.
- Performance: restrinja o intervalo de seleção, selecione apenas os campos necessários, processe os dados em pacotes, use filtros no banco de dados, evite leituras aninhadas no banco dentro de loops grandes e crie ou use índices aprovados somente por meio do processo de administração do banco de dados SAP. Grave a saída de forma incremental quando o uso de memória for uma preocupação.
- Saída do arquivo: 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 dos registros de data e hora e o comportamento do cabeçalho de acordo com a especificação de upload do ProcessMind. Não exponha credenciais no relatório ou no arquivo de saída.
- Pré-requisitos: confirme se o SAP ECC PP, a gestão de estoques, as confirmações, a gestão de status das ordens de produção e os dados de settlement de controlling estão ativos, conforme aplicável. As autorizações necessárias, a governança do desenvolvimento personalizado, a aprovação do transporte, o acesso aos 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: os nomes das tabelas, campos, códigos de status, objetos de documentos de alteração, fontes de confirmação, fontes de verificação de disponibilidade e fontes de settlement devem ser confirmados no sistema SAP ECC de destino. Use [Configure based on your system] quando a implementação não oferecer uma fonte padrão e confiável.
a 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 sua jornada rumo a um processo de planejamento de produção mais otimizado. Descubra insights e simplifique suas operações hoje.
Otimize agora o planejamento de produção para alcançar a máxima eficiência
Revele ineficiências, reduza o tempo de ciclo em 30% e cumpra suas metas.
Não é necessário cartão de crédito. Comece a otimizar hoje.