Nesse artigo, vamos demonstrar em como criar uma validação para que uma informação no TOTVS Transmite bata com a informada no Documento de Entrada.
Num cenário hipotético, após a importação das informações do XML no TOTVS Transmite, indo a informação para a tabela SDS.
O usuário está fazendo a classificação / digitação das informações do Documento de Entrada, mas e se houver alguma TES divergente, algum imposto que esteja afetando o total, e essa informação não bata com o XML, como resolver?
O ideal seria barrar a operação, então, a lógica seria mais ou menos a seguinte:
- Usar o ponto de entrada MT100TOK
- Dentro dele, buscamos a informação que queremos validar, nesse exemplo vai ser o total da nota via MaFisRet
- Então abrimos a SDS e posicionamos na mesma chave de acesso
- E fazemos a comparação do valor da SDS (XML) com o que está na tela
- Se houver divergência, não prosseguirá o sistema e irá acusar uma mensagem de falha
Segue abaixo o código fonte conforme a lógica explicada acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} MT100TOK
Ponto de Entrada ao clicar no botão confirmar do Documento de Entrada
@type user function
@author Atilio
@since 06/10/2025
@version version
@see https://tdn.totvs.com/pages/releaseview.action?pageId=6085400
/*/
User Function MT100TOK()
Local aArea := FWGetArea()
Local aAreaSDS := SDS->(FWGetArea())
Local lContinua := .T.
Local nValorBrut := MaFisRet(, "NF_TOTAL") // F1_VALBRUT
Local nValorMerc := MaFisRet(, "NF_VALMERC") // F1_VALMERC
Local cChaveNota := M->F1_CHVNFE
Local cMensagem := ""
Local cMascara := PesqPict("SF1", "F1_VALBRUT")
DbSelectArea("SDS")
SDS->(DbSetOrder(2)) // DS_FILIAL + DS_CHAVENF
//Se encontrou a chave vinda do TOTVS Transmite
If ! Empty(cChaveNota) .And. SDS->(MsSeek(FWxFilial("SDS") + cChaveNota))
//Se o valor bruto ou o de produtos não bater
If SDS->DS_TOTAL != nValorBrut .Or. SDS->DS_VALMERC != nValorMerc
lContinua := .F.
cMensagem := ". Bruto: " + Alltrim(Transform(nValorBrut, cMascara)) + " vs " + Alltrim(Transform(SDS->DS_TOTAL, cMascara))
cMensagem += ". Mercadorias: " + Alltrim(Transform(nValorMerc, cMascara)) + " vs " + Alltrim(Transform(SDS->DS_VALMERC, cMascara))
ExibeHelp("Help_MT100TOK", "O Valor da Nota não bate com o que veio do XML no TOTVS Transmite! " + cMensagem, "Analise as informações e faça a correção")
EndIf
EndIf
FWRestArea(aAreaSDS)
FWRestArea(aArea)
Return lContinua
Bom pessoal, por hoje é só.
Abraços e até a próxima.