Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Preciso saber como tratar o envio da Nfe qdo ocorrer um time out no envio. Me ocorreu com varios cliente da minha empresa que ao enviar deu uma certa demora e ocorreu um time out ai nao grava o retorno e ao tentar enviar novamente retorna que esta em duplicidade, 

Ai eu tento consultar com a chave fala que nao exista na base.

Entao eu preciso saber:

 

- Qual o melhor parametro pra intervalo de tentativas e numero de tentativas.

 

- Como tratar o envio. Veja meu codigo:

 

Try
    DM_NFE.ACBrNFe1.Enviar(0,False);
 
    // inserir evento na tabela nfe_eventos
    DM.QCuringa.Close;
    DM.QCuringa.SQL.Text:='Insert Into nfe_eventos(id_nfe,xml,data,protocolo,historico,chave,codigo_status,ambiente)';
    DM.QCuringa.SQL.Add('Values(:id_nfe,:xml,:data,:protocolo,:historico,:chave,:codigo_status,:ambiente)');
    DM.QCuringa.ParamByName('id_nfe').AsInteger       :=QNotaid_nfe.AsInteger;
    DM.QCuringa.ParamByName('Xml').Value                :=DM_NFE.ACBrNFe1.NotasFiscais.Items[0].XML;
    DM.QCuringa.ParamByName('data').AsDateTime      :=DM_NFE.ACBrNFe1.NotasFiscais.Items[0].NFe.procNFe.dhRecbto;
    DM.QCuringa.ParamByName('Protocolo').AsString     :=DM_NFE.ACBrNFe1.WebServices.Retorno.Protocolo;
    DM.QCuringa.ParamByName('Chave').AsString         :=DM_NFE.ACBrNFe1.WebServices.Retorno.ChaveNFe;
    DM.QCuringa.ParamByName('codigo_status').AsInteger:=DM_NFE.ACBrNFe1.WebServices.Retorno.cStat;
    DM.QCuringa.ParamByName('ambiente').AsInteger     :=QNotaambiente.AsInteger;
    If QNotaambiente.AsInteger=1 then
      DM.QCuringa.ParamByName('historico').AsString     :='ENVIO DA NFE EM PRODUCAO'
    else
      DM.QCuringa.ParamByName('historico').AsString     :='ENVIO DA NFE EM HOMOLOGAÇÃO';
    DM.QCuringa.ExecSQL;
 
       //enviar email
       DM_NFE.EnviaEmailACBRDireto(QNotaid_nfe.AsInteger,'SUA NFE '+QNotanf.AsString);
     end;
 
     //imprimir
     DM_NFE.ACBrNFe1.NotasFiscais.Imprimir;
   except
    on e:Exception do
     begin
       btnEnviar.Enabled:=True;
 
       if (DM_NFE.ACBrNFe1.WebServices.Retorno.cStat=105) or (pos('LOTE EM PROCESSAMENTO',uppercase(e.message))>0) then
        begin
          // caso ocorra um erro o sistema salva a chave para futuras consultas
          DM.QCuringa.Close;
          DM.QCuringa.SQL.Text:='Insert Into nfe_eventos(id_nfe,data,historico,chave,codigo_status,ambiente)';
          DM.QCuringa.SQL.Add('Values(:id_nfe,:data,:historico,:chave,:codigo_status,:ambiente)');
          DM.QCuringa.ParamByName('id_nfe').AsInteger       :=QNotaid_nfe.AsInteger;
          DM.QCuringa.ParamByName('data').AsDateTime        :=Date;
          DM.QCuringa.ParamByName('Chave').AsString         :=xChave;
          DM.QCuringa.ParamByName('codigo_status').AsInteger:=DM_NFE.ACBrNFe1.WebServices.Retorno.cStat;
          DM.QCuringa.ParamByName('ambiente').AsInteger     :=QNotaambiente.AsInteger;
          DM.QCuringa.ParamByName('historico').AsString     :='LOTE EM PROCESSAMENTO';
          DM.QCuringa.ExecSQL;
        end
       ELSE
        begin
          DM.QCuringa.Close;
          DM.QCuringa.SQL.Text:='Insert Into nfe_eventos(id_nfe,data,historico,chave,codigo_status,ambiente)';
          DM.QCuringa.SQL.Add('Values(:id_nfe,:data,:historico,:chave,:codigo_status,:ambiente)');
          DM.QCuringa.ParamByName('id_nfe').AsInteger       :=QNotaid_nfe.AsInteger;
          DM.QCuringa.ParamByName('data').AsDateTime        :=Date;
          DM.QCuringa.ParamByName('Chave').AsString         :=xChave;
          DM.QCuringa.ParamByName('codigo_status').AsInteger:=DM_NFE.ACBrNFe1.WebServices.Retorno.cStat;
          DM.QCuringa.ParamByName('ambiente').AsInteger     :=QNotaambiente.AsInteger;
          DM.QCuringa.ParamByName('historico').AsString     :='OCORREU UM ERRO AO ENVIAR';
          DM.QCuringa.ExecSQL;
        end;
     end;
   end;

 

Grato

 

 

  • Membros Pro
Postado

Eu utilizo a seguinte logica:

Ao tentar enviar a NFe eu salvo ela com o Status = 105-Lote em processamento, caso ocorra um erro no envio, ela continua em processamento.

Quando eu tento consultar uma NFe que está com o Status "Lote em processamento" eu realizo a consulta no Lote, se o lote já foi processado pela Sefaz eu atualizo o status da NFe.

Gilson do Carmo
WindSoft Sistemas

  • Este tópico foi criado há 3537 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.