Criar validação entre TOTVS Transmite e Documento de Entrada

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:

  1. Usar o ponto de entrada MT100TOK
  2. Dentro dele, buscamos a informação que queremos validar, nesse exemplo vai ser o total da nota via MaFisRet
  3. Então abrimos a SDS e posicionamos na mesma chave de acesso
  4. E fazemos a comparação do valor da SDS (XML) com o que está na tela
  5. 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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação