Ir para conteúdo
  • Cadastre-se

dev botao

Erro Com Retorno


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

Recommended Posts

  • Membros Pro

Conforme código abaixo, so deixo imprimir uma nota que tenha o retorno 100 para não permitir que notas sem autorização pelo sefaz sejam impressas. Porem eventualmente tem notas sem autorização sendo impressas conforme imagem em anexo.

 

Alguem tem idéia do que pode ser?

 

 

 

if dmgeral.ACBrNFe1.WebServices.Retorno.cStat = 100 then

  begin

    dmgeral.ACBrNFe1.NotasFiscais.Imprimir;

    dmgeral.ACBrNFe1.NotasFiscais.Items[0].ImprimirPDF;

    dmgeral.ACBrNFe1.NotasFiscais.Items[0].SaveToFile;

end;

post-10634-0-74148200-1431970847_thumb.j

post-10634-0-74148200-1431970847_thumb.j

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Felipe,

 

A impressão só ocorre depois do envio?

 

Ou você tem uma opção onde o usuário pode escolher uma determinada nota e solicitar a impressão do DANFE?

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Bom dia Ítalo, a impressão só ocorre depois do envio, vou postar o código inteiro pra vc dar uma olhada:

  try

    dmgeral.ACBrNFe1.NotasFiscais.Assinar;

  except

    ShowMessage('Erro ao assinar a NFe.Verifique!');

    exit;

  end;

  try

    dmgeral.ACBrNFe1.NotasFiscais.GerarNFe;

  except

    ShowMessage('Erro ao gerar a NFe. Verifique!');

    exit;

  end;

  sucesso := 'nao';

  for cont_erro := 0 to 4 do

  begin

    try

      dmgeral.ACBrNFe1.Enviar(1,False,false);

      sucesso := 'sim';

    Except

    end;

    if (sucesso = 'sim') or (cont_erro >= 5)  then

    begin

      break;

    end;

    Sleep(3000);

  end;

  if (dmgeral.ACBrNFe1.WebServices.Retorno.cStat <> 100) or (dmgeral.ACBrNFe1.WebServices.Retorno.recibo = '') then

  begin

    mmoDados.Lines.Add('cUF: '+ IntToStr(dmgeral.ACBrNFe1.WebServices.Retorno.cUF));

    mmoDados.Lines.Add('cStat: '+ IntToStr(dmgeral.ACBrNFe1.WebServices.Retorno.cStat));

    mmoDados.Lines.Add('xMotivo: '+ dmgeral.ACBrNFe1.WebServices.Retorno.xMotivo);

    mmoDados.Lines.Add('cMsg: '+ IntToStr(dmgeral.ACBrNFe1.WebServices.Retorno.cMsg));

    mmoDados.Lines.Add('xMsg: '+ dmgeral.ACBrNFe1.WebServices.Retorno.xMsg);

    mmoDados.Lines.Add('Recibo: '+ dmgeral.ACBrNFe1.WebServices.Retorno.Recibo);

    mmoDados.Lines.Add('Protocolo: '+ dmgeral.ACBrNFe1.WebServices.Retorno.Protocolo);

    Exit;

  end;

  if dmgeral.ACBrNFe1.WebServices.Retorno.cStat = 100 then

  begin

    dmgeral.ACBrNFe1.NotasFiscais.Imprimir;

    dmgeral.ACBrNFe1.NotasFiscais.Items[0].ImprimirPDF;

    dmgeral.ACBrNFe1.NotasFiscais.Items[0].SaveToFile;

end;

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Felipe,

 

Algumas considerações em relação a sua rotina:

 

1. Não há necessidade de executar o Assinar, pois o Enviar faz isso internamente.

2. Não há necessidade de executar o GerarNFe, uma vez que o Enviar tem por finalidade: Gerar o XML, assinar, validar e se tudo estiver OK a nota é enviada.

3. Eu não colocaria o Enviar dentro de um loop, uma vez que se ocorrer algum erro, este pode ocorrer no envio ou no retorno e a sua rotina tem condições de identificar onde o erro ocorreu?

4. Quando o status = 100 você imprimir o DANFE gera o PDF do mesmo, mas para que você executa o SaveToFile? Uma vez que o XML da NF-e já esta salvo em disco e o PDF do DANFE também.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Ítalo, fiz as alterações sugeridas por vc, estava tudo funcionando bem mas aconteceu algo inusitado:

 

O programa estava retornando cstatus=100 mesmo sem a nota ter sido transmitida com sucesso. Acabei transmitindo ela pelo emissor gratuito e deu tudo certo e para fins de teste tentei enviar novamente pelo meu programa e deu cstat=100 (lembrando que a nota ja havia sido transmitida anteriormente).

 

 

Não sei se o problema foi bem explicado ai em cima mas me parece que por algum motivo o retorno do sefaz esta vindo errado ou ele ficou com o cstat da nota anterior.

Link para o comentário
Compartilhar em outros sites

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