Jump to content

dev botao

Como tratar os retornos NFE_Validar() NFE_ValidarRegrasdeNegocios()


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

Recommended Posts

  • Membros Pro

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

Link to comment
Share on other sites

  • Solution

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

 

Link to comment
Share on other sites

  • Membros Pro

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

Link to comment
Share on other sites

  • Fundadores

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

Link to comment
Share on other sites

  • Membros Pro

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

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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