Jump to content

dev botao

Como tratar os retornos NFE_Validar() NFE_ValidarRegrasdeNegocios()


Go to solution Solved by Rafael Dias,
  • Este tópico foi criado há 1902 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Posted

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
Posted

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
Posted

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
Posted

é 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
Posted

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

 

Posted

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.

  • Like 1

 

  • Fundadores
Posted
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.

 

  • Like 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.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...