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;