Caros colegas,
O fluxo de minha aplicação exige que a cada NFe enviada para SEFAZ eu aguarde
o processamento da mesma. Então eu uso o seguinte código ao enviar a NFe:
***
if (not NFe.Enviar(Dados.Codigo, False)) then begin
raise Exception.CreateFmt('Nota fiscal eletrônica não foi autorizada!!!' +
#13#13'Motivo: %s'#13#13'Mensagem: %s',
[NFe.WebServices.Retorno.xMotivo, NFe.WebServices.Retorno.xMsg]);
end;
while (NFe.NotasFiscais.Items[0].NFe.procNFe.cStat = 105) do begin
NFe.Consultar;
if (NFe.NotasFiscais.Items[0].NFe.procNFe.cStat <> 105) then begin
Break;
end;
Sleep(5000);
Application.ProcessMessages;
end;
if (NFe.NotasFiscais.Items[0].NFe.procNFe.cStat <> 100) then begin
raise Exception.CreateFmt('NFe não autorizada - Motivo: [%s] - Status: [%s]',
[NFe.NotasFiscais.Items[0].NFe.procNFe.xMotivo,
IntToStr(NFe.NotasFiscais.Items[0].NFe.procNFe.cStat)]);
end;
***
O problema é que as vezes ele sai do loop sem erro mas o status não é 100 e quando consulto
na SEFAZ pela chave da nota, a mesma está autorizada. Más quando ele processou, não retornou
o status 100, más saiu do loop com um status diferente de 105.
1) Alguém sabe me dizer se após eu "Enviar" a NFe se tem algum status além do 105 no qual devo
continuar aguardando no loop até que o mesmo mude para 100 ou gere um erro?
2) O problema é que isso é aleatório, na maioria das vezes não acontece, então não consigo
simular o erro. Por exemplo, pode retornar status 104 e a nota ainda não estar liberada?
Obrigado.