Seu Template de dados de Order to Cash: faturamento e emissão de faturas
Seu Template de dados de Order to Cash: faturamento e emissão de faturas
- Atributos recomendados para uma análise completa
- Principais etapas e momentos do processo a serem acompanhados
- Orientações práticas para extrair dados do SAP ECC
Atributos de faturamento e emissão de notas fiscais, do pedido ao recebimento
| Nome | Descrição | ||
|---|---|---|---|
| Atividade ActivityName | O nome do evento ou etapa de negócio que ocorreu durante o ciclo de vida da fatura. | ||
| Descrição Esse atributo descreve uma ação específica ou uma mudança de status no processo de faturamento, como 'Fatura gerada', 'Fatura lançada' ou 'Pagamento do cliente recebido'. Conceitualmente, essas atividades são derivadas de vários eventos do sistema, mudanças de status em documentos ou códigos de transação específicos executados pelos usuários. A sequência dessas atividades forma o fluxo do processo, que é a base da análise de process mining. Ao examinar as atividades, as organizações conseguem entender quais etapas são executadas, em que ordem e com que frequência, revelando a execução real do processo em comparação com o processo planejado. Por que isso importa Define as etapas no mapa do processo, permitindo visualizar e analisar fluxos, desvios e gargalos. Onde obter Esse é um atributo conceitual derivado de várias fontes, como códigos de transação (CDHDR-TCODE), mudanças de status do documento (VBUK-FKSTK) e lançamentos de documentos contábeis. Exemplos Fatura geradaFatura lançadaLembrete de pagamento emitidoFatura compensada | |||
| Hora de início EventTime | O registro de data e hora que indica quando uma atividade ou evento específico ocorreu. | ||
| Descrição O horário do evento registra a data e a hora exatas de cada atividade no ciclo de vida da fatura. Esse registro de data e hora é fundamental para todas as análises baseadas em tempo no process mining, incluindo o cálculo de tempos de ciclo, a identificação de gargalos e o monitoramento da performance do processo em relação aos acordos de nível de serviço. Esse atributo normalmente é construído combinando um campo de data, como a data de lançamento (BUDAT), com um campo de hora (UZEIT) de várias tabelas SAP que registram alterações ou a criação de documentos. Registros de data e hora precisos são essenciais para criar um Event Log confiável e garantir a validade de qualquer análise de performance. Por que isso importa Esse atributo é a base de toda análise de performance, permitindo calcular tempos de ciclo, durações e tempos de espera entre as etapas do processo. Onde obter Construído a partir de vários campos de data e hora em diversas tabelas, como BKPF (BUDAT, CPUTM), VBRK (ERDAT, ERZET) e tabelas de logs de alterações, como CDHDR (UDATE, UTIME). Exemplos 2023-04-15T10:30:00Z2023-04-16T11:00:00Z2023-05-20T09:00:00Z | |||
| Número da fatura InvoiceNumber | O identificador exclusivo do documento de faturamento, que funciona como o ID principal do caso no processo de emissão de faturas. | ||
| Descrição O número da fatura, conhecido como número do documento de faturamento no SAP, identifica exclusivamente cada fatura. No process mining, ele funciona como o CaseId, agrupando todas as atividades relacionadas, como criação, lançamento, envio, pagamento e compensação, em uma única instância do processo de ponta a ponta. Analisar os processos pelo número da fatura permite visualizar todo o ciclo de vida de cada transação de faturamento, desde o início até a liquidação final. Isso é essencial para calcular indicadores-chave de performance, como o Days Sales Outstanding (DSO) e o tempo total do ciclo da fatura, oferecendo uma base clara para medir e melhorar a performance. Por que isso importa É a chave essencial para acompanhar toda a jornada de uma fatura, permitindo analisar tempos de ciclo, gargalos e variações de cada transação de faturamento individual. Onde obter Tabela do SAP ECC: VBRK, Campo: VBELN Exemplos 90001234900012359000123690001237 | |||
| Código da empresa CompanyCode | O identificador da entidade legal que emitiu a fatura. | ||
| Descrição O código da empresa representa uma unidade jurídica e contábil independente no SAP. Todas as transações financeiras, incluindo faturas, são lançadas em um código de empresa específico. Esse é um elemento fundamental dos dados organizacionais. No contexto de process mining, o código da empresa é usado para analisar e comparar a performance do processo de faturamento entre diferentes entidades legais de uma corporação. Isso ajuda a identificar melhores práticas em uma entidade que poderiam ser aplicadas a outras e garante que a análise respeite a estrutura organizacional da empresa. Por que isso importa Permite filtrar e comparar processos entre diferentes entidades legais, algo fundamental para a análise financeira e o benchmarking organizacional. Onde obter Tabela do SAP ECC: VBRK, Campo: BUKRS Exemplos 10002000US01DE01 | |||
| Nome do usuário UserName | O ID do usuário que executou a atividade ou criou o documento. | ||
| Descrição Esse atributo registra o ID do usuário SAP responsável por um determinado evento, como criar uma fatura ou lançar um pagamento. Ele é essencial para analisar o componente humano do processo. Com esses dados, é possível investigar variações de performance entre usuários ou times, identificar necessidades de treinamento e detectar possíveis problemas de conformidade. Eles também são usados para diferenciar atividades manuais executadas por usuários humanos de etapas automatizadas executadas pelo sistema ou por usuários de lote, algo fundamental para calcular as taxas de automação. Por que isso importa Permite analisar a performance dos usuários e a distribuição da carga de trabalho, além de ajudar a distinguir atividades manuais de automatizadas, apoiando iniciativas de automação e eficiência. Onde obter Tabela do SAP ECC: VBRK, Campo: ERNAM (Criado por) ou BKPF, Campo: USNAM (Nome do usuário) ou CDHDR, Campo: USERNAME (Usuário). Exemplos JSMITHBW_BATCHLROSSIMKUMAR | |||
| Número do cliente CustomerNumber | Um número exclusivo que identifica o cliente para quem a fatura é emitida. | ||
| Descrição O número do cliente vincula uma fatura a um cliente ou parceiro de negócios específico. Esse atributo é essencial para segmentar e analisar o processo de faturamento com base nas características dos clientes. Os analistas podem usar esse campo para comparar o Days Sales Outstanding (DSO) entre diferentes clientes, identificar quais clientes costumam pagar atrasado ou analisar a conformidade com as condições de pagamento. Entender esses padrões é fundamental para gerenciar o relacionamento com os clientes e melhorar as estratégias de cobrança adaptadas a diferentes segmentos. Por que isso importa Permite uma análise centrada no cliente, ajudando a identificar comportamentos de pagamento, avaliar o DSO por cliente e adaptar as estratégias de cobrança. Onde obter Tabela do SAP ECC: VBRK, Campo: KUNRG (Pagador) ou KUNAG (Cliente da venda). Exemplos 100023200541CUST-A487910345 | |||
| Tipo de documento de faturamento BillingDocumentType | Um código que categoriza o tipo de documento de faturamento, como uma fatura, nota de crédito ou nota de débito. | ||
| Descrição O tipo de documento de faturamento classifica as transações em categorias distintas com base na finalidade de negócio. Por exemplo, 'F2' é uma fatura padrão de cliente, enquanto 'G2' representa uma nota de crédito. Essa classificação é configurada no SAP para controlar como diferentes documentos de faturamento são processados. No process mining, esse atributo é essencial para filtrar e comparar diferentes cenários de faturamento. Os analistas podem examinar o processo de faturas padrão separadamente do processo de notas de crédito para entender seus fluxos, tempos de ciclo e desafios específicos, levando a melhorias de processo mais direcionadas. Por que isso importa Permite segmentar e analisar diferentes processos de faturamento, como faturas padrão e notas de crédito, que geralmente têm fluxos de processo muito diferentes. Onde obter Tabela do SAP ECC: VBRK, Campo: FKART Exemplos F2G2L2IV | |||
| Valor total da fatura TotalInvoiceAmount | O valor líquido total do documento de faturamento. | ||
| Descrição Este atributo representa o valor líquido total da fatura, sem incluir impostos. O valor da fatura é um dado financeiro essencial associado ao processo de faturamento. Ele é usado em várias análises, como a segmentação de faturas em categorias de alto e baixo valor para verificar se os fluxos do processo são diferentes. Também pode ser usado para priorizar os esforços de cobrança ou investigar por que faturas de alto valor demoram mais para serem aprovadas ou pagas. Esse contexto financeiro adiciona uma camada significativa de profundidade à análise do processo. Por que isso importa Fornece um contexto financeiro essencial, permitindo análises baseadas no valor da fatura, como identificar se faturas de alto valor seguem um processo diferente ou demoram mais para serem liquidadas. Onde obter Tabela do SAP ECC: VBRK, Campo: NETWR Exemplos 1500.7525000.00500.0012345.67 | |||
| Código de transação TransactionCode | O código de transação SAP usado para executar uma atividade. | ||
| Descrição O código de transação, ou T-Code, é um identificador exclusivo de uma função ou programa específico no SAP, como 'VF01' para criar um documento de faturamento. Capturar o T-Code de cada evento oferece uma visão técnica, no nível do sistema, de como o processo foi executado. Essas informações são muito valiosas para a análise de causas-raiz. Por exemplo, se os erros forem frequentes, os analistas podem verificar se um código de transação fora do padrão está sendo usado. Elas também ajudam a derivar o nome da atividade e entender quais funcionalidades do sistema são utilizadas no processo. Por que isso importa Fornece contexto técnico sobre como uma atividade foi executada, permitindo analisar as causas-raiz dos desvios do processo e ajudando a identificar ações de usuários fora do padrão. Onde obter Tabela do SAP ECC: CDHDR, Campo: TCODE Exemplos VF01VF02FB01F-28 | |||
| Condições de pagamento PaymentTerms | As condições em que o vendedor concluirá uma venda, incluindo o cronograma de pagamento. | ||
| Descrição As condições de pagamento definem as regras para o vencimento de um pagamento, como “Net 30” ou “Net 60”. Essas condições são acordadas com o cliente e são um fator importante para determinar o fluxo de caixa. A análise do processo por condições de pagamento pode revelar se determinadas condições estão associadas a ciclos de pagamento mais longos ou a taxas maiores de pagamentos em atraso. Esse insight pode ajudar a empresa a negociar condições melhores com os clientes ou ajustar seu planejamento financeiro. Ele também é um dado essencial para calcular a data de vencimento da fatura. Por que isso importa Ajuda a analisar o comportamento de pagamento dos clientes e o impacto no fluxo de caixa com base nas condições negociadas, fornecendo insights para otimizar os acordos comerciais. Onde obter Tabela do SAP ECC: VBRK, Campo: ZTERM Exemplos Z030Z060Z001 | |||
| Data de compensação ClearingDate | A data em que o pagamento foi recebido e a fatura foi compensada nas contas a receber. | ||
| Descrição A data de compensação é a data em que um item em aberto, como uma fatura, é marcado como pago ou “compensado” no sistema financeiro. Essa data representa efetivamente quando o recebimento é considerado realizado e conciliado. Essa é uma das datas mais importantes do ciclo Order to Cash. Ela serve como ponto final para calcular o Days Sales Outstanding (DSO) e o tempo total do ciclo entre a fatura e o recebimento. A análise da data de compensação ajuda a medir a eficácia do processo de cobrança. Por que isso importa Marca a etapa final do ciclo de vida da fatura, servindo como data final para os cálculos de DSO e do tempo total do ciclo, além de refletir a eficiência do recebimento. Onde obter Tabela do SAP ECC: BSAD, Campo: AUGDT Exemplos 2023-05-142023-06-012023-06-25 | |||
| Data de lançamento PostingDate | A data em que o documento é lançado nos livros contábeis financeiros. | ||
| Descrição A data de lançamento determina o período fiscal em que a transação é registrada no razão geral. Ela é uma data essencial para a contabilidade e os relatórios financeiros. Atrasos entre a data de criação do documento e a data de lançamento podem indicar ineficiências no tratamento interno dos documentos de faturamento. Na perspectiva do Process Mining, a data de lançamento marca um momento importante no ciclo de vida da fatura. O intervalo entre a geração e o lançamento da fatura pode ser um indicador de performance importante da eficiência do departamento de faturamento. Por que isso importa Marca um momento financeiro importante e é essencial para a contabilidade. O intervalo entre a criação e o lançamento da fatura é uma medida importante da eficiência do processamento interno. Onde obter Tabela do SAP ECC: BKPF, Campo: BUDAT Exemplos 2023-04-152023-04-172023-05-21 | |||
| Data de vencimento da fatura InvoiceDueDate | A data até a qual o cliente deve efetuar o pagamento. | ||
| Descrição A data de vencimento da fatura é o prazo para pagamento definido pelas condições de pagamento. Essa data é fundamental para gerenciar contas a receber e iniciar atividades de cobrança. Este atributo é usado para calcular o KPI de taxa de pagamentos no prazo, comparando-o com a data efetiva do pagamento. A análise das faturas por data de vencimento ajuda a prever o fluxo de caixa e priorizar os esforços de cobrança para pagamentos próximos do vencimento ou em atraso. Normalmente, ela é derivada da data-base e das condições de pagamento. Por que isso importa É a referência para medir a performance dos pagamentos no prazo e é essencial para gerenciar contas a receber e prever o fluxo de caixa. Onde obter Calculada com base na data-base (BSEG-ZFBDT) e nas condições de pagamento (BSEG-ZTERM). Nem sempre é armazenada em um campo direto. Exemplos 2023-05-152023-05-302023-06-20 | |||
| Data do documento DocumentDate | A data do documento original, informada pelo fornecedor ou criador. | ||
| Descrição A data do documento é a data em que o documento original foi emitido. No faturamento, normalmente é a data em que a fatura foi criada e costuma ser usada como base para calcular a data de vencimento do pagamento. Essa data é essencial para os relatórios financeiros e para calcular métricas importantes, como Days Sales Outstanding (DSO). Ela representa o início do período de cobrança sob a perspectiva do cliente. A análise das diferenças entre a data do documento e a data de lançamento pode revelar atrasos internos no processamento de faturas recebidas. Por que isso importa Serve como base para calcular a idade da fatura e o DSO, fornecendo uma referência essencial para a análise financeira e das condições de pagamento. Onde obter Tabela do SAP ECC: VBRK, Campo: FKDAT (Data de faturamento) Exemplos 2023-04-152023-04-162023-05-20 | |||
| É automatizado IsAutomated | Um indicador que mostra se uma atividade foi executada por um usuário do sistema ou por meio de automação. | ||
| Descrição Este atributo calculado é um indicador booleano que diferencia atividades manuais de atividades automatizadas. Normalmente, ele é derivado comparando o atributo Nome do usuário com uma lista de IDs conhecidos de usuários do sistema ou de processamento em lote, como “BATCHUSER” ou “SAPSYSTEM”. Esse indicador é essencial para medir o nível de automação do processo de faturamento, um objetivo importante para muitas organizações que buscam aumentar a eficiência e reduzir custos. O KPI de taxa de faturamento automatizado é calculado diretamente a partir desse atributo, ajudando a acompanhar o avanço das iniciativas de automação. Por que isso importa Dá suporte direto ao cálculo da taxa de faturamento automatizado, ajudando a medir a eficiência do processo e acompanhar o impacto dos projetos de automação. Onde obter Derivado do atributo Nome do usuário. A lógica seria algo como: IF UserName IN ('BATCH', 'SYSTEM', 'RFCUSER') THEN true ELSE false. Exemplos truefalse | |||
| É retrabalho IsRework | Um indicador que mostra se uma atividade é uma etapa de retrabalho ou correção. | ||
| Descrição Este atributo calculado identifica atividades que representam retrabalho, como “Fatura corrigida” ou estornos de documentos. Normalmente, ele é um indicador booleano derivado do nome da atividade ou de códigos de transação associados a correções e cancelamentos, como “VF11” para cancelar um documento de faturamento. No Process Mining, esse indicador é valioso para quantificar o retrabalho no processo de faturamento. Ele dá suporte direto a KPIs como a taxa de correção de faturas e ajuda a visualizar loops de retrabalho no mapa do processo, destacando ineficiências e problemas de qualidade que aumentam os custos operacionais e atrasam os pagamentos. Por que isso importa Ajuda a quantificar ineficiências e problemas de qualidade do processo ao mostrar quanto esforço é gasto na correção de erros, dando suporte direto aos KPIs de retrabalho. Onde obter Derivado do Nome da atividade ou do Código da transação. Por exemplo, IF ActivityName = 'Invoice Corrected' OR TransactionCode = 'VF11' THEN true ELSE false. Exemplos truefalse | |||
| Moeda Currency | O código da moeda dos valores especificados na fatura. | ||
| Descrição Este atributo indica a moeda da transação, como USD, EUR ou JPY. Ele fornece o contexto necessário para interpretar valores monetários, como o valor total da fatura. Ao analisar dados de uma organização multinacional, o campo de moeda é essencial para interpretar e converter corretamente os valores financeiros. Ele permite gerar relatórios consistentes e garante que os valores não sejam agregados sem a conversão adequada, o que levaria a uma análise financeira incorreta. Por que isso importa Fornece o contexto necessário para todos os valores monetários, garantindo uma análise financeira precisa, especialmente em um ambiente com várias moedas. Onde obter Tabela do SAP ECC: VBRK, Campo: WAERK Exemplos USDEURGBPJPY | |||
| Número do documento de vendas SalesDocumentNumber | O identificador do pedido de venda original que gerou a fatura. | ||
| Descrição Este atributo cria um vínculo direto entre a fatura e o pedido de venda que iniciou a transação. Essa rastreabilidade é essencial para uma análise completa e de ponta a ponta do Order to Cash. Ao conectar o processo de faturamento ao processo anterior de pedido de venda, as organizações podem analisar o tempo total do ciclo desde o pedido do cliente até o recebimento. Isso ajuda a identificar se os atrasos no faturamento são causados por problemas em vendas, atendimento do pedido ou no próprio departamento de faturamento, proporcionando uma visão mais abrangente do processo. Por que isso importa Conecta o processo de faturamento ao pedido de venda, permitindo uma análise real de ponta a ponta do Order to Cash e ajudando a identificar atrasos entre departamentos. Onde obter Tabela do SAP ECC: VBRP, Campo: VGBEL Exemplos 100000451000004610000047 | |||
| Organização de vendas SalesOrganization | A unidade organizacional responsável pela venda de produtos ou serviços. | ||
| Descrição A organização de vendas é uma unidade organizacional do SAP responsável pela distribuição de bens e serviços e pela negociação das condições de venda. Ela é um campo essencial para estruturar as operações de vendas e distribuição. No Process Mining, este atributo permite analisar o processo de faturamento sob a perspectiva da estrutura de vendas. Ele possibilita comparar a performance entre diferentes organizações de vendas, ajudando a identificar quais regiões ou linhas de negócio são mais eficientes em seus processos de faturamento e apoiando iniciativas para padronizar as melhores práticas. Por que isso importa Permite comparar a performance e analisar diferentes divisões ou regiões de vendas, ajudando a identificar melhores práticas e áreas de melhoria. Onde obter Tabela do SAP ECC: VBRK, Campo: VKORG Exemplos 1000NA01EU01AP01 | |||
| Sistema de origem SourceSystem | Identifica o sistema de origem do qual os dados foram extraídos. | ||
| Descrição Esse atributo especifica o sistema oficial de registro em que os dados foram originados. Em um ambiente corporativo com várias instâncias de ERP ou sistemas integrados, esse campo ajuda a distinguir dados de diferentes fontes. No process mining, ele é essencial para validar os dados e realizar análises que comparem processos entre diferentes sistemas ou unidades organizacionais. Normalmente, é preenchido com um valor estático durante a extração de dados para identificar o conjunto de dados. Por que isso importa Fornece contexto sobre a origem dos dados, algo essencial em ambientes com vários sistemas para garantir a integridade dos dados e permitir análises específicas por sistema. Onde obter Normalmente, é um valor estático adicionado durante o processo de extração, transformação e carregamento (ETL), identificando a instância específica do SAP ECC, por exemplo, 'ECC_PROD_NA'. Exemplos SAP_ECC_PRODECC_EU_100SAP_US_FIN | |||
| Última atualização dos dados LastDataUpdate | O registro de data e hora da atualização ou extração mais recente dos dados do sistema de origem. | ||
| Descrição Esse atributo indica a última vez em que o conjunto de dados foi atualizado a partir do sistema de origem. Ele fornece um contexto essencial para qualquer análise, garantindo que os usuários entendam o quanto os dados visualizados estão atualizados. Em Dashboards e relatórios, esse registro de data e hora informa às partes interessadas sobre a atualidade dos dados e ajuda a gerenciar as expectativas quanto à visibilidade de transações muito recentes. Normalmente, ele é gerado ao final do processo de extração de dados. Por que isso importa Informa aos usuários o quanto os dados estão atualizados, algo essencial para tomar decisões operacionais com base na análise. Onde obter Gerado e armazenado durante o processo de extração, transformação e carregamento (ETL) dos dados. Exemplos 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
Atividades de faturamento e emissão de notas fiscais, do pedido ao recebimento
| Atividade | Descrição | ||
|---|---|---|---|
| Fatura compensada | O status final de uma fatura paga com sucesso, indicando que o item em aberto foi encerrado por um pagamento correspondente ou uma nota de crédito. A fatura é considerada totalmente liquidada. | ||
| Por que isso importa Marca a conclusão bem-sucedida do ciclo Order to Cash de uma fatura. Esse é o principal evento final para medir o tempo médio total do ciclo da fatura. Onde obter Ocorre quando os campos do documento de compensação (AUGBL) e da data de compensação (AUGDT) são preenchidos para o item de linha da fatura na tabela BSEG. Captura O evento ocorre na data de compensação (AUGDT) registrada na tabela BSEG para o item de linha da fatura. Tipo de evento explicit | |||
| Fatura enviada ao cliente | Indica que a fatura foi enviada ao cliente por um canal de saída definido, como impressão, e-mail ou EDI. Isso normalmente é capturado nos logs do sistema de gerenciamento de saídas. | ||
| Por que isso importa Esse evento é um marco importante que inicia a contagem do prazo de pagamento do cliente. Atrasos nessa etapa afetam diretamente quando o pagamento pode ser esperado e impactam a eficiência da cobrança de pagamentos. Onde obter Pode ser inferido a partir da data e hora de processamento na tabela de status de mensagens (NAST), para o tipo de saída correspondente à fatura. Captura Inferido a partir de uma entrada na tabela NAST com status de processamento '1' (processado com sucesso). Tipo de evento inferred | |||
| Fatura gerada | Marca a criação do documento de faturamento no sistema. Esse evento é capturado quando uma nova entrada é criada na tabela de cabeçalho do documento contábil (BKPF), com um tipo de documento específico para faturas. | ||
| Por que isso importa Esse é o ponto de partida de todo o processo de emissão de faturas. Analisar o tempo desde esse evento ajuda a medir o tempo do ciclo de criação da fatura e serve de base para calcular o Days Sales Outstanding (DSO). Onde obter Registrado na tabela BKPF. A data (CPUDT) e a hora (CPUTM) de criação de um número de documento específico (BELNR) marcam esse evento. O tipo de documento (BLART) identifica que se trata de uma fatura. Captura A partir do registro de data e hora de criação (CPUDT) na tabela BKPF do documento da fatura. Tipo de evento explicit | |||
| Fatura lançada | A fatura é registrada formalmente no sub-razão de Contas a Receber e no Razão Geral. Esse evento torna a fatura juridicamente válida e reflete a dívida do cliente. | ||
| Por que isso importa Esse é um marco crítico que inicia oficialmente a contagem do prazo de cobrança. O tempo entre a geração e o lançamento pode revelar atrasos no processamento interno que afetam o fluxo de caixa. Onde obter Registrado na tabela BKPF. A data de lançamento (BUDAT) do número do documento (BELNR) marca esse evento. Para documentos estacionados, esse é o momento em que eles são convertidos em documentos lançados. Captura A partir da data de lançamento (BUDAT) na tabela BKPF do documento da fatura. Tipo de evento explicit | |||
| Pagamento do cliente recebido | Um pagamento foi recebido do cliente e lançado no sistema como recebimento em dinheiro ou depósito bancário. Isso cria um documento de pagamento separado, que ainda não foi aplicado à fatura específica. | ||
| Por que isso importa Esse é um marco importante no ciclo de conversão de caixa. O tempo entre o envio da fatura e o recebimento do pagamento é um componente principal do Days Sales Outstanding (DSO). Onde obter Registrado como um novo documento nas tabelas BKPF e BSEG, normalmente com um tipo de documento que indica pagamento de cliente, como 'DZ'. A data de lançamento (BUDAT) marca o evento. Captura A partir da data de lançamento do documento de pagamento do cliente na BKPF. Tipo de evento explicit | |||
| Caso de contestação criado | Uma contestação formal foi registrada contra a fatura, normalmente devido a reclamações do cliente. Isso é registrado no sistema SAP de gerenciamento de contestações. | ||
| Por que isso importa Identifica faturas com risco de atraso no pagamento e destaca os problemas subjacentes que causam insatisfação do cliente. Marca o início de um processo importante de tratamento de exceções. Onde obter Capturado a partir da criação de um caso na tabela de casos de contestação (UDM_CASE), vinculado ao documento contábil da fatura. Captura Registrado quando um usuário cria um caso de contestação pela transação UDM_DISPUTE. Tipo de evento explicit | |||
| Data de vencimento da fatura atingida | Um evento calculado que marca o dia em que o pagamento da fatura vence oficialmente, de acordo com as condições de pagamento. Não é uma atividade executada por um usuário ou sistema, mas um momento crítico. | ||
| Por que isso importa É essencial para analisar o comportamento de pagamento e a conformidade. Serve de referência para determinar pagamentos no prazo ou atrasados e calcular o KPI de taxa de pagamentos no prazo. Onde obter Derivado da comparação entre a data atual e a data líquida de vencimento. A data de vencimento é encontrada no campo BSEG-ZFBDT ou calculada a partir da data-base e das condições de pagamento. Captura Compare a data do sistema com o campo de data líquida de vencimento no item de linha da fatura (BSEG). Tipo de evento calculated | |||
| Fatura aprovada | Representa a aprovação formal da fatura, permitindo que ela seja lançada ou enviada ao cliente. Isso geralmente é inferido quando um documento estacionado é convertido em um documento lançado. | ||
| Por que isso importa Acompanha o Workflow de aprovação interno, que é uma fonte comum de gargalos. Analisar essa atividade ajuda a alimentar o Dashboard de análise do fluxo de aprovação de faturas, identificando aprovadores lentos. Onde obter Pode ser inferido pela transição de um documento do status estacionado, na VBKPF, para o status lançado, na BKPF. Como alternativa, se um sistema de Workflow for usado, esse pode ser um evento explícito nos logs do Workflow. Captura Compare a data de criação do documento estacionado (VBKPF) com a data de lançamento do documento final (BKPF). Tipo de evento inferred | |||
| Fatura baixada como perda | Um status final alternativo em que a fatura é considerada incobrável e o valor em aberto é compensado contra uma conta de devedores duvidosos. Isso encerra a fatura sem um pagamento do cliente. | ||
| Por que isso importa Representa um resultado negativo do processo e uma perda de receita. Acompanhar esses eventos ajuda a analisar os motivos das perdas por inadimplência e melhorar as políticas de gestão de crédito. Onde obter Inferido pela análise da transação de compensação da fatura. Se o documento de compensação for lançado em uma conta contábil específica de despesa com devedores duvidosos, a fatura será considerada baixada como perda. Captura Inferido quando a transação de compensação envolve um lançamento em uma conta contábil designada de devedores duvidosos. Tipo de evento inferred | |||
| Fatura corrigida | Representa uma atividade de retrabalho em que uma fatura inicial foi considerada incorreta e posteriormente estornada. Isso é capturado pela identificação de documentos de estorno vinculados à fatura original. | ||
| Por que isso importa Destaca ineficiências do processo e problemas de qualidade. Uma alta frequência de correções indica problemas nos dados de vendas ou faturamento anteriores, contribuindo para o Dashboard de retrabalho e taxas de erro das faturas. Onde obter Identificado pela localização de um documento de estorno em que BKPF-STBLG aponta para o documento original. A criação desse documento de estorno é o evento. Captura Registrado quando um documento de estorno é criado, por exemplo, via FB08. Tipo de evento explicit | |||
| Fatura estacionada | O documento da fatura foi salvo em um estado preliminar, sem ser lançado no razão geral. Isso costuma ser usado quando as informações estão incompletas ou precisam ser revisadas antes do lançamento final. | ||
| Por que isso importa Acompanha as etapas anteriores ao lançamento e possíveis atrasos. Um período longo no estado estacionado pode indicar problemas na qualidade dos dados ou gargalos no processo de pré-aprovação. Onde obter Os documentos estacionados são armazenados na tabela VBKPF. A criação de um documento nessa tabela, que posteriormente é lançado, representa essa atividade. Captura Registrado ao salvar um documento estacionado usando uma transação como FV70. Tipo de evento explicit | |||
| Lembrete de pagamento emitido | O sistema gerou e enviou uma notificação de cobrança ou um lembrete de pagamento ao cliente para uma fatura vencida. Isso é capturado nos logs do histórico de cobranças. | ||
| Por que isso importa Ajuda a avaliar a eficácia da estratégia de cobrança. Analisar o tempo entre o lembrete e o recebimento do pagamento é essencial para o KPI de eficácia dos lembretes de pagamento. Onde obter Registrado nas tabelas de dados de cobrança, especificamente MHNK (cabeçalho dos dados de cobrança) e MHND (itens de linha dos dados de cobrança), geradas pela execução de cobrança (Transação F150). Captura Registrado após a execução de uma cobrança (F150) para o item vencido. Tipo de evento explicit | |||
| Pagamento aplicado à fatura | O pagamento recebido do cliente foi conciliado e aplicado à fatura em aberto específica, marcando o item para compensação. Essa é a etapa de conciliação que vincula o pagamento à dívida. | ||
| Por que isso importa Essa atividade é essencial para medir o tempo do ciclo de aplicação de pagamentos. Atrasos na aplicação do caixa podem distorcer o status real das contas a receber e ocultar o caixa disponível. Onde obter Inferido a partir da transação de compensação, por exemplo, F-32, que preenche os campos de compensação no item de linha da fatura. O registro de data e hora do evento é a data de compensação. Captura Inferido quando a data de compensação (AUGDT) é preenchida na tabela de itens de linha da fatura (BSEG). Tipo de evento inferred | |||
Guias de extração
Etapas
- Acessar o ABAP Editor: faça login no seu sistema SAP ECC. Acesse o ABAP Editor usando o código de transação
SE38. - Criar o programa: informe um nome para o novo programa no campo Program, por exemplo,
Z_PM_O2C_INVOICE_EXTRACT, e clique no botão Create. Informe um título descritivo e defina o tipo do programa como 'Executable Program'. - Definir a tela de seleção: no código-fonte do programa, defina os parâmetros da tela de seleção. Isso permite que os usuários filtrem os dados para extração. Os principais parâmetros incluem o intervalo de datas de criação do documento (
S_ERDAT), o código da empresa (Company Code,S_BUKRS) e o tipo de documento de faturamento (Billing Document Type,S_VBTYP). - Definir as estruturas de dados: declare uma estrutura de tabela interna que armazenará os dados finais do Event Log. Essa estrutura deve incluir os campos
InvoiceNumber,ActivityName,EventTimee atributos recomendados, comoUserName,BillingDocumentType,CustomerNumber,CompanyCodeeTotalInvoiceAmount. - Implementar a lógica de seleção de dados: escreva a lógica ABAP principal para selecionar os dados. Primeiro, selecione os documentos de faturamento principais nas tabelas
VBRKeBKPFcom base nos valores informados na tela de seleção. Armazene esses dados em uma tabela interna temporária. - Extrair as atividades: percorra a lista inicial de documentos de faturamento. Para cada documento, faça seleções adicionais em várias tabelas para identificar as 13 atividades necessárias. Por exemplo, consulte a tabela
NASTpara eventos de 'Invoice Sent To Customer',BSEGpara informações de compensação ('Invoice Cleared', 'Payment Applied') eMHNKpara dados de cobrança ('Payment Reminder Issued'). - Criar a tabela do Event Log: para cada atividade encontrada na etapa anterior, preencha um novo registro na tabela interna final do Event Log. Garanta que
InvoiceNumber,ActivityName,EventTimee os demais atributos sejam mapeados corretamente a partir das tabelas de origem. - Gravar no servidor de aplicações: quando o loop terminar e a tabela final do Event Log estiver totalmente preenchida, use as instruções
OPEN DATASET,LOOP AT... TRANSFEReCLOSE DATASETpara gravar o conteúdo da tabela interna em um arquivo simples no servidor de aplicações SAP. Especifique um caminho lógico acessível. - Recuperar o arquivo: use o código de transação
AL11para acessar os diretórios do servidor de aplicações e localizar o arquivo gerado. Coordene com a equipe SAP Basis para baixar o arquivo do servidor para sua máquina local ou para um local de rede compartilhado. - Formatação final: abra o arquivo baixado e confirme que ele está no formato CSV, separado por vírgulas, e contém uma linha de cabeçalho. Salve o arquivo com codificação UTF-8 para garantir a compatibilidade com o ProcessMind durante o upload.
Configuração
- Pré-requisitos: acesso para criar e executar programas ABAP (transação SE38). Autorização para ler tabelas de FI e SD, incluindo
VBRK,VBRP,BKPF,BSEG,NAST,MHNKeUDM_CASE_ATTR00(para Dispute Management). - Seleção do intervalo de datas: o programa deve ter um parâmetro obrigatório de intervalo de datas, normalmente baseado na data de criação do documento (
ERDATem VBRK/BKPF). Para a extração inicial, recomenda-se um período de 3 a 6 meses para manter o volume de dados sob controle. - Filtros principais: filtre sempre por
CompanyCode(BUKRS) para limitar o escopo da extração. Também é altamente recomendável filtrar pelo tipo de documento de faturamento (VBTYPda VBRK) ou pelo tipo de documento contábil (BLARTda BKPF), incluindo apenas os tipos de fatura relevantes, como 'RV' para faturas contábeis padrão, e excluindo notas de crédito ou outros documentos. - Considerações de performance: para grandes volumes de dados que abrangem mais de alguns meses, o programa deve ser executado como um job em segundo plano para evitar timeouts da sessão. A lógica ABAP deve ser otimizada para usar leituras de tabelas indexadas e evitar loops aninhados com seleções no banco de dados dentro deles. A abordagem preferencial é selecionar primeiro os dados para tabelas internas e processá-los depois.
- Configuração do arquivo de saída: o código ABAP deve especificar o caminho do arquivo de saída no servidor de aplicações e o delimitador do arquivo CSV, normalmente uma vírgula ou um ponto e vírgula. Garanta que o caminho seja um diretório configurado globalmente e acessível.
a Consulta de exemplo abap
REPORT Z_PM_O2C_INVOICE_EXTRACT.
*&---------------------------------------------------------------------*
*& Tables
*&---------------------------------------------------------------------*
TABLES: VBRK, BKPF.
*&---------------------------------------------------------------------*
*& Type Definitions for Event Log Output
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
invoicenumber TYPE vbrk-vbeln,
activityname TYPE string,
eventtime TYPE timestamp,
username TYPE xubname,
billingdocumenttype TYPE vbrk-vbtyp,
customernumber TYPE vbrk-kunnr,
companycode TYPE vbrk-bukrs,
totalinvoiceamount TYPE vbrk-netwr,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: gt_event_log TYPE TABLE OF ty_event_log,
gs_event_log TYPE ty_event_log.
DATA: BEGIN OF gs_invoice,
vbeln TYPE vbrk-vbeln, " SD Doc (Invoice)
awkey TYPE bkpf-awkey, " Accounting Doc Reference Key
bukrs TYPE vbrk-bukrs, " Company Code
kunnr TYPE vbrk-kunnr, " Customer
vbtyp TYPE vbrk-vbtyp, " SD Doc Type
netwr TYPE vbrk-netwr, " Net Value
waerk TYPE vbrk-waerk, " Currency
fkdat TYPE vbrk-fkdat, " Billing Date
erdat TYPE vbrk-erdat, " Creation Date
erzet TYPE vbrk-erzet, " Creation Time
ernam TYPE vbrk-ernam, " Creator
belnr TYPE bkpf-belnr, " Acct Doc
gjahr TYPE bkpf-gjahr, " Fiscal Year
cpudt TYPE bkpf-cpudt, " Acct Doc Entry Date
cputm TYPE bkpf-cputm, " Acct Doc Entry Time
usnam TYPE bkpf-usnam, " Acct Doc User
stblg TYPE bkpf-stblg, " Reversal Doc
END OF gs_invoice.
DATA: gt_invoices LIKE TABLE OF gs_invoice.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_erdat FOR vbrk-erdat OBLIGATORY,
s_bukrs FOR vbrk-bukrs OBLIGATORY,
s_vbtyp FOR vbrk-vbtyp.
PARAMETERS: p_path TYPE string DEFAULT '/usr/sap/trans/tmp/invoice_extract.csv' OBLIGATORY.
*&---------------------------------------------------------------------*
*& Main Processing Block
*&---------------------------------------------------------------------*
START-OF-SELECTION.
" 1. Select base set of invoices
SELECT vbrk~vbeln, vbrk~bukrs, vbrk~kunnr, vbrk~vbtyp, vbrk~netwr, vbrk~waerk,
vbrk~fkdat, vbrk~erdat, vbrk~erzet, vbrk~ernam,
bkpf~belnr, bkpf~gjahr, bkpf~cpudt, bkpf~cputm, bkpf~usnam, bkpf~stblg, bkpf~awkey
INTO CORRESPONDING FIELDS OF TABLE gt_invoices
FROM vbrk
INNER JOIN bkpf ON bkpf~awkey = vbrk~vbeln AND bkpf~awtyp = 'VBRK'
WHERE vbrk~erdat IN s_erdat
AND vbrk~bukrs IN s_bukrs
AND vbrk~vbtyp IN s_vbtyp.
IF gt_invoices IS INITIAL.
MESSAGE 'No invoices found for the selected criteria.' TYPE 'I'.
RETURN.
ENDIF.
LOOP AT gt_invoices INTO gs_invoice.
CLEAR gs_event_log.
gs_event_log-invoicenumber = gs_invoice-vbeln.
gs_event_log-billingdocumenttype = gs_invoice-vbtyp.
gs_event_log-customernumber = gs_invoice-kunnr.
gs_event_log-companycode = gs_invoice-bukrs.
gs_event_log-totalinvoiceamount = gs_invoice-netwr.
" Activity: Invoice Generated (using accounting doc creation)
gs_event_log-activityname = 'Invoice Generated'.
gs_event_log-username = gs_invoice-usnam.
CONCATENATE gs_invoice-cpudt gs_invoice-cputm INTO DATA(lv_ts_gen).
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Posted (same as generated for non-parked docs)
gs_event_log-activityname = 'Invoice Posted'.
gs_event_log-username = gs_invoice-usnam.
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Approved (inferred by posting)
gs_event_log-activityname = 'Invoice Approved'.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Sent To Customer
SELECT SINGLE addat, aduhr FROM nast
INTO (DATA(lv_nast_date), DATA(lv_nast_time))
WHERE kappl = 'V3' AND objky = gs_invoice-vbeln AND vszst > '0'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Sent To Customer'.
gs_event_log-username = sy-uname.
CONVERT DATE lv_nast_date TIME lv_nast_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Corrected / Reversed
IF gs_invoice-stblg IS NOT INITIAL.
SELECT SINGLE cpudt, cputm, usnam FROM bkpf
INTO (DATA(lv_rev_date), DATA(lv_rev_time), DATA(lv_rev_user))
WHERE belnr = gs_invoice-stblg AND gjahr = gs_invoice-gjahr.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Corrected'.
gs_event_log-username = lv_rev_user.
CONVERT DATE lv_rev_date TIME lv_rev_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
" Activity: Payment Applied, Cleared, Due Date, Written Off (from BSEG)
SELECT SINGLE augdt, augbl, zfBDT, hkont FROM bseg
INTO (DATA(lv_augdt), DATA(lv_augbl), DATA(lv_zfbdt), DATA(lv_hkont))
WHERE bukrs = gs_invoice-bukrs
AND belnr = gs_invoice-belnr
AND gjahr = gs_invoice-gjahr
AND koart = 'D'. " Customer line
IF sy-subrc = 0.
" Due Date Reached (Calculated event)
IF lv_zfbdt IS NOT INITIAL.
gs_event_log-activityname = 'Invoice Due Date Reached'.
gs_event_log-username = 'System'.
CONVERT DATE lv_zfbdt INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Cleared, Applied, Write-Off
IF lv_augdt IS NOT INITIAL.
SELECT SINGLE usnam, cpudt, cputm, blart FROM bkpf
INTO (DATA(lv_clear_user), DATA(lv_clear_date), DATA(lv_clear_time), DATA(lv_clear_type))
WHERE belnr = lv_augbl AND bukrs = gs_invoice-bukrs.
IF sy-subrc = 0.
gs_event_log-username = lv_clear_user.
CONVERT DATE lv_clear_date TIME lv_clear_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
IF lv_clear_type = 'DZ'. " Standard Customer Payment
gs_event_log-activityname = 'Customer Payment Received'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Payment Applied To Invoice'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Invoice Cleared'. APPEND gs_event_log TO gt_event_log.
ELSE. " Assuming other clearing doc types could be write-offs
gs_event_log-activityname = 'Invoice Written Off'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
" Activity: Payment Reminder Issued (Dunning)
SELECT COUNT(*) FROM mhnk WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
IF sy-subrc = 0 AND sy-dbcnt > 0.
SELECT SINGLE lafdn FROM mhnk
INTO DATA(lv_dunning_date)
WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
gs_event_log-activityname = 'Payment Reminder Issued'.
gs_event_log-username = 'System'.
CONVERT DATE lv_dunning_date INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Parked (Example from VBKPF, may require system specific logic)
SELECT SINGLE cpudt, cputm, usnam FROM vbkpf
INTO (DATA(lv_park_date), DATA(lv_park_time), DATA(lv_park_user))
WHERE awkey = gs_invoice-vbeln AND awsys = 'LOG' AND bstat = 'V'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Parked'.
gs_event_log-username = lv_park_user.
CONVERT DATE lv_park_date TIME lv_park_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Dispute Case Created (Requires Dispute Management module)
SELECT SINGLE create_date, create_time, create_user FROM udm_case_attr00
INTO (DATA(lv_disp_date), DATA(lv_disp_time), DATA(lv_disp_user))
WHERE [Your logic to link invoice to dispute case, e.g., via a custom field or object link].
IF sy-subrc = 0.
gs_event_log-activityname = 'Dispute Case Created'.
gs_event_log-username = lv_disp_user.
CONVERT DATE lv_disp_date TIME lv_disp_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Write data to file
*&---------------------------------------------------------------------*
OPEN DATASET p_path FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
ENDIF.
" Header
DATA(lv_header) = 'InvoiceNumber,ActivityName,EventTime,UserName,BillingDocumentType,CustomerNumber,CompanyCode,TotalInvoiceAmount'.
TRANSFER lv_header TO p_path.
LOOP AT gt_event_log INTO gs_event_log.
DATA(lv_line) = |
{ gs_event_log-invoicenumber }|
,{ gs_event_log-activityname }|
,{ gs_event_log-eventtime }|
,{ gs_event_log-username }|
,{ gs_event_log-billingdocumenttype }|
,{ gs_event_log-customernumber }|
,{ gs_event_log-companycode }|
,{ gs_event_log-totalinvoiceamount }|.
TRANSFER lv_line TO p_path.
ENDLOOP.
CLOSE DATASET p_path.
WRITE: 'Extraction complete. File created at:', p_path. Etapas
- Pré-requisitos e acesso: garanta que você tenha um usuário de banco de dados com acesso somente leitura às tabelas SAP ECC necessárias, incluindo VBRK, BKPF, BSAD, NAST, CDHDR, CDPOS, SCASE e outras especificadas na consulta. Esse nível de acesso normalmente é concedido apenas a administradores de sistemas ou a equipes específicas de analytics.
- Conectar ao banco de dados: use uma ferramenta cliente SQL padrão, como DBeaver, Oracle SQL Developer ou Microsoft SQL Server Management Studio, para estabelecer uma conexão com o banco de dados do SAP ECC.
- Preparar a consulta SQL: copie a consulta SQL completa fornecida na seção 'query' para o editor do seu cliente SQL.
- Personalizar os placeholders: a consulta contém vários placeholders que você deve substituir por valores específicos do seu ambiente. Eles incluem:
'YYYYMMDD': substitua todas as ocorrências pelas datas inicial e final do período de análise desejado. É fundamental filtrar os dados para um intervalo administrável.'XXXX': substitua pelo(s) código(s) da empresa que você deseja analisar.[Your Invoice Output Type]: informe o código do tipo de saída usado para enviar faturas aos clientes, por exemplo, 'RD00'.[Your Bad Debt G/L Account]: informe o número da conta do razão geral usada para baixar faturas incobráveis.[Your Dispute Case Invoice Attribute]: informe o nome do atributo usado para armazenar o número da fatura na configuração do Dispute Management, por exemplo, 'INVOICE_ID'.
- Revisar as funções de timestamp: a consulta usa uma sintaxe genérica
CAST(CONCAT(date_field, time_field) AS TIMESTAMP). Talvez seja necessário ajustá-la ao seu sistema de banco de dados específico, por exemplo, usandoTO_TIMESTAMPno Oracle ouDATETIMEFROMPARTSno SQL Server. - Executar a consulta: execute a consulta modificada. Dependendo do tamanho das tabelas SAP e do intervalo de datas selecionado, a execução pode levar bastante tempo.
- Inspecionar os resultados: quando a consulta terminar, revise a saída para garantir que ela contenha as colunas esperadas: InvoiceNumber, ActivityName, EventTime e os atributos recomendados. Verifique se há erros ou resultados vazios.
- Exportar para CSV: exporte o conjunto completo de resultados do seu cliente SQL para um arquivo CSV. Garanta que o arquivo use codificação UTF-8 para evitar problemas com caracteres especiais.
- Preparar o upload: antes de fazer o upload para uma ferramenta de Process Mining, confirme que os cabeçalhos das colunas do CSV correspondem exatamente aos nomes de atributos exigidos, por exemplo,
InvoiceNumber,ActivityName,EventTime,UserName.
Configuração
- Conexão com o banco de dados: é necessária uma conexão SQL direta e somente leitura com o banco de dados SAP ECC subjacente. Esse método ignora completamente a camada de aplicação SAP.
- Autorização: o usuário do banco de dados deve ter permissões
SELECTem todas as tabelas usadas na consulta, que abrangem os módulos FI, SD e, potencialmente, FSCM. - Intervalo de datas: é fundamental filtrar a consulta por um intervalo de datas específico para garantir uma performance e um volume de dados razoáveis. Recomendamos começar com um período de 3 a 6 meses. Os placeholders do filtro de data
'YYYYMMDD'devem ser definidos em várias partes da consulta. - Filtro por código da empresa: a consulta foi projetada para ser filtrada por código da empresa (
BUKRS). Analisar um ou alguns códigos de empresa por vez é uma prática padrão. - Configuração dos tipos de documento: a lógica para identificar eventos como correções de faturas, baixas ou documentos enviados depende das configurações padrão do SAP. Talvez seja necessário ajustar a consulta se sua organização usar tipos de documento personalizados (
BLART), tipos de saída (KSCHL) ou contas do razão geral para esses processos. - Considerações de performance: executar essa consulta em um sistema SAP de produção ativo pode consumir muitos recursos e afetar a performance operacional. Recomenda-se fortemente executar grandes extrações fora dos horários de pico ou em uma réplica dedicada do banco de dados para relatórios.
a Consulta de exemplo sql
WITH InvoiceBase AS (
SELECT
VBRK.VBELN AS InvoiceNumber,
VBRK.FKART AS BillingDocumentType,
VBRK.KUNRG AS CustomerNumber,
VBRK.BUKRS AS CompanyCode,
VBRK.NETWR AS TotalInvoiceAmount,
VBRK.ERNAM AS CreatorName,
VBRK.ERDAT AS CreationDate,
VBRK.ERZET AS CreationTime
FROM VBRK
WHERE VBRK.ERDAT BETWEEN '20230101' AND '20231231' -- Filter by Invoice Creation Date
AND VBRK.BUKRS IN ('1000') -- Filter by Company Code
AND VBRK.FKART NOT IN ('S1', 'S2') -- Exclude cancelled invoices
)
-- 1. Invoice Generated
SELECT
ib.InvoiceNumber,
'Invoice Generated' AS ActivityName,
CAST(CONCAT(ib.CreationDate, ib.CreationTime) AS TIMESTAMP) AS EventTime,
ib.CreatorName AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM InvoiceBase ib
UNION ALL
-- 2. Invoice Parked
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Parked' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = 'V' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 3. Invoice Posted
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Posted' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = '' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 4. Invoice Approved (from Parked to Posted)
SELECT
SUBSTRING(h.OBJECTID, 4, 10) AS InvoiceNumber,
'Invoice Approved' as ActivityName,
CAST(CONCAT(h.UDATE, h.UTIME) AS TIMESTAMP) AS EventTime,
h.USERNAME AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM CDHDR h
JOIN CDPOS p ON h.MANDANT = p.MANDANT AND h.OBJECTCLAS = p.OBJECTCLAS AND h.OBJECTID = p.OBJECTID AND h.CHANGENR = p.CHANGENR
JOIN InvoiceBase ib ON SUBSTRING(h.OBJECTID, 4, 10) = ib.InvoiceNumber
WHERE h.OBJECTCLAS = 'BELEGV'
AND p.TABNAME = 'BKPF'
AND p.FNAME = 'BSTAT'
AND p.VALUE_OLD = 'V'
AND p.VALUE_NEW = ' '
AND h.UDATE BETWEEN '20230101' AND '20231231'
UNION ALL
-- 5. Invoice Sent To Customer
SELECT
n.OBJKY AS InvoiceNumber,
'Invoice Sent To Customer' AS ActivityName,
CAST(CONCAT(n.DATVR, n.UHRVR) AS TIMESTAMP) AS EventTime,
n.VSTAT AS UserName, -- User who processed is not directly available, using processing status as a proxy
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM NAST n
JOIN InvoiceBase ib ON n.OBJKY = ib.InvoiceNumber
WHERE n.KSCHL = '[Your Invoice Output Type]' -- E.g., 'RD00'
AND n.VSTAT = '1' -- Processed successfully
AND n.DATVR BETWEEN '20230101' AND '20231231'
UNION ALL
-- 6. Invoice Corrected (Reversed)
SELECT
SUBSTRING(orig_doc.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Corrected' AS ActivityName,
CAST(CONCAT(rev_doc.CPUDT, rev_doc.CPUTM) AS TIMESTAMP) AS EventTime,
rev_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
rev_doc.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF orig_doc
JOIN BKPF rev_doc ON orig_doc.STBLG = rev_doc.BELNR AND orig_doc.BUKRS = rev_doc.BUKRS AND orig_doc.GJAHR = rev_doc.STJAH
JOIN InvoiceBase ib ON SUBSTRING(orig_doc.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE orig_doc.AWTYP = 'VBRK' AND orig_doc.STBLG IS NOT NULL AND rev_doc.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 7. Invoice Due Date Reached
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Due Date Reached' AS ActivityName,
CAST(CONCAT(bs.ZFBDT, '000000') AS TIMESTAMP) AS EventTime,
'System' AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSEG bs
JOIN BKPF b ON bs.MANDT = b.MANDT AND bs.BUKRS = b.BUKRS AND bs.BELNR = b.BELNR AND bs.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND bs.KOART = 'D' AND bs.ZFBDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 8. Payment Reminder Issued
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Payment Reminder Issued' AS ActivityName,
CAST(CONCAT(h.LAUFD, '000000') AS TIMESTAMP) AS EventTime,
h.LAUFI AS UserName, -- Dunning Run ID
ib.BillingDocumentType,
ib.CustomerNumber,
d.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM MHND d
JOIN MHNK h ON d.MANDT = h.MANDT AND d.LAUFD = h.LAUFD AND d.LAUFI = h.LAUFI
JOIN BKPF b ON d.MANDT = b.MANDT AND d.BUKRS = b.BUKRS AND d.BELNR = b.BELNR AND d.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE h.LAUFD BETWEEN '20230101' AND '20231231'
UNION ALL
-- 9. Dispute Case Created
SELECT
attr.ATTR_VALUE AS InvoiceNumber,
'Dispute Case Created' AS ActivityName,
sc.CREATE_TIME AS EventTime,
sc.CREATED_BY AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM SCMG_T_CASE_ATTR attr
JOIN SCASE sc ON attr.CASE_GUID = sc.CASE_GUID
JOIN InvoiceBase ib ON attr.ATTR_VALUE = ib.InvoiceNumber
WHERE attr.ATTR_NAME = '[Your Dispute Case Invoice Attribute]' -- e.g., 'INVOICE_ID'
AND CAST(sc.CREATE_TIME AS DATE) BETWEEN '20230101' AND '20231231'
UNION ALL
-- 10, 11, 12. Clearing Events (Payment, Clearing, Write-Off)
SELECT
InvoiceNumber,
ActivityName,
EventTime,
UserName,
BillingDocumentType,
CustomerNumber,
CompanyCode,
TotalInvoiceAmount
FROM (
SELECT
bsad.XBLNR AS InvoiceNumber,
CASE
WHEN clearing_item.HKONT = '[Your Bad Debt G/L Account]' THEN 'Invoice Written Off'
ELSE 'Customer Payment Received'
END AS ActivityName,
CAST(CONCAT(clearing_doc.CPUDT, clearing_doc.CPUTM) AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
LEFT JOIN BSEG clearing_item ON clearing_doc.MANDT = clearing_item.MANDT AND clearing_doc.BUKRS = clearing_item.BUKRS AND clearing_doc.BELNR = clearing_item.BELNR AND clearing_doc.GJAHR = clearing_item.GJAHR AND clearing_item.HKONT = '[Your Bad Debt G/L Account]' -- e.g. '148000'
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Payment Applied To Invoice' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '000000') AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Invoice Cleared' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '235959') AS TIMESTAMP) AS EventTime, -- Add time to separate from 'Payment Applied'
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
) AS ClearingEvents Etapas
- Pré-requisitos: garanta que você tenha uma ferramenta ETL licenciada com um conector SAP certificado, como Informatica PowerCenter com SAP Connector ou Talend com SAP Connector. Verifique se você tem credenciais de usuário SAP com as autorizações necessárias para ler as tabelas financeiras, de vendas e de sistema exigidas (BKPF, BSEG, VBRK, NAST, MHNK, UDM_CASE_ATTR00, CDHDR, CDPOS).
- Estabelecer a conexão com o SAP: na sua ferramenta ETL, crie uma nova conexão com o sistema SAP ECC. Configure os dados de conexão, incluindo servidor de aplicações, número do sistema, client, usuário e senha. Teste a conexão para confirmar que ela foi estabelecida com sucesso.
- Definir as fontes de dados: para cada atividade a ser extraída, defina as tabelas SAP correspondentes como fontes de dados no seu job ETL. Por exemplo, adicione VBRK para a geração de faturas, BKPF para eventos de contabilização e NAST para a comunicação com clientes.
- Criar a lógica de extração para cada atividade: crie um fluxo de dados ou uma transformação separada para cada uma das 13 atividades necessárias. Em cada fluxo, aplique filtros para selecionar os registros relevantes. Por exemplo, filtre por código da empresa (BUKRS), tipo de documento (BLART) e um intervalo de datas específico, como a data de criação ERDAT.
- Mapear campos e transformar dados: em cada fluxo de dados, mapeie os campos das tabelas SAP de origem para a estrutura de destino do Event Log: InvoiceNumber, ActivityName, EventTime, UserName e outros atributos recomendados. Use a lógica de transformação para definir o 'ActivityName' de cada fluxo e formatar corretamente datas e timestamps.
- Tratar atividades complexas: para eventos calculados, como 'Invoice Due Date Reached', use a data de pagamento de referência (ZFBDT) e a lógica das condições de pagamento para calcular a data de vencimento ou simplesmente obtenha a data líquida de vencimento (NETDT) da BSEG. Para eventos derivados de logs de alterações, como 'Invoice Approved', talvez seja necessário unir tabelas como BKPF e CDHDR/CDPOS com base no número e na data do documento.
- Combinar os dados das atividades: use uma transformação 'Union' ou 'Merge' na sua ferramenta ETL para combinar as saídas dos 13 fluxos de dados individuais em um único conjunto de dados. Garanta que os nomes e tipos de dados das colunas sejam consistentes em todos os fluxos antes da união.
- Configurar o destino: defina o destino final da saída do Event Log. Pode ser um arquivo simples (CSV), uma tabela de banco de dados ou uma conexão direta com uma área de staging.
- Definir o agendamento da extração: configure os parâmetros do intervalo de datas da extração. No carregamento inicial, você pode extrair de 6 a 12 meses de dados. Para cargas delta posteriores, configure o job para extrair os dados desde a data da última execução.
- Executar e exportar: execute o job ETL. Quando terminar, inspecione o arquivo de saída para garantir que ele atenda ao formato exigido. A saída final deve ser um único arquivo CSV, com cada linha representando um evento único, pronto para upload no ProcessMind.
Configuração
- Conexão SAP: é necessária uma conexão com o servidor de aplicações do sistema SAP ECC de destino. O usuário SAP precisa de acesso RFC e autorizações para tabelas como VBRK, BKPF, BSEG, NAST e outras especificadas na consulta.
- Licença da ferramenta ETL: é obrigatória uma licença válida da ferramenta ETL comercial e do conector SAP específico.
- Intervalo de datas: recomenda-se extrair dados de um período de 3 a 6 meses para garantir uma amostra representativa para análise sem causar uma carga excessiva no sistema. Use um parâmetro configurável para as datas inicial e final.
- Filtros principais: filtre sempre por código da empresa (BUKRS) para limitar o escopo da extração. Também é fundamental filtrar pelos tipos de documento de faturamento relevantes (VBRK-FKART) e pelos tipos de documento contábil (BKPF-BLART), incluindo apenas faturas padrão e excluindo outros tipos de documento, como notas de crédito ou documentos internos.
- Performance: a extração de tabelas grandes, como BSEG, pode ser lenta. Use filtros seletivos, evite extrair campos desnecessários e agende a extração fora dos horários de pico para minimizar o impacto na performance do sistema SAP de origem.
a Consulta de exemplo config
// ETL Data Extraction Logic for SAP Order-to-Cash Invoicing
// This represents the configuration logic within a graphical ETL tool.
// == Global Parameters ==
// $StartDate: '[Start Date]' (e.g., '2023-01-01')
// $EndDate: '[End Date]' (e.g., '2023-06-30')
// $CompanyCodes: '[Company Code(s)]' (e.g., '1000', '2000')
// $BillingDocTypes: '[Billing Document Type(s)]' (e.g., 'F1', 'F2')
// == Source 1: Invoice Generated ==
// Tables: VBRK
DATA_SOURCE generated_invoices FROM VBRK WHERE
ERDAT >= $StartDate AND ERDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND FKART IN ($BillingDocTypes)
MAP {
InvoiceNumber: VBELN,
ActivityName: 'Invoice Generated',
EventTime: ERDAT + ERZET, // Combine date and time
UserName: ERNAM,
BillingDocumentType: FKART,
CustomerNumber: KUNAG,
CompanyCode: BUKRS,
TotalInvoiceAmount: NETWR
}
// == Source 2: Invoice Posted ==
// Tables: BKPF joined with VBRK
DATA_SOURCE posted_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Posted',
EventTime: A.BUDAT + A.CPUTM, // Posting date and entry time
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 3: Invoice Parked ==
// Tables: BKPF joined with VBRK
DATA_SOURCE parked_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.CPUDT >= $StartDate AND A.CPUDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = 'V'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Parked',
EventTime: A.CPUDT + A.CPUTM,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 4: Invoice Approved (Transition from Parked to Posted) ==
// Tables: BKPF joined with VBRK
DATA_SOURCE approved_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
AND EXISTS (SELECT 1 FROM VBELEGV C WHERE C.BELNR = A.BELNR) // Check if it was ever parked
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Approved',
EventTime: A.BUDAT + A.CPUTM, // Use posting date as approval date
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 5: Invoice Sent To Customer ==
// Tables: NAST joined with VBRK
DATA_SOURCE sent_invoices FROM NAST as A
INNER JOIN VBRK as B ON (A.OBJKY = B.VBELN)
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND B.BUKRS IN ($CompanyCodes)
AND A.VSTAT = '1' // Successfully processed
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Sent To Customer',
EventTime: A.ERDAT + A.ERUHR,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: B.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 6: Invoice Corrected (Reversed) ==
// Tables: VBRK (for the reversal document)
DATA_SOURCE corrected_invoices FROM VBRK as A
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.SFAKN <> '' // SFAKN is the original cancelled invoice
MAP {
InvoiceNumber: A.SFAKN, // Case ID is the original invoice
ActivityName: 'Invoice Corrected',
EventTime: A.ERDAT + A.ERZET,
UserName: A.ERNAM,
BillingDocumentType: A.FKART,
CustomerNumber: A.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: NULL // Amount belongs to the reversal doc, not original
}
// == Source 7: Invoice Due Date Reached ==
// Tables: BSEG joined with VBRK
DATA_SOURCE due_invoices FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.NETDT >= $StartDate AND A.NETDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.KOART = 'D' // Customer line item
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Due Date Reached',
EventTime: A.NETDT, // Net due date
UserName: 'System',
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 8: Payment Reminder Issued ==
// Tables: MHNK, MHND, VBRK
DATA_SOURCE reminders FROM MHNK as A
INNER JOIN MHND as D ON (A.LAUFD = D.LAUFD AND A.LAUFI = D.LAUFI)
INNER JOIN VBRK as B ON (SUBSTRING(D.XBLNR, 1, 10) = B.VBELN) // XBLNR may need parsing
WHERE A.LAUFD >= $StartDate AND A.LAUFD <= $EndDate
AND D.BUKRS IN ($CompanyCodes)
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Reminder Issued',
EventTime: A.LAUFD, // Dunning date
UserName: A.IDAPS,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: D.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 9: Dispute Case Created ==
// Tables: UDM_CASE_ATTR00
DATA_SOURCE disputes FROM UDM_CASE_ATTR00 as A
WHERE A.CREATE_TIMESTAMP >= $StartDate // Timestamp format may vary
AND A.FIN_COMP_CODE IN ($CompanyCodes)
AND A.PROCESS = 'FIN_FSCM_DIS'
MAP {
InvoiceNumber: A.BILL_DOC_ID,
ActivityName: 'Dispute Case Created',
EventTime: A.CREATE_TIMESTAMP,
UserName: A.CREATE_USER,
BillingDocumentType: NULL,
CustomerNumber: A.BP_NUMBER,
CompanyCode: A.FIN_COMP_CODE,
TotalInvoiceAmount: A.DISPUTED_AMOUNT
}
// == Source 10: Customer Payment Received ==
// Tables: BKPF
DATA_SOURCE payments FROM BKPF
WHERE BUDAT >= $StartDate AND BUDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND BLART = 'DZ' // Example for Customer Payment
MAP {
InvoiceNumber: NULL, // Invoice not yet known
ActivityName: 'Customer Payment Received',
EventTime: BUDAT + CPUTM,
UserName: USNAM,
BillingDocumentType: NULL,
CustomerNumber: NULL, // Requires join to BSEG to get customer
CompanyCode: BUKRS,
TotalInvoiceAmount: NULL
}
// == Source 11 & 12: Payment Applied To Invoice & Invoice Cleared ==
// Tables: BSEG joined with VBRK
DATA_SOURCE cleared_items FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.AUGBL <> ''
// Generate two records from this source
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Applied To Invoice',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM, // User from header of original invoice doc
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
UNION WITH {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Cleared',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 13: Invoice Written Off ==
// Tables: BSEG (for the invoice line) and BKPF (for clearing doc type)
DATA_SOURCE written_off FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
INNER JOIN BKPF as C ON (A.AUGBL = C.BELNR AND A.BUKRS = C.BUKRS AND A.AUGGJ = C.GJAHR)
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND C.BLART = '[Your Write-Off Document Type]' // e.g., 'AB'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Written Off',
EventTime: A.AUGDT,
UserName: C.USNAM, // User who posted the write-off
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Final Union of all sources ==
OUTPUT generated_invoices
UNION ALL posted_invoices
UNION ALL parked_invoices
UNION ALL approved_invoices
UNION ALL sent_invoices
UNION ALL corrected_invoices
UNION ALL due_invoices
UNION ALL reminders
UNION ALL disputes
UNION ALL payments
UNION ALL cleared_items
UNION ALL written_off Pronto para começar?
Use este Template para simplificar a preparação dos seus dados e descobrir insights valiosos sobre seu processo de faturamento e emissão de faturas. Comece hoje sua jornada rumo a um fluxo de caixa mais rápido.
Desbloqueie um fluxo de caixa mais rápido: otimize o faturamento e a emissão de faturas hoje!
Elimine ineficiências, reduza o tempo do ciclo em 30% e aumente seu fluxo de caixa.
Não é necessário cartão de crédito. Comece a otimizar em poucos minutos.