Ir para conteúdo
  • Cadastre-se

dev botao

Como tratar os retornos NFE_Validar() NFE_ValidarRegrasdeNegocios()


Ver Solução Respondido por Rafael Dias,
  • Este tópico foi criado há 1670 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

Olá, estou iniciando a emissão de NFe e NFCe pela AcbrLIbNfe(0.4.6.84) , ja consigo emitir notas e consultar ok.

Mas nao consigo tratar quando há retornos pelos comandos NFE_Validar() e NFE_ValidarRegrasdeNegocios(), utilizo em Harbour.

Quando a DLL retorna SetRetorno -10,-11 da um erro na DLL e fecha, gostaria de fazer as validacoes antes do envio para Sefaz, outro comando que da erro se a Sefaz estiver fora do ar é o comando NFE_StatusServico().
Vou enviar o Log da DLL, estou utilizando as funcoes implementadas pelo DEMO em Harbour.

 

ACBrLibNFE-20200429.log AcbrLib.ini

  • Solution
Postado

Se a aplicação esta fechando é erro na sua parte, pois o log é até preenchido.

Sempre que o retorno for diferente de 0 vai ser lançado uma excpetion que você precisa capturar para processar as informações delas, se você não capturar estes erros a aplicação fechara mesmo.

Pelo que li no [x]Harbour tem o Try Catch e no Harbour é Begin Sequence e RECOVER

https://github.com/Petewg/harbour-core/wiki/Statements

 

  • Membros Pro
Postado

quando esta ok os dados da NFe funciona uma blz, mas quando retorna -10, -11 ele nao da retorno, vou colocar o methodos que utlizo.

METHOD CheckResult(hResult) CLASS ACBrNFe
    local buffer, bufferLen, oErr
    if hResult >= 0
       RETURN nil
    endif
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    DllCall(::hHandle, DLL_OSAPI, "NFE_UltimoRetorno", @buffer, @bufferLen)
    if bufferLen > STR_LEN
        buffer := Space(bufferLen)
        DllCall(::hHandle, DLL_OSAPI, "NFE_UltimoRetorno", @buffer, @bufferLen)
    endif
    oErr := ErrorNew()
    oErr:Severity := ES_ERROR
    oErr:Description := hb_UTF8ToStr(buffer)
    oErr:CanDefault    := .T.
    oErr:CanRetry      := .F.
    oErr:CanSubstitute := .F.
    Throw(oErr)

    RETURN nil

METHOD Validar() CLASS ACBrNFe
    local hResult
    hResult := DllCall(::hHandle, DLL_OSAPI, "NFE_Validar")
    ::CheckResult(hResult)
    RETURN nil

Neste caso ele gera um exception e lanca pelo Throw, mas da como erro do sistema e QUIT e na verdade teria qu somente gerar a string com o set retorno , nao seria?

LibNFe.prg

  • Fundadores
Postado

é uma técnica comum de programação, disparar Exceptions, para a rotina que invoca, possa capturar...

Qual é a sua sugestão, para a mudança na Classe de Alto nível, em xHarbour ?

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membros Pro
Postado

Caro, @Daniel Simoes, nao quero mudar a LIB que ja é utilizada por muitos e salva a vida de muitos, somente gostaria de entender a mesma.

Como foi falado no post anterior, entao quando ela retorna -10 ou -11 ela gera um EXCEPTION, agora preciso tratar esse exception em Harbour, achei que mesmo no set retorno -10 ou -11 ela retornaria o erro, mas nao.

TFA

 

Postado

todo retorno negativo é um excpetion/erro, por isso a classe trabalha da mesma maneira.

Outra coisa que lembrei é que a função Validar, ela já funciona assim no pascal, em casa de erro de validação ela lança um exception, por isso tem este mesmo comportamento na lib.

Se pegar a mensagem da excpetion vai ter os erros.

  • Curtir 1

 

  • Fundadores
Postado
2 horas atrás, Michel Guedes Campos disse:

Caro, @Daniel Simoes, nao quero mudar a LIB que ja é utilizada por muitos e salva a vida de muitos, somente gostaria de entender a mesma.

Como foi falado no post anterior, entao quando ela retorna -10 ou -11 ela gera um EXCEPTION, agora preciso tratar esse exception em Harbour, achei que mesmo no set retorno -10 ou -11 ela retornaria o erro, mas nao.

TFA

 

Não é a Lib que gera um Exception, ela apebas retorna um valor negativo...

Quem gera o Exception é a Classe de Alto Nível em xHarbour, e a qual você tem os fontes...  ou seja, você pode modificar o método "CheckResult" para não levantar um Exception...

Um T.F.A.

 

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.