Skip to Content

Nota fiscal de saída (OINV) – Problema ao calcular imposto retido na fonte.

Olá pessoal!

 

Venho escrever minha segunda publicação para um problema que detectei no SAP que é bastante bizarro e pontual… Vou tentar ser o mais sucinto possível para um entendimento rápido e eficiente.

 

Desenvolvi um agente integrador entre um sistema legado e o SAP, este agente trabalha com um banco integrador, onde o sistema legado deposita as informações, o agente leva para o SAP, e depois devolve para o banco integrador o feedback da integração, seja positivo ou não. Essa integração funciona em duas vias, tanto o sistema integrador para o SAP, quanto o SAP para o sistema de integrador, utilizando um banco de dados como meio de comunicação.

 

Diante o descritivo acima, vamos ao problema… Em um determinado momento (sim, um determinado, algo esporádico, dentre 1 milhão de notas, vem uma com problema) o add-on integra a nota fiscal de saída com seus devidos impostos retidos na fonte, e a integração é apenas o código do imposto, os valores ficam a cargo do calculo interno do SAP, conforme a imagem abaixo:

 

Na imagem acima, somente o campo ID_EXTERNO é integrado, este campo representa o código do imposto, os campos VALOR e VALOR_ALTERADO servem para marcar o valor inicial do imposto que foi calculado no SAP, e se houver alterações, o add-on inclui no campo VALOR_ALTERADO, assim, é só subtrair o campo VALOR_ALTERADO – VALOR e saberá se houve acréscimo ou decréscimo.

Neste caso específico, a nota tem imposto retido na fonte e o SAP deveria ter calculado, mas na pratica não foi o que ocorreu:

 

Depois de tentar descobrir quais possíveis causas que poderiam afetar isso dentro do SAP, inclusive solicitando apoio de consultores, eu pensei em cancelar a nota acima e reenviar ela para a integração a partir da base de dados, na tentativa de repetir o mesmo erro que aconteceu, só que para minha surpresa, o SAP calculou certinho, conforme as imagens abaixo:

 

Notem que utilizei as mesmas características da nota que deu problema no calculo de imposto, mas na segunda tentativa, o SAP calculou corretamente, segue abaixo o trecho de código em C# que utilizo para integrar tal informação:

 

A principio, a solução que pensei foi integrar o código e o valor do imposto retido na fonte, e de fato isso corrige o problema, mas o cliente precisou criar toda uma rotina para fazer tal calculo, sendo que o SAP faz isso. Realizei testes pela propria interface do SAP e não consegui simular estre problema, e em diversas integrações via DI API, também não consegui simular tal situação, somente no cliente, e é uma margem de quase 99,9% certo e uma com esse problema, em números podemos dizer que é uma em um milhão.

 

Minha sugestão para aqueles que enfrentarem o mesmo problema que eu, é integrar o código e o valor do imposto, é mais seguro, porém é mais trabalhoso, conforme o trecho de código abaixo:

 

Hoje não consigo determinar de fato qual situação devo fazer para dar este problema, logo não consigo criar evidências concretas para a abertura de um chamado e a SAP atue para nos ajudar, então continuarei investigando para descobrir a causa deste problema, e claro, contando com ajuda da vasta comunidade de desenvolvedores SAP SDK para solucionar esta situação.

 

É isso, muito obrigado pela atenção de todos e mãos a obra!

 

PS: A equipe da SAP, seria de grande ajuda o diagnostico deste problema, então se puderem me surpreender e descobrir a solução, ficarei extremamente grato.

 

Informações técnicas

SAP Business One 9.2 PL7;

Microsoft Visual Studio 2017;

Microsoft SQL Server 2012;

6 Comments
You must be Logged on to comment or reply to a post.
  • Luiz,  já tive problemas deste tipo até com imposto direto. minha integração hoje funciona com imposto direto, mas faço uma ligação com o pedido de compra/venda… vou testar minhas integrações com impostos retidos e depois te digo.

    Mas antes gostaria de saber alguns detalhes:

    1. o cadastro do item esta configurado para reter imposto? Flag “Sujeito a retenção de imposto”
    2. A determinação de código de imposto esta configurada e funcionando?, ou seja, quando seleciono o PN, item, valor é calculado automaticamente o B1.
    3. Qual é versão do SAP  que você esta utilizando?  eu estou no 9.2 pl 08

     

     

    • Bom dia Eduardo Gama,

      Eu acabei trocando de área, estava acontecendo algumas mudanças para desenvolvedores B1 e não concordei, então resolvi voltar para meu campo de conforto que é desenvolvimento web e mobile.

      Mas, segue as respostas para teus questionamentos:

      1. o cadastro do item esta configurado para reter imposto? Flag “Sujeito a retenção de imposto”

      Sim.

       

      1. A determinação de código de imposto esta configurada e funcionando?, ou seja, quando seleciono o PN, item, valor é calculado automaticamente o B1.

      Sim.

      1. Qual é versão do SAP  que você esta utilizando?  eu estou no 9.2 pl 08

      No momento que criei este arquivo, era exatamente a sua versão, 9.2 PL8.

       

      Um resumo do que acontecia era que o calculo do imposto na interface do SAP funcionava perfeitamente, na integração tinha uma porcentagem de 99,9% de sucesso, apenas alguns casos esporádicos davam problema.

      Imagina a dor de cabeça que dava pro contador na hora de descobrir porque os valores não batiam? Era tremenda!

      A solução imediata que dei naquele momento foi o sistema deles ficasse responsável pelo calculo do imposto retido e enviasse pro SAP, assim resolveu o problema, porém, o cliente ficou questionando a eficácia do SAP.

      Espero que o SAP descubra o problema e solucione, para que facilite a vida dos meus ex-companheiros de profissão (desenvolvedores B1).

      Um forte abraço e sucesso!

  • Luiz,

    Fiz teste com minha integração e não ocorreu problema, lembrando que minha integrações passam por pedido de compra.

    Fiz  de duas maneiras

    1. configurando o SAP para determinar o imposto automaticamente
    2. incluindo os impostos manualmente:

    OrderApp.Lines.WithholdingTaxLines.WTCode = “E004”
    OrderApp.Lines.WithholdingTaxLines.Add
    OrderApp.Lines.WithholdingTaxLines.WTCode = “E008”
    OrderApp.Lines.WithholdingTaxLines.Add

     

    Um abraço

     

    Eduardo Gama

     

    • A forma que você está utilizando é exatamente a forma que utilizei, e como mencionei anteriormente, existia uma porcentagem de 99,9% de sucesso, era casos esporádicos que davam este problema.