Ir para conteúdo
  • Cadastre-se

  • Este tópico foi criado há 4248 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Senhores, boa tarde.

 

Tenho uma dúvida a respeito do envio de NFe em modo assíncrono. 

ACBrNFe1.NotasFiscais.Clear;
ACBrNFe1.NotasFiscais.LoadFromFile(GetXML);
ACBrNFe1.NotasFiscais.GerarNFe;
ACBrNFe1.NotasFiscais.Assinar;
ACBrNFe1.NotasFiscais.Valida;
ACBrNFe1.WebServices.Enviar.Lote := GetLote;
ACBrNFe1.WebServices.Enviar.Sincrono := false;
ACBrNFe1.WebServices.Enviar.Executar; //// <<<< AQUI A DÚVIDA
{armazena o Recibo para buscar o retorno no próximo passo}
SavarRecibo(ACBrNFe1.WebServices.Enviar.Recibo);
{o usuário aguarda um tempo e busca o retorno}
{ ... }
ACBrNFe1.WebServices.Retorno.Recibo := GetRecibo;
ACBrNFe1.WebServices.Retorno.Executar;
for i:= 0 to ACBrNFe1.WebServices.Retorno.NFeRetorno.ProtNFe.Count-1 do
begin
  // verifica se NFe autorizada, denegada, recusada, grava resultados, etc
end;

O pseudo código acima é funcional. A NF é recebida pelo WS, colocada na fila, e o Recibo é armazenado para ser consultado no WS posteriormente.

 

No entanto, vamos supor que a internet em um momento se torne instável. O WS recebe o lote, coloca-o na fila de processamento e envia o Recibo, só que, devido a instabilidade da internet, não recebo o Recibo. Não sei se o WS recebeu a NF, tão pouco sei se foi autorizada ou não. Nesse caso, preciso guardar o XML assinado e transmitido, e consultar a NF pela chave de acesso:

ACBrNFe1.WebServices.Consulta.NFeChave := GetNFeChave;
ACBrNFe1.WebServices.Consulta.Executar;

Caso retorne “não-autorizada”, corrijo o erro, gero novo XML, e repito o processo.

Caso retorne “autorizada”, monto o “nfeProc”, conferindo o DigestValue do protocolo e do XML assinado são idênticos.

 

Aqui cheguei no ponto! Preciso me certificar de ter o mesmo XML recebido e autorizado pelo WS, senão corro o risco de ficar com um XML incorreto. Em outras palavras, caso o Recibo do lote se perca, preciso resguardar o XML, não podendo deixar o usuário editá-lo, até confirmar se foi autorizado ou não.

 

Minha dúvida:

Ao chamar:

ACBrNFe1.WebServices.Enviar.Executar;

Qual o melhor caminho para identificar a situação descrita acima? Quando devo “travar” o XML? A chamada acima gera um Exception nesses casos?

 

É difícil reproduzir a situação, tentei puxando o cabo de rede, mas não deu certo  :cool:

 

PS – sei que se tudo der errado (digestValue diferente) posso fazer o download do XML pelo site do SEFAZ, mas ai complica pro usuário que só sabe apertar botões.

 

Grato.

 

  • Este tópico foi criado há 4248 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

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