Seu Template de Dados para Gestão de Inventário
Seu Template de Dados para Gestão de Inventário
- Atributos recomendados para coletar
- Principais atividades para monitorar na descoberta de processos
- Guia de extração sob medida para SAP S/4HANA
Atributos de Gestão de Estoque
| Nome | Descrição | ||
|---|---|---|---|
| Lote de Inventário InventoryBatchLot | O identificador exclusivo para uma quantidade específica de produto, servindo como o ID do caso para rastrear seu ciclo de vida. | ||
| Descrição O número do Lote de Estoque é o identificador principal (Case ID) que agrupa as atividades de uma quantidade específica de produto. Isso permite uma visão cronológica completa da jornada do item, desde o recebimento até a venda, produção ou descarte. Na análise de processos, este atributo é fundamental para rastrear o fluxo de ponta a ponta, medir tempos de ciclo com precisão e identificar variações. A análise por lote é vital para setores onde a rastreabilidade e o controle de validade são críticos, como as indústrias farmacêutica, de alimentos e química. Por que é importante Este é o identificador central que conecta todos os eventos de estoque em um único caso, permitindo a análise do processo de ponta a ponta. Onde obter Normalmente é o Número do Lote, encontrado em tabelas SAP como MCHA ou MCH1 no campo CHARG. Exemplos B001-A452023L202405-XYZ789456123BATCH-05-24 | |||
| Tempo do Evento EventTime | A data e hora precisas em que a atividade de estoque foi registrada no sistema. | ||
| Descrição Horário do Evento (Event Time) é o registro de data e hora que indica exatamente quando uma atividade ocorreu. Este dado é essencial para ordenar os eventos cronologicamente e reconstruir o fluxo do processo para cada lote. Ele serve como base para toda a análise de Process Mining baseada em tempo. A precisão do Horário do Evento é crítica para calcular indicadores de desempenho (KPIs), como tempos de ciclo, lead times e durações. Ele permite analisar o desempenho do processo em diferentes períodos, ajuda a identificar quando ocorrem gargalos e fornece a base factual para entender os atrasos, como o tempo que um lote passa na inspeção de qualidade antes de ser liberado. Por que é importante Este timestamp ordena os eventos cronologicamente e é a base para todos os cálculos de duração e desempenho. Onde obter Geralmente é uma combinação da data de lançamento (MKPF-BUDAT) e hora de entrada (MKPF-CPUTM) da tabela de cabeçalho de documento de material MKPF. Exemplos 2023-10-26T09:00:00Z2023-11-15T14:35:10Z2024-01-05T23:15:00Z | |||
| Atividade ActivityName | O nome do evento de negócio que ocorreu em um ponto específico do processo de gestão de estoque. | ||
| Descrição O atributo Atividade descreve uma etapa ou evento dentro do ciclo de vida de um lote. Esses eventos representam ações de negócio fundamentais, como receber mercadorias, movimentar estoque, realizar inspeção de qualidade ou dar baixa em materiais. Analisar atividades é a base do Process Mining. Isso permite visualizar o fluxo do processo, identificar caminhos frequentes ou raros, detectar gargalos onde as tarefas atrasam e analisar loops de retrabalho. Ao entender a sequência de atividades como 'Estoque Sucateado', as empresas podem focar em melhorias operacionais onde realmente importa. Por que é importante Define as etapas do processo, permitindo a visualização e análise do ciclo de vida do estoque. Onde obter Este é um atributo derivado, geralmente mapeado de Tipos de Movimento SAP (MSEG-BWART) ou Códigos de Transação (MKPF-TCODE2) para nomes amigáveis. Exemplos Entrada de mercadorias lançadaTransferência de Armazenagem LançadaSaída de Mercadorias para Remessa LançadaEstoque descartado | |||
| Centro Plant | A unidade organizacional que representa uma instalação onde o estoque está localizado, como uma fábrica ou centro de distribuição. | ||
| Descrição Um Centro (Plant) é uma unidade organizacional central no SAP que pode representar uma instalação de produção, um local de armazenamento central ou uma sede corporativa. Todo o estoque está física ou logicamente localizado dentro de um Centro. Analisar por Centro é fundamental para comparar o desempenho dos processos entre diferentes locais físicos. Ajuda a responder perguntas como: 'Qual unidade tem o maior tempo de ciclo de armazenagem?' ou 'A taxa de discrepância de estoque é maior no Centro A do que no Centro B?'. Essa segmentação geográfica ou organizacional é a chave para identificar problemas específicos de cada localidade e compartilhar as melhores práticas em toda a organização. Por que é importante Permite a comparação de processos de estoque e desempenho entre diferentes unidades da empresa. Onde obter Encontrado na tabela de itens de documento de material MSEG, campo WERKS (Centro). Exemplos 10001710DE01US01 | |||
| Código do Motivo da Movimentação MovementReasonCode | Um código que especifica o motivo de uma movimentação de estoque. | ||
| Descrição O código de Motivo da Movimentação oferece contexto extra sobre o porquê de um movimento ter ocorrido, sendo muito usado em casos não planejados, como ajustes, devoluções ou descartes. Este atributo é valioso para análise de causa raiz. No dashboard de 'Causas de Ajustes Manuais', ele revela se as discrepâncias ocorrem por danos, perdas ou erros de digitação. Isso ajuda a empresa a resolver o problema real, em vez de apenas corrigir o sintoma no sistema. Por que é importante Explica o porquê das movimentações de estoque não planejadas, permitindo uma análise direcionada da causa raiz. Onde obter Encontrado na tabela de itens de documento de material MSEG, campo GRUND (Motivo do Movimento). Exemplos 00010005102 | |||
| Depósito StorageLocation | Um local específico dentro de um Centro onde o estoque é fisicamente armazenado. | ||
| Descrição Um Depósito (Storage Location) é uma unidade organizacional que permite diferenciar os estoques de materiais dentro de um Centro. Por exemplo, uma planta pode ter depósitos separados para matérias-primas, produtos acabados e estoque de inspeção de qualidade. Este atributo oferece um nível de detalhe de localização mais granular que o Centro. Ele é usado em análises para entender movimentações entre diferentes áreas de estoque, como o lead time para transferências da área de recebimento para o armazém principal. Analisar a utilização do armazenamento e a frequência de movimentação por depósito ajuda a otimizar o layout do armazém e a logística interna. Por que é importante Oferece uma visão granular da localização do estoque em uma planta, ajudando a analisar movimentações internas e eficiência de armazenamento. Onde obter Encontrado na tabela de itens de documento de material MSEG, campo LGORT (Depósito). Exemplos 0001RM01FG01QI01 | |||
| Nome do Utilizador UserName | O ID de usuário da pessoa que executou a transação no SAP. | ||
| Descrição Este atributo captura o ID de usuário de quem lançou o documento ou executou a tarefa. Ele oferece rastreabilidade, mostrando os responsáveis por cada ação. Analisar por usuário é essencial para entender desempenho, conformidade e necessidades de treinamento. Por exemplo, o dashboard de ajustes manuais usa isso para ver quem realiza mais correções, ajudando a identificar quem precisa de capacitação ou destacar os melhores profissionais. Por que é importante Promove a responsabilidade e ajuda a identificar comportamentos específicos de usuários, necessidades de treinamento ou problemas de conformidade. Onde obter Encontrado na tabela de cabeçalho de documento de material MKPF, campo USNAM (Nome do Usuário). Exemplos JSMITHMBROWNWAREHOUSE_OPS | |||
| Número do Material MaterialNumber | O identificador exclusivo do produto ou material gerenciado. | ||
| Descrição O Código do Material (SKU) é o código exclusivo de um produto. É um elemento mestre fundamental para rastrear quantidades, valores e movimentações. No Process Mining, analisar pelo Número do Material permite uma visão centrada no produto. Ajuda a responder quais itens têm inspeções mais lentas, quais são sucateados com mais frequência ou quais exigem mais transferências internas. Essa segmentação é crucial para otimizar as estratégias de estoque conforme o tipo de mercadoria. Por que é importante Permite segmentar a análise por produto, revelando padrões e problemas específicos de determinados itens. Onde obter Encontrado na tabela de itens de documento de material MSEG, campo MATNR. Os dados mestre estão na tabela MARA. Exemplos RM-1001FG-2050-B100-400-A | |||
| Quantidade Quantity | A quantidade de material envolvida na movimentação de estoque. | ||
| Descrição Este atributo representa a quantidade de material movimentada ou ajustada em uma atividade. Ele é registrado na unidade de medida base do material. Analisar a quantidade é crucial para entender a escala dos processos. Isso permite criar visualizações sobre o volume de mercadorias, como o 'Vazão de Baixas por SKU'. Também é usado para calcular KPIs como a 'Taxa de Sucateamento', trazendo uma dimensão quantitativa que vai além da simples contagem de eventos. Por que é importante Quantifica o volume de material em cada atividade, permitindo a análise de vazão, volume de refugo e impacto de ajustes. Onde obter Encontrado na tabela de itens de documento de material MSEG, campo MENGE (Quantidade). Exemplos 10012.55000-10 | |||
| Tipo de movimentação MovementType | Uma chave de três dígitos no SAP que controla como uma movimentação de mercadorias é lançada. | ||
| Descrição O Tipo de Movimento é uma chave de controle crítica no SAP que determina as características da movimentação de material. Ele define quais contas são atualizadas e como a transação é processada (ex: '101' para recebimento, '551' para sucateamento). Este atributo costuma ser a base para criar nomes de 'Atividades' amigáveis. Analisar por Tipo de Movimento permite uma visão técnica detalhada do fluxo, sendo essencial para validar o mapa de processos e identificar transações específicas que geram gargalos ou desvios. Por que é importante Fornece uma classificação técnica precisa de cada evento de estoque, o que é crucial para derivar atividades e para análises detalhadas. Onde obter Encontrado na tabela de itens de documento de material MSEG, campo BWART (Tipo de Movimento). Exemplos 101311261551601 | |||
| Data de Expiração ExpirationDate | A data em que o lote do material vence e não pode mais ser utilizado. | ||
| Descrição A Data de Validade (SLED) é um dado mestre crítico para produtos perecíveis, gerenciada por lote. Ela determina quando um item não pode mais ser vendido. Este atributo é essencial para a análise de estoques obsoletos e vencidos. Ao analisar as atividades sob a ótica da validade, as empresas identificam lotes em risco e agem proativamente. Isso ajuda a medir a eficácia de políticas como FEFO (primeiro a vencer, primeiro a sair) e a quantificar perdas por sucateamento. Por que é importante Permite a análise de estoque obsoleto e vencido, ajudando a minimizar desperdícios e perdas financeiras. Onde obter Encontrado na tabela mestre de lotes MCH1 ou MCHA, campo VFDAT (Data de Validade). Exemplos 2024-12-312025-06-302024-09-01 | |||
| Escaninho de Armazenamento StorageBin | A unidade de armazenamento mais granular em um armazém onde os materiais ficam fisicamente localizados. | ||
| Descrição Uma Posição no Depósito (Storage Bin) representa uma coordenada específica em um armazém, como a localização em uma prateleira. Esse nível de detalhe é usado geralmente quando o SAP Warehouse Management (WM) ou o Extended Warehouse Management (EWM) está implementado. Para o dashboard 'Utilização de Armazenamento do Depósito', este atributo é crítico. Ele permite analisar a eficácia do uso do espaço, identifica pontos críticos de congestionamento e pode revelar caminhos ineficientes de armazenagem ou picking. Analisar as movimentações entre posições ajuda a otimizar o layout do depósito e a reduzir o tempo de deslocamento dos operadores. Por que é importante Fornece os dados de localização mais granulares, permitindo a análise do uso de espaço no armazém e da eficiência operacional. Onde obter Se usar WM, isso pode ser encontrado nas tabelas de ordem de transferência como LTAK/LTAP. Para documentos de inventário, pode estar em MSEG-LGPBE. Consulte a documentação do SAP S/4HANA. Exemplos A-01-01-AB-05-10-CRCV-AREA-01 | |||
| Número do documento de material MaterialDocumentNumber | O número exclusivo que identifica o documento de material que registra a movimentação de mercadorias. | ||
| Descrição Quando uma movimentação de mercadorias é registrada no SAP, o sistema gera um documento de material como comprovante da operação. Esse atributo é o identificador exclusivo do documento. Um único documento de material pode conter vários itens ou atividades. No Process Mining, o Número do Documento de Material é um identificador transacional fundamental, usado para agrupar eventos relacionados que foram registrados juntos. Ele também é essencial para auditorias e para realizar o drill-down da análise de processo até o sistema de origem para investigar transações específicas. Por que é importante Serve como uma chave transacional para auditoria e permite o agrupamento de atividades executadas em conjunto. Onde obter Encontrado nas tabelas MKPF (cabeçalho) e MSEG (item), campo MBLNR (Número do Documento de Material). Exemplos 490000123450000056784900002345 | |||
| Sistema de Origem SourceSystem | Identifica o sistema de origem do qual os dados foram extraídos. | ||
| Descrição Este atributo especifica o sistema de origem dos dados de estoque — no caso, a instância do SAP S/4HANA. Essa informação é vital em ambientes onde os dados vêm de múltiplos ERPs, sistemas de gestão de armazém ou plataformas legadas. Embora pareça estático em análises de um único sistema, torna-se essencial ao consolidar fontes para uma visão holística. Ajuda na governança, na resolução de falhas de extração e garante que a linhagem dos dados esteja clara. Por que é importante Fornece contexto sobre a origem dos dados, o que é essencial para governança de dados e análises multi-sistema. Onde obter Normalmente é um valor fixo definido durante a transformação de dados para identificar a instância específica do SAP S/4HANA. Exemplos S4H_PROD_100SAP_S4_FINANCES4HANA_GLOBAL | |||
| Tempo de Ciclo da Inspeção de Qualidade QualityInspectionCycleTime | O tempo que um lote permanece em inspeção de qualidade antes de ser liberado. | ||
| Descrição Esta métrica mede o tempo entre o 'Lançamento em Inspeção de Qualidade' e a 'Liberação do Estoque'. Ela representa o período em que os bens ficam indisponíveis devido ao controle de qualidade. Este atributo alimenta diretamente o KPI de 'Tempo de Ciclo de Inspeção'. Ao analisar essa duração, as empresas identificam gargalos no processo de qualidade, comparam o desempenho entre plantas e materiais e encontram chances de agilizar as inspeções, melhorando a disponibilidade geral e reduzindo lead times. Por que é importante Quantifica os atrasos causados pelo controle de qualidade, destacando oportunidades para aumentar a disponibilidade de estoque e a velocidade do processo. Onde obter Este é um campo calculado, obtido pela diferença de tempo entre os marcos de início e fim da fase de inspeção de qualidade. Exemplos 2880086400172800 | |||
| Tempo de Ciclo de Atendimento de Pedidos OrderFulfillmentCycleTime | A duração de ponta a ponta desde o início da separação até a baixa das mercadorias para entrega. | ||
| Descrição Esta métrica mede o tempo total desde o 'Início da Separação' até o 'Lançamento de Baixa'. Representa quanto tempo o armazém leva para preparar e despachar um pedido. Este atributo é uma medida direta do KPI de 'Tempo de Ciclo de Atendimento'. Analisar essa duração ajuda a entender a agilidade perante a demanda. O dado pode ser detalhado por produto ou armazém para localizar atrasos nas etapas de separação, embalagem e envio, impactando diretamente a satisfação do cliente. Por que é importante Mede a velocidade e a eficiência do processo de saída do armazém, que é um fator-chave na satisfação do cliente. Onde obter Este é um atributo calculado, derivado da diferença de tempo entre os eventos 'Início da Separação' e 'Lançamento de Baixa de Entrega' de cada lote. Exemplos 7200144003600 | |||
| Tipo de Estoque StockType | Indica o status do estoque, como utilização livre, em inspeção de qualidade ou bloqueado. | ||
| Descrição O Tipo de Estoque categoriza os itens com base em sua usabilidade. Os principais tipos são: uso livre (disponível), inspeção de qualidade (aguardando testes) e bloqueado (indisponível). As movimentações de mercadorias costumam envolver a alteração desse tipo. Rastrear essas mudanças é fundamental para entender o processo de disponibilidade. Isso apoia diretamente atividades como 'Estoque Lançado em Inspeção de Qualidade'. Analisar o tempo gasto em cada status, especialmente na inspeção, é a chave para identificar atrasos que impactam a oferta de produtos para venda ou produção. Por que é importante Rastreia o status de disponibilidade do estoque, o que é crucial para analisar atrasos na inspeção de qualidade e na disponibilidade de mercadorias. Onde obter Encontrado na tabela de itens de documento de material MSEG, campo INSMK (Tipo de Estoque). Exemplos Uso LivreInspeção de QualidadeEstoque Bloqueado | |||
| Última Atualização de Dados LastDataUpdate | O timestamp que indica quando os dados para este registo foram atualizados pela última vez a partir do sistema de origem. | ||
| Descrição Este atributo registra a data e hora da extração mais recente. Ele informa o quão atualizados estão os dados analisados, ajudando a entender se você vê um cenário de quase tempo real ou um retrato do passado. Em qualquer análise, saber a atualidade dos dados é fundamental para tirar conclusões relevantes. Este campo permite que analistas confirmem o status das informações e costuma ser exibido nos dashboards para dar contexto aos insights. Por que é importante Informa os usuários sobre a atualização dos dados, garantindo que as análises sejam baseadas em informações recentes. Onde obter Este timestamp é gerado e adicionado durante o processo de extração, transformação e carga (ETL). Exemplos 2024-05-21T08:00:00Z2024-05-20T08:00:00Z | |||
| Unidade de Medida UnitOfMeasure | A unidade na qual a quantidade do material é medida (ex: peças, quilogramas). | ||
| Descrição A Unidade de Medida especifica a escala do atributo 'Quantidade' (ex: PC, KG, L). Ela fornece o contexto essencial para os campos de volume. Embora pareça apenas um descritor, é vital para a qualidade dos dados e para análises consolidadas. Por exemplo, para calcular o valor total do estoque sucateado, as quantidades em diferentes unidades precisam ser compreendidas e convertidas para um padrão comum. Por que é importante Fornece contexto essencial ao atributo 'Quantidade', garantindo a interpretação precisa dos volumes de material. Onde obter Encontrado na tabela de itens de documento de material MSEG, campo MEINS (Unidade de Medida Base). Exemplos PCKGUNM | |||
Atividades de Gestão de Estoque
| Atividade | Descrição | ||
|---|---|---|---|
| Ajuste de Estoque Lançado | Registra uma alteração na quantidade de estoque resultante de uma contagem física ou outra discrepância. Este evento ajusta o estoque contábil para coincidir com a contagem física. | ||
| Por que é importante Esses ajustes são críticos para manter a precisão do estoque. Uma alta frequência de ajustes indica problemas subjacentes no manuseio, segurança ou entrada de dados. Onde obter Registrado na tabela MATDOC. Identificado pelos Tipos de Movimento (BWART) de inventário físico, como 701 (ganho de inventário) ou 702 (perda de inventário). Captura Capturado de documentos de material na MATDOC com tipos de movimento de ajuste de inventário físico (ex: 701, 702). Tipo de evento explicit | |||
| Entrada de mercadorias lançada | Marca a entrada inicial de um lote de estoque no armazém, geralmente vindo de um fornecedor ou da produção. Este evento é capturado no SAP S/4HANA quando um documento de material é criado no recebimento das mercadorias. | ||
| Por que é importante Este é o evento de início principal do ciclo de vida do estoque. Analisar o tempo desta atividade até outras, como a armazenagem, é crucial para medir a eficiência das docas. Onde obter Registrado na tabela MATDOC. Identificado por Tipos de Movimento (BWART) específicos, como 101 para recebimentos de Pedido de Compra ou 103 para entrada em estoque bloqueado. Captura Capturado de documentos de material na MATDOC com os tipos de movimento de recebimento correspondentes. Tipo de evento explicit | |||
| Estoque da Inspeção de Qualidade Liberado | Indica que um lote passou na inspeção de qualidade e agora está disponível para uso ou armazenagem. Isso é registrado como uma transferência explícita do estoque de qualidade para outro tipo de estoque, como utilização livre. | ||
| Por que é importante Este marco encerra o processo de qualidade, tornando o estoque disponível. Atrasos aqui podem causar problemas graves na produção ou no atendimento de pedidos. Onde obter Registrado na tabela MATDOC como lançamento de transferência. Geralmente identificado pelo Tipo de Movimento (BWART) 321, movendo de 'Inspeção de Qualidade' para 'Uso Livre'. Captura Capturado de documentos de material na MATDOC com o tipo de movimento 321. Tipo de evento explicit | |||
| Estoque descartado | Marca o descarte final de um lote de estoque, removendo-o permanentemente dos registros. Isso ocorre geralmente para itens vencidos, danificados ou obsoletos. | ||
| Por que é importante Este é um evento final que representa uma perda financeira. Analisar sucateamentos ajuda a identificar problemas de obsolescência, manuseio ou erros de previsão de demanda. Onde obter Registrado na tabela MATDOC. Identificado pelos Tipos de Movimento (BWART) para sucateamento, como 551 (de livre), 553 (de QI) ou 555 (de bloqueado). Captura Capturado de documentos de material na MATDOC com tipos de movimento de sucateamento (ex: 551). Tipo de evento explicit | |||
| Saída de Mercadorias para Produção Lançada | Representa o consumo de um lote de estoque por uma ordem de produção ou de processo. Esta transação reduz o estoque e aloca o custo do material à ordem de fabricação. | ||
| Por que é importante Este é um evento de consumo primário, marcando o fim do ciclo de vida do componente no estoque. É crítico para analisar a disponibilidade de materiais para produção. Onde obter Registrado na tabela MATDOC. Identificado pelos Tipos de Movimento (BWART) para baixa para uma ordem, como o 261. Captura Capturado de documentos de material na MATDOC com o tipo de movimento 261. Tipo de evento explicit | |||
| Saída de Mercadorias para Remessa Lançada | Registra a etapa final do processo de saída, onde a propriedade do lote é transferida para um cliente ou transportadora. É uma transação explícita que reduz o estoque e gera lançamentos contábeis. | ||
| Por que é importante Este é um evento chave de conclusão do atendimento de pedidos. É crucial para medir a entrega pontual e calcular o tempo de ciclo total de atendimento. Onde obter Registrado na tabela MATDOC. Identificado pelo Tipo de Movimento (BWART) para baixa de mercadorias para entrega de pedido de venda, geralmente o 601. Captura Capturado de documentos de material na MATDOC com o tipo de movimento 601. Tipo de evento explicit | |||
| Transferência de Armazenagem Lançada | Representa o movimento físico do lote de uma área de recebimento para sua posição final. É registrado como um documento de material de transferência no SAP. | ||
| Por que é importante Conclui o processo de recebimento. O tempo para completar esta atividade, conhecido como tempo de armazenagem (put-away), é um KPI crítico para a eficiência do armazém. Onde obter Registrado na tabela MATDOC como um lançamento de transferência, frequentemente entre depósitos (ex: Tipo de Movimento 311). O movimento específico pode variar conforme a estrutura do armazém. Captura Identificado por documentos de transferência na MATDOC que movem o estoque de um Depósito (SLoc) intermediário/de recebimento para um Depósito final. Tipo de evento explicit | |||
| Devolução de venda recebida | Captura a devolução de um lote previamente expedido de um cliente de volta ao armazém. É uma transação explícita que aumenta o estoque. | ||
| Por que é importante Rastrear devoluções é essencial para entender problemas de qualidade e insatisfação dos clientes. O próprio processo de tratamento de devoluções pode ser uma fonte de ineficiência. Onde obter Registrado na tabela MATDOC. Identificado pelos Tipos de Movimento (BWART) para devoluções de vendas, como 651 (para livre) ou 653 (para inspeção de qualidade). Captura Capturado de documentos de material na MATDOC com tipos de movimento de devolução de vendas (ex: 651, 653). Tipo de evento explicit | |||
| Estoque Lançado em Inspeção de Qualidade | Representa a movimentação de um lote recebido para inspeção de qualidade, tornando-o indisponível até a liberação. É uma transação explícita que altera o tipo de estoque do lote. | ||
| Por que é importante Esta atividade inicia o processo de inspeção de qualidade. A duração entre este evento e a liberação do QI é um KPI essencial para entender atrasos relacionados à qualidade. Onde obter Registrado na tabela MATDOC. Pode ser um movimento de recebimento (ex: 101) com o Tipo de Estoque (INSMK) definido como 'Q' (Inspeção de Qualidade) ou um lançamento de transferência (ex: 322). Captura Identificado por documentos de material na MATDOC que colocam o estoque no tipo 'Inspeção de Qualidade'. Tipo de evento explicit | |||
| Separação iniciada | Marca o início do processo de atendimento do pedido, quando uma tarefa de armazém é criada para separar um lote de sua posição. Isso costuma ser capturado na criação de uma Ordem de Transferência ou Tarefa de Depósito. | ||
| Por que é importante Esta atividade é o gatilho para o processo de separação. Analisar o tempo deste evento até a conclusão da coleta ajuda a medir a eficiência do operador e identificar atrasos. Onde obter Isso geralmente não está na MATDOC. Em sistemas com WM/EWM, é inferido do timestamp de criação de uma Ordem de Transferência (tabela LTAK) ou Tarefa de Depósito. Captura Inferido do registro de criação de uma Ordem de Transferência (no WM) ou Tarefa de Depósito (no EWM) vinculada ao lote do material. Tipo de evento inferred | |||
| Status do Estoque Alterado para Bloqueado | Representa uma alteração no status do lote, tornando-o indisponível para saída devido a danos ou retenção. Este é um lançamento de transferência explícito no SAP. | ||
| Por que é importante Destaca interrupções na disponibilidade do estoque. Uma alta frequência de eventos de bloqueio pode indicar problemas com manuseio, condições de armazenamento ou qualidade do fornecedor. Onde obter Registrado na tabela MATDOC como lançamento de transferência. Geralmente usa o Tipo de Movimento (BWART) 344 para mover de 'Bloqueado' para 'Uso Livre', e 343 para mover de 'Uso Livre' para 'Bloqueado'. Esta atividade refere-se ao 343. Captura Identificado por documentos de material na MATDOC com o tipo de movimento 343. Tipo de evento explicit | |||
| Status do Estoque Alterado para Uso Livre | Representa uma alteração no status do lote, liberando-o de um bloqueio ou retenção de qualidade e tornando-o disponível para uso. É registrado como um lançamento de transferência. | ||
| Por que é importante Esta atividade marca a resolução de uma retenção de estoque. O tempo que os itens passam bloqueados pode ser analisado para melhorar os processos de liberação. Onde obter Registrado na tabela MATDOC como lançamento de transferência. O Tipo de Movimento (BWART) 344 move o estoque de 'Bloqueado' para 'Uso Livre'. Captura Identificado por documentos de material na MATDOC com o tipo de movimento 344. Tipo de evento explicit | |||
| Status do Lote Alterado | Reflete uma alteração no registro mestre do lote, como mudar o status de 'Uso Livre' para 'Restrito'. Não é um movimento físico, mas uma alteração nos dados mestres que fica registrada. | ||
| Por que é importante Mudanças no status do lote impactam diretamente sua usabilidade em vendas ou produção. Analisar essas alterações pode revelar problemas com estoque vencendo ou controle de qualidade que não envolvem movimentação física. Onde obter Inferido dos logs de modificação das tabelas mestre de lote (MCH1, MCHA). As tabelas CDHDR e CDPOS rastreiam as alterações no campo de status do lote (MCH1-ZUSTD). Captura Derivado de documentos de modificação na CDHDR/CDPOS para o campo de status no registro mestre do lote (MCH1-ZUSTD). Tipo de evento inferred | |||
| Transferência Interna de Estoque Lançada | Captura a movimentação de um lote de estoque entre diferentes depósitos ou posições dentro do mesmo centro. É uma transação explícita que gera um documento de material. | ||
| Por que é importante Rastrear transferências internas ajuda a analisar a eficiência operacional, identificar movimentos desnecessários e medir o lead time de reposição entre locais. Onde obter Registrado na tabela MATDOC. Geralmente identificado pelo Tipo de Movimento (BWART) 311 para transferências entre depósitos. Captura Capturado de documentos de material na MATDOC com tipos de movimento para transferências internas (ex: 311). Tipo de evento explicit | |||
Guias de Extração
Etapas
- Estabeleça o Acesso ao Sistema: Certifique-se de ter um usuário com as autorizações necessárias para consultar Core Data Services (CDS) views no sistema SAP S/4HANA. Isso geralmente requer acesso concedido por um administrador do sistema.
- Escolha um Cliente SQL: Selecione uma ferramenta de cliente SQL que possa se conectar ao banco de dados SAP HANA. Opções comuns incluem SAP HANA Studio, SAP HANA Database Explorer ou ferramentas de terceiros como DBeaver.
- Configure a Conexão com o Banco de Dados: Usando seu cliente SQL, crie uma nova conexão de banco de dados. Você precisará do nome do host do banco de dados HANA, do número da porta (geralmente 3<número_da_instância>15) e de suas credenciais de usuário do banco de dados.
- Prepare a Consulta SQL: Copie a consulta SQL completa fornecida na seção 'query' deste documento e cole-a no editor do seu cliente SQL.
- Defina os Parâmetros da Consulta: Localize os valores de espaço reservado (placeholders) dentro da consulta. Você deve substituir
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'pelo intervalo de datas desejado, por exemplo,BETWEEN '20230101' AND '20230630'. Além disso, atualize quaisquer filtros específicos de empresa ou centro, comoMaterialDocumentItem.Plant IN ('Centro1', 'Centro2'), para corresponder à sua estrutura organizacional. - Execute a Consulta: Execute a consulta SQL modificada no banco de dados S/4HANA. O tempo de execução variará dependendo do intervalo de datas e do volume de dados de estoque em seu sistema.
- Revise os Dados: Quando a consulta terminar, revise os resultados em seu cliente SQL para garantir que pareçam corretos e completos. Verifique a presença de diferentes atividades e se os principais atributos foram preenchidos.
- Exporte o Event Log: Exporte todo o conjunto de resultados do seu cliente SQL para um arquivo CSV. Certifique-se de que as configurações de exportação usem a codificação UTF-8 para evitar problemas de caracteres.
- Prepare para o Upload: Nomeie as colunas no arquivo CSV exatamente como os apelidos (aliases) na consulta, por exemplo,
InventoryBatchLot,ActivityName,EventTime, e assim por diante. Este arquivo agora está pronto para ser carregado em uma ferramenta de Process Mining.
Configuração
- Autorizações: O usuário que executa a consulta precisa de permissões de
SELECTnas seguintes CDS views:I_MaterialDocumentItem,I_BatchChangeDocumenteI_WarehouseTask. Também é necessário acesso ao esquema de banco de dados subjacente onde essas views residem. - Filtragem por Intervalo de Datas: É fundamental aplicar um filtro de data nos campos
PostingDate,ChangeDocumentCreationDateouWarehouseTaskCreationDate. Um intervalo típico para análise é de 3 a 12 meses. Consultar períodos de vários anos pode causar sérios problemas de performance. - Filtros Organizacionais: Para melhor desempenho e análises mais direcionadas, adicione cláusulas
WHEREpara filtrar porPlantouCompanyCode. Isso reduz o volume de dados e foca a extração nas partes relevantes do negócio. - Volume de Dados: Esteja ciente de que sistemas de gestão de estoque geram um alto volume de dados. Um intervalo de datas muito amplo pode resultar em milhões de linhas, impactando o sistema de origem durante a extração e a performance da sua ferramenta de análise.
- Extended Warehouse Management (EWM): A atividade 'Picking Initiated' depende da CDS view
I_WarehouseTask, que só é preenchida se você utilizar o SAP Extended Warehouse Management. Se a sua empresa utiliza o módulo antigo de Warehouse Management (WM) ou apenas Inventory Management (IM), esta atividade específica não será extraída.
a Consulta de Exemplo sql
SELECT
mat_doc.Batch AS "InventoryBatchLot",
CASE
WHEN mat_doc.MovementType = '101' AND mat_doc.InventoryStockType = '2' THEN 'Stock Posted to Quality Inspection'
WHEN mat_doc.MovementType = '101' THEN 'Goods Receipt Posted'
WHEN mat_doc.MovementType = '321' THEN 'Quality Inspection Stock Released'
WHEN mat_doc.MovementType = '311' THEN 'Internal Stock Transfer Posted'
WHEN mat_doc.MovementType = '344' THEN 'Stock Status Changed to Blocked'
WHEN mat_doc.MovementType IN ('343', '322') THEN 'Stock Status Changed to Unrestricted'
WHEN mat_doc.MovementType IN ('701', '702') THEN 'Inventory Adjustment Posted'
WHEN mat_doc.MovementType = '601' THEN 'Goods Issue for Delivery Posted'
WHEN mat_doc.MovementType = '261' THEN 'Goods Issue for Production Posted'
WHEN mat_doc.MovementType IN ('651', '653') THEN 'Sales Return Received'
WHEN mat_doc.MovementType = '551' THEN 'Stock Scrapped'
WHEN mat_doc.MovementType = '313' THEN 'Put-Away Transfer Posted' -- Example for two-step transfers
ELSE 'Unknown Material Movement'
END AS "ActivityName",
TO_TIMESTAMP(mat_doc.PostingDate || LPAD(mat_doc.CreationTime, 6, '0'), 'YYYYMMDDHH24MISS') AS "EventTime",
mat_doc.Material AS "MaterialNumber",
mat_doc.CreatedByUser AS "UserName",
mat_doc.MovementType AS "MovementType",
mat_doc.Plant AS "Plant",
mat_doc.StorageLocation AS "StorageLocation",
mat_doc.QuantityInEntryUnit AS "Quantity",
mat_doc.ReasonForMovement AS "MovementReasonCode"
FROM
I_MaterialDocumentItem AS mat_doc
WHERE
mat_doc.Batch IS NOT NULL AND mat_doc.Batch <> ''
AND mat_doc.PostingDate BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
-- AND mat_doc.Plant IN ('Plant1', 'Plant2') -- Placeholder: Add filters for relevant plants
UNION ALL
SELECT
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 3) AS "InventoryBatchLot",
'Batch Status Changed' AS "ActivityName",
change_doc.ChangeDocumentCreationDateTime AS "EventTime",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 1) AS "MaterialNumber",
change_doc.ChangedByUser AS "UserName",
NULL AS "MovementType",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 2) AS "Plant",
NULL AS "StorageLocation",
NULL AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_BatchChangeDocument AS change_doc
WHERE
change_doc.ChangeDocumentTable = 'MCHA' AND change_doc.ChangeDocumentTableFieldName = 'ZUSTD'
AND TO_VARCHAR(change_doc.ChangeDocumentCreationDate) BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
UNION ALL
SELECT
wh_task.Batch AS "InventoryBatchLot",
'Picking Initiated' AS "ActivityName",
wh_task.WarehouseTaskCreationDateTime AS "EventTime",
wh_task.Product AS "MaterialNumber",
wh_task.CreatedByUser AS "UserName",
NULL AS "MovementType",
wh_task.Plant AS "Plant",
wh_task.SourceStorageLocation AS "StorageLocation",
wh_task.TargetQuantity AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_WarehouseTask AS wh_task
WHERE
wh_task.Batch IS NOT NULL AND wh_task.Batch <> ''
AND wh_task.WarehouseProcessType IN ('P210', 'P220') -- Placeholder: Adjust process types based on your picking configuration
AND TO_VARCHAR(wh_task.WarehouseTaskCreationDate) BETWEEN '20230101' AND '20231231'; -- Placeholder: Set your date range Etapas
- Estabeleça o Acesso ao Sistema: Certifique-se de ter um usuário com as autorizações necessárias para consultar Core Data Services (CDS) views no sistema SAP S/4HANA. Isso geralmente requer acesso concedido por um administrador do sistema.
- Escolha um Cliente SQL: Selecione uma ferramenta de cliente SQL que possa se conectar ao banco de dados SAP HANA. Opções comuns incluem SAP HANA Studio, SAP HANA Database Explorer ou ferramentas de terceiros como DBeaver.
- Configure a Conexão com o Banco de Dados: Usando seu cliente SQL, crie uma nova conexão de banco de dados. Você precisará do nome do host do banco de dados HANA, do número da porta (geralmente 3<número_da_instância>15) e de suas credenciais de usuário do banco de dados.
- Prepare a Consulta SQL: Copie a consulta SQL completa fornecida na seção 'query' deste documento e cole-a no editor do seu cliente SQL.
- Defina os Parâmetros da Consulta: Localize os valores de espaço reservado (placeholders) dentro da consulta. Você deve substituir
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'pelo intervalo de datas desejado, por exemplo,BETWEEN '20230101' AND '20230630'. Além disso, atualize quaisquer filtros específicos de empresa ou centro, comoMaterialDocumentItem.Plant IN ('Centro1', 'Centro2'), para corresponder à sua estrutura organizacional. - Execute a Consulta: Execute a consulta SQL modificada no banco de dados S/4HANA. O tempo de execução variará dependendo do intervalo de datas e do volume de dados de estoque em seu sistema.
- Revise os Dados: Quando a consulta terminar, revise os resultados em seu cliente SQL para garantir que pareçam corretos e completos. Verifique a presença de diferentes atividades e se os principais atributos foram preenchidos.
- Exporte o Event Log: Exporte todo o conjunto de resultados do seu cliente SQL para um arquivo CSV. Certifique-se de que as configurações de exportação usem a codificação UTF-8 para evitar problemas de caracteres.
- Prepare para o Upload: Nomeie as colunas no arquivo CSV exatamente como os apelidos (aliases) na consulta, por exemplo,
InventoryBatchLot,ActivityName,EventTime, e assim por diante. Este arquivo agora está pronto para ser carregado em uma ferramenta de Process Mining.
Configuração
- Autorizações: O usuário que executa a consulta precisa de permissões de
SELECTnas seguintes CDS views:I_MaterialDocumentItem,I_BatchChangeDocumenteI_WarehouseTask. Também é necessário acesso ao esquema de banco de dados subjacente onde essas views residem. - Filtragem por Intervalo de Datas: É fundamental aplicar um filtro de data nos campos
PostingDate,ChangeDocumentCreationDateouWarehouseTaskCreationDate. Um intervalo típico para análise é de 3 a 12 meses. Consultar períodos de vários anos pode causar sérios problemas de performance. - Filtros Organizacionais: Para melhor desempenho e análises mais direcionadas, adicione cláusulas
WHEREpara filtrar porPlantouCompanyCode. Isso reduz o volume de dados e foca a extração nas partes relevantes do negócio. - Volume de Dados: Esteja ciente de que sistemas de gestão de estoque geram um alto volume de dados. Um intervalo de datas muito amplo pode resultar em milhões de linhas, impactando o sistema de origem durante a extração e a performance da sua ferramenta de análise.
- Extended Warehouse Management (EWM): A atividade 'Picking Initiated' depende da CDS view
I_WarehouseTask, que só é preenchida se você utilizar o SAP Extended Warehouse Management. Se a sua empresa utiliza o módulo antigo de Warehouse Management (WM) ou apenas Inventory Management (IM), esta atividade específica não será extraída.
a Consulta de Exemplo sql
SELECT
mat_doc.Batch AS "InventoryBatchLot",
CASE
WHEN mat_doc.MovementType = '101' AND mat_doc.InventoryStockType = '2' THEN 'Stock Posted to Quality Inspection'
WHEN mat_doc.MovementType = '101' THEN 'Goods Receipt Posted'
WHEN mat_doc.MovementType = '321' THEN 'Quality Inspection Stock Released'
WHEN mat_doc.MovementType = '311' THEN 'Internal Stock Transfer Posted'
WHEN mat_doc.MovementType = '344' THEN 'Stock Status Changed to Blocked'
WHEN mat_doc.MovementType IN ('343', '322') THEN 'Stock Status Changed to Unrestricted'
WHEN mat_doc.MovementType IN ('701', '702') THEN 'Inventory Adjustment Posted'
WHEN mat_doc.MovementType = '601' THEN 'Goods Issue for Delivery Posted'
WHEN mat_doc.MovementType = '261' THEN 'Goods Issue for Production Posted'
WHEN mat_doc.MovementType IN ('651', '653') THEN 'Sales Return Received'
WHEN mat_doc.MovementType = '551' THEN 'Stock Scrapped'
WHEN mat_doc.MovementType = '313' THEN 'Put-Away Transfer Posted' -- Example for two-step transfers
ELSE 'Unknown Material Movement'
END AS "ActivityName",
TO_TIMESTAMP(mat_doc.PostingDate || LPAD(mat_doc.CreationTime, 6, '0'), 'YYYYMMDDHH24MISS') AS "EventTime",
mat_doc.Material AS "MaterialNumber",
mat_doc.CreatedByUser AS "UserName",
mat_doc.MovementType AS "MovementType",
mat_doc.Plant AS "Plant",
mat_doc.StorageLocation AS "StorageLocation",
mat_doc.QuantityInEntryUnit AS "Quantity",
mat_doc.ReasonForMovement AS "MovementReasonCode"
FROM
I_MaterialDocumentItem AS mat_doc
WHERE
mat_doc.Batch IS NOT NULL AND mat_doc.Batch <> ''
AND mat_doc.PostingDate BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
-- AND mat_doc.Plant IN ('Plant1', 'Plant2') -- Placeholder: Add filters for relevant plants
UNION ALL
SELECT
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 3) AS "InventoryBatchLot",
'Batch Status Changed' AS "ActivityName",
change_doc.ChangeDocumentCreationDateTime AS "EventTime",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 1) AS "MaterialNumber",
change_doc.ChangedByUser AS "UserName",
NULL AS "MovementType",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 2) AS "Plant",
NULL AS "StorageLocation",
NULL AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_BatchChangeDocument AS change_doc
WHERE
change_doc.ChangeDocumentTable = 'MCHA' AND change_doc.ChangeDocumentTableFieldName = 'ZUSTD'
AND TO_VARCHAR(change_doc.ChangeDocumentCreationDate) BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
UNION ALL
SELECT
wh_task.Batch AS "InventoryBatchLot",
'Picking Initiated' AS "ActivityName",
wh_task.WarehouseTaskCreationDateTime AS "EventTime",
wh_task.Product AS "MaterialNumber",
wh_task.CreatedByUser AS "UserName",
NULL AS "MovementType",
wh_task.Plant AS "Plant",
wh_task.SourceStorageLocation AS "StorageLocation",
wh_task.TargetQuantity AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_WarehouseTask AS wh_task
WHERE
wh_task.Batch IS NOT NULL AND wh_task.Batch <> ''
AND wh_task.WarehouseProcessType IN ('P210', 'P220') -- Placeholder: Adjust process types based on your picking configuration
AND TO_VARCHAR(wh_task.WarehouseTaskCreationDate) BETWEEN '20230101' AND '20231231'; -- Placeholder: Set your date range Etapas
- Acesse o Editor ABAP: Faça login no seu sistema SAP S/4HANA. Abra o Editor ABAP usando o código de transação
SE38. - Crie um Novo Programa: Insira um nome para o novo programa no campo 'Programa', por exemplo,
Z_PM_INVENTORY_EXTRACT, e clique no botão 'Criar'. Forneça um título descritivo, defina o 'Tipo' como 'Programa Executável' e salve-o em um pacote. - Defina os Parâmetros do Programa: No editor de programas, defina a tela de seleção que servirá como interface de usuário para a extração. Isso permite que os usuários especifiquem parâmetros como o intervalo de datas e o centro para a extração dos dados.
- Implemente a Lógica de Extração: Copie o código ABAP completo fornecido na seção 'Query' e cole-o no Editor ABAP. Este código foi projetado para selecionar dados de todas as 14 atividades de estoque necessárias a partir de várias tabelas SAP.
- Entenda a Lógica Central: O programa funciona selecionando dados para cada atividade de estoque distinta de suas tabelas de origem, como
MKPFeMSEGpara movimentos de material ouCDHDReCDPOSpara alterações de dados mestre. Cada seleção é então combinada usandoUNION ALLem uma única tabela interna que representa o event log. - Configure a Saída do Arquivo: A parte final do código cuida da gravação dos dados consolidados da tabela interna em um arquivo. Ele usa a instrução
OPEN DATASETpara criar um arquivo no servidor de aplicação SAP. Você deve especificar um caminho de servidor válido onde o usuário do sistema SAP tenha permissões de gravação. - Execute o Programa: Salve e ative o programa ABAP (Ctrl+F3). Execute-o pressionando F8. Na tela de seleção, insira o intervalo de datas desejado e quaisquer outros filtros relevantes, como Centro ou Empresa.
- Execute como um Job em Segundo Plano: Para grandes volumes de dados, é fundamental executar o programa como um job em segundo plano para evitar timeouts de sessão. Na tela de execução (F8), vá ao menu
Programa -> Executar em Segundo Plano. Agende o job para rodar em horários de menor pico. - Recupere o Arquivo de Saída: Quando o job terminar, localize o arquivo de saída no servidor de aplicação SAP. Use o código de transação
AL11para navegar pelos diretórios do servidor e encontrar seu arquivo. Use a transaçãoCG3Ypara baixar o arquivo do servidor de aplicação para seu computador local. - Prepare para o Upload: Abra o arquivo baixado em um editor de texto ou software de planilha. Certifique-se de que ele esteja formatado como um arquivo CSV com uma linha de cabeçalho, usando vírgula como delimitador e aspas duplas como qualificador de texto. Verifique se os nomes das colunas correspondem aos requisitos antes de fazer o upload na ferramenta de Process Mining.
Configuração
- Intervalo de Data de Lançamento: Este é o parâmetro mais crítico. Recomendamos extrair dados em lotes gerenciáveis, como 3 a 6 meses por vez, para garantir uma boa performance e evitar timeouts do sistema.
- Filtro de Centro: É altamente recomendável filtrar por um ou mais Centros (
WERKS) específicos. Executar a extração para todos os centros simultaneamente pode consumir muitos recursos. - Filtro de Empresa: Você pode adicionar um filtro opcional por Empresa (
BUKRS) para limitar ainda mais o escopo dos dados, caso sua organização opere com vários códigos de empresa no mesmo sistema. - Caminho do Arquivo no Servidor de Aplicação: O programa ABAP requer um caminho de diretório válido e predefinido no servidor de aplicação SAP. Certifique-se de que o usuário do sistema SAP (
SY-UNAME) tenha as permissões necessárias no nível do sistema operacional para gravar arquivos nesse diretório. - Autorizações: O usuário que executa esta extração precisa de autorizações para a transação
SE38(para criar e executar o programa), acesso de visualização às tabelasMKPF,MSEG,MCH1,CDHDR,CDPOS,LTAKeLTAP, além da capacidade de agendar jobs em segundo plano (SM36/SM37).
a Consulta de Exemplo abap
REPORT Z_PM_INVENTORY_EXTRACT.
" ====================================================================
" SELECTION SCREEN
" ====================================================================
SELECT-OPTIONS: s_budat FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: s_werks FOR mseg-werks.
PARAMETERS: p_fpath TYPE string DEFAULT '/usr/sap/trans/tmp/inventory_log.csv' OBLIGATORY.
" ====================================================================
" DATA STRUCTURES
" ====================================================================
TYPES: BEGIN OF ty_event_log,
InventoryBatchLot TYPE charg,
ActivityName TYPE string,
EventTime TYPE string,
MaterialNumber TYPE matnr,
UserName TYPE xubname,
MovementType TYPE bwart,
Plant TYPE werks_d,
StorageLocation TYPE lgort_d,
Quantity TYPE menge_d,
MovementReasonCode TYPE grund,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log.
" ====================================================================
" DATA SELECTION
" ====================================================================
START-OF-SELECTION.
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Receipt Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('101', '103', '105', '501', '521', '561')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~shkzg
WHEN 'H' THEN 'Stock Posted to Quality Inspection'
WHEN 'S' THEN 'Quality Inspection Stock Released'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '321' " For QI to Unrestricted
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Put-Away Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '311' AND mseg~shkzg = 'H' " Assume put-away is the credit side
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Internal Stock Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('301', '311', '313', '315')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~bwart
WHEN '343' THEN 'Stock Status Changed to Blocked'
WHEN '344' THEN 'Stock Status Changed to Unrestricted'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('343', '344')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Inventory Adjustment Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('701', '702', '711', '712')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Delivery Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '601'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Production Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '261'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Sales Return Received' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('651', '653')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Stock Scrapped' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '551'
UNION ALL
SELECT
ltap~charg AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CONCAT( ltak~bdatu, ltak~bzeit ) AS EventTime,
ltap~matnr AS MaterialNumber,
ltak~bname AS UserName,
ltak~bwart AS MovementType,
ltap~werks AS Plant,
ltap~lgort AS StorageLocation,
ltap~nista AS Quantity,
'' AS MovementReasonCode
FROM ltap
JOIN ltak ON ltak~tanum = ltap~tanum
WHERE ltak~bdatu IN s_budat
AND ltap~werks IN s_werks
AND ltap~charg IS NOT NULL AND ltap~charg <> ''
UNION ALL
SELECT
SUBSTRING( cdhdr~objectid, 5, 18 ) AS InventoryBatchLot, " Object ID for BATCH is MATNR+WERKS+CHARG
'Batch Status Changed' AS ActivityName,
CONCAT( cdhdr~udate, cdhdr~utime ) AS EventTime,
SUBSTRING( cdhdr~objectid, 1, 4 ) AS MaterialNumber,
cdhdr~username AS UserName,
'' AS MovementType,
'' AS Plant,
'' AS StorageLocation,
0 AS Quantity,
'' AS MovementReasonCode
FROM cdhdr
JOIN cdpos ON cdpos~objectclas = cdhdr~objectclas
AND cdpos~objectid = cdhdr~objectid
AND cdpos~changenr = cdhdr~changenr
WHERE cdhdr~udate IN s_budat
AND cdhdr~objectclas = 'BATCH'
AND cdpos~tabname = 'MCH1'
AND cdpos~fname = 'ZUSTD'
INTO TABLE @lt_event_log.
" ====================================================================
" WRITE OUTPUT FILE
" ====================================================================
DATA: lv_string TYPE string.
DATA: lo_conv TYPE REF TO cl_abap_conv_out_ce.
lo_conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
OPEN DATASET p_fpath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
RETURN.
ENDIF.
" Write Header
lv_string = 'InventoryBatchLot,ActivityName,EventTime,MaterialNumber,UserName,MovementType,Plant,StorageLocation,Quantity,MovementReasonCode'.
TRANSFER lv_string TO p_fpath.
" Write Data
LOOP AT lt_event_log ASSIGNING FIELD-SYMBOL(<fs_log>).
CONCATENATE
<fs_log>-InventoryBatchLot
<fs_log>-ActivityName
<fs_log>-EventTime
<fs_log>-MaterialNumber
<fs_log>-UserName
<fs_log>-MovementType
<fs_log>-Plant
<fs_log>-StorageLocation
<fs_log>-Quantity
<fs_log>-MovementReasonCode
INTO lv_string
SEPARATED BY ','.
TRANSFER lv_string TO p_fpath.
ENDLOOP.
CLOSE DATASET p_fpath.
WRITE: 'Extraction complete. File written to:', p_fpath.