Seu Template de dados de pedido ao recebimento - faturamento e emissão de faturas
Seu Template de dados de pedido ao recebimento - faturamento e emissão de faturas
- Atributos recomendados para uma análise abrangente
- Principais etapas e marcos do processo a acompanhar
- Orientações práticas para extrair dados do SAP ECC
Atributos de pedido ao recebimento - faturamento e emissão de faturas
| Nome | Descrição | ||
|---|---|---|---|
| Atividade ActivityName | Nome do evento de negócio ou da etapa que ocorreu durante o ciclo de vida da fatura. | ||
| Descrição Este 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'. Essas atividades são derivadas conceitualmente de vários eventos do sistema, mudanças de status nos documentos ou códigos de transação 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 entendem quais etapas são realizadas, em que ordem e com que frequência. Assim, podem comparar a execução real do processo com o processo planejado. Por que isso importa Define as etapas no mapa do processo e permite visualizar e analisar fluxos, desvios e gargalos. Onde encontrar Este é um atributo conceitual derivado de várias fontes, como códigos de transação (CDHDR-TCODE), mudanças de status de documentos (VBUK-FKSTK) e lançamentos de documentos contábeis. Exemplos Nota fiscal emitidaNota fiscal lançadaLembrete de pagamento enviadoNota fiscal compensada | |||
| Hora de início EventTime | Data e hora que indicam quando uma atividade ou evento específico ocorreu. | ||
| Descrição A hora do evento registra a data e a hora exatas de cada atividade no ciclo de vida da fatura. Esse dado é fundamental para todas as análises baseadas em tempo em Process Mining, incluindo o cálculo dos 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. Em geral, esse atributo é formado pela combinação de 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. Datas e horas precisas são essenciais para criar um Event Log confiável e garantir a validade das análises de performance. Por que isso importa Este atributo é a base de toda análise de performance, pois permite calcular tempos de ciclo, durações e tempos de espera entre as etapas do processo. Onde encontrar Construído a partir de vários campos de data e hora em diferentes tabelas, como BKPF (BUDAT, CPUTM), VBRK (ERDAT, ERZET) e tabelas de log 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 | Identificador exclusivo do documento de faturamento, usado como ID principal do caso no processo de faturamento. | ||
| Descrição O número da fatura, chamado de número do documento de faturamento no SAP, identifica cada fatura de forma exclusiva. Em Process Mining, ele funciona como 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. A análise dos processos pelo número da fatura oferece uma visão completa do 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 prazo médio de recebimento de vendas (DSO) e o tempo total do ciclo da fatura, além de fornecer uma base clara para medir e melhorar a performance. Por que isso importa É a chave essencial para acompanhar toda a trajetória de uma fatura e analisar tempos de ciclo, gargalos e variações em cada transação de faturamento. Onde encontrar Tabela SAP ECC: VBRK, campo: VBELN Exemplos 90001234900012359000123690001237 | |||
| Empresa CompanyCode | Identificador da entidade jurídica que emitiu a fatura. | ||
| Descrição A empresa representa uma unidade jurídica e contábil independente no SAP. Todas as transações financeiras, incluindo as faturas, são lançadas em uma empresa específica. Esse é um elemento fundamental dos dados organizacionais. Em Process Mining, a empresa é usada para analisar e comparar a performance do processo de faturamento entre diferentes entidades jurídicas de uma organização. Isso ajuda a identificar boas práticas que podem ser adotadas por outras entidades e garante que a análise considere a estrutura organizacional da empresa. Por que isso importa Permite filtrar e comparar processos entre diferentes entidades jurídicas, algo fundamental para a análise financeira e a comparação de performance entre unidades. Onde encontrar Tabela SAP ECC: VBRK, campo: BUKRS Exemplos 10002000US01DE01 | |||
| Nome de usuário UserName | ID do usuário que executou a atividade ou criou o documento. | ||
| Descrição Este atributo registra o ID do usuário SAP responsável por determinado evento, como criar uma fatura ou lançar um pagamento. Ele é essencial para analisar o papel das pessoas no processo. Com esses dados, é possível investigar diferenças de performance entre usuários ou equipes, identificar necessidades de treinamento e detectar possíveis problemas de conformidade. O atributo também ajuda a diferenciar atividades manuais, realizadas por pessoas, de etapas automatizadas, executadas por usuários de sistema ou de processamento em lote. Essa distinção é importante para calcular os índices 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 distinguir atividades manuais de automatizadas, apoiando iniciativas de automação e eficiência. Onde encontrar Tabela SAP ECC: VBRK, campo: ERNAM (Criado por); BKPF, campo: USNAM (Nome de usuário); ou CDHDR, campo: USERNAME (Usuário). Exemplos JSMITHBW_BATCHLROSSIMKUMAR | |||
| Número do cliente CustomerNumber | Número exclusivo que identifica o cliente para quem a fatura foi emitida. | ||
| Descrição O número do cliente vincula uma fatura a um cliente ou parceiro de negócios específico. Este 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 prazo médio de recebimento de vendas (DSO) entre clientes, identificar quem costuma pagar com atraso ou analisar a conformidade com os prazos de pagamento. Entender esses padrões é essencial para gerenciar o relacionamento com os clientes e aprimorar as estratégias de cobrança de acordo com cada segmento. Por que isso importa Permite analisar o processo sob a perspectiva do cliente, identificando padrões de pagamento, avaliando o DSO por cliente e ajustando as estratégias de cobrança. Onde encontrar Tabela SAP ECC: VBRK, campo: KUNRG (Pagador) ou KUNAG (Emissor da ordem). Exemplos 100023200541CUST-A487910345 | |||
| Tipo de documento de faturamento BillingDocumentType | Código que classifica o tipo de documento de faturamento, como 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, de acordo com sua finalidade comercial. Por exemplo, 'F2' é uma fatura padrão para clientes, enquanto 'G2' representa uma nota de crédito. Essa classificação é configurada no SAP para controlar o processamento de diferentes documentos de faturamento. Em Process Mining, esse atributo é essencial para filtrar e comparar diferentes cenários de faturamento. Os analistas podem examinar separadamente o processo de faturas padrão e o de notas de crédito para entender seus fluxos, tempos de ciclo e desafios específicos. Isso ajuda a direcionar as melhorias do processo. Por que isso importa Permite segmentar e analisar diferentes processos de faturamento, como os de faturas padrão e notas de crédito, que costumam ter fluxos bem distintos. Onde encontrar Tabela SAP ECC: VBRK, campo: FKART Exemplos F2G2L2IV | |||
| Valor total da fatura TotalInvoiceAmount | Valor líquido total do documento de faturamento. | ||
| Descrição Este atributo representa o valor líquido total da fatura, sem impostos. O valor da fatura é um dado financeiro essencial do processo de faturamento. Ele pode ser usado em diferentes análises, como segmentar faturas de alto e baixo valor para verificar se os fluxos do processo são diferentes. Também ajuda a priorizar as cobranças ou investigar por que faturas de alto valor demoram mais para ser aprovadas ou pagas. Esse contexto financeiro amplia a análise do processo. Por que isso importa Fornece contexto financeiro essencial e permite analisar os processos com base no valor da fatura, por exemplo, para identificar se faturas de alto valor seguem um fluxo diferente ou demoram mais para ser compensadas. Onde encontrar Tabela SAP ECC: VBRK, campo: NETWR Exemplos 1500.7525000.00500.0012345.67 | |||
| Código de transação TransactionCode | Código da transação SAP usada 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', usado para criar um documento de faturamento. Registrar o T-Code de cada evento oferece uma visão técnica, no nível do sistema, de como o processo foi executado. Essa informação é muito útil para a análise de causa raiz. Por exemplo, se erros forem frequentes, os analistas podem verificar se está sendo usado um código de transação fora do padrão. Ela também ajuda a identificar o nome da atividade e a entender quais funcionalidades do sistema são usadas no processo. Por que isso importa Fornece contexto técnico sobre como uma atividade foi executada, permitindo analisar a causa raiz dos desvios do processo e identificar ações de usuários fora do padrão. Onde encontrar Tabela SAP ECC: CDHDR, campo: TCODE Exemplos VF01VF02FB01F-28 | |||
| Condições de pagamento PaymentTerms | Condições que definem como 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 '30 dias líquidos' ou '60 dias líquidos'. Essas condições são acordadas com o cliente e influenciam diretamente o fluxo de caixa. A análise do processo por condição de pagamento pode revelar se determinadas condições estão associadas a ciclos de pagamento mais longos ou a mais atrasos. Esse insight ajuda a empresa a negociar condições melhores com os clientes ou ajustar o planejamento financeiro. As condições também são 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, oferecendo insights para otimizar os acordos comerciais. Onde encontrar Tabela SAP ECC: VBRK, campo: ZTERM Exemplos Z030Z060Z001 | |||
| Data de compensação ClearingDate | Data em que o pagamento foi recebido e a fatura foi compensada em contas a receber. | ||
| Descrição A data de compensação é aquela em que um item em aberto, como uma fatura, é marcado como pago ou 'compensado' no sistema financeiro. Ela representa o momento em que o recebimento é considerado concluído e conciliado. Essa é uma das datas mais importantes do ciclo de pedido ao recebimento. Ela marca o fim do período usado para calcular o prazo médio de recebimento de vendas (DSO) e o tempo total do ciclo da fatura ao 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, serve como data final para calcular o DSO e o tempo total do ciclo e reflete a eficiência da cobrança. Onde encontrar Tabela SAP ECC: BSAD, campo: AUGDT Exemplos 2023-05-142023-06-012023-06-25 | |||
| Data de lançamento PostingDate | Data em que o documento é lançado nos livros contábeis. | ||
| Descrição A data de lançamento determina o período fiscal em que a transação é registrada no razão contábil. É uma data essencial para a contabilidade e os relatórios financeiros. Atrasos entre a criação do documento e seu lançamento podem indicar ineficiências no processamento interno dos documentos de faturamento. Na análise de 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-chave 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 encontrar Tabela SAP ECC: BKPF, campo: BUDAT Exemplos 2023-04-152023-04-172023-05-21 | |||
| Data de vencimento da fatura InvoiceDueDate | 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 as atividades de cobrança. Este atributo é usado para calcular o KPI de índice de pagamentos em dia, 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 a priorizar cobranças de pagamentos próximos do vencimento ou em atraso. Em geral, o atributo é calculado com base na data-base e nas condições de pagamento. Por que isso importa É a referência para medir a performance dos pagamentos em dia e é essencial para gerenciar contas a receber e prever o fluxo de caixa. Onde encontrar Calculado com base na data-base (BSEG-ZFBDT) e nas condições de pagamento (BSEG-ZTERM). Nem sempre é armazenado em um campo direto. Exemplos 2023-05-152023-05-302023-06-20 | |||
| Data do documento DocumentDate | Data informada pelo fornecedor ou pelo criador no documento original. | ||
| Descrição A data do documento é a data de emissão do documento original. No faturamento, geralmente corresponde à data de criação da fatura e costuma servir de base para calcular a data de vencimento do pagamento. Essa data é essencial para relatórios financeiros e para calcular indicadores importantes, como o prazo médio de recebimento de vendas (DSO). Do ponto de vista do cliente, ela marca o início do período de cobrança. 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 de referência para calcular a idade da fatura e o DSO, sendo essencial para análises financeiras e dos prazos de pagamento. Onde encontrar Tabela SAP ECC: VBRK, campo: FKDAT (Data de faturamento) Exemplos 2023-04-152023-04-162023-05-20 | |||
| É automatizada IsAutomated | Indicador que informa se uma atividade foi executada por um usuário de sistema ou por meio de automação. | ||
| Descrição Este atributo calculado é um indicador booleano que diferencia atividades manuais de automatizadas. Em geral, ele é derivado da comparação do atributo Nome de usuário com uma lista de IDs conhecidos de usuários de 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 índice de faturamento automatizado é calculado diretamente com base nesse atributo, ajudando a acompanhar o avanço das iniciativas de automação. Por que isso importa Permite calcular diretamente o índice de faturamento automatizado, ajudando a medir a eficiência do processo e acompanhar o impacto dos projetos de automação. Onde encontrar Derivado do atributo Nome de usuário. A lógica seria semelhante a: IF UserName IN ('BATCH', 'SYSTEM', 'RFCUSER') THEN true ELSE false. Exemplos truefalse | |||
| É retrabalho IsRework | Indicador que informa se uma atividade corresponde a uma etapa de retrabalho ou correção. | ||
| Descrição Este atributo calculado identifica atividades que representam retrabalho, como 'Fatura corrigida' ou estornos de documentos. Em geral, é um indicador booleano derivado do nome da atividade ou de códigos de transação associados a correções e cancelamentos, como 'VF11', usado para cancelar um documento de faturamento. Em Process Mining, esse indicador é essencial para quantificar o retrabalho no processo de faturamento. Ele contribui diretamente para KPIs como o índice de correção de faturas e ajuda a visualizar ciclos 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 do processo e problemas de qualidade, mostrando o esforço dedicado à correção de erros e contribuindo diretamente para os KPIs de retrabalho. Onde encontrar Derivado do nome da atividade ou do código de transação. Por exemplo: IF ActivityName = 'Invoice Corrected' OR TransactionCode = 'VF11' THEN true ELSE false. Exemplos truefalse | |||
| Moeda Currency | Código da moeda dos valores informados 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 evita somar valores sem a conversão adequada, o que levaria a análises financeiras incorretas. Por que isso importa Fornece o contexto necessário para interpretar valores monetários e garantir análises financeiras precisas, especialmente em ambientes com várias moedas. Onde encontrar Tabela SAP ECC: VBRK, campo: WAERK Exemplos USDEURGBPJPY | |||
| Número do documento de vendas SalesDocumentNumber | Identificador do pedido de venda original que deu origem à fatura. | ||
| Descrição Este atributo vincula diretamente a fatura ao pedido de venda que iniciou a transação. Essa rastreabilidade é essencial para uma análise completa, de ponta a ponta, do ciclo de pedido ao recebimento. 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 do pagamento. 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, oferecendo uma visão mais completa do processo. Por que isso importa Vincula o processo de faturamento ao pedido de venda, permitindo uma análise completa, de ponta a ponta, do ciclo de pedido ao recebimento e ajudando a identificar atrasos entre departamentos. Onde encontrar Tabela SAP ECC: VBRP, campo: VGBEL Exemplos 100000451000004610000047 | |||
| Organização de vendas SalesOrganization | 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 produtos e serviços e pela negociação das condições de venda. É um campo importante para estruturar as operações de vendas e distribuição. Em Process Mining, esse atributo permite analisar o processo de faturamento pela 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 no faturamento e apoiando iniciativas para padronizar boas práticas. Por que isso importa Permite comparar e analisar a performance entre diferentes divisões ou regiões de vendas, ajudando a identificar boas práticas e oportunidades de melhoria. Onde encontrar Tabela SAP ECC: VBRK, campo: VKORG Exemplos 1000NA01EU01AP01 | |||
| Sistema de origem SourceSystem | Identifica o sistema de origem de onde os dados foram extraídos. | ||
| Descrição Este atributo especifica o sistema de registro em que os dados tiveram origem. Em empresas com várias instâncias de ERP ou sistemas integrados, esse campo ajuda a distinguir os dados de cada fonte. Em Process Mining, ele é essencial para validar os dados e comparar processos entre diferentes sistemas ou unidades organizacionais. Em geral, é preenchido com um valor estático durante a extração dos dados para identificar o conjunto de dados. Por que isso importa Indica a origem dos dados, o que é essencial em ambientes com vários sistemas para garantir a integridade dos dados e permitir análises específicas por sistema. Onde encontrar Em geral, é um valor estático adicionado durante o processo de extração, transformação e carregamento (ETL), que identifica 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 | Data e hora da atualização ou extração mais recente dos dados do sistema de origem. | ||
| Descrição Este atributo indica quando os dados foram atualizados pela última vez a partir do sistema de origem. Ele fornece um contexto essencial para qualquer análise, ajudando os usuários a entender a atualidade dos dados exibidos. Em Dashboards e relatórios, essa informação mostra às partes interessadas quando os dados foram atualizados e ajuda a alinhar as expectativas sobre a visibilidade das transações mais recentes. Em geral, ela é gerada ao final do processo de extração dos dados. Por que isso importa Informa aos usuários se os dados estão atualizados, algo essencial para tomar decisões operacionais com base na análise. Onde encontrar 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 pedido ao recebimento - faturamento e emissão de faturas
| Atividade | Descrição | ||
|---|---|---|---|
| Nota fiscal compensada | Situação final de uma nota fiscal paga com sucesso. Indica que o item em aberto foi encerrado por um pagamento correspondente ou uma nota de crédito. A nota fiscal é considerada totalmente liquidada. | ||
| Por que isso importa Marca a conclusão bem-sucedida do ciclo de Order to Cash para uma nota fiscal. Este é o principal evento final para medir o tempo médio total do ciclo da nota fiscal. Onde encontrar Ocorre quando os campos do documento de compensação (AUGBL) e da data de compensação (AUGDT) são preenchidos para o item da nota fiscal na tabela BSEG. Coleta O evento ocorre na data de compensação (AUGDT) registrada na tabela BSEG para o item da nota fiscal. Tipo de evento explicit | |||
| Nota fiscal emitida | Indica a criação do documento de faturamento no sistema. O evento é registrado quando uma nova entrada é criada na tabela de cabeçalho de documentos contábeis (BKPF) com um tipo de documento específico para notas fiscais. | ||
| Por que isso importa Este é o ponto de partida de todo o processo de emissão de notas fiscais. Analisar o tempo a partir deste evento ajuda a medir o tempo de ciclo de emissão e serve de base para calcular o prazo médio de recebimento de vendas (DSO). Onde encontrar Registrado na tabela BKPF. A data (CPUDT) e a hora (CPUTM) de criação de um número de documento específico (BELNR) marcam este evento. O tipo de documento (BLART) identifica o documento como uma nota fiscal. Coleta A partir da data e hora de criação (CPUDT) na tabela BKPF do documento da nota fiscal. Tipo de evento explicit | |||
| Nota fiscal enviada ao cliente | Indica que a nota fiscal foi enviada ao cliente por um canal de saída definido, como impressão, e-mail ou EDI. Em geral, esse evento é registrado nos logs do sistema de gerenciamento de saídas. | ||
| Por que isso importa Este evento é um marco importante que inicia a contagem do prazo de pagamento do cliente. Atrasos nessa etapa afetam diretamente a previsão de recebimento e a eficiência da cobrança. Onde encontrar Pode ser inferido pela data e hora de processamento na tabela de status de mensagens (NAST), para o tipo de saída correspondente à nota fiscal. Coleta Inferido a partir de uma entrada na tabela NAST com status de processamento '1' (processado com sucesso). Tipo de evento inferred | |||
| Nota fiscal lançada | A nota fiscal é registrada oficialmente no razão auxiliar de contas a receber e no razão geral. Com esse evento, ela passa a ter validade jurídica e representa a dívida do cliente. | ||
| Por que isso importa Este é um marco importante que inicia oficialmente a contagem do prazo de cobrança. O tempo entre a emissão e o lançamento pode revelar atrasos no processamento interno que afetam o fluxo de caixa. Onde encontrar Registrado na tabela BKPF. A data de lançamento (BUDAT) do número de documento (BELNR) marca este evento. Para documentos estacionados, o evento ocorre quando eles são convertidos em documentos lançados. Coleta A partir da data de lançamento (BUDAT) na tabela BKPF do documento da nota fiscal. Tipo de evento explicit | |||
| Pagamento do cliente recebido | O pagamento do cliente foi recebido e lançado no sistema como recebimento em dinheiro ou depósito bancário. Isso cria um documento de pagamento separado, ainda não aplicado à nota fiscal específica. | ||
| Por que isso importa Este é um marco importante no ciclo de conversão de caixa. O tempo entre o envio da nota fiscal e o recebimento do pagamento é um dos principais componentes do prazo médio de recebimento de vendas (DSO). Onde encontrar Registrado como um novo documento nas tabelas BKPF e BSEG, geralmente com um tipo de documento que indica pagamento de cliente, como 'DZ'. A data de lançamento (BUDAT) marca o evento. Coleta A partir da data de lançamento do documento de pagamento do cliente na tabela BKPF. Tipo de evento explicit | |||
| Caso de contestação criado | Uma contestação formal foi registrada contra a nota fiscal, geralmente devido a uma reclamação do cliente. O registro é feito no sistema SAP Dispute Management. | ||
| Por que isso importa Identifica notas fiscais com risco de atraso no pagamento e destaca os problemas que causam insatisfação dos clientes. Marca o início de um processo importante de tratamento de exceções. Onde encontrar Capturado quando um caso é criado na tabela de casos de contestação (UDM_CASE) e vinculado ao documento contábil da nota fiscal. Coleta Registrado quando um usuário cria um caso de contestação pela transação UDM_DISPUTE. Tipo de evento explicit | |||
| Data de vencimento da nota fiscal atingida | Evento calculado que marca o dia em que o pagamento da nota fiscal vence oficialmente, de acordo com as condições de pagamento. Não é uma atividade realizada por um usuário ou sistema, mas um momento importante no processo. | ||
| Por que isso importa Essencial para analisar o comportamento de pagamento e a conformidade. Serve de referência para determinar se os pagamentos foram feitos no prazo ou com atraso e calcular o KPI de pagamentos no prazo. Onde encontrar Derivado da comparação entre a data atual e a data líquida de vencimento. A data de vencimento está no campo BSEG-ZFBDT ou é calculada com base na data de referência e nas condições de pagamento. Coleta Compare a data do sistema com o campo de data líquida de vencimento do item da nota fiscal (BSEG). Tipo de evento calculated | |||
| Lembrete de pagamento enviado | O sistema gerou e enviou ao cliente uma notificação de cobrança ou um lembrete de pagamento referente a uma nota fiscal vencida. O evento é 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 envio do lembrete e o recebimento do pagamento é essencial para o KPI de eficácia dos lembretes de pagamento. Onde encontrar Registrado nas tabelas de dados de cobrança, especificamente MHNK (cabeçalho dos dados de cobrança) e MHND (itens dos dados de cobrança), geradas pela execução de cobrança (transação F150). Coleta Registrado quando uma execução de cobrança (F150) é realizada para o item vencido. Tipo de evento explicit | |||
| Nota fiscal aprovada | Representa a aprovação formal da nota fiscal, que permite lançá-la ou enviá-la ao cliente. Em geral, essa aprovação é inferida quando um documento estacionado é convertido em um documento lançado. | ||
| Por que isso importa Acompanha o fluxo de trabalho de aprovação interna, uma fonte comum de gargalos. Analisar esta atividade ajuda a alimentar o Dashboard de análise do fluxo de aprovação de notas fiscais, identificando aprovadores que causam lentidão. Onde encontrar Pode ser inferido pela transição do documento do estado estacionado (na VBKPF) para o estado lançado (na BKPF). Se a organização usar um sistema de fluxo de trabalho, o evento também poderá estar registrado explicitamente nos logs do fluxo. Coleta Compare a data de criação do documento estacionado (VBKPF) com a data de lançamento do documento final (BKPF). Tipo de evento inferred | |||
| Nota fiscal baixada como perda | Situação final alternativa em que a nota fiscal é considerada incobrável e o valor em aberto é baixado contra uma conta de créditos de liquidação duvidosa. A nota fiscal é encerrada sem 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 da inadimplência e aprimorar as políticas de gestão de crédito. Onde encontrar 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 despesas com créditos de liquidação duvidosa, considera-se que a fatura foi baixada como incobrável. Coleta Inferido quando a transação de compensação inclui um lançamento em uma conta contábil designada para créditos de liquidação duvidosa. Tipo de evento inferred | |||
| Nota fiscal corrigida | Representa uma atividade de retrabalho: a nota fiscal original foi identificada como incorreta e depois estornada. O evento é capturado pela identificação de documentos de estorno vinculados à nota fiscal original. | ||
| Por que isso importa Destaca ineficiências no processo e problemas de qualidade. Uma frequência elevada de correções indica problemas nos dados de vendas ou faturamento das etapas anteriores e ajuda a alimentar o Dashboard de retrabalho e taxas de erro em notas fiscais. Onde encontrar 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. Coleta Registrado quando um documento de estorno é criado, por exemplo, por meio da FB08. Tipo de evento explicit | |||
| Nota fiscal estacionada | O documento da nota fiscal foi salvo em estado preliminar, sem ser lançado no razão geral. Isso costuma acontecer quando faltam informações ou quando o documento precisa ser revisado antes do lançamento definitivo. | ||
| Por que isso importa Acompanha as etapas anteriores ao lançamento e possíveis atrasos. Um período prolongado no estado estacionado pode indicar problemas na qualidade dos dados ou gargalos no processo de pré-aprovação. Onde encontrar Os documentos estacionados são armazenados na tabela VBKPF. A criação de um documento nessa tabela, que depois é lançado, representa esta atividade. Coleta Registrado quando um documento é salvo como estacionado usando uma transação como FV70. Tipo de evento explicit | |||
| Pagamento aplicado à nota fiscal | O pagamento recebido do cliente foi conciliado e aplicado à nota fiscal em aberto correspondente, marcando o item para compensação. Esta é a etapa de conciliação que vincula o pagamento à dívida. | ||
| Por que isso importa Esta atividade é essencial para medir o tempo de ciclo de aplicação de pagamentos. Atrasos na aplicação podem distorcer a situação real das contas a receber e ocultar o caixa disponível. Onde encontrar Inferido a partir da transação de compensação, como a F-32, que preenche os campos de compensação no item da nota fiscal. A data da compensação é a data e hora do evento. Coleta Inferido quando a data de compensação (AUGDT) é preenchida na tabela de itens da nota fiscal (BSEG). Tipo de evento inferred | |||
Guias de extração
Etapas
- Acesse o editor ABAP: Entre no sistema SAP ECC. Acesse o editor ABAP usando o código de transação
SE38. - Crie 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. Insira um título descritivo e defina o tipo do programa como 'Executable Program'. - Defina a tela de seleção: No código-fonte do programa, defina os parâmetros da tela de seleção. Eles permitem que os usuários filtrem os dados a serem extraídos. Os principais parâmetros incluem o intervalo de datas de criação do documento (
S_ERDAT), o código da empresa (S_BUKRS) e o tipo de documento de faturamento (S_VBTYP). - Defina as estruturas de dados: Declare uma estrutura de tabela interna para armazenar os dados finais do Event Log. Ela deve incluir campos para
InvoiceNumber,ActivityName,EventTimee atributos recomendados, comoUserName,BillingDocumentType,CustomerNumber,CompanyCodeeTotalInvoiceAmount. - Implemente 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
VBRKeBKPF, com base nos dados informados na tela de seleção. Armazene-os em uma tabela interna temporária. - Extraia 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 'Fatura enviada ao cliente',BSEGpara informações de compensação ('Fatura compensada', 'Pagamento aplicado') eMHNKpara dados de cobrança ('Lembrete de pagamento emitido'). - Monte a tabela do Event Log: Para cada atividade encontrada na etapa anterior, adicione um novo registro à tabela interna final do Event Log. Mapeie corretamente
InvoiceNumber,ActivityName,EventTimee os demais atributos das tabelas de origem. - Grave no servidor de aplicações: Quando o loop terminar e a tabela final do Event Log estiver 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. - Recupere o arquivo: Use o código de transação
AL11para acessar os diretórios do servidor de aplicações e localizar o arquivo gerado. Combine com a equipe SAP Basis o download do arquivo para seu computador ou para um local de rede compartilhado. - Formate o arquivo: Abra o arquivo baixado e confirme que ele está no formato CSV, com uma linha de cabeçalho. Salve-o com codificação UTF-8 para que seja compatível com o ProcessMind.
Configuração
- Pré-requisitos: Acesso para criar e executar programas ABAP (transação SE38). Autorização para ler tabelas FI e SD, incluindo
VBRK,VBRP,BKPF,BSEG,NAST,MHNKeUDM_CASE_ATTR00(para Dispute Management). - Seleção do período: 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 conjunto de dados em um tamanho administrável. - Principais filtros: Sempre filtre pelo código da empresa (
BUKRS) para limitar o escopo da extração. Também é altamente recomendável filtrar pelo tipo de documento de faturamento (VBTYPde VBRK) ou pelo tipo de documento contábil (BLARTde BKPF), incluindo apenas os tipos de fatura relevantes, como 'RV' para faturas contábeis padrão, e excluindo notas de crédito e outros documentos. - Considerações de performance: Para conjuntos de dados grandes, com mais de alguns meses, o programa deve ser executado como um job em segundo plano para evitar o encerramento da sessão por tempo limite. Otimize a lógica ABAP usando leituras de tabelas indexadas e evitando loops aninhados com seleções no banco de dados. O ideal é primeiro selecionar os dados em tabelas internas e depois processá-los.
- 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 CSV, normalmente vírgula ou ponto e vírgula. Verifique se o caminho aponta para um diretório configurado globalmente e acessível.
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: Verifique se você tem um usuário de banco de dados com acesso somente para leitura às tabelas necessárias do SAP ECC, incluindo VBRK, BKPF, BSAD, NAST, CDHDR, CDPOS, SCASE e outras especificadas na consulta. Esse nível de acesso costuma ser concedido apenas a administradores de sistema ou a equipes específicas de análise de dados.
- Conecte-se 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 SAP ECC.
- Prepare a consulta SQL: Copie a consulta SQL completa fornecida na seção 'query' para o editor do seu cliente SQL.
- Personalize os valores de exemplo: A consulta contém vários valores de exemplo que você deve substituir por informações específicas do seu ambiente. São eles:
'YYYYMMDD': Substitua todas as ocorrências pelas datas inicial e final do período que você quer analisar. É fundamental limitar os dados a um intervalo administrável.'XXXX': Substitua pelo código ou pelos códigos da empresa que você quer 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'.
- Revise as funções de data e hora: A consulta usa a sintaxe genérica
CAST(CONCAT(date_field, time_field) AS TIMESTAMP). Talvez seja necessário ajustá-la ao seu banco de dados, por exemplo, usandoTO_TIMESTAMPno Oracle ouDATETIMEFROMPARTSno SQL Server. - Execute a consulta: Execute a consulta modificada. O tempo de execução pode ser longo, dependendo do tamanho das tabelas SAP e do período selecionado.
- Confira os resultados: Quando a consulta terminar, confira se a saída contém as colunas esperadas: InvoiceNumber, ActivityName, EventTime e os atributos recomendados. Verifique se há erros ou se o resultado está vazio.
- Exporte para CSV: Exporte todo o conjunto de resultados do cliente SQL para um arquivo CSV. Use a codificação UTF-8 para evitar problemas com caracteres especiais.
- Prepare o arquivo para carregar: Antes de carregar os dados em uma ferramenta de Process Mining, confirme se os cabeçalhos das colunas CSV correspondem exatamente aos nomes de atributos necessários, por exemplo,
InvoiceNumber,ActivityName,EventTime,UserName.
Configuração
- Conexão com o banco de dados: É necessária uma conexão SQL direta e somente para leitura com o banco de dados SAP ECC. Esse método ignora completamente a camada de aplicação SAP.
- Autorização: O usuário do banco de dados precisa ter permissões
SELECTem todas as tabelas usadas na consulta, que abrangem os módulos FI, SD e, possivelmente, FSCM. - Período: É fundamental filtrar a consulta por um período específico para manter o desempenho e o volume de dados em níveis razoáveis. Recomendamos começar com um período de 3 a 6 meses. Os valores de exemplo de data
'YYYYMMDD'precisam ser definidos em várias partes da consulta. - Filtro por código da empresa: A consulta foi projetada para ser filtrada pelo código da empresa (
BUKRS). É prática comum analisar um ou poucos códigos de empresa por vez. - Configuração dos tipos de documento: A lógica para identificar eventos como correções de faturas, baixas contábeis 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. Recomendamos executar extrações grandes fora dos horários de pico ou em uma réplica do banco de dados dedicada a relatórios.
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: Verifique se você tem uma ferramenta ETL licenciada com um conector SAP certificado, como Informatica PowerCenter com SAP Connector ou Talend com SAP Connector. Confirme se suas credenciais de usuário SAP têm 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).
- Estabeleça a conexão SAP: Na ferramenta ETL, crie uma conexão com seu sistema SAP ECC. Configure os dados de conexão, incluindo servidor de aplicações, número do sistema, cliente, usuário e senha. Teste a conexão para confirmar que está funcionando.
- Defina as fontes de dados: Para cada atividade a extrair, defina as tabelas SAP correspondentes como fontes de dados no job ETL. Por exemplo, adicione VBRK para a geração de faturas, BKPF para eventos de lançamento e NAST para a comunicação com clientes.
- Crie 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 pelo código da empresa (BUKRS), tipo de documento (BLART) e um período específico, como a data de criação ERDAT.
- Mapeie os campos e transforme os dados: Em cada fluxo, mapeie os campos das tabelas SAP de origem para a estrutura do Event Log de destino: InvoiceNumber, ActivityName, EventTime, UserName e outros atributos recomendados. Use a lógica de transformação para definir o valor de 'ActivityName' em cada fluxo e formatar corretamente datas e horários.
- Trate atividades complexas: Para eventos calculados, como 'Data de vencimento da fatura atingida', use a data de referência do pagamento (ZFBDT) e a lógica das condições de pagamento para calcular a data de vencimento, ou extraia diretamente a data líquida de vencimento (NETDT) de BSEG. Para eventos derivados de registros de alteração, como 'Fatura aprovada', talvez seja necessário combinar tabelas como BKPF e CDHDR/CDPOS com base no número e na data do documento.
- Combine os dados das atividades: Use uma transformação 'Union' ou 'Merge' na ferramenta ETL para combinar as saídas dos 13 fluxos de dados individuais em um único conjunto de dados. Antes da união, confirme se os nomes das colunas e os tipos de dados são consistentes em todos os fluxos.
- Configure o destino: Defina o destino final de 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 preparação.
- Defina o cronograma de extração: Configure os parâmetros de período da extração. Na carga inicial, você pode extrair de 6 a 12 meses de dados. Para as cargas delta seguintes, configure o job para extrair dados desde a data da última execução.
- Execute e exporte: Execute o job ETL. Ao terminar, confira se o arquivo de saída está no formato necessário. O resultado final deve ser um único arquivo CSV, com cada linha representando um evento, pronto para carregar 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ção para consultar 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 correspondente.
- Período: Recomendamos extrair dados de um período de 3 a 6 meses para obter uma amostra representativa para análise sem sobrecarregar o sistema. Use um parâmetro configurável para as datas inicial e final.
- Principais filtros: Sempre filtre pelo 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 reduzir o impacto na performance do sistema SAP de origem.
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 dados e obter insights valiosos sobre seu processo de faturamento e emissão de faturas. Comece hoje a acelerar seu fluxo de caixa.
Acelere o fluxo de caixa: otimize o faturamento e a emissão de faturas hoje!
Elimine ineficiências, reduza o tempo de ciclo em 30% e melhore seu fluxo de caixa.
Não é necessário informar o cartão de crédito. Comece a otimizar em poucos minutos.