Seu template de dados de planejamento de produção
Seu template de dados de planejamento de produção
- Atributos recomendados para coletar
- Atividades-chave a monitorizar
- Guia prático de extração
Atributos de Planejamento de Produção
| Nome | Descrição | ||
|---|---|---|---|
| Nome da Atividade ActivityName | O nome do evento de negócio ou do sistema ocorrido em um momento específico para uma ordem de produção. | ||
| Descrição O Nome da Atividade descreve uma etapa específica ou mudança de status no processo. Esses eventos são extraídos de logs de alteração, status e transações do SAP ECC PP, representando marcos como 'Ordem de Produção Criada', 'Disponibilidade de Material Verificada' ou 'Entrada de Mercadorias'. Este atributo é a espinha dorsal do mapa de processos, permitindo visualizar a sequência de eventos, descobrir variantes e identificar gargalos ou loops de retrabalho. A clareza dos nomes das atividades é fundamental para construir um modelo que reflita a realidade das operações. Por que é importante Define as etapas no mapa de processo, permitindo visualizar, analisar e entender o fluxo de produção. Onde obter Gerado a partir de várias fontes, incluindo mudanças de status (JEST/JSTO), logs de transação e documentos de modificação (CDHDR/CDPOS). Exemplos Ordem de Produção LiberadaSaída de mercadorias contabilizadaConfirmação Final RegistradaOrdem Concluída Tecnicamente | |||
| Ordem de Produção ProductionOrder | O identificador exclusivo da ordem de produção, que serve como o identificador principal do case para o processo. | ||
| Descrição O número da Ordem de Produção é uma chave alfanumérica única atribuída a cada ordem no SAP ECC PP. Ele atua como o objeto central que vincula todas as atividades relacionadas, da criação à liquidação final. No Process Mining, este atributo é essencial para agrupar todos os eventos de uma mesma execução. Isso permite uma análise de ponta a ponta de todo o ciclo de vida da ordem, permitindo monitorar o progresso, medir tempos de ciclo e identificar desvios do processo padrão. Analisar por Ordem de Produção oferece uma visão clara de como as solicitações individuais de fabricação são atendidas. Por que é importante Este é o identificador principal que conecta todos os eventos relacionados, permitindo reconstruir e analisar a jornada de cada ordem do início ao fim. Onde obter Este atributo pode ser encontrado na tabela SAP AUFK, campo AUFNR. Exemplos 1000345100034610003471000348 | |||
| Tempo do Evento EventTime | O timestamp preciso que indica quando a atividade ocorreu. | ||
| Descrição O Event Time registra a data e a hora em que uma atividade específica foi executada ou um status foi registrado. Este timestamp é a base para todas as análises temporais, incluindo o cálculo de tempos de ciclo, tempos de espera e duração total do processo. Timestamps precisos são vitais para sequenciar os eventos corretamente. Eles permitem medir a duração entre atividades, identificar atrasos e avaliar o desempenho frente aos cronogramas ou SLAs. No contexto do planejamento de produção, isso ajuda a entender quanto tempo cada etapa de planejamento e execução realmente consome. Por que é importante Este atributo fornece a sequência cronológica dos eventos, essencial para calcular durações, analisar o desempenho e identificar gargalos. Onde obter Derivado de vários campos de data e hora associados a transações e mudanças de status, como BUDAT (Data de Lançamento) de documentos de material ou timestamps de alteração da CDHDR. Exemplos 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| 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 ID ou nome da instância do SAP ECC. Em empresas com múltiplos ERPs ou sistemas legados, este campo é crucial para a linhagem e o contexto dos dados. Para análise, permite filtrar os processos por sistema de origem. Isso é útil para comparar o desempenho entre diferentes sistemas ou para isolar dados durante projetos de consolidação de sistemas variados. Por que é importante Oferece contexto vital sobre a origem dos dados, especialmente em ambientes com várias instâncias SAP ou sistemas integrados. Onde obter Geralmente adicionado durante a extração de dados, muitas vezes derivado do ID do sistema SAP (SY-SYSID). Exemplos ECC_PROD_100S4H_FIN_200ECC_DE | |||
| Última Atualização de 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. É um timestamp técnico para fins de gestão de dados. Seu uso principal é garantir que os dados estejam atualizados e ajudar analistas a entenderem quão recentes são as informações. É crítico para validar se a análise do processo reflete a realidade atual, especialmente ao monitorar operações contínuas. Por que é importante Confirma a atualização dos dados, garantindo que as análises se baseiem nas informações mais recentes disponíveis. Onde obter Este valor geralmente é gerado e registrado pela ferramenta de ETL ou script 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 a ser produzido. É um dado mestre central que vincula o planejamento à gestão de estoque, vendas e custos. No Process Mining, filtrar por Código do Produto é crítico para entender processos específicos de fabricação. Ajuda a identificar quais produtos têm os maiores tempos de ciclo ou quais são mais propensos a atrasos de materiais. Essa análise é vital para a gestão do portfólio e para identificar oportunidades de padronização ou otimização para tipos específicos de materiais. Por que é importante Permite a análise específica por produto, revelando quais materiais estão associados a ineficiências, atrasos ou custos elevados. Onde obter Isso pode ser encontrado na tabela SAP AFPO, campo MATNR. Exemplos FG-123RM-45AHALB-7890CHEM-22 | |||
| Data de Início Real ActualStartDate | O timestamp da primeira atividade registrada, marcando o início real da execução. | ||
| Descrição A Data de Início Real é o timestamp do primeiro evento que indica o começo do trabalho físico. Geralmente, é derivado da primeira confirmação de produção ou da primeira saída de matérias-primas para a ordem. Este atributo é crucial para analisar a aderência ao cronograma, fornecendo o ponto inicial real para comparar com a 'Data de Início Planejada'. Entender a lacuna entre as datas ajuda a identificar atrasos pré-produção ligados à preparação de materiais, configuração de máquinas ou disponibilidade de recursos. Por que é importante Fornece o ponto de partida real da execução, permitindo o cálculo preciso de atrasos no início e do lead time total. Onde obter Derivado do event log ao encontrar o timestamp mínimo de atividades de execução específicas, como 'Primeira Confirmação Registrada' ou 'Saída de Mercadorias Lançada'. Exemplos 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| Data de Término Real ActualEndDate | O timestamp da atividade final, marcando 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 uma ordem. Geralmente, é derivado do timestamp da 'Confirmação Final Registrada' ou da última 'Entrada de Mercadorias'. Este atributo é essencial para medir o tempo total do ciclo de produção e para a análise de aderência ao cronograma. Comparar a data real com a planejada determina se a ordem foi finalizada no prazo. Além disso, analisar o intervalo entre o início e o fim reais revela o tempo real de throughput da produção. Por que é importante Marca a conclusão da produção, permitindo medir com precisão o desempenho de entrega no prazo e o tempo total de execução. Onde obter Derivado do event log ao encontrar o timestamp máximo de atividades 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 | |||
| Planta de Produção ProductionPlant | A unidade fabril ou local onde a ordem de produção é executada. | ||
| Descrição A Planta de Produção é uma unidade organizacional chave no SAP que representa uma fábrica. Ela é atribuída a cada ordem e determina onde as atividades ocorrerão fisicamente. Analisar o processo por Planta permite comparar o desempenho entre diferentes unidades. Isso ajuda a identificar quais são mais eficientes, quais enfrentam mais atrasos ou falta de materiais, e onde as melhores práticas podem ser replicadas. É uma dimensão fundamental para análise de causa raiz em dashboards de throughput e utilização de recursos. Por que é importante Possibilita a comparação de desempenho entre diferentes unidades fabris, ajudando a identificar problemas locais ou melhores práticas. Onde obter Este atributo é armazenada na tabela SAP AUFK, campo WERKS. Exemplos 100017102000DE01 | |||
| Quantidade Entregue DeliveredQuantity | A quantidade real do produto que foi produzida e recebida no estoque. | ||
| Descrição A Quantidade Entregue (ou Quantidade de Entrada de Mercadorias) é o total de produto acabado confirmado como produzido para uma ordem. Esse valor é atualizado nos eventos de 'Entrada de Mercadorias Lançada'. Este atributo é o par da 'Quantidade Planejada' e é essencial para calcular o KPI de 'Desvio entre Planejado e Real'. Ele fornece uma medida definitiva do output produtivo, permitindo identificar discrepâncias causadas por refugo, perdas de rendimento ou outros problemas. Comparar essas quantidades entre plantas ou produtos destaca áreas com problemas de eficiência. Por que é importante Mede a produção real, permitindo a comparação direta com as metas planejadas para avaliar o desempenho. Onde obter Encontrado na tabela SAP AFPO, campo WEMNG (Quantidade de Mercadorias Recebidas). Exemplos 984950751255 | |||
| Quantidade Planejada PlannedQuantity | A quantidade total do produto agendada para produção na ordem. | ||
| Descrição A Quantidade Planejada representa a meta de produção de uma ordem, definida na fase de planejamento. Esse valor serve como base para medir o desempenho real da produção. Este atributo é fundamental para KPIs de desempenho e aderência ao cronograma, como 'Desvio entre Quantidade Planejada vs. Real'. Ele ajuda a avaliar a precisão do planejamento e a identificar problemas sistêmicos de superprodução ou subprodução. Analisar esse valor é a chave para entender o alinhamento entre a execução e o plano inicial. Por que é importante Este atributo é a base para medir o desvio de produção e avaliar a precisão do planejamento. Onde obter Este valor está disponível na tabela AFKO do SAP, no campo GAMNG (Quantidade Total da Ordem). Exemplos 1005000751250 | |||
| Data de Início Planejada PlannedStartDate | A data agendada em que a produção da ordem deve ser iniciada. | ||
| Descrição A Data de Início Planejada é um parâmetro chave definido na fase de planejamento. Ela representa a data meta para o início das atividades de produção de uma ordem. Este atributo é crucial para medir a aderência ao cronograma. Ao compará-lo com o início real (ex: o timestamp da 'Primeira Confirmação Registrada'), a empresa pode identificar atrasos no começo da produção. Analisar os motivos desses atrasos é um dos principais casos de uso do Process Mining nesta área. Por que é importante 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 de início básica, encontrada na tabela SAP AFKO, campo GSTRP. Exemplos 2023-05-102023-06-222023-07-01 | |||
| Data de Término Planejada PlannedEndDate | A data agendada em que a produção da ordem deve ser concluída. | ||
| Descrição A Data de Término Planejada é a data meta de conclusão de uma ordem, definida no agendamento. Ela estabelece o prazo esperado para finalizar todas as atividades, incluindo confirmações e entrada de mercadorias. Esta data é essencial para calcular o KPI de 'Taxa de Aderência ao Cronograma'. Compará-la com o tempo real de conclusão revela se as ordens estão sendo finalizadas no prazo, ajudando a avaliar a confiabilidade dos cronogramas e a identificar as causas raiz de atrasos. Por que é importante É o referencial usado para determinar se as ordens foram concluídas no prazo, impactando a satisfação do cliente e a confiabilidade do plano. Onde obter Esta é a data de término básica, encontrada na tabela SAP AFKO, 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 crítico de prontidão. Ele é definido pelo sistema ao validar se todos os componentes necessários estão em estoque. Um status de 'Disponível' permite que a produção siga sem entraves, enquanto 'Falta' aponta um problema. Este atributo é vital para o dashboard de 'Análise de Impacto de Falta de Material'. Ao analisar quanto tempo as ordens esperam devido à falta de insumos, as empresas quantificam o impacto da cadeia de suprimentos no cronograma. Isso ajuda a identificar fornecedores pouco confiáveis ou componentes problemáticos que geram atrasos constantes. Por que é importante Destaca diretamente os atrasos causados por falta de material, uma causa raiz comum e impactante nos desvios de cronograma. Onde obter Não é um campo único; é o resultado da verificação de disponibilidade (ATP). Os resultados aparecem na transação CO02 ou COHV. O status (ex: MACM - Material comprometido) pode estar logado. Consulte a documentação SAP ECC PP. Exemplos DisponívelFalta de MaterialParcialmente DisponívelNão Verificado | |||
| Grupo de planejamento PlannerGroup | O grupo de planejadores MRP ou de produção responsáveis pela ordem. | ||
| Descrição O Grupo de Planejadores é um elemento organizacional que representa as pessoas responsáveis por gerenciar um conjunto específico de materiais ou ordens. Essa atribuição ajuda a distribuir a carga de trabalho e estabelecer responsabilidades claras. No Process Mining, esse atributo permite analisar o desempenho por equipe. Ajuda a responder questões como 'Qual grupo tem mais desvios de cronograma?' ou 'Há diferença no tempo de ciclo entre os grupos?'. Isso fornece insights para equilibrar o volume de trabalho e identificar necessidades de treinamento. Por que é importante Permite segmentar a análise de desempenho pela equipe responsável, ajudando a identificar diferenças na eficácia do planejamento e carga de trabalho. Onde obter Este é o Planejador MRP, encontrado na tabela SAP AFKO, campo DISPO. Exemplos 001002P01P02 | |||
| Prioridade de Produção ProductionPriority | Uma classificação que indica a urgência ou prioridade da ordem de produção. | ||
| Descrição A Prioridade de Produção é um campo usado para sinalizar a importância relativa de uma ordem. Isso permite que os programadores de produção e a equipe do chão de fábrica priorizem o trabalho, garantindo que ordens críticas sejam agilizadas no processo. Analisar este atributo ajuda a avaliar a eficácia do sistema de prioridades. Ao comparar o tempo de ciclo de ordens de alta prioridade com as de baixa, a empresa pode determinar se pedidos urgentes estão realmente sendo processados mais rápido. Caso contrário, isso pode indicar falhas na comunicação, na alocação de recursos ou no processo de execução geral. Por que é importante Ajuda a avaliar se o sistema de gestão de prioridades é eficaz, garantindo que ordens urgentes sejam concluídas antes das padrão. Onde obter Muitas vezes não é um campo padrão; pode ser customizado, derivado da prioridade da ordem de venda ou parte de uma classificação. Consulte sua configuração do SAP ECC PP. Exemplos AltoMédioBaixoUrgente | |||
| Status da Ordem de Produção ProductionOrderStatus | O status atual da ordem de produção, como Criada, Liberada ou Encerrada Tecnicamente. | ||
| Descrição O Status da Ordem de Produção indica a etapa atual do ciclo de vida. O SAP utiliza códigos como CRTD (Criada), REL (Liberada), CNF (Confirmada), DLV (Entregue) e TECO (Encerrada Tecnicamente). Analisar o tempo gasto em cada status é fundamental no Process Mining para produção. Ajuda a identificar quanto tempo as ordens esperam pela liberação ou quanto tempo permanecem parcialmente entregues. Rastrear essas mudanças fornece uma visão de alto nível do fluxo do processo. Por que é importante Fornece um retrato do progresso da ordem e ajuda a identificar gargalos onde as ordens ficam paradas por muito tempo. 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 fica na TJ02T. A leitura do status é feita geralmente via módulos de função como o STATUS_TEXT_EDIT. Exemplos CRTD (Criado)REL (Liberada)DLV (Entregue)TECO (Encerrada Tecnicamente) | |||
| Status de Aderência ao Cronograma ScheduleAdherenceStatus | Um marcador que indica se a ordem de produção foi concluída até a data de término planejada. | ||
| Descrição O Status de Aderência ao Cronograma é um atributo categórico ou booleano que oferece uma visão rápida do desempenho de pontualidade. Ele é derivado da comparação entre a 'Data de Término Real' e a 'Data de Término Planejada'. Se a conclusão real for igual ou anterior à planejada, o status é 'No Prazo'; caso contrário, é 'Atrasado'. Este atributo simplifica a análise em dashboards, permitindo filtrar e agregar dados para calcular o KPI de 'Taxa de Aderência ao Cronograma' e identificar os principais motivos de atrasos, como produtos específicos, plantas ou falta de materiais. Por que é importante Simplifica a análise ao categorizar ordens como 'No Prazo' ou 'Atrasada', facilitando o reporte sobre a confiabilidade do cronograma. Onde obter Campo calculado: IF('ActualEndDate' <= 'PlannedEndDate', 'No Prazo', 'Atrasado'). Exemplos Dentro do PrazoAtrasado | |||
| Tempo de Ciclo CycleTime | O tempo total decorrido desde a liberação da ordem até sua conclusão final. | ||
| Descrição O Tempo de Ciclo (Cycle Time) é um KPI que mede a duração da fase de execução da produção. É calculado como a diferença de tempo entre o evento 'Ordem de Produção Liberada' e um evento de conclusão, como 'Confirmação Final Registrada' ou 'Entrada de Mercadorias Lançada'. Esta métrica é fundamental para avaliar a eficiência fabril. Analisar tendências de tempo de ciclo e compará-las entre produtos, plantas ou períodos ajuda a identificar oportunidades para reduzir prazos, melhorar o throughput e aumentar a capacidade produtiva total. É uma métrica central para diversos dashboards e KPIs. Por que é importante Mede diretamente a eficiência e a velocidade da execução da produção, destacando oportunidades para reduzir o lead time. Onde obter Campo calculado: Timestamp de 'Ordem de Produção Concluída' menos o timestamp de 'Ordem de Produção Liberada'. Exemplos 3 dias e 4 horas10 horas e 15 minutos7 dias e 0 horas1 dia e 12 horas | |||
| Usuário Responsável ResponsibleUser | O ID de usuário da pessoa 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 SAP associada a eventos-chave, como criação ou liberação. Isso garante responsabilidade e rastreabilidade das ações no sistema. No Process Mining, esse atributo é usado para analisar variações de processo baseadas no comportamento do usuário. Ajuda a identificar quem pode precisar de treinamento adicional ou quem segue procedimentos não padronizados, além de apoiar a análise de recursos mostrando como o trabalho é distribuído. Por que é importante Vincula as atividades do processo a indivíduos específicos, permitindo análises de desempenho por usuário e promovendo a responsabilidade. Onde obter O usuário que criou a ordem está em AUFK-ERNAM. Quem a alterou por último está em AUFK-AENAM. Documentos de modificaçã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 real entregue. | ||
| Descrição O Desvio de Quantidade é uma métrica calculada que mede a discrepância da produção em relação ao plano inicial. É calculado como 'Quantidade Entregue' menos 'Quantidade Planejada'. Um desvio positivo indica superprodução, enquanto um desvio negativo indica subprodução ou perda de rendimento. Este atributo é essencial para o dashboard de 'Produção Planejada vs. Real' e seu KPI correspondente. Analisar este desvio ajuda a identificar problemas de rendimento, taxas de refugo ou erros de entrada de dados, fornecendo uma medida direta da confiabilidade do processo. Por que é importante Quantifica a precisão da produção versus o plano, destacando problemas de rendimento, refugo ou controle de processo. Onde obter Campo calculado: 'DeliveredQuantity' - 'PlannedQuantity'. Exemplos -2-5005 | |||
Atividades de Planejamento de Produção
| Atividade | Descrição | ||
|---|---|---|---|
| Confirmação Final Registrada | Esta atividade indica que todas as operações da ordem foram concluídas sob a perspectiva do chão de fábrica, marcada pelo registro de confirmação final da última operação. | ||
| Por que é importante Este marco encerra as atividades físicas. A duração entre a primeira e a última confirmação representa o tempo real de execução da produção. Onde obter Capturado quando o status do sistema 'CNF' (I0009, Confirmada) é definido, geralmente acionado pelo registro de confirmação final na tabela AFRU (AFRU-AUERU = 'X'). A mudança é registrada na JCDS. Captura Identifica o timestamp quando o status 'CNF' é definido ou localiza o último registro de confirmação na AFRU. Tipo de evento explicit | |||
| Entrada de mercadorias lançada | Este evento registra a entrada do produto acabado no estoque, indicando que os itens produzidos estão disponíveis para envio ou processamento posterior. | ||
| Por que é importante Este é o marco final de conclusão, representando a entrega do processo. O tempo da liberação até a entrada de mercadorias é o lead time total de produção. Onde obter Registrado como um documento de material nas tabelas MKPF/MSEG com um tipo de movimento, geralmente '101', referenciando a ordem de produção. O status do sistema 'DLV' (I0012, Fornecido) também é definido na ordem. Captura Captura a data de lançamento do documento de material de movimento '101' ou o timestamp da mudança de status para 'DLV'. Tipo de evento explicit | |||
| Ordem Concluída Tecnicamente | Esta é uma etapa administrativa que finaliza a ordem sob o ponto de vista logístico, impedindo novos movimentos ou confirmações e permitindo a liquidação financeira. | ||
| Por que é importante Este é o ponto final definitivo do ciclo de vida logístico da ordem. Analisar este evento ajuda a entender a duração total, incluindo tarefas administrativas pós-produção. Onde obter Capturado explicitamente quando o status de sistema 'TECO' (I0045, Encerrado Tecnicamente) é atribuído à ordem. O registro fica na tabela JCDS. Captura Identifica o timestamp quando o status 'TECO' torna-se ativo para a ordem na JCDS. Tipo de evento explicit | |||
| Ordem de Produção Criada | Este evento marca a criação de uma nova ordem, geralmente iniciada por um planejamento ou entrada manual. É capturado quando o registro é salvo e recebe o status 'CRTD' (Criada). | ||
| Por que é importante Este é o ponto de partida de cada case de ordem de produção. Analisar o tempo até a liberação ajuda a identificar atrasos no planejamento pré-produção e na configuração administrativa. Onde obter Este evento é capturado da data (AUFK-ERDAT) e hora (AUFK-ERZET) de criação da ordem. O status 'CRTD' (I0001) é atribuído e registrado nas tabelas JEST e JCDS, vinculado ao objeto da ordem (AUFK-OBJNR). Captura Monitore o timestamp de criação e a atribuição do status 'CRTD'. Tipo de evento explicit | |||
| Ordem de Produção Liberada | Esta atividade marca a aprovação e liberação oficial da ordem para execução. Uma vez liberada, as reservas de material tornam-se ativas e as saídas de mercadorias e confirmações podem começar. | ||
| Por que é importante Este é um marco crítico que representa a passagem do planejamento para a execução. O tempo entre a criação e a liberação é um indicador chave da eficiência do planejamento. Onde obter Capturado explicitamente quando o status de sistema 'REL' (I0002) é atribuído à ordem. A mudança é registrada com um timestamp na tabela JCDS, vinculada ao número do objeto da ordem (AUFK-OBJNR). Captura Identifica o timestamp quando o status 'REL' (liberado) torna-se ativo para a ordem. Tipo de evento explicit | |||
| Primeira Confirmação Registrada | Este evento indica o início do trabalho físico. É capturado quando a primeira confirmação de tempo para qualquer operação da ordem é inserida no sistema. | ||
| Por que é importante 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 começo do trabalho. Onde obter Inferido ao encontrar a data de lançamento (AFRU-BUDAT) mais antiga entre todas as confirmações da ordem na tabela AFRU. O primeiro registro marca o início físico da produção. Captura Identifica o primeiro registro de confirmação para a 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 foi cancelada antes da conclusão, geralmente pela definição de um status específico ou marcação de eliminação, impedindo novos processamentos. | ||
| Por que é importante Este é um resultado negativo importante de monitorar. Analisar ordens canceladas pode revelar falhas na previsão de demanda, na precisão do planejamento ou na gestão de dados mestres. Onde obter Pode ser inferido pela atribuição do status 'DLFL' (I0076, Marcação para eliminação) ou um status de 'Cancelado'. A alteração é registrada com um timestamp na tabela JCDS. Captura Identifica o timestamp quando o marcador de eliminação ('DLFL') ou um status de cancelamento é definido para a ordem. Tipo de evento inferred | |||
| Confirmação Intermediária Registrada | Representa uma atualização de progresso em uma ordem de produção através de uma confirmação parcial de uma operação. Comum em ordens de longa duração onde é necessário monitorar o avanço antes da conclusão final. | ||
| Por que é importante Analisar confirmações parciais ajuda a monitorar o progresso de ciclos longos e a identificar gargalos dentro do próprio processo produtivo, e não apenas no início ou no fim. Onde obter Capturado dos registros de confirmação na tabela AFRU que não estão marcados como confirmação final. Cada entrada possui data (AFRU-BUDAT) e hora de lançamento. Captura Extrai todos os registros de confirmação da AFRU que não estão marcados como confirmação final para uma operação. Tipo de evento explicit | |||
| Dados da Ordem Alterados | Este evento captura modificações significativas na ordem após sua criação, como alterações na quantidade, datas ou Lista Técnica (BOM), registradas para fins de auditoria. | ||
| Por que é importante Monitorar essas mudanças ajuda a identificar instabilidades no processo e replanejamentos frequentes. Uma alta frequência de alterações pode indicar falhas no planejamento inicial, volatilidade na demanda ou imprecisão nos dados. Onde obter Mudanças em campos-chave nas tabelas AFKO (cabeçalho) e AFPO (item) são registradas nas tabelas de documentos de modificação CDHDR (cabeçalho) e CDPOS (item). Cada alteração relevante pode ser extraída como uma atividade. Captura Extrai entradas do log de modificações das tabelas CDHDR e CDPOS para a classe de objeto de ordem de produção. Tipo de evento explicit | |||
| Disponibilidade de Material Verificada | Representa a execução de uma verificação para determinar se todos os componentes necessários para a ordem estão disponíveis. Pode ser automático na criação/liberação ou acionado manualmente. | ||
| Por que é importante Esta atividade é crucial para entender atrasos causados por falta de material. Verificações frequentes ou longos períodos de espera 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 timestamp desta mudança nas tabelas JEST/JCDS. Os resultados ficam visíveis no cabeçalho da ordem. Captura Inferido a partir do timestamp das mudanças de status relacionadas à disponibilidade de material, como 'MACM' ou 'MSPT'. Tipo de evento inferred | |||
| Liquidação da Ordem Executada | Representa a liquidação financeira da ordem de produção, onde os custos coletados são alocados aos objetos de custo apropriados. É a etapa final do ciclo de vida da ordem sob a perspectiva de Controladoria. | ||
| Por que é importante 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 real do processo de produção. Onde obter Pode ser inferido quando o saldo da ordem zera ou quando o status 'SETC' (I0076) é seguido por logs de liquidação. A liquidação real é registrada em tabelas de controladoria como COSP e COSS. Captura Inferido a partir de 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 contabilizada | Esta atividade representa a retirada de componentes do estoque para uso na ordem, confirmando que as matérias-primas ou produtos semiacabados necessários foram preparados. | ||
| Por que é importante Este evento marca o início do consumo de materiais. Atrasos entre a liberação da ordem e a saída de mercadorias podem revelar problemas na logística do armazém, na preparação de materiais ou na precisão do inventário. Onde obter Registrado como documentos de material nas tabelas MKPF (cabeçalho) e MSEG (item) com um tipo de movimento, geralmente '261', referenciando o número da ordem de produção (MSEG-AUFNR). Captura Captura a data de lançamento (MKPF-BUDAT) dos documentos de material com tipo de movimento '261' vinculados à ordem. Tipo de evento explicit | |||
Guias de Extração
Etapas
- Criar um InfoSet no SAP Query: Use a transação
SQ02. Crie um novo InfoSet, por exemplo,ZPP_EVENTLOG. Selecione a opção 'Junção de tabelas utilizando tabela base'. UseAUFK(Dados mestre da ordem) como tabela inicial. - Unir as tabelas necessárias: Adicione as seguintes tabelas à junção. O sistema pode sugerir os joins, mas valide se estão corretos:
AUFKcomAFKO(Cabeçalho da ordem PP):AUFK-AUFNR = AFKO-AUFNRAUFKcomJEST(Status de objeto individual):AUFK-OBJNR = JEST-OBJNRJESTcomJCDS(Documentos de modificação de status):JEST-OBJNR = JCDS-OBJNREJEST-STAT = JCDS-STAT. Nota: Esta união serve para ler o histórico de mudanças 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. Inclua todos os campos precisos para a consulta final, como
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATE,MKPF-BUDAT. - Adicionar Campos Personalizados e Código: No InfoSet, vá para a aba 'Suplementos'. Defina campos personalizados para
ActivityName,EventTime,SourceSystemeLastDataUpdate. Escreva o código ABAP para preenchê-los conforme a lógica da consulta, iterando sobre mudanças de status, confirmações e documentos de material para gerar um registro por evento. Este é o passo mais técnico, transformando dados tabulares em formato de Event Log. - Gerar e Salvar o InfoSet: Após configurar os joins, campos e códigos, salve e gere o InfoSet.
- Criar uma SAP Query: Use a transação
SQ01. Crie uma nova consulta, ex:ZPP_EVENTS, baseada no InfoSet criado. - Desenhar o Layout da Consulta: No designer da consulta, defina os campos da tela de seleção. Sugestões: Ordem de Produção
AUFNR, CentroWERKS, Tipo de OrdemAUARTe intervalo de datas de criaçãoAUFK-ERDAT. - Definir a Lista de Saída: Selecione os campos que aparecerão no relatório. A lista deve bater exatamente com as colunas do event log, incluindo os campos personalizados
ActivityNameeEventTime. - Executar a Consulta: Rode a consulta com os critérios desejados, por exemplo, os últimos 3 a 6 meses de ordens.
- Exportar os Dados: Exporte os resultados. O formato mais comum e seguro é 'Planilha eletrônica' ou 'Arquivo local' em CSV ou separado por tabulação.
- Formatar para o ProcessMind: Abra o arquivo exportado em uma planilha. Valide se os cabeçalhos batem com os atributos exigidos (
ProductionOrder,ActivityName,EventTime, etc.) e se o formato de data emEventTimesegue o padrão (ex: YYYY-MM-DD HH:MI:SS). Salve como CSV para upload.
Configuração
- Joins de InfoSet: O sucesso deste método depende de um InfoSet complexo que une as tabelas de cabeçalho, status, confirmação e movimentação de materiais. Os joins principais são
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUeAUFK->MSEG->MKPF. Joins incorretos ou ineficientes podem causar lentidão no sistema ou dados imprecisos. - Critérios de Seleção: É fundamental definir um intervalo de seleção gerenciável para evitar problemas de performance. Os campos de seleção principais na tela inicial da consulta devem incluir:
- Centro 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.
- Centro de Produção (
- Status do Sistema: A lógica para identificar eventos como 'Criado', 'Liberado', 'Encerrado Tecnicamente' e 'Cancelado' depende de códigos de status específicos (ex: I0001, I0002, I0045, I0047). Geralmente são padrão no SAP, mas devem ser validados.
- Tipos de Movimento: Eventos como 'Saída de Mercadorias' e 'Entrada de Mercadorias' são identificados pelos Tipos de Movimento (
MSEG-BWART), tipicamente '261' e '101', respectivamente. Confirme se esses valores estão de acordo com a configuração da sua empresa. - Autorizações: O usuário que executa a consulta precisa de autorização para 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
- Estabelecer Acesso ao Banco de Dados: Obtenha credenciais de apenas leitura para o banco de dados do SAP ECC. Você precisará do endereço do servidor, porta, nome do banco, usuário e senha. Coordene este acesso com as equipes de SAP Basis e DBA.
- Identificar o Esquema SAP: Verifique o esquema correto onde as tabelas SAP estão armazenadas (comumente
SAPSR3). Substitua o marcador[Your SAP Schema]na consulta por este valor. - Preparar a Consulta SQL: Copie a consulta SQL completa fornecida na seção
query. Ela foi desenhada para extrair todas as atividades em um formato de Event Log único. - Configurar Parâmetros da Consulta: Antes de rodar, modifique os placeholders. Defina
[Start Date]e[End Date]para o período de extração. Recomendamos filtrar também por centro (WERKS) ou tipo de ordem (AUART) para controlar o volume de dados. - Conectar e Executar: Utilize um cliente SQL (como DBeaver ou SAP HANA Studio) ou um script personalizado para conectar ao banco usando as credenciais do passo 1.
- Executar a Query: Cole a consulta configurada no seu cliente e execute. O tempo de resposta dependerá do período escolhido e do tamanho do sistema.
- Validar Resultados Preliminares: Inspecione as primeiras linhas para garantir que colunas como
ProductionOrder,ActivityNameeEventTimeestão preenchidas corretamente. - Exportar para CSV: Exporte todo o resultado para um arquivo CSV. Use codificação UTF-8 para evitar problemas com caracteres especiais.
- Finalizar o CSV para Upload: Verifique se os cabeçalhos do arquivo batem com os atributos exigidos. Certifique-se de que a coluna
EventTimesegue o padrãoYYYY-MM-DD HH:MI:SS. - Upload no ProcessMind: O arquivo CSV agora está pronto para ser carregado na plataforma ProcessMind para análise.
Configuração
- Esquema do Banco de Dados: Você deve especificar o esquema SAP onde residem as tabelas de planejamento de produção. Substitua o marcador
[Your SAP Schema]na consulta pelo nome correto do seu ambiente, comoSAPSR3. - Intervalo de Datas: Filtrar por um período específico é vital 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 garantir um volume de dados gerenciável. - Tipo de Ordem de Produção: Para focar a análise, utilize o filtro de tipo de ordem (
AUFK.AUART). Isso permite incluir ou excluir tipos específicos, como ordens de produção padrão, ordens de processo ou ordens de retrabalho. - Centro de Produção: É altamente recomendável filtrar por um ou mais centros (
AFKO.WERKS). Extrair dados de todas as plantas simultaneamente pode consumir muitos recursos do sistema. - Acesso ao Banco de Dados: Este método exige um usuário de 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 é comum para todos os usuários SAP e requer 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
- Criar um InfoSet no SAP Query: Use a transação
SQ02. Crie um novo InfoSet, por exemplo,ZPP_EVENTLOG. Selecione a opção 'Junção de tabelas utilizando tabela base'. UseAUFK(Dados mestre da ordem) como tabela inicial. - Unir as tabelas necessárias: Adicione as seguintes tabelas à junção. O sistema pode sugerir os joins, mas valide se estão corretos:
AUFKcomAFKO(Cabeçalho da ordem PP):AUFK-AUFNR = AFKO-AUFNRAUFKcomJEST(Status de objeto individual):AUFK-OBJNR = JEST-OBJNRJESTcomJCDS(Documentos de modificação de status):JEST-OBJNR = JCDS-OBJNREJEST-STAT = JCDS-STAT. Nota: Esta união serve para ler o histórico de mudanças 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. Inclua todos os campos precisos para a consulta final, como
AUFK-AUFNR,AUFK-WERKS,AFKO-GAMNG,AFKO-GASMG,JCDS-UDATE,MKPF-BUDAT. - Adicionar Campos Personalizados e Código: No InfoSet, vá para a aba 'Suplementos'. Defina campos personalizados para
ActivityName,EventTime,SourceSystemeLastDataUpdate. Escreva o código ABAP para preenchê-los conforme a lógica da consulta, iterando sobre mudanças de status, confirmações e documentos de material para gerar um registro por evento. Este é o passo mais técnico, transformando dados tabulares em formato de Event Log. - Gerar e Salvar o InfoSet: Após configurar os joins, campos e códigos, salve e gere o InfoSet.
- Criar uma SAP Query: Use a transação
SQ01. Crie uma nova consulta, ex:ZPP_EVENTS, baseada no InfoSet criado. - Desenhar o Layout da Consulta: No designer da consulta, defina os campos da tela de seleção. Sugestões: Ordem de Produção
AUFNR, CentroWERKS, Tipo de OrdemAUARTe intervalo de datas de criaçãoAUFK-ERDAT. - Definir a Lista de Saída: Selecione os campos que aparecerão no relatório. A lista deve bater exatamente com as colunas do event log, incluindo os campos personalizados
ActivityNameeEventTime. - Executar a Consulta: Rode a consulta com os critérios desejados, por exemplo, os últimos 3 a 6 meses de ordens.
- Exportar os Dados: Exporte os resultados. O formato mais comum e seguro é 'Planilha eletrônica' ou 'Arquivo local' em CSV ou separado por tabulação.
- Formatar para o ProcessMind: Abra o arquivo exportado em uma planilha. Valide se os cabeçalhos batem com os atributos exigidos (
ProductionOrder,ActivityName,EventTime, etc.) e se o formato de data emEventTimesegue o padrão (ex: YYYY-MM-DD HH:MI:SS). Salve como CSV para upload.
Configuração
- Joins de InfoSet: O sucesso deste método depende de um InfoSet complexo que une as tabelas de cabeçalho, status, confirmação e movimentação de materiais. Os joins principais são
AUFK->AFKO,AUFK->JEST->JCDS,AUFK->AFRUeAUFK->MSEG->MKPF. Joins incorretos ou ineficientes podem causar lentidão no sistema ou dados imprecisos. - Critérios de Seleção: É fundamental definir um intervalo de seleção gerenciável para evitar problemas de performance. Os campos de seleção principais na tela inicial da consulta devem incluir:
- Centro 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.
- Centro de Produção (
- Status do Sistema: A lógica para identificar eventos como 'Criado', 'Liberado', 'Encerrado Tecnicamente' e 'Cancelado' depende de códigos de status específicos (ex: I0001, I0002, I0045, I0047). Geralmente são padrão no SAP, mas devem ser validados.
- Tipos de Movimento: Eventos como 'Saída de Mercadorias' e 'Entrada de Mercadorias' são identificados pelos Tipos de Movimento (
MSEG-BWART), tipicamente '261' e '101', respectivamente. Confirme se esses valores estão de acordo com a configuração da sua empresa. - Autorizações: O usuário que executa a consulta precisa de autorização para 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';