Nestes últimos dias estou sofrendo com alguns problemas incomuns. Irei explicar minha rotina.
Acontece que, após enviar uma NF-e para o ACBrPlus, o arquivo de retorno pode travar, por razões que na maioria das vezes não tem nada com o ACBrPlus. Sendo assim, eu não sei se a NF-e foi autorizada pela Receita corretamente e o sistema não tem a confirmação por não poder tratar o retorno. Como não tenho o retorno, o que faço e deixar o usuário enviar novamente. Caso o retorno apresente a mensagem de duplicidade, eu sei que a NF-e foi emitida corretamente, entretanto o XML pode estar desatualizado, e para atualizar faço uma consulta para receber a confirmação que a NF-e está autorizada.Â
Passos:Â ACBr MonitorPLUS Ver.1.1.0.33
1. - NFE.CriarEnviarNFE() - Se o retorno foi cStat=100, tudo certo com a NF-e, envio o e-mail e imprime o DANFE. Se for DENEGADA, também faço o procedimento. Se estiver com erros, apresento ao usuário.
2. - Caso o arquivo de retorno trave, eu não consiga ler para saber o que aconteceu, faço o seguinte, libero o sistema para o usuário enviar novamente,Â
   NFE.CriarEnviarNFE() - Envio o arquivo TXT novamente e o ACBrPlus gera o TXT novamente.
   Se o retorno for duplicidade, faço uma consulta NFE.CONSULTARNFE(G:\NFEPDS\XML\Mar2018\31180319678344000182550010000054481000054488-nfe.XML)
   Nunca tive problemas, o ACBrPlus atualizava o XML pra mim e eu imprimia o DANFE e enviava o e-mail. Sempre fiz desta maneira.Â
  Acontece que hoje, recebi o seguinte retorno.
  02/03/2018 17:35:51 - NFE.CONSULTARNFE(G:\NFEPDS\XML\Mar2018\31180319678344000182550010000054481000054488-nfe.XML) Â
  02/03/2018 17:35:52 - ERRO: Autorizado o uso da NF-e
  DigestValue do documento 31180319678344000182550010000054481000054488 não confere.
- Alguma coisa modificou neste processo?
- Como neste cliente existe muitos usuários, pode ser que algum tenha gerado a NF-e com uma versão antiga do ACBrNFeMonitor2 0.9.10.0 e agora outra máquina pode estar tentando criar o XML e pode estar modificando algo?
nArquivo=FOPEN(cFileRetorno,0)
if nArquivo = -1
Autorizada=.F.
cDenegada=.F.
//---------------------------------------------------------------------------------------------------------------
// Caso o sistema não consiga abrir o arquivo TXT, irei fazer mais uma tentativa com MEMORED
// Não sei por qual razao, parece que o acbr está travando o arquivo e não consigo abrir
// por isso fiz esta rotina abaixo para testar.
if FILE(cFileRetorno)
gTexto:=MEMOREAD(cFileRetorno)
if AT("CStat=100",gTexto)>0
Autorizada=.T.
elseif (AT("CStat=110",gTexto)>0 .or. AT("CStat=301",gTexto)>0 .or. AT("CStat=302",gTexto)>0 .or. AT("CStat=205",gTexto)>0)
cDenegada=.T.
end
end
else
lEof=.F.
cStat=.F.
Autorizada=.F.
cDenegada=.F.
vChave=""
RetCStat=""
do whil !lEof
cLinha=LINHAARQ(nArquivo,1024)
cStat=IIF(ALLTRIM(cLinha)="[NFE"+ALLTRIM(STR(VAL(AL_SAIDA->codigo),6))+"]",.T.,cStat)
if cStat
if LEFT(cLinha,5)="CStat"
RetCStat=SUBS(cLinha,7,3)
if SUBS(cLinha,7,3)="100"
// Nota Fiscal Altorizada
Autorizada=.T.
elseif (SUBS(cLinha,7,3)="110" .or. SUBS(cLinha,7,3)="301" .or. SUBS(cLinha,7,3)="302" .or. SUBS(cLinha,7,3)="205")
// Nota Fiscal Denegada
cDenegada=.T.
end
end
end
end
end
FCLOSE(nArquivo)
sFileCopy:=""
if (!Autorizada .and. !cDenegada)
//-------------------------------------------------------------------------
// Se na primeira consulta nao houve retorno
// cStat = 100 - Autorizado Uso da NF-e
// cStat = 110 / 301 / 302 = Nota Fiscal Denegada
// Aconteceu algum problema no arquivo de retorno da NF-e
*sFileCopy:=aw_acbr+"SAINFE"+ALLTRIM(AL_SAIDA->serien)+AL_SAIDA->codigo+".COP"
*COPY FILE &cFileRetorno TO &sFileCopy
FERASE( cFileRetorno )
cLine := "NFE.CONSULTARNFE("+ALLTRIM(AL_SAIDA->arqxml)+")"+cCHR
HB_MEMOWRIT( cFileEnvio, cLine )
nCont:=1
do whil !FILE(cFileRetorno) .and. nCont<=120
inkey(1) ; nCont++
end
if FILE(cFileRetorno)
gTexto:=MEMOREAD(cFileRetorno)
if AT("CStat=100",gTexto)>0
Autorizada=.T.
elseif (AT("CStat=110",gTexto)>0 .or. AT("CStat=301",gTexto)>0 .or. AT("CStat=302",gTexto)>0 .or. AT("CStat=205",gTexto)>0)
lDenegada=.T.
end
end
*__COPYFILE( cFileRetorno, cFileArquivoRetorno )
FERASE( cFileRetorno )
*AEVAL( DIRECTORY(aw_nfe+"xml\*-rec.xml","D"), {|aFile| FERASE(aw_nfe+"xml\"+aFile[1]) })
end
Desde já agradeço.
Saudações,Â
Júlio.Â