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