Seu Template de dados para gestão da cadeia de suprimentos
Seu Template de dados para gestão da cadeia de suprimentos
- Atributos recomendados para coleta
- Atividades essenciais para acompanhar
- Orientações para extração
Atributos da gestão da cadeia de suprimentos
| Nome | Descrição | ||
|---|---|---|---|
| Hora do evento EventTime | Data e hora que indicam quando a atividade ocorreu. | ||
| Descrição Este atributo informa a data e a hora exatas de cada atividade do processo. Ele serve como base cronológica do Event Log, organizando as etapas na ordem em que ocorreram. A hora do evento é essencial para todas as análises baseadas em tempo. Ela é usada para calcular os tempos de ciclo entre atividades, medir o tempo total de atravessamento de um processo, identificar tendências de performance ao longo do tempo e determinar quando os gargalos têm maior probabilidade de ocorrer. Por que isso importa Essa data e hora são essenciais para calcular todas as durações e métricas de performance, permitindo analisar gargalos e tempos de atravessamento do processo. Onde encontrar Extraído dos campos de data e hora associados à criação de documentos ou a mudanças de status nas principais tabelas SAP, como CDHDR/CDPOS para documentos de alteração ou campos específicos de data e hora, como ERDAT/ERZET, nas tabelas de cabeçalho. Exemplos 2023-04-15T10:25:00Z2023-04-18T14:00:00Z2023-04-22T08:15:00Z | |||
| Nome da atividade ActivityName | Nome da atividade de negócio ou do evento ocorrido em um determinado momento do processo da cadeia de suprimentos. | ||
| Descrição Este atributo descreve uma etapa ou um marco específico do ciclo de vida do pedido logístico, como 'Pedido de compra emitido' ou 'Saída de mercadorias lançada'. Essas atividades formam a sequência de eventos que compõe o processo. Analisar a sequência de atividades é a base do Process Mining. Isso permite descobrir o fluxo real do processo, compará-lo com os procedimentos operacionais padrão e identificar etapas que causam atrasos ou exigem retrabalho. Por que isso importa Define as etapas do processo, algo fundamental para descobrir mapas de processos, analisar variantes e medir os tempos de ciclo entre atividades. Onde encontrar Gerado pelo mapeamento de códigos de transação ou mudanças de status de várias tabelas SAP (por exemplo, EKKO, LIKP, VBUK) para nomes de atividades mais claros durante a transformação dos dados. Exemplos Pedido de compra emitidoEntrada de mercadorias do pedido de compra registradaEntrega de saída criadaComprovante de entrega confirmado | |||
| Pedido logístico LogisticsOrder | Identificador exclusivo de um processo completo da cadeia de suprimentos, desde a demanda inicial até a confirmação final da entrega. | ||
| Descrição O pedido logístico funciona como o principal identificador do caso, conectando todas as atividades relacionadas a uma demanda ou solicitação de atendimento específica na cadeia de suprimentos. Essa abordagem permite acompanhar todo o ciclo de vida do produto, do planejamento e das compras à produção e distribuição, oferecendo uma visão completa do processo. Em Process Mining, analisar os dados por pedido logístico revela o caminho completo percorrido para atender a uma demanda. Isso ajuda a identificar variantes recorrentes, gargalos e desvios em toda a cadeia de suprimentos, em vez de analisar processos isolados, como compras ou vendas. Por que isso importa Esta é a chave essencial para conectar todos os eventos relacionados em uma única instância do processo e viabilizar a análise de ponta a ponta da cadeia de suprimentos. Onde encontrar Este é um identificador conceitual que talvez precise ser criado pela associação de vários números de documentos, como o número de um pedido de venda com os números dos pedidos de compra e das entregas subsequentes. Consulte a documentação do SAP S/4HANA Supply Chain ou um especialista no assunto. Exemplos LO-4500078192LO-4500078193LO-4500078194 | |||
| Sistema de origem SourceSystem | Sistema de onde os dados vieram. | ||
| Descrição Identifica a instância específica do sistema de origem em que os dados do evento foram gerados. Em um ambiente complexo, uma empresa pode ter várias instâncias do SAP S/4HANA para diferentes regiões ou unidades de negócio. Este atributo é importante para a governança de dados e para segmentar a análise. Ele permite que analistas comparem a performance dos processos entre diferentes sistemas ou isolem os dados de uma única fonte confiável. Por que isso importa Fornece contexto essencial sobre a origem dos dados, importante para validá-los e comparar processos em diferentes ambientes de sistemas. Onde encontrar Em geral, é um valor estático adicionado durante a extração dos dados para identificar a origem, como o ID do sistema SAP (SAPSID). Exemplos S4H_PROD_EUS4H_PROD_NAS4H_DEV | |||
| Última atualização dos dados LastDataUpdate | Data e hora da última atualização ou extração dos dados do sistema de origem. | ||
| Descrição Este atributo indica quando os dados do Event Log foram atualizados pela última vez. Ele informa o quão recentes são os dados analisados e ajuda as pessoas usuárias a entenderem sua atualidade. Em qualquer análise, saber quando os dados foram atualizados é essencial para tomar decisões fundamentadas. Essa data e hora ajudam as pessoas usuárias a confiar nos dados e entender o período coberto pelos Dashboards e KPIs. Por que isso importa Deixa claro o quanto os dados estão atualizados, permitindo que as pessoas usuárias saibam quão recente é a análise do processo. Onde encontrar Este é um campo de metadados geralmente gerado e preenchido pela ferramenta de extração de dados ou ETL ao final de uma atualização bem-sucedida. Exemplos 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| Centro Plant | Instalação de fabricação ou distribuição onde a atividade ocorreu. | ||
| Descrição O centro é uma unidade organizacional do SAP que representa um local onde as mercadorias são produzidas, armazenadas ou distribuídas. Ele fornece contexto geográfico ou funcional para as atividades do processo. Analisar a performance do processo por centro é uma necessidade comum. Isso permite comparar a eficiência, o volume processado e a conformidade entre diferentes unidades operacionais, ajudando a identificar boas práticas ou locais que precisam de melhorias. Por que isso importa Fornece uma dimensão geográfica ou organizacional para a análise e permite comparar a performance entre diferentes instalações. Onde encontrar Encontrado em várias tabelas de itens de documentos, como VBAP (vendas), EKPO (compras) e LIPS (entregas). Em geral, o campo se chama WERKS. Exemplos 100021003500 | |||
| Data de entrega solicitada RequestedDeliveryDate | Data em que foi solicitado ao fornecedor que entregasse as mercadorias. | ||
| Descrição Esta é a data de entrega especificada no pedido de compra e representa a meta definida para o fornecedor. Ela serve como referência para medir a performance real das entregas. Essa data é essencial para calcular o KPI de índice de entregas no prazo dos fornecedores. Ao comparar a data real do recebimento de mercadorias com a data solicitada, a empresa consegue medir objetivamente se os fornecedores estão cumprindo seus compromissos. Por que isso importa Esta é a data de referência usada para calcular o KPI de índice de entregas no prazo dos fornecedores, por isso é essencial para a gestão da performance dos fornecedores. Onde encontrar Encontrado na tabela de itens de pedidos de compra EKPO, no campo EINDT (data de entrega). Exemplos 2023-05-20T00:00:00Z2023-06-15T00:00:00Z2023-07-01T00:00:00Z | |||
| Nome do cliente CustomerName | Nome do cliente cujo pedido está sendo atendido. | ||
| Descrição Este atributo identifica o cliente final associado a um pedido de venda e às atividades de atendimento subsequentes. Ele fornece contexto sobre a demanda na cadeia de suprimentos. Em Process Mining, analisar os dados por cliente ajuda a identificar diferentes padrões de atendimento ou níveis de performance em contas estratégicas. Esse atributo é usado em Dashboards como o de análise do atraso na confirmação de entrega para verificar se determinados clientes atrasam as confirmações com frequência. Por que isso importa Permite segmentar a análise por cliente e identificar comportamentos específicos, gargalos ou a performance em relação aos acordos de nível de serviço. Onde encontrar O número do cliente (KUNNR) é armazenado em documentos de vendas (por exemplo, na tabela VBAK). O nome é obtido na tabela central de cadastro de clientes KNA1. Exemplos Retail CorpInnovate SolutionsManufacturing Partners | |||
| Nome do fornecedor SupplierName | Nome do fornecedor associado às atividades de compras. | ||
| Descrição Este atributo identifica o fornecedor de quem são comprados os produtos ou serviços. Em geral, está associado a atividades como 'Requisição de compra criada' e 'Pedido de compra emitido'. O nome do fornecedor é essencial para o Dashboard de performance de entrega de fornecedores. Ele permite filtrar e segmentar os dados para comparar índices de entrega no prazo, tempos de atravessamento e níveis de qualidade entre fornecedores, algo fundamental para o sourcing estratégico e a gestão do relacionamento com fornecedores. Por que isso importa Permite analisar a performance por fornecedor, algo essencial para otimizar o processo de compras e avaliar a confiabilidade dos fornecedores. Onde encontrar O número do fornecedor (LIFNR) é armazenado em documentos de compras (por exemplo, nas tabelas EKKN e EBAN). O nome é obtido na tabela central de cadastro de fornecedores LFA1. Exemplos Global Components Inc.Advanced Materials LLCPrecision Parts Co. | |||
| Número do material MaterialNumber | Identificador exclusivo do produto ou material processado. | ||
| Descrição O número do material, muitas vezes chamado de SKU, é o código exclusivo de um produto específico no SAP. Ele conecta as atividades do processo aos produtos físicos ou digitais fabricados, comprados ou enviados. Este atributo é essencial para análises centradas no produto. Ele ajuda a identificar se determinados produtos estão mais sujeitos a problemas de qualidade, atrasos na produção ou falta de estoque. Você pode filtrar os Dashboards por material para investigar a performance de linhas de produtos específicas. Por que isso importa Permite analisar os dados por produto e identificar se problemas como atrasos ou falhas de qualidade se concentram em materiais específicos. Onde encontrar Encontrado em tabelas de itens da maioria dos documentos, como VBAP para pedidos de venda, EKPO para pedidos de compra e LIPS para entregas. Em geral, o campo se chama MATNR. Exemplos FG-100-ARM-2034-BSA-5500 | |||
| Resultado da inspeção de qualidade QualityInspectionResult | Resultado de uma inspeção de qualidade, como 'Aprovado' ou 'Reprovado'. | ||
| Descrição Este atributo registra o resultado de uma inspeção de qualidade realizada em mercadorias produzidas ou recebidas. O resultado determina se elas podem seguir para a próxima etapa ou se precisam de retrabalho, devolução ou descarte. Este atributo é essencial para o Dashboard e o KPI de índices de rejeição no controle de qualidade. Analisar a frequência e os motivos das reprovações ajuda a identificar problemas sistêmicos de qualidade em produtos, fornecedores ou linhas de produção específicas. Por que isso importa Dá suporte direto ao cálculo de KPIs de qualidade e ajuda a identificar as causas da baixa qualidade na cadeia de suprimentos. Onde encontrar Essas informações geralmente ficam armazenadas no módulo Quality Management (QM). Os dados podem vir de tabelas de lotes de inspeção, como QALS, e de códigos de decisão de utilização em QAVE. Exemplos AprovadoReprovadoRetrabalho necessárioAprovado com desvio | |||
| Usuário responsável pela execução ExecutingUser | ID da pessoa que executou a atividade. | ||
| Descrição Este atributo registra o nome ou o ID do usuário SAP responsável por uma atividade, como criar um pedido de compra ou lançar um recebimento de mercadorias. Assim, conecta as etapas do processo às pessoas envolvidas. Analisar os dados por usuário ajuda a entender a distribuição da carga de trabalho, identificar necessidades de treinamento e observar diferenças de performance entre pessoas ou equipes. Também é útil para a análise de conformidade, pois mostra quem executou etapas críticas do processo. Por que isso importa Associa as atividades a usuários específicos, permitindo analisar a carga de trabalho e comparar a performance, além de investigar ações fora de conformidade. Onde encontrar Encontrado nos campos 'Criado por' ou 'Alterado por' de várias tabelas SAP, como ERNAM em EKKO (cabeçalho do pedido de compra), LIKP (cabeçalho da entrega) e VBRK (cabeçalho da fatura). Exemplos CBROWNJSMITHASINGH | |||
| É retrabalho IsRework | Indicador que informa se uma atividade ou sequência de atividades representa retrabalho. | ||
| Descrição Este atributo booleano marca atividades que repetem etapas anteriores do processo, indicando algum tipo de retrabalho ou correção. Por exemplo, se uma 'Inspeção de qualidade' for seguida por uma etapa de 'Ordem de produção criada' e depois por outra 'Inspeção de qualidade', a segunda inspeção pode ser marcada como retrabalho. Identificar retrabalho é essencial para entender as ineficiências do processo e os custos ocultos. Este indicador ajuda a quantificar a frequência e o impacto dos ciclos de retrabalho, dá suporte ao cálculo do KPI de índice de erros no processamento de pedidos e destaca oportunidades de melhoria do processo. Por que isso importa Ajuda a quantificar as ineficiências do processo ao identificar e contar explicitamente as atividades que fazem parte de um ciclo de retrabalho. Onde encontrar Em geral, isso é calculado na ferramenta de Process Mining, que identifica sequências repetidas de atividades no mesmo caso. Exemplos truefalse | |||
| Entrega atrasada IsLateDelivery | Indicador booleano que informa se a entrega do fornecedor ocorreu depois da data solicitada. | ||
| Descrição Este indicador calculado informa de forma simples se uma entrega ocorreu no prazo. Ele é derivado da comparação entre a data e hora da atividade 'Recebimento de mercadorias do pedido de compra lançado' e o atributo 'Data de entrega solicitada'. Este atributo simplifica a criação de Dashboards e KPIs relacionados à performance dos fornecedores. Ele permite filtrar e agregar dados rapidamente para calcular o índice de entregas no prazo e identificar quais fornecedores, materiais ou regiões apresentam mais atrasos. Por que isso importa Simplifica a análise da performance dos fornecedores ao indicar claramente se cada entrega ocorreu no prazo, informação essencial para o KPI de entregas no prazo. Onde encontrar Este é um campo calculado. A lógica é: IF ('Recebimento de mercadorias do pedido de compra lançado'.EventTime > PurchaseOrder.RequestedDeliveryDate) THEN True ELSE False. Exemplos truefalse | |||
| Hora de término EndTime | Data e hora que indicam quando uma atividade foi concluída, usadas para calcular o tempo de processamento. | ||
| Descrição A hora de término marca a conclusão de uma atividade específica. Enquanto a hora de início (EventTime) indica quando a atividade começa, a hora de término permite saber quanto tempo ela levou, especialmente quando não é instantânea. Na análise, ter os horários de início e término permite medir com precisão o tempo de processamento e o tempo de espera. Assim, você consegue diferenciar o tempo dedicado à execução de uma tarefa do tempo aguardando a próxima etapa, o que é essencial para identificar oportunidades de eficiência. Por que isso importa Permite calcular com precisão o tempo de processamento das atividades e diferenciar o trabalho que agrega valor do tempo de espera. Onde encontrar Pode ser derivado de mudanças de status no SAP. Por exemplo, o início pode ser indicado por uma atualização para o status 'Em andamento' e o término por uma atualização para 'Concluído' em tabelas como JEST/JCDS. Em eventos instantâneos, EndTime pode ser igual a StartTime. Exemplos 2023-04-15T11:30:00Z2023-04-18T14:05:00Z2023-04-22T09:00:00Z | |||
| Nome da transportadora CarrierName | Nome da empresa de transporte ou do agente de cargas responsável pela remessa. | ||
| Descrição O nome da transportadora identifica o prestador de serviços logísticos responsável pelo transporte de mercadorias entre locais, por exemplo, de um armazém até um cliente. Este atributo é essencial para o Dashboard de análise do tempo de ciclo de transporte. Ele permite comparar tempos de trânsito, custos e confiabilidade entre transportadoras, contribuindo para um planejamento logístico e uma seleção de transportadoras mais adequados. Por que isso importa Permite analisar a performance por prestador de transporte, algo essencial para otimizar os custos logísticos e os prazos de entrega. Onde encontrar O ID da transportadora (agente de cargas) é armazenado em documentos de remessa, como na tabela VTTK (cabeçalho da remessa). O nome é obtido em tabelas de dados mestres, como LFA1. Exemplos DHLFedExMaersk Logistics | |||
| Número do pedido de compra PurchaseOrderNumber | Identificador exclusivo do documento de pedido de compra (PO). | ||
| Descrição O número do pedido de compra é o número oficial do documento usado para solicitar materiais a um fornecedor. Ele é um identificador importante na etapa de compras da cadeia de suprimentos. Este atributo permite analisar o processo de compras em detalhes. Ele é usado no Dashboard de tempo de ciclo de ponta a ponta de compras e no cálculo do KPI de índice de entregas no prazo dos fornecedores, conectando as atividades de requisição, pedido, recebimento e pagamento. Por que isso importa Funciona como um identificador importante para aprofundar a análise do subprocesso de compras e conectar eventos relacionados. Onde encontrar Encontrado na tabela de cabeçalho de pedidos de compra EKKO e na tabela de itens EKPO. O campo se chama EBELN. Exemplos 450007819245000781934500078194 | |||
| Número do pedido de venda SalesOrderNumber | Identificador exclusivo do documento de pedido de venda (SO). | ||
| Descrição O número do pedido de venda é o número oficial do documento que confirma uma venda a um cliente. Ele é um identificador importante na etapa de pedido ao recebimento da cadeia de suprimentos. Este atributo é essencial para acompanhar o atendimento de um pedido específico. Ele ajuda a conectar a solicitação inicial do cliente às atividades subsequentes, como entrega e faturamento, e dá suporte à análise do tempo de atravessamento do atendimento de pedidos. Por que isso importa Funciona como um identificador importante do subprocesso de atendimento de pedidos, conectando a demanda do cliente à logística e à liquidação financeira. Onde encontrar Encontrado na tabela de cabeçalho de pedidos de venda VBAK e na tabela de itens VBAP. O campo se chama VBELN. Exemplos 100023451000234610002347 | |||
| Quantidade do pedido OrderQuantity | Quantidade de material no item do pedido. | ||
| Descrição Este atributo informa o número de unidades de um material solicitado em um item de pedido de venda ou de compra. Ele indica o volume de cada transação. Analisar os dados por quantidade ajuda a priorizar pedidos de grande volume, que podem ter maior impacto nos negócios. Também é possível usar esse atributo para normalizar outras métricas, como calcular o custo por unidade, ou entender como o tamanho do pedido afeta o tempo de processamento. Por que isso importa Fornece contexto sobre o volume das transações, permitindo analisar o impacto e segmentar os casos por tamanho. Onde encontrar Encontrado em tabelas de itens, como MENGE em EKPO (pedido de compra) ou KWMENG em VBAP (pedido de venda). Exemplos 100500025 | |||
Atividades da gestão da cadeia de suprimentos
| Atividade | Descrição | ||
|---|---|---|---|
| Comprovante de entrega confirmado | Representa a confirmação formal do cliente ou da transportadora de que as mercadorias foram recebidas conforme especificado. Em geral, isso é registrado pela atualização da entrega de saída com as informações do POD. | ||
| Por que isso importa Esta atividade marca o fim definitivo do processo de atendimento do pedido. Ela é essencial para faturar corretamente, resolver disputas e medir a etapa final do ciclo de entrega. Onde encontrar Este é um evento explícito. A data do comprovante de entrega é registrada na tabela de cabeçalho da entrega (LIKP, campo PODAT) ou em tabelas relacionadas ao POD (VLPOD). Coleta Use a data do comprovante de entrega (LIKP-PODAT) do documento de entrega. Tipo de evento explicit | |||
| Entrada de mercadorias do pedido de compra registrada | Representa o recebimento físico de matérias-primas ou produtos de um fornecedor, referente a um pedido de compra. O evento é registrado quando os produtos chegam ao armazém ou à fábrica. | ||
| Por que isso importa Esta atividade conclui a etapa de entrega do fornecedor no ciclo de compras. Ela é essencial para calcular as taxas de entrega dos fornecedores no prazo e entender a performance da logística de entrada. Onde encontrar Este evento é registrado explicitamente por meio do lançamento de um documento de material. A data e hora do evento ficam no cabeçalho do documento de material (MKPF, campo BUDAT). O vínculo com o pedido de compra fica na tabela de itens (MSEG). Coleta Use a data de lançamento (MKPF-BUDAT) do documento de material associado ao pedido de compra. Tipo de evento explicit | |||
| Pedido de compra emitido | Marca a criação e a emissão formal de um pedido de compra para um fornecedor externo, solicitando os materiais necessários. Esta atividade transforma uma requisição de compra em um compromisso legal com o fornecedor. | ||
| Por que isso importa Como marco importante, esta atividade é essencial para medir os prazos de entrega dos fornecedores e a duração dos ciclos de compras. Ela também serve de referência para avaliar a performance de entrega dos fornecedores no prazo. Onde encontrar Este evento é registrado explicitamente quando o pedido de compra é criado. A data de criação fica armazenada no cabeçalho do pedido de compra (EKKO, campo AEDAT). Coleta Use a data de criação do documento (EKKO-AEDAT) do pedido de compra. Tipo de evento explicit | |||
| Pedido de venda criado | Esta atividade registra a criação de um novo pedido de venda, que formaliza a solicitação de produtos feita por um cliente. O evento é registrado quando um usuário salva um novo documento de pedido de venda no sistema. | ||
| Por que isso importa Este é o principal ponto de partida do processo do pedido ao recebimento do pagamento. Analisar o tempo entre este evento e os seguintes revela o tempo total de atravessamento do pedido e ajuda a identificar atrasos no processamento inicial. Onde encontrar Este evento é registrado explicitamente. Ele pode ser encontrado nos documentos de alteração das tabelas de pedidos de venda (CDHDR/CDPOS) ou identificado pela data e hora de criação no cabeçalho do pedido de venda (VBAK, campo ERDAT). Coleta Use a data de criação (VBAK-ERDAT) e o horário (VBAK-ERZET) do documento do pedido de venda. Tipo de evento explicit | |||
| Produtos fabricados | Esta atividade representa a confirmação de que a fabricação dos produtos foi concluída. Em geral, ela é registrada como uma entrada de mercadorias da ordem de produção, que transfere o produto acabado para o estoque. | ||
| Por que isso importa Esta atividade marca o fim do ciclo de produção. O tempo entre a criação da ordem de produção e este evento corresponde ao tempo de atravessamento da fabricação, uma métrica importante para avaliar a eficiência da produção. Onde encontrar Este evento pode ser registrado explicitamente por meio do lançamento de um documento de material (entrada de mercadorias da ordem de produção) ou inferido a partir da confirmação final da ordem de produção (tabela AFRU) ou de uma alteração de status para 'Entregue'. Coleta Infira o evento pela data de lançamento do documento de material da entrada final de mercadorias da ordem de produção ou por uma alteração de status. Tipo de evento inferred | |||
| Saída de mercadorias lançada | Esta atividade representa a saída legal e física das mercadorias do armazém. Ela reduz o estoque e lança o custo das mercadorias vendidas, registrando oficialmente o envio do pedido. | ||
| Por que isso importa Este é um marco crítico que indica o início do período de transporte. É o momento definitivo em que as mercadorias deixam a posse da empresa para serem entregues. Onde encontrar Este é um evento explícito que cria um documento de material. A data e hora são registradas no cabeçalho do documento de material (MKPF, campo BUDAT) e atualizam o status de movimentação de mercadorias no documento de entrega (LIKP, campo WBSTK). Coleta Use a data de lançamento (MKPF-BUDAT) do documento de material da saída de mercadorias associado à entrega de saída. Tipo de evento explicit | |||
| Disponibilidade de estoque verificada | Representa a verificação, feita pelo sistema ou manualmente, para determinar se os produtos solicitados estão em estoque e podem atender ao pedido de venda. Muitas vezes, essa etapa é automatizada durante a criação do pedido, mas pode não ser registrada como um evento separado. | ||
| Por que isso importa Entender o tempo entre a criação do pedido e essa verificação, além do resultado, ajuda a analisar como os níveis de estoque afetam os prazos de atendimento. Atrasos nessa etapa costumam levar a atividades de compras ou produção. Onde encontrar Em geral, este evento não é registrado explicitamente. Ele pode ser inferido pela criação da primeira linha de programação confirmada no item do pedido de venda (tabela VBEP) ou por alterações de status no item do pedido. Coleta Infira o evento a partir da atualização do status de confirmação na linha de programação do pedido de venda (tabela VBEP). Tipo de evento inferred | |||
| Entrega de saída criada | Indica a criação de um documento de entrega, que autoriza a separação e o envio dos produtos ao cliente. Esta atividade marca a transição da gestão do pedido para a execução logística. | ||
| Por que isso importa Esta é uma etapa essencial para iniciar o atendimento físico do pedido. Atrasos entre a criação do pedido e a criação da entrega podem indicar problemas de planejamento ou disponibilidade. Onde encontrar Este evento é registrado explicitamente. A data de criação fica armazenada no cabeçalho da entrega (LIKP, campo ERDAT). Coleta Use a data de criação (LIKP-ERDAT) e o horário (LIKP-ERZET) no cabeçalho do documento de entrega. Tipo de evento explicit | |||
| Fatura do cliente criada | Esta atividade marca a criação do documento de faturamento para o cliente, com base nas mercadorias ou nos serviços entregues. Ela inicia a etapa final de liquidação financeira do processo. | ||
| Por que isso importa Esta atividade é importante para analisar o tempo do ciclo de faturamento. Atrasos entre a confirmação da entrega e o faturamento podem afetar negativamente o fluxo de caixa. Onde encontrar Este é um evento explícito. A data e hora de criação são registradas na tabela de cabeçalho do documento de faturamento (VBRK, campo ERDAT). Coleta Use a data de criação (VBRK-ERDAT) do cabeçalho do documento de faturamento. Tipo de evento explicit | |||
| Inspeção de qualidade realizada | Representa a conclusão de uma inspeção de qualidade dos produtos fabricados. O resultado, aprovado ou reprovado, é registrado em uma decisão de utilização. | ||
| Por que isso importa Esta atividade é essencial para monitorar a qualidade dos produtos e identificar problemas de produção. Taxas altas de reprovação ou inspeções demoradas podem se tornar gargalos importantes. Onde encontrar Este evento é registrado explicitamente quando uma decisão de utilização é tomada para um lote de inspeção de qualidade. A data da decisão fica na tabela QALS (campo PASTRTERM) ou na tabela QAVE. Coleta Use a data e hora em que a decisão de utilização é registrada para o lote de inspeção (tabelas QALS/QAVE). Tipo de evento explicit | |||
| Mercadorias descarregadas no destino | Esta atividade indica o descarregamento físico das mercadorias no local do cliente. Esse evento pode não ser registrado explicitamente no SAP e muitas vezes precisa ser inferido a partir dos dados da transportadora ou de eventos posteriores. | ||
| Por que isso importa Este evento marca o fim do trecho de transporte da jornada. O tempo entre a saída de mercadorias e esse momento corresponde ao tempo de transporte, um dado importante para otimizar a logística. Onde encontrar Esse evento raramente é registrado explicitamente no ERP principal. Ele pode ser inferido a partir de mensagens EDI da transportadora, de dados do módulo Transportation Management (TM) ou da data e hora do comprovante de entrega, se disponível. Coleta Infira a partir das atualizações de status da transportadora (por exemplo, EDI 214) ou use a data e hora do comprovante de entrega como uma estimativa próxima. Tipo de evento inferred | |||
| Ordem de produção criada | Indica que uma ordem de produção foi criada para fabricar os produtos acabados necessários ao pedido de venda. Este é o início formal do processo de fabricação interna. | ||
| Por que isso importa A criação de uma ordem de produção marca o início do tempo de atravessamento da fabricação. Analisar esse intervalo ajuda a identificar atrasos entre o sinal de demanda e o início da produção. Onde encontrar Este evento é registrado explicitamente. A data de criação fica armazenada no cabeçalho da ordem de produção (AUFK, campo ERDAT). Coleta Use a data de criação (AUFK-ERDAT) no cabeçalho da ordem. Tipo de evento explicit | |||
| Remessa criada | Representa a criação de um documento de remessa, que agrupa uma ou mais entregas para o planejamento do transporte. Esse documento contém informações sobre a transportadora, a rota e o modal de transporte. | ||
| Por que isso importa Esta atividade marca o início do planejamento formal do transporte. Analisar o tempo entre a saída de mercadorias e a conclusão da remessa ajuda a avaliar a eficiência do processo de transporte. Onde encontrar Este é um evento explícito registrado na tabela de cabeçalho da remessa (VTTK, campo ERDAT). Ele faz parte do módulo LE-TRA, que pode não ser usado por todas as organizações. Coleta Use a data de criação (VTTK-ERDAT) do cabeçalho do documento de remessa. Tipo de evento explicit | |||
| Requisição de compra criada | Esta atividade representa a criação de uma solicitação interna para comprar os produtos ou as matérias-primas necessários. Ela costuma ser iniciada quando o estoque é insuficiente para atender a um pedido de venda ou fica abaixo do ponto de reposição. | ||
| Por que isso importa Esta é a primeira etapa do ciclo de compras. Acompanhar sua criação ajuda a identificar atrasos no início das compras e a analisar o processo de aquisição de ponta a ponta. Onde encontrar Este evento é registrado explicitamente. A data de criação fica armazenada no cabeçalho da requisição de compra (EBAN, campo BADAT). Coleta Use a data de criação (EBAN-BADAT) do documento da requisição de compra. Tipo de evento explicit | |||
| Separação concluída | Esta atividade marca a conclusão da separação física dos produtos no armazém para a entrega de saída. Em muitos sistemas, ela é confirmada quando o status de separação do documento de entrega é atualizado. | ||
| Por que isso importa Uma separação eficiente é essencial para a produtividade do armazém. Acompanhar esta atividade ajuda a identificar gargalos nas operações do armazém e medir a performance da separação. Onde encontrar Isso geralmente não corresponde a um único evento específico, mas pode ser inferido pelas mudanças de status. O registro é feito quando o status de separação na tabela de itens da entrega (LIPS, campo KOSTA) passa para 'C' (processado completamente). Coleta Infira a partir dos documentos de alteração quando o status de separação (LIPS-KOSTA) for atualizado para indicar que a separação foi concluída. Tipo de evento inferred | |||
Guias de extração
Etapas
- Pré-requisitos: Verifique se você tem um usuário com autorizações suficientes para acessar as visualizações Core Data Services (CDS) necessárias do SAP S/4HANA. Em geral, a equipe de segurança do SAP precisa atribuir uma função específica. Você também precisará de um cliente SQL, como DBeaver ou SAP HANA Studio, que consiga se conectar ao banco de dados SAP HANA.
- Estabeleça a conexão com o banco de dados: Configure o cliente SQL para se conectar ao banco de dados SAP S/4HANA. Você precisará do host do servidor, da porta (por exemplo, 3xx15, em que xx é o número da instância), de um nome de usuário do banco de dados e de uma senha.
- Prepare a consulta SQL: Copie a consulta SQL completa fornecida na seção de consulta deste documento e cole-a no editor do cliente SQL. Ela foi criada para extrair todas as atividades especificadas de vários módulos de logística e vendas.
- Defina os parâmetros de extração: Antes de executar a consulta, localize as condições de exemplo nas cláusulas
WHEREde cada subconsulta. Substitua'YourCompanyCode'pelo código real da empresa que você está analisando e ajuste os valores de data, como'YYYY-MM-DD', para definir o período de extração desejado. - Execute a consulta: Execute o script SQL completo. O tempo de execução varia conforme o período selecionado e o volume de dados do sistema. Para reduzir a carga no sistema, é recomendável executar a consulta fora dos horários de pico.
- Revise os resultados iniciais: Quando a consulta terminar, confira rapidamente os resultados no cliente SQL. Verifique se o número de linhas parece razoável, se colunas como LogisticsOrder, ActivityName e EventTime estão preenchidas e se aparecem diferentes nomes de atividade.
- Exporte os dados para CSV: Exporte todo o conjunto de resultados do cliente SQL para um arquivo CSV. Escolha a codificação UTF-8 para evitar problemas com caracteres especiais.
- Prepare os dados para carregamento: Verifique se os cabeçalhos das colunas no arquivo CSV correspondem exatamente aos nomes de atributos exigidos para a ingestão, como
LogisticsOrder,ActivityNameeEventTime. Se você usar a consulta SQL fornecida, não será necessário transformar os dados.
Configuração
- Pré-requisitos: É necessário ter acesso ao banco de dados SAP HANA subjacente. O usuário do banco de dados precisa ter privilégios
SELECTem todas as visualizações CDS mencionadas na consulta, incluindo, entre outras, I_SalesOrderItem, I_PurchaseOrderItem, I_OutboundDeliveryItem, I_MaterialDocumentItem, I_ProductionOrder, I_QualityInspection, I_Shipment e I_BillingDocumentItem. - Filtro por período: A consulta fornecida inclui um campo de exemplo para filtrar por período, geralmente com base em uma data de criação (
CreationDateouDocumentDate). Para a análise inicial, recomendamos um período de 3 a 6 meses. Assim, você obtém um conjunto de dados representativo sem sobrecarregar o sistema. - Filtros de negócio essenciais: É fundamental filtrar os dados por unidades organizacionais específicas para garantir que sejam relevantes. A consulta já inclui um campo de exemplo para
CompanyCode. Conforme o escopo da análise, você também pode adicionar filtros paraSalesOrganization,DistributionChannelouPlant. - Considerações de performance: Esta consulta complexa combina várias visualizações CDS de grande porte e pode consumir muitos recursos do sistema. Programe as extrações fora do horário comercial. Para conjuntos de dados muito grandes, considere executar a consulta em lotes menores e sequenciais, um por mês.
a Consulta de exemplo sql
WITH SalesOrderLink AS (
SELECT DISTINCT
sd.SalesDocument AS SalesOrder,
pr.PurchaseRequisition AS PurchaseRequisition,
po.PurchaseOrder AS PurchaseOrder,
od.DeliveryDocument AS OutboundDelivery,
bd.BillingDocument AS BillingDocument
FROM I_SalesDocItemProcessFlow AS pf
LEFT JOIN I_SalesDocumentItem AS sd ON pf.PrecedingDocument = sd.SalesDocument AND pf.PrecedingDocumentItem = sd.SalesDocumentItem
LEFT JOIN I_PurchaseRequisitionItem AS pr ON pf.SubsequentDocument = pr.PurchaseRequisition AND pf.SubsequentDocumentItem = pr.PurchaseRequisitionItem
LEFT JOIN I_PurchaseOrderItem AS po ON pf.SubsequentDocument = po.PurchaseOrder AND pf.SubsequentDocumentItem = po.PurchaseOrderItem
LEFT JOIN I_OutboundDeliveryItem AS od ON pf.SubsequentDocument = od.DeliveryDocument AND pf.SubsequentDocumentItem = od.DeliveryDocumentItem
LEFT JOIN I_BillingDocumentItem AS bd ON pf.SubsequentDocument = bd.BillingDocument AND pf.SubsequentDocumentItem = bd.BillingDocumentItem
WHERE sd.SalesDocument IS NOT NULL
)
SELECT
so.SalesOrder AS "LogisticsOrder",
'Sales Order Created' AS "ActivityName",
so.CreationDate || ' ' || so.CreationTime AS "EventTime",
so.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
soi.Material AS "MaterialNumber",
soi.Plant AS "Plant",
soi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_SalesOrder AS so
JOIN I_SalesOrderItem AS soi ON so.SalesOrder = soi.SalesOrder
LEFT JOIN I_Customer AS cust ON so.SoldToParty = cust.Customer
WHERE so.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
so.SalesOrder AS "LogisticsOrder",
'Inventory Availability Checked' AS "ActivityName",
so.CreationDate || ' ' || so.CreationTime AS "EventTime",
so.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
soi.Material AS "MaterialNumber",
soi.Plant AS "Plant",
soi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_SalesOrder AS so
JOIN I_SalesOrderItem AS soi ON so.SalesOrder = soi.SalesOrder
LEFT JOIN I_Customer AS cust ON so.SoldToParty = cust.Customer
WHERE so.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Purchase Requisition Created' AS "ActivityName",
pr.CreationDate || ' ' || '00:00:00' AS "EventTime",
pr.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
pri.Material AS "MaterialNumber",
pri.Plant AS "Plant",
pri.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_PurchaseRequisition AS pr
JOIN I_PurchaseRequisitionItem AS pri ON pr.PurchaseRequisition = pri.PurchaseRequisition
JOIN SalesOrderLink sl ON pr.PurchaseRequisition = sl.PurchaseRequisition
WHERE pr.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND pr.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Purchase Order Issued' AS "ActivityName",
po.PurchaseOrderDate || ' ' || '00:00:00' AS "EventTime",
po.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
sup.SupplierName AS "SupplierName",
poi.Material AS "MaterialNumber",
poi.Plant AS "Plant",
poi.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_PurchaseOrder AS po
JOIN I_PurchaseOrderItem AS poi ON po.PurchaseOrder = poi.PurchaseOrder
LEFT JOIN I_Supplier AS sup ON po.Supplier = sup.Supplier
JOIN SalesOrderLink sl ON po.PurchaseOrder = sl.PurchaseOrder
WHERE po.PurchaseOrderDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND po.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Goods Receipt For PO Posted' AS "ActivityName",
md.DocumentDate || ' ' || md.CreationTime AS "EventTime",
md.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
sup.SupplierName AS "SupplierName",
mdi.Material AS "MaterialNumber",
mdi.Plant AS "Plant",
poi.DeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_MaterialDocumentHeader AS md
JOIN I_MaterialDocumentItem AS mdi ON md.MaterialDocument = mdi.MaterialDocument AND md.MaterialDocumentYear = mdi.MaterialDocumentYear
JOIN I_PurchaseOrderItem AS poi ON mdi.PurchaseOrder = poi.PurchaseOrder AND mdi.PurchaseOrderItem = poi.PurchaseOrderItem
LEFT JOIN I_Supplier AS sup ON poi.Supplier = sup.Supplier
JOIN SalesOrderLink sl ON poi.PurchaseOrder = sl.PurchaseOrder
WHERE md.DocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND mdi.GoodsMovementType = '101' AND mdi.CompanyCode = 'YourCompanyCode'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Production Order Created' AS "ActivityName",
po.CreationDate || ' ' || po.CreationTime AS "EventTime",
po.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
po.Material AS "MaterialNumber",
po.ProductionPlant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_ProductionOrder AS po
JOIN SalesOrderLink sl ON po.SalesOrder = sl.SalesOrder
WHERE po.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Goods Produced' AS "ActivityName",
md.DocumentDate || ' ' || md.CreationTime AS "EventTime",
md.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
mdi.Material AS "MaterialNumber",
mdi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_MaterialDocumentHeader AS md
JOIN I_MaterialDocumentItem AS mdi ON md.MaterialDocument = mdi.MaterialDocument AND md.MaterialDocumentYear = mdi.MaterialDocumentYear
JOIN I_ProductionOrder AS po ON mdi.ManufacturingOrder = po.ManufacturingOrder
JOIN SalesOrderLink sl ON po.SalesOrder = sl.SalesOrder
WHERE md.DocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND mdi.GoodsMovementType = '101'
UNION ALL
SELECT
qi.SalesOrder AS "LogisticsOrder",
'Quality Inspection Performed' AS "ActivityName",
qi.InspLotUsageDecisionDate || ' ' || qi.InspLotUsageDecisionTime AS "EventTime",
qi.InspLotUsageDecisionMadeByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
qi.Material AS "MaterialNumber",
qi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
qi.InspLotUsageDecisionCode AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_QualityInspection AS qi
WHERE qi.InspLotUsageDecisionDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND qi.SalesOrder IS NOT NULL
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Outbound Delivery Created' AS "ActivityName",
od.CreationDate || ' ' || od.CreationTime AS "EventTime",
od.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Picking Completed' AS "ActivityName",
od.PickingDate || ' ' || od.PickingTime AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.PickingDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallPickingStatus = 'C'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Goods Issue Posted' AS "ActivityName",
od.ActualGoodsMovementDate || ' ' || od.ActualGoodsMovementTime AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.ActualGoodsMovementDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallGoodsMovementStatus = 'C'
UNION ALL
SELECT
sl.SalesOrder AS "LogisticsOrder",
'Shipment Created' AS "ActivityName",
sh.CreationDate || ' ' || sh.CreationTime AS "EventTime",
sh.CreatedByUser AS "ExecutingUser",
NULL AS "CustomerName",
NULL AS "SupplierName",
NULL AS "MaterialNumber",
sh.ShippingPoint AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_Shipment AS sh
JOIN I_ShipmentDelivery AS sd ON sh.Shipment = sd.Shipment
JOIN SalesOrderLink sl ON sd.Delivery = sl.OutboundDelivery
WHERE sh.CreationDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
UNION ALL
SELECT
odi.SalesOrder AS "LogisticsOrder",
'Proof Of Delivery Confirmed' AS "ActivityName",
od.PODActualDate || ' ' || '00:00:00' AS "EventTime",
od.LastChangedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
odi.Material AS "MaterialNumber",
odi.Plant AS "Plant",
odi.RequestedDeliveryDate AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_OutboundDelivery AS od
JOIN I_OutboundDeliveryItem AS odi ON od.OutboundDelivery = odi.OutboundDelivery
LEFT JOIN I_Customer AS cust ON od.SoldToParty = cust.Customer
WHERE od.PODActualDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND od.OverallPODStatus = 'C'
UNION ALL
SELECT
bdi.SalesDocument AS "LogisticsOrder",
'Customer Invoice Created' AS "ActivityName",
bd.BillingDocumentDate || ' ' || bd.CreationTime AS "EventTime",
bd.CreatedByUser AS "ExecutingUser",
cust.CustomerName AS "CustomerName",
NULL AS "SupplierName",
bdi.Material AS "MaterialNumber",
bdi.Plant AS "Plant",
NULL AS "RequestedDeliveryDate",
NULL AS "QualityInspectionResult",
'SAP S/4HANA' AS "SourceSystem",
CURRENT_UTCTIMESTAMP AS "LastDataUpdate"
FROM I_BillingDocument AS bd
JOIN I_BillingDocumentItem AS bdi ON bd.BillingDocument = bdi.BillingDocument
LEFT JOIN I_Customer AS cust ON bd.SoldToParty = cust.Customer
WHERE bd.BillingDocumentDate BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' AND bd.CompanyCode = 'YourCompanyCode' AND bdi.SalesDocument IS NOT NULL; Etapas
- Confirme se há acesso direto de leitura ao esquema SAP HANA que contém os dados relevantes de logística, vendas, compras, estoque, produção, qualidade, entrega, remessa, comprovante de entrega e faturamento. Solicite o nome do esquema, os dados de conexão e as autorizações à equipe SAP Basis ou à equipe da plataforma de dados. Não grave dados no sistema de origem.
- Confirme o modelo de dados exato do S/4HANA no sistema de destino. EKKO e EKPO são usados para pedidos de compra; LIKP e LIPS, para entregas de saída. Configure também os objetos necessários para pedidos de venda, requisições de compra, documentos de material, ordens de produção, resultados de inspeção de qualidade, remessas, comprovantes de entrega e faturamento. Substitua cada campo de exemplo entre colchetes na consulta por objetos confirmados no dicionário de dados do sistema.
- Defina a regra de correlação de LogisticsOrder. A opção preferencial é uma relação confirmada no fluxo de documentos, do pedido de venda às entregas subsequentes, aos documentos de material, produção ou compras e aos documentos de faturamento. Se não houver uma relação direta, configure uma tabela de correlação documentada ou um mapeamento específico do negócio. Não correlacione casos usando apenas o número do material ou a data.
- Defina o período de extração usando [Start date parameter] e [End date parameter]. Aplique o período de forma consistente aos horários dos eventos, mantendo os documentos criados antes do período quando forem necessários para explicar eventos ocorridos dentro dele.
- Configure o código da empresa, a organização de vendas, a unidade, a organização de compras, o tipo de documento e os demais filtros de negócio na seção indicada. Só use filtros depois de confirmar os valores no sistema de destino.
- Substitua as referências de tabelas e colunas entre colchetes em cada ramo de atividade por nomes confirmados. Todos os ramos devem retornar as mesmas colunas e tipos de dados compatíveis. A consulta cria explicitamente uma linha para cada uma das 15 atividades necessárias, pois o ProcessMind não infere eventos ausentes.
- Execute a consulta no SAP HANA Database Explorer, no SQL Console do SAP HANA cockpit ou no cliente SQL aprovado. Teste cada ramo de atividade separadamente antes de executar a consulta completa com UNION ALL. Revise os planos de execução e limite o teste inicial a um período curto.
- Valide as relações entre documentos, os horários, os identificadores de usuário, os dados de fornecedores e clientes, os valores de materiais e unidades e os resultados de qualidade. Investigue linhas duplicadas causadas por junções no nível do item e aplique a regra definida para o nível do evento, como um evento por documento ou por item do documento.
- Exporte os resultados como CSV em UTF-8 ou em outro formato tabular compatível com o ProcessMind. Mantenha exatamente os nomes das colunas de saída: LogisticsOrder, ActivityName, EventTime, SourceSystem, LastDataUpdate, ExecutingUser, SupplierName, CustomerName, MaterialNumber, Plant, RequestedDeliveryDate e QualityInspectionResult. Verifique se EventTime está no formato de data e hora e se LastDataUpdate é preenchido de forma consistente.
- Carregue o arquivo no ProcessMind e mapeie LogisticsOrder como identificador do caso, ActivityName como atividade e EventTime como data e hora do evento. Confirme que os 15 rótulos de atividade são tratados como eventos explícitos e programe uma atualização controlada depois de validar o comportamento da extração incremental.
Configuração
- Período: Comece com 3 a 6 meses de dados. Use um período menor nos testes iniciais e amplie-o somente depois de validar a performance e as relações entre documentos.
- Esquema de origem: Defina [SAP HANA schema name] como o esquema que contém as tabelas ou visualizações confirmadas do S/4HANA. Não presuma que uma tabela clássica de ERP esteja disponível com o mesmo nome em todas as implantações do S/4HANA.
- Escopo dos documentos: Configure [Company Code filter], [Sales Organization filter], [Plant filter], [Purchasing Organization filter] e [Document Type filter] de acordo com o escopo do processo.
- Correlação: Configure [Your document flow or correlation object] para atribuir cada evento a uma LogisticsOrder. Se a correlação estiver ausente ou for ambígua, sinalize o problema em vez de atribuir um valor sem informar.
- Nível do evento: Escolha entre um evento por documento, por item do documento ou por mudança de status relevante para o negócio. Aplique a mesma regra em todos os ramos e remova apenas linhas duplicadas por motivos técnicos.
- Prioridade dos horários: Use o horário confirmado de lançamento, criação, confirmação, mudança de status, inspeção, entrega, descarregamento, comprovante de entrega ou faturamento para cada atividade. Não substitua o horário do evento de negócio pelo horário da extração.
- Rótulo da origem: Defina [Source system label] com um valor estável, como o identificador aprovado do sistema SAP S/4HANA.
- Horário da atualização: Defina [Last data update expression] com o horário de extração ou de atualização da origem aprovado.
- Performance: Aplique primeiro os filtros de período e de unidades organizacionais, selecione apenas as colunas necessárias, evite junções irrestritas no nível do item, confira o plano de execução e considere uma visualização de extração persistente ou uma tabela de preparação para cargas recorrentes.
- Autorizações: O acesso necessário inclui autorização de leitura aos objetos relevantes do esquema SAP HANA e permissão para executar SQL. A validação de negócio exige acesso aos dados aplicáveis de vendas, compras, estoque, produção, qualidade, execução logística, transporte e faturamento.
- Escopo funcional: Confirme se o sistema implantado inclui os processos de negócio representados pelas atividades solicitadas. Os dados de remessa, descarregamento, comprovante de entrega, qualidade, produção e faturamento podem estar em aplicativos ou extensões separados.
- Segurança: Siga as regras da organização para dados de clientes, fornecedores, materiais, informações financeiras e usuários. Mascare ou restrinja campos confidenciais quando necessário.
a Consulta de exemplo sql
WITH
parameters AS (
SELECT
CAST('[Start date parameter]' AS TIMESTAMP) AS start_ts,
CAST('[End date parameter]' AS TIMESTAMP) AS end_ts,
CAST('[Last data update expression]' AS TIMESTAMP) AS last_data_update,
CAST('[Source system label]' AS NVARCHAR(100)) AS source_system,
CAST('[Company Code filter]' AS NVARCHAR(20)) AS company_code_filter,
CAST('[Sales Organization filter]' AS NVARCHAR(20)) AS sales_org_filter,
CAST('[Plant filter]' AS NVARCHAR(20)) AS plant_filter,
CAST('[Purchasing Organization filter]' AS NVARCHAR(20)) AS purchasing_org_filter,
CAST('[Document Type filter]' AS NVARCHAR(20)) AS document_type_filter
FROM DUMMY
),
base_events AS (
SELECT
CAST('[Sales order correlation column]' AS NVARCHAR(100)) AS LogisticsOrder,
CAST('Sales Order Created' AS NVARCHAR(100)) AS ActivityName,
CAST('[Sales order creation timestamp]' AS TIMESTAMP) AS EventTime,
CAST('[Executing user column]' AS NVARCHAR(100)) AS ExecutingUser,
CAST('[Supplier name column]' AS NVARCHAR(255)) AS SupplierName,
CAST('[Customer name column]' AS NVARCHAR(255)) AS CustomerName,
CAST('[Material number column]' AS NVARCHAR(100)) AS MaterialNumber,
CAST('[Plant column]' AS NVARCHAR(100)) AS Plant,
CAST('[Requested delivery date column]' AS DATE) AS RequestedDeliveryDate,
CAST('[Quality inspection result column]' AS NVARCHAR(100)) AS QualityInspectionResult
FROM [Your sales order source object]
CROSS JOIN parameters p
WHERE CAST('[Sales order creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Sales order creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Sales order company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Sales order sales organization column]' AS NVARCHAR(20)) = p.sales_org_filter
AND CAST('[Sales order document type column]' AS NVARCHAR(20)) = p.document_type_filter
UNION ALL
SELECT
CAST('[Inventory check correlation column]' AS NVARCHAR(100)),
CAST('Inventory Availability Checked' AS NVARCHAR(100)),
CAST('[Inventory check timestamp]' AS TIMESTAMP),
CAST('[Inventory check user column]' AS NVARCHAR(100)),
CAST('[Inventory supplier name column]' AS NVARCHAR(255)),
CAST('[Inventory customer name column]' AS NVARCHAR(255)),
CAST('[Inventory material number column]' AS NVARCHAR(100)),
CAST('[Inventory plant column]' AS NVARCHAR(100)),
CAST('[Inventory requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your inventory availability source object]
CROSS JOIN parameters p
WHERE CAST('[Inventory check timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Inventory check timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Inventory company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Inventory sales organization column]' AS NVARCHAR(20)) = p.sales_org_filter
UNION ALL
SELECT
CAST('[Purchase requisition correlation column]' AS NVARCHAR(100)),
CAST('Purchase Requisition Created' AS NVARCHAR(100)),
CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP),
CAST('[Purchase requisition user column]' AS NVARCHAR(100)),
CAST('[Purchase requisition supplier name column]' AS NVARCHAR(255)),
CAST('[Purchase requisition customer name column]' AS NVARCHAR(255)),
CAST('[Purchase requisition material number column]' AS NVARCHAR(100)),
CAST('[Purchase requisition plant column]' AS NVARCHAR(100)),
CAST('[Purchase requisition requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your purchase requisition source object]
CROSS JOIN parameters p
WHERE CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Purchase requisition creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Purchase requisition plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Purchase order correlation column]' AS NVARCHAR(100)),
CAST('Purchase Order Issued' AS NVARCHAR(100)),
CAST('[Purchase order issue timestamp]' AS TIMESTAMP),
CAST('[Purchase order user column]' AS NVARCHAR(100)),
CAST('[Purchase order supplier name column]' AS NVARCHAR(255)),
CAST('[Purchase order customer name column]' AS NVARCHAR(255)),
CAST('[Purchase order material number column]' AS NVARCHAR(100)),
CAST('[Purchase order plant column]' AS NVARCHAR(100)),
CAST('[Purchase order requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM EKKO po_header
INNER JOIN EKPO po_item
ON po_header.[Purchase order number column] = po_item.[Purchase order number column]
CROSS JOIN parameters p
WHERE CAST('[Purchase order issue timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Purchase order issue timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Purchase order company code column]' AS NVARCHAR(20)) = p.company_code_filter
AND CAST('[Purchase order purchasing organization column]' AS NVARCHAR(20)) = p.purchasing_org_filter
AND CAST('[Purchase order document type column]' AS NVARCHAR(20)) = p.document_type_filter
UNION ALL
SELECT
CAST('[Goods receipt correlation column]' AS NVARCHAR(100)),
CAST('Goods Receipt For PO Posted' AS NVARCHAR(100)),
CAST('[Goods receipt posting timestamp]' AS TIMESTAMP),
CAST('[Goods receipt user column]' AS NVARCHAR(100)),
CAST('[Goods receipt supplier name column]' AS NVARCHAR(255)),
CAST('[Goods receipt customer name column]' AS NVARCHAR(255)),
CAST('[Goods receipt material number column]' AS NVARCHAR(100)),
CAST('[Goods receipt plant column]' AS NVARCHAR(100)),
CAST('[Goods receipt requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your material document header source object] material_header
INNER JOIN [Your material document item source object] material_item
ON material_header.[Material document number column] = material_item.[Material document number column]
AND material_header.[Material document year column] = material_item.[Material document year column]
CROSS JOIN parameters p
WHERE CAST('[Goods receipt posting timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Goods receipt posting timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Goods receipt plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Goods receipt movement type column]' AS NVARCHAR(20)) = '[Goods receipt movement type value]'
UNION ALL
SELECT
CAST('[Production order correlation column]' AS NVARCHAR(100)),
CAST('Production Order Created' AS NVARCHAR(100)),
CAST('[Production order creation timestamp]' AS TIMESTAMP),
CAST('[Production order user column]' AS NVARCHAR(100)),
CAST('[Production order supplier name column]' AS NVARCHAR(255)),
CAST('[Production order customer name column]' AS NVARCHAR(255)),
CAST('[Production order material number column]' AS NVARCHAR(100)),
CAST('[Production order plant column]' AS NVARCHAR(100)),
CAST('[Production order requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your production order source object]
CROSS JOIN parameters p
WHERE CAST('[Production order creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Production order creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Production order plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Production receipt correlation column]' AS NVARCHAR(100)),
CAST('Goods Produced' AS NVARCHAR(100)),
CAST('[Production receipt timestamp]' AS TIMESTAMP),
CAST('[Production receipt user column]' AS NVARCHAR(100)),
CAST('[Production receipt supplier name column]' AS NVARCHAR(255)),
CAST('[Production receipt customer name column]' AS NVARCHAR(255)),
CAST('[Production receipt material number column]' AS NVARCHAR(100)),
CAST('[Production receipt plant column]' AS NVARCHAR(100)),
CAST('[Production receipt requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your production receipt source object]
CROSS JOIN parameters p
WHERE CAST('[Production receipt timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Production receipt timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Production receipt plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Quality inspection correlation column]' AS NVARCHAR(100)),
CAST('Quality Inspection Performed' AS NVARCHAR(100)),
CAST('[Quality inspection completion timestamp]' AS TIMESTAMP),
CAST('[Quality inspection user column]' AS NVARCHAR(100)),
CAST('[Quality supplier name column]' AS NVARCHAR(255)),
CAST('[Quality customer name column]' AS NVARCHAR(255)),
CAST('[Quality material number column]' AS NVARCHAR(100)),
CAST('[Quality plant column]' AS NVARCHAR(100)),
CAST('[Quality requested delivery date column]' AS DATE),
CAST('[Quality inspection result column]' AS NVARCHAR(100))
FROM [Your quality inspection source object]
CROSS JOIN parameters p
WHERE CAST('[Quality inspection completion timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Quality inspection completion timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Quality plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Outbound delivery correlation column]' AS NVARCHAR(100)),
CAST('Outbound Delivery Created' AS NVARCHAR(100)),
CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP),
CAST('[Outbound delivery user column]' AS NVARCHAR(100)),
CAST('[Outbound delivery supplier name column]' AS NVARCHAR(255)),
CAST('[Outbound delivery customer name column]' AS NVARCHAR(255)),
CAST('[Outbound delivery material number column]' AS NVARCHAR(100)),
CAST('[Outbound delivery plant column]' AS NVARCHAR(100)),
CAST('[Outbound delivery requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM LIKP delivery_header
INNER JOIN LIPS delivery_item
ON delivery_header.[Delivery number column] = delivery_item.[Delivery number column]
CROSS JOIN parameters p
WHERE CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Outbound delivery creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Outbound delivery plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Picking correlation column]' AS NVARCHAR(100)),
CAST('Picking Completed' AS NVARCHAR(100)),
CAST('[Picking completion timestamp]' AS TIMESTAMP),
CAST('[Picking user column]' AS NVARCHAR(100)),
CAST('[Picking supplier name column]' AS NVARCHAR(255)),
CAST('[Picking customer name column]' AS NVARCHAR(255)),
CAST('[Picking material number column]' AS NVARCHAR(100)),
CAST('[Picking plant column]' AS NVARCHAR(100)),
CAST('[Picking requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your picking status source object]
CROSS JOIN parameters p
WHERE CAST('[Picking completion timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Picking completion timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Picking plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Picking completion status column]' AS NVARCHAR(50)) = '[Picking completed status value]'
UNION ALL
SELECT
CAST('[Goods issue correlation column]' AS NVARCHAR(100)),
CAST('Goods Issue Posted' AS NVARCHAR(100)),
CAST('[Goods issue posting timestamp]' AS TIMESTAMP),
CAST('[Goods issue user column]' AS NVARCHAR(100)),
CAST('[Goods issue supplier name column]' AS NVARCHAR(255)),
CAST('[Goods issue customer name column]' AS NVARCHAR(255)),
CAST('[Goods issue material number column]' AS NVARCHAR(100)),
CAST('[Goods issue plant column]' AS NVARCHAR(100)),
CAST('[Goods issue requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your goods issue source object]
CROSS JOIN parameters p
WHERE CAST('[Goods issue posting timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Goods issue posting timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Goods issue plant column]' AS NVARCHAR(20)) = p.plant_filter
AND CAST('[Goods issue movement type column]' AS NVARCHAR(20)) = '[Goods issue movement type value]'
UNION ALL
SELECT
CAST('[Shipment correlation column]' AS NVARCHAR(100)),
CAST('Shipment Created' AS NVARCHAR(100)),
CAST('[Shipment creation timestamp]' AS TIMESTAMP),
CAST('[Shipment user column]' AS NVARCHAR(100)),
CAST('[Shipment supplier name column]' AS NVARCHAR(255)),
CAST('[Shipment customer name column]' AS NVARCHAR(255)),
CAST('[Shipment material number column]' AS NVARCHAR(100)),
CAST('[Shipment plant column]' AS NVARCHAR(100)),
CAST('[Shipment requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your shipment source object]
CROSS JOIN parameters p
WHERE CAST('[Shipment creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Shipment creation timestamp]' AS TIMESTAMP) < p.end_ts
AND CAST('[Shipment plant column]' AS NVARCHAR(20)) = p.plant_filter
UNION ALL
SELECT
CAST('[Unloading correlation column]' AS NVARCHAR(100)),
CAST('Goods Unloaded at Destination' AS NVARCHAR(100)),
CAST('[Unloading timestamp]' AS TIMESTAMP),
CAST('[Unloading user column]' AS NVARCHAR(100)),
CAST('[Unloading supplier name column]' AS NVARCHAR(255)),
CAST('[Unloading customer name column]' AS NVARCHAR(255)),
CAST('[Unloading material number column]' AS NVARCHAR(100)),
CAST('[Unloading plant column]' AS NVARCHAR(100)),
CAST('[Unloading requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your unloading or carrier event source object]
CROSS JOIN parameters p
WHERE CAST('[Unloading timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Unloading timestamp]' AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT
CAST('[POD correlation column]' AS NVARCHAR(100)),
CAST('Proof Of Delivery Confirmed' AS NVARCHAR(100)),
CAST('[POD confirmation timestamp]' AS TIMESTAMP),
CAST('[POD user column]' AS NVARCHAR(100)),
CAST('[POD supplier name column]' AS NVARCHAR(255)),
CAST('[POD customer name column]' AS NVARCHAR(255)),
CAST('[POD material number column]' AS NVARCHAR(100)),
CAST('[POD plant column]' AS NVARCHAR(100)),
CAST('[POD requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your proof of delivery source object]
CROSS JOIN parameters p
WHERE CAST('[POD confirmation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[POD confirmation timestamp]' AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT
CAST('[Billing correlation column]' AS NVARCHAR(100)),
CAST('Customer Invoice Created' AS NVARCHAR(100)),
CAST('[Billing creation timestamp]' AS TIMESTAMP),
CAST('[Billing user column]' AS NVARCHAR(100)),
CAST('[Billing supplier name column]' AS NVARCHAR(255)),
CAST('[Billing customer name column]' AS NVARCHAR(255)),
CAST('[Billing material number column]' AS NVARCHAR(100)),
CAST('[Billing plant column]' AS NVARCHAR(100)),
CAST('[Billing requested delivery date column]' AS DATE),
CAST(NULL AS NVARCHAR(100))
FROM [Your billing document source object]
CROSS JOIN parameters p
WHERE CAST('[Billing creation timestamp]' AS TIMESTAMP) >= p.start_ts
AND CAST('[Billing creation timestamp]' AS TIMESTAMP) < p.end_ts
)
SELECT
LogisticsOrder,
ActivityName,
EventTime,
parameters.source_system AS SourceSystem,
parameters.last_data_update AS LastDataUpdate,
ExecutingUser,
SupplierName,
CustomerName,
MaterialNumber,
Plant,
RequestedDeliveryDate,
QualityInspectionResult
FROM base_events
CROSS JOIN parameters
WHERE LogisticsOrder IS NOT NULL
AND ActivityName IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY LogisticsOrder, EventTime, ActivityName; Etapas
- Pré-requisitos: Verifique se você tem uma chave de desenvolvedor e as autorizações necessárias no sistema SAP S/4HANA para criar e executar programas ABAP (acesso à transação SE38) e ler tabelas da cadeia de suprimentos, como VBAK, LIKP, EKKO e MKPF.
- Crie o programa: Abra o Editor ABAP usando o código de transação
SE38. Informe um nome para o novo programa, por exemplo,Z_PM_SCM_EXTRACTION, e clique em 'Criar'. Insira um título descritivo e defina o tipo como 'Programa executável'. - Insira o código: Copie o código ABAP completo da seção 'consulta' abaixo e cole-o no Editor ABAP do novo programa.
- Defina os elementos de texto: Acesse Ir para > Elementos de texto > Textos de seleção. Ative todos os rótulos propostos para a tela de seleção, garantindo uma interface clara e fácil de usar.
- Ative o programa: Salve e ative o programa pressionando CTRL+S e depois CTRL+F3, ou usando o ícone de ativação na barra de ferramentas. Corrija possíveis erros de sintaxe causados por configurações específicas do sistema.
- Execute o programa: Pressione F8 ou use o botão 'Processamento direto'. Uma tela de seleção será exibida para você filtrar os dados a serem extraídos.
- Defina os parâmetros de extração: Na tela de seleção, informe o período da data de criação do pedido de venda. Também recomendamos filtrar por códigos de empresa ou organizações de vendas específicos para controlar o volume de dados. Informe o caminho completo do arquivo de saída no servidor de aplicativos SAP.
- Execute em segundo plano: Para conjuntos de dados grandes que abrangem vários meses, execute o programa em segundo plano para evitar o encerramento por tempo limite. No menu, escolha Programa > Executar em segundo plano e programe o job.
- Recupere o arquivo de dados: Quando a execução do programa terminar, use o código de transação
AL11para acessar o diretório especificado no servidor de aplicativos. Localize o arquivo gerado e baixe-o para seu computador usando a transaçãoCG3Y. - Prepare o arquivo para carregamento: Verifique se o arquivo baixado está em formato de texto simples, como CSV com delimitadores de vírgula ou ponto e vírgula, e usa codificação UTF-8. O arquivo estará pronto para ser carregado na ferramenta de Process Mining.
Configuração
- Período de seleção (S_ERDAT): Este é o filtro mais importante. Ele define o período para a seleção inicial dos pedidos de venda com base na data de criação (
VBAK-ERDAT). Comece com um período específico, como os últimos 3 a 6 meses, para manter o volume de dados sob controle. - Organização de vendas (S_VKORG): Filtro opcional para limitar a extração a organizações de vendas específicas. Ele ajuda a concentrar a análise em uma unidade de negócio ou região.
- Código da empresa (S_BUKRS): Filtro opcional para limitar os dados a códigos de empresa específicos. Recomendamos usá-lo para reduzir o escopo dos dados e melhorar a performance.
- Caminho do arquivo de saída (P_FILE): Caminho completo no servidor de aplicativos SAP onde o arquivo final do Event Log será salvo. O usuário que executa o programa precisa ter acesso de gravação a esse diretório. Exemplo:
/usr/sap/trans/tmp/scm_event_log.csv. - Modo de execução: O programa pode ser executado em primeiro plano para extrações pequenas de teste. Para volumes significativos de dados, é obrigatório processá-lo em segundo plano para evitar encerramentos por tempo limite e reduzir a carga no sistema durante os horários de pico.
- Autorizações do sistema: O usuário que executa o relatório precisa ter acesso de leitura a todas as tabelas subjacentes, incluindo, entre outras, VBAK, VBAP, EKKO, EKPO, MSEG, MKPF, LIKP, LIPS, VBRK, AUFK, QAVE, KNA1 e LFA1.
a Consulta de exemplo abap
REPORT Z_PM_SCM_EXTRACTION.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
PARAMETERS: p_file TYPE string LOWER CASE DEFAULT '/usr/sap/trans/tmp/scm_event_log.csv'.
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_vkorg FOR vbak-vkorg,
s_bukrs FOR vbak-bukrs.
*&---------------------------------------------------------------------*
*& Data Type Definitions
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
LogisticsOrder TYPE vbeln_va,
ActivityName TYPE string,
EventTime TYPE string,
SourceSystem TYPE sysysid,
LastDataUpdate TYPE string,
ExecutingUser TYPE ernam,
SupplierName TYPE name1_gp,
CustomerName TYPE name1_gp,
MaterialNumber TYPE matnr,
Plant TYPE werks_d,
RequestedDeliveryDate TYPE vdatu,
QualityInspectionResult TYPE string,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log,
lv_sysid TYPE sysysid,
lv_last_update TYPE string.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
lv_sysid = sy-sysid.
CONCATENATE sy-datum sy-uzeit INTO lv_last_update.
" Select base data: Sales Orders
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~kunnr, h~bukrs, h~vdatu, i~posnr, i~matnr, i~werks
INTO TABLE @DATA(lt_so)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~vkorg IN @s_vkorg
AND h~bukrs IN @s_bukrs.
IF lt_so IS INITIAL.
MESSAGE 'No sales orders found for the given criteria.' TYPE 'I'.
RETURN.
ENDIF.
" Select related documents using Document Flow (VBFA)
SELECT *
INTO TABLE @DATA(lt_vbfa)
FROM vbfa
FOR ALL ENTRIES IN @lt_so
WHERE vbelv = @lt_so-vbeln
AND posnv = @lt_so-posnr.
" Collect all unique document numbers
DATA: lt_vbeln_pr TYPE RANGE OF banfn,
lt_vbeln_po TYPE RANGE OF ebeln,
lt_vbeln_dn TYPE RANGE OF vbeln_vl,
lt_vbeln_gi TYPE RANGE OF mblnr,
lt_vbeln_auf TYPE RANGE OF aufnr,
lt_vbeln_inv TYPE RANGE OF vbeln_vf,
lt_vbeln_shp TYPE RANGE OF tknum.
LOOP AT lt_vbfa INTO DATA(ls_vbfa).
CASE ls_vbfa-vbtyp_n.
WHEN 'H'. " Purchase Requisition
APPEND ls_vbfa-vbeln TO lt_vbeln_pr.
WHEN 'K'. " Purchase Order
APPEND ls_vbfa-vbeln TO lt_vbeln_po.
WHEN 'J'. " Delivery
APPEND ls_vbfa-vbeln TO lt_vbeln_dn.
WHEN 'R'. " Goods Movement (GI)
APPEND ls_vbfa-vbeln TO lt_vbeln_gi.
WHEN 'L'. " Production Order
APPEND ls_vbfa-vbeln TO lt_vbeln_auf.
WHEN 'M'. " Invoice
APPEND ls_vbfa-vbeln TO lt_vbeln_inv.
WHEN '8'. " Shipment
APPEND ls_vbfa-vbeln TO lt_vbeln_shp.
ENDCASE.
ENDLOOP.
SORT lt_vbeln_pr. DELETE ADJACENT DUPLICATES FROM lt_vbeln_pr.
SORT lt_vbeln_po. DELETE ADJACENT DUPLICATES FROM lt_vbeln_po.
SORT lt_vbeln_dn. DELETE ADJACENT DUPLICATES FROM lt_vbeln_dn.
SORT lt_vbeln_gi. DELETE ADJACENT DUPLICATES FROM lt_vbeln_gi.
SORT lt_vbeln_auf. DELETE ADJACENT DUPLICATES FROM lt_vbeln_auf.
SORT lt_vbeln_inv. DELETE ADJACENT DUPLICATES FROM lt_vbeln_inv.
SORT lt_vbeln_shp. DELETE ADJACENT DUPLICATES FROM lt_vbeln_shp.
" Select detailed data for each document type
SELECT banfn, badat, ernam FROM eban INTO TABLE @DATA(lt_eban) FOR ALL ENTRIES IN @lt_so WHERE bnfpo = @lt_so-posnr AND banfn IN @lt_vbeln_pr.
SELECT ebeln, aedat, ernam, lifnr FROM ekko INTO TABLE @DATA(lt_ekko) WHERE ebeln IN @lt_vbeln_po.
SELECT vbeln, erdat, erzet, ernam, kodat, wadat_ist, podat FROM likp INTO TABLE @DATA(lt_likp) WHERE vbeln IN @lt_vbeln_dn.
SELECT mblnr, mjahr, budat, usnam FROM mkpf INTO TABLE @DATA(lt_mkpf) WHERE mblnr IN @lt_vbeln_gi.
SELECT mblnr, mjahr, zeile, bwart, lfbnr, ebeln, aufnr FROM mseg INTO TABLE @DATA(lt_mseg) FOR ALL ENTRIES IN @lt_mkpf WHERE mblnr = @lt_mkpf-mblnr AND mjahr = @lt_mkpf-mjahr.
SELECT aufnr, erdat, ernam FROM aufk INTO TABLE @DATA(lt_aufk) WHERE aufnr IN @lt_vbeln_auf.
SELECT prueflos, vdatum, vcode FROM qave INTO TABLE @DATA(lt_qave) FOR ALL ENTRIES IN @lt_so WHERE aufnr IN @lt_vbeln_auf.
SELECT vbeln, erdat, erzet, ernam FROM vbrk INTO TABLE @DATA(lt_vbrk) WHERE vbeln IN @lt_vbeln_inv.
SELECT tknum, erdat, erzet FROM vttk INTO TABLE @DATA(lt_vttk) WHERE tknum IN @lt_vbeln_shp.
SELECT kunnr, name1 FROM kna1 INTO TABLE @DATA(lt_kna1) FOR ALL ENTRIES IN @lt_so WHERE kunnr = @lt_so-kunnr.
SELECT lifnr, name1 FROM lfa1 INTO TABLE @DATA(lt_lfa1) FOR ALL ENTRIES IN @lt_ekko WHERE lifnr = @lt_ekko-lifnr.
" Assemble Event Log
LOOP AT lt_so INTO DATA(ls_so).
CLEAR ls_event_log.
READ TABLE lt_kna1 INTO DATA(ls_kna1) WITH KEY kunnr = ls_so-kunnr BINARY SEARCH.
ls_event_log-LogisticsOrder = ls_so-vbeln.
ls_event_log-SourceSystem = lv_sysid.
ls_event_log-LastDataUpdate = lv_last_update.
ls_event_log-CustomerName = ls_kna1-name1.
ls_event_log-MaterialNumber = ls_so-matnr.
ls_event_log-Plant = ls_so-werks.
ls_event_log-RequestedDeliveryDate = ls_so-vdatu.
" 1. Sales Order Created
ls_event_log-ActivityName = 'Sales Order Created'.
CONCATENATE ls_so-erdat ls_so-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_so-ernam.
APPEND ls_event_log TO lt_event_log.
" 2. Inventory Availability Checked (proxy event)
ls_event_log-ActivityName = 'Inventory Availability Checked'.
CONCATENATE ls_so-erdat ls_so-erzet INTO ls_event_log-EventTime. " Using SO creation time as a proxy
ls_event_log-ExecutingUser = ls_so-ernam.
APPEND ls_event_log TO lt_event_log.
" Find related documents for this SO item
LOOP AT lt_vbfa INTO ls_vbfa WHERE vbelv = ls_so-vbeln AND posnv = ls_so-posnr.
CASE ls_vbfa-vbtyp_n.
WHEN 'H'. " 3. Purchase Requisition Created
READ TABLE lt_eban INTO DATA(ls_eban) WITH KEY banfn = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Purchase Requisition Created'.
CONCATENATE ls_eban-badat '000000' INTO ls_event_log-EventTime. " PR has no time field
ls_event_log-ExecutingUser = ls_eban-ernam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN 'K'. " 4. Purchase Order Issued
READ TABLE lt_ekko INTO DATA(ls_ekko) WITH KEY ebeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
READ TABLE lt_lfa1 INTO DATA(ls_lfa1) WITH KEY lifnr = ls_ekko-lifnr BINARY SEARCH.
ls_event_log-ActivityName = 'Purchase Order Issued'.
CONCATENATE ls_ekko-aedat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_ekko-ernam.
ls_event_log-SupplierName = ls_lfa1-name1.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN 'L'. " 6. Production Order Created
READ TABLE lt_aufk INTO DATA(ls_aufk) WITH KEY aufnr = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Production Order Created'.
CONCATENATE ls_aufk-erdat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_aufk-ernam.
APPEND ls_event_log TO lt_event_log.
" 8. Quality Inspection Performed
READ TABLE lt_qave INTO DATA(ls_qave) WITH KEY prueflos = ls_vbfa-vbeln. " Approximation linking lot to order
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Quality Inspection Performed'.
CONCATENATE ls_qave-vdatum '000000' INTO ls_event_log-EventTime.
ls_event_log-QualityInspectionResult = ls_qave-vcode.
APPEND ls_event_log TO lt_event_log.
CLEAR ls_event_log-QualityInspectionResult.
ENDIF.
ENDIF.
WHEN 'J'. " 9. Outbound Delivery Created
READ TABLE lt_likp INTO DATA(ls_likp) WITH KEY vbeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Outbound Delivery Created'.
CONCATENATE ls_likp-erdat ls_likp-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_likp-ernam.
APPEND ls_event_log TO lt_event_log.
" 10. Picking Completed
IF ls_likp-kodat IS NOT INITIAL.
ls_event_log-ActivityName = 'Picking Completed'.
CONCATENATE ls_likp-kodat '120000' INTO ls_event_log-EventTime. " Using Picking Date as proxy
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 14. Proof Of Delivery Confirmed
IF ls_likp-podat IS NOT INITIAL.
ls_event_log-ActivityName = 'Proof Of Delivery Confirmed'.
CONCATENATE ls_likp-podat '000000' INTO ls_event_log-EventTime.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDIF.
WHEN 'M'. " 15. Customer Invoice Created
READ TABLE lt_vbrk INTO DATA(ls_vbrk) WITH KEY vbeln = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Customer Invoice Created'.
CONCATENATE ls_vbrk-erdat ls_vbrk-erzet INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_vbrk-ernam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
WHEN '8'. " 12. Shipment Created
READ TABLE lt_vttk INTO DATA(ls_vttk) WITH KEY tknum = ls_vbfa-vbeln.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Shipment Created'.
CONCATENATE ls_vttk-erdat ls_vttk-erzet INTO ls_event_log-EventTime.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDCASE.
ENDLOOP.
" Find material movements (MSEG) not directly in VBFA
" 5. Goods Receipt For PO Posted
LOOP AT lt_mseg INTO DATA(ls_mseg_po) WHERE ebeln IN (SELECT ebeln FROM ekpo WHERE banfn IN (SELECT banfn FROM eban WHERE vbeln = ls_so-vbeln) ) AND bwart = '101'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_po) WITH KEY mblnr = ls_mseg_po-mblnr mjahr = ls_mseg_po-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Receipt For PO Posted'.
CONCATENATE ls_mkpf_po-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_po-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 7. Goods Produced
LOOP AT lt_mseg INTO DATA(ls_mseg_pp) WHERE aufnr IN (SELECT aufnr FROM afpo WHERE kdauf = ls_so-vbeln) AND bwart = '101'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_pp) WITH KEY mblnr = ls_mseg_pp-mblnr mjahr = ls_mseg_pp-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Produced'.
CONCATENATE ls_mkpf_pp-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_pp-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 11. Goods Issue Posted
LOOP AT lt_mseg INTO DATA(ls_mseg_gi) WHERE lfbnr IN (SELECT vbeln FROM lips WHERE vgbel = ls_so-vbeln) AND bwart = '601'.
READ TABLE lt_mkpf INTO DATA(ls_mkpf_gi) WITH KEY mblnr = ls_mseg_gi-mblnr mjahr = ls_mseg_gi-mjahr.
IF sy-subrc = 0.
ls_event_log-ActivityName = 'Goods Issue Posted'.
CONCATENATE ls_mkpf_gi-budat '000000' INTO ls_event_log-EventTime.
ls_event_log-ExecutingUser = ls_mkpf_gi-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDLOOP.
" Remove duplicate events for the same case
SORT lt_event_log BY LogisticsOrder ActivityName EventTime.
DELETE ADJACENT DUPLICATES FROM lt_event_log COMPARING LogisticsOrder ActivityName EventTime.
" Write data to file
DATA: lt_output TYPE TABLE OF string.
APPEND 'LogisticsOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate,ExecutingUser,SupplierName,CustomerName,MaterialNumber,Plant,RequestedDeliveryDate,QualityInspectionResult' TO lt_output.
LOOP AT lt_event_log INTO ls_event_log.
DATA(lv_line) = |
{ ls_event_log-LogisticsOrder },
{ ls_event_log-ActivityName },
{ ls_event_log-EventTime },
{ ls_event_log-SourceSystem },
{ ls_event_log-LastDataUpdate },
{ ls_event_log-ExecutingUser },
{ ls_event_log-SupplierName },
{ ls_event_log-CustomerName },
{ ls_event_log-MaterialNumber },
{ ls_event_log-Plant },
{ ls_event_log-RequestedDeliveryDate },
{ ls_event_log-QualityInspectionResult }|
.
REPLACE ALL OCCURRENCES OF ',' IN lv_line WITH ' '.
REPLACE ALL OCCURRENCES OF REGEX '\s+' IN lv_line WITH '' LEADING.
CONDENSE lv_line.
APPEND lv_line TO lt_output.
ENDLOOP.
cl_gui_frontend_services=>gui_download(
EXPORTING
filename = p_file
filetype = 'ASC'
CHANGING
data_tab = lt_output
EXCEPTIONS
OTHERS = 24
).
IF sy-subrc <> 0.
MESSAGE 'Error downloading file.' TYPE 'E'.
ELSE.
MESSAGE |File downloaded successfully to { p_file }| TYPE 'S'.
ENDIF. Pronto para começar?
Use este Template para preparar seus dados e começar hoje mesmo a melhorar a performance da sua cadeia de suprimentos. Conte com nosso apoio em cada etapa.
Otimize agora a gestão da sua cadeia de suprimentos
Tenha visibilidade de ponta a ponta e melhore a precisão das previsões para 90% em poucos dias.
Teste grátis por 14 dias, sem necessidade de cartão de crédito.