Ir para conteúdo
  • Cadastre-se

dev botao

Tratamento de erro de retorno do sefaz


Ver Solução Respondido por Italo Giurizzato Junior,
  • Este tópico foi criado há 2486 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa tarde

 

Gostaria de ajuda pra tratar possíveis erros de retorno, com erro de conexão , duplicidade etc.. 

verifiquei que existe este comando, que pode ser útil , porem não esta copilando:

try
                if dmf.ACBrNFe1.Enviar(vNumLote,True,Sincrono) = true then
                except
                on E: Exception do
                begin
                if (pos('12007 - ', UpperCase(E.Message)) > 0) or // erro de conexão
                (pos('12002 - ', UpperCase(E.Message)) > 0) or // timeout
                (pos('12029 - ', UpperCase(E.Message)) > 0) or // limite de tempo de conexão
                (pos('ERRO HTTP:', UpperCase(E.Message)) > 0) or // erro http genérico
                (pos('ERRO NAO CATALOGADO', UpperCase(E.Message)) > 0) then // erros de tratamento do webservice
                begin
                // Enviar NFC-e offline
                // ShowMessage('ZXZSXCZ');
                end
                else
                raise;
                end;
                end;

OBS: O erro é [DCC Error] UFrenteCaixa.pas(11353): E2066 Missing operator or semicolon

Alguem pode me dar um auxilio nesta questão ?

 

  • Moderadores
Postado

Boa tarde

3 horas atrás, tiago Selecto disse:

OBS: O erro é [DCC Error] UFrenteCaixa.pas(11353): E2066 Missing operator or semicolon

Esse erro não se trata do Componente ACBr. Verifique essa Unit.

Quando possível veja a explicação de como tratar a Contingência... Pode ser útil...

 

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Boa Tarde Jose Junior

Vi o vídeo do WebnarNo de tratamento de Contingencia e foi de GRANDE ajuda, enriqueceu meus conhecimento! Obrigado.

Quero fazer algumas perguntas sobre ele:

a primeira e sobre o comando TryAgain o que preciso declarar , pois o comando não esta reconhecendo no projeto?

e a segunda pergunta, que não tem a ver com o vídeo mas sim sobre o comando  try Exception acima sitado por mim,  consegui fazer copilar, porem gostaria de saber se existe como capturar outros tipos de erro, tipo duplicidade etc...pois erro de falha de conexão ele retorna e outros erro posso fazer a mesma ideia. Existe como?

 

desde já agradeço a atenção

Postado (editado)

Opa, Boa Tarde Jose Junior

Sigo com os trabalhos de manutenção da forma de envio ....

Outra duvida que tenho e das mensagem de erro que da quando não há internet,  usei o filtro acima pra mandar em contingencias quando erro de transmissão,

gostaria de sabe se tem alguma forma de não ficar dando e mensagem de erro pro usuário?

 

Inclusive em consultas to status WebServices, fica dando msn ao usuário, se caso não restabeleceu a transmissão, pois não sei a melhor forma, mas quando entro em contingencia devo ficar realizando estas consultas pra ver se saio do modo contingencia.

Como trato isto , tem outra forma, ou se não como não retorno estas msn ao usurário?

 

Editado por tiago Selecto
  • Moderadores
Postado
14 horas atrás, tiago Selecto disse:

e a segunda pergunta, que não tem a ver com o vídeo mas sim sobre o comando  try Exception acima sitado por mim,  consegui fazer copilar, porem gostaria de saber se existe como capturar outros tipos de erro, tipo duplicidade etc...pois erro de falha de conexão ele retorna e outros erro posso fazer a mesma ideia. Existe como?

Bom dia, para realizar o tratamento de erros você deve utilizar o bloco try except mesmo... Conforme mencionou acima, validando todos os possíveis códigos de erro. Inclusive para falha de conexão, de uma pesquisada no fórum e encontrará diversos exemplos utilizados pela comunidade.

No caso de conseguir o retorno da Sefaz valide os possíveis erros pelo campo "cStat" do Retorno, No manual da NFe encontrará as descrições de cada erro, como por exemplo a Duplicidade. Também encontrará exemplos aqui fórum... 

14 horas atrás, tiago Selecto disse:

a primeira e sobre o comando TryAgain o que preciso declarar , pois o comando não esta reconhecendo no projeto?

Acredito ser um método interno da aplicação.

53 minutos atrás, tiago Selecto disse:

gostaria de sabe se tem alguma forma de não ficar dando e mensagem de erro pro usuário?

Deve ser tratado também validando o código de retorno na exceção... Aparentemente a forma que está fazendo validando código (12007) está correta... Qual está sendo o problema?

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Jose Junior

 

acho que meu problema, aparentemente nas msn pro usuário como por exemplo duplicidade, quando ocorre o meu copilador para em um delas , não me permitindo

tratar, como trato isto?

usei este comando

  ACBrNFe1.Configuracoes.Geral.ExibirErroSchema := False;
  // <-- Se False exibe o erro tratado somente, se true, exibe os dois erros
  ACBrNFe1.Configuracoes.Geral.FormatoAlerta    := '[ %TAGNIVEL%%TAG% ]   %DESCRICAO% - %MSG%';

 

mas sem sucesso, o que esta de errado ? pois as mensagens pipocam na tela . E por que não as o tratam?

tentei buscar alguma postagem , mas 

1 hora atrás, José M. S. Junior disse:
1 hora atrás, José M. S. Junior disse:

Acredito ser um método interno da aplicação.

2 horas atrás, tiago Selecto disse:

 

 

Postado
1 hora atrás, José M. S. Junior disse:

Acredito ser um método interno da aplicação.

Como devo proceder para declarar este comando?

 

Acho que meu problema, aparentemente nas msn pro usuário como por exemplo duplicidade, quando ocorre o meu copilador para em um delas , não me permitindo

tratar, como trato isto?

usei este comando

  ACBrNFe1.Configuracoes.Geral.ExibirErroSchema := False;
  // <-- Se False exibe o erro tratado somente, se true, exibe os dois erros
  ACBrNFe1.Configuracoes.Geral.FormatoAlerta    := '[ %TAGNIVEL%%TAG% ]   %DESCRICAO% - %MSG%';

 

mas sem sucesso, o que esta de errado ? pois as mensagens pipocam na tela . E por que não as o tratam?

tentei buscar alguma postagem , mas nada de concreto

  • Consultores
  • Solution
Postado

Bom dia Tiago,

Não sei bem ao certo quais as mensagem que você deseja que não sejam mostradas, mas confere ai.

Qual é o valor da propriedade de configuração: Configuracoes.WebServices.Visualizar?

Se for True altere para False.

Outra coisa, se uma nota foi rejeitada pelo motivo de Duplicidade é porque a sua aplicação esta deixando o usuário enviar a mesma nota mais de uma vez.

Uma nota enviada não pode ficar disponível para ser enviada novamente a não ser que a mesma tenha sido rejeitada, por exemplo o total da nota não bate com a soma dos totais dos itens.

Após o envio de uma nota, você deve marcar no banco de dados que a mesma foi enviada, desta forma travando para que o usuário envie novamente.

E se por acaso a nota ficar sem protocolo?

Neste caso devemos carregar o componente com o XML da nota que deve estar assinado e executar o método Consultar.

Se a nota realmente foi enviada com sucesso, a SEFAZ vai retornar o protocolo de autorização, ai você atualiza o seu banco de dados.

Agora se ocorreu erro no enviar, a SEFAZ vai retornar uma rejeição acusando que a nota não costa na base de dados deles, ai sim você libera no banco de dados a nota para ser enviada novamente.

Espero ter ajudado.

  • Curtir 1
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

  • Moderadores
Postado
1 hora atrás, tiago Selecto disse:

Como devo proceder para declarar este comando?

 

Acho que meu problema, aparentemente nas msn pro usuário como por exemplo duplicidade, quando ocorre o meu copilador para em um delas , não me permitindo

tratar, como trato isto?

usei este comando

  ACBrNFe1.Configuracoes.Geral.ExibirErroSchema := False;
  // <-- Se False exibe o erro tratado somente, se true, exibe os dois erros
  ACBrNFe1.Configuracoes.Geral.FormatoAlerta    := '[ %TAGNIVEL%%TAG% ]   %DESCRICAO% - %MSG%';

 

mas sem sucesso, o que esta de errado ? pois as mensagens pipocam na tela . E por que não as o tratam?

tentei buscar alguma postagem , mas nada de concreto

Veja, se está retornando erros de Schemas ou Rejeição da Sefaz, isso deve ser mostrado para ser corrigido... é a unica forma de tratar... Os tratamentos que podem ser feitos baseiam-se no exemplo que você postou acima para contingência... Qual é exatamente o erro que está ocorrendo? 

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

.

1 hora atrás, Italo Jurisato Junior disse:

Qual é o valor da propriedade de configuração: Configuracoes.WebServices.Visualizar?

Italo continua dando mensagem ao usuario

com estes comando, como sugeristes:

  ACBrNFe1.Configuracoes.Geral.ExibirErroSchema := False;
  ACBrNFe1.Configuracoes.WebServices.Visualizar := FALSE;
  ACBrNFe1.Configuracoes.Geral.FormatoAlerta    := '[ %TAGNIVEL%%TAG% ]   %DESCRICAO% - %MSG%';

E que na verdade eu gostaria de que os erros de falha na conexão ou duplicidade por exemplo, que estes erros eu pudesse tratar no comando try e except abaixo citado, e não ficasse dando mensagem ao usuário, e que outros erros como de ncm e outros de cadastros , por exemplo o usuário recebesse estas notificações, existe uma maneira?

 

Em 05/02/2018 at 14:20, tiago Selecto disse:

try
                if dmf.ACBrNFe1.Enviar(vNumLote,True,Sincrono) = true then
                except
                on E: Exception do
                begin
                if (pos('12007 - ', UpperCase(E.Message)) > 0) or // erro de conexão
                (pos('12002 - ', UpperCase(E.Message)) > 0) or // timeout
                (pos('12029 - ', UpperCase(E.Message)) > 0) or // limite de tempo de conexão
                (pos('ERRO HTTP:', UpperCase(E.Message)) > 0) or // erro http genérico
                (pos('ERRO NAO CATALOGADO', UpperCase(E.Message)) > 0) then // erros de tratamento do webservice
                begin
                // Enviar NFC-e offline
                // ShowMessage('ZXZSXCZ');
                end
                else
                raise;
                end;
                end;

 

40 minutos atrás, José M. S. Junior disse:

Veja, se está retornando erros de Schemas ou Rejeição da Sefaz, isso deve ser mostrado para ser corrigido... é a unica forma de tratar... Os tratamentos que podem ser feitos baseiam-se no exemplo que você postou acima para contingência... Qual é exatamente o erro que está ocorrendo? 

por exemplo erro de conexão e problema de shemas, neste caso como se procede?

  • Consultores
Postado

Boa tarde Tiago,

Para testar a conexão tente:

var
 i:dword;
begin
if InternetGetConnectedState(@i,0) then
  showmessage('esta conectado')
else
  showmessage('falha na conexão');
 
Esse teste tem que ser feito antes de enviar o lote, assim você já pode tomar uma decisão, ou pede para o usuário aguardar e tentar novamente mais tarde, ou emite a nota em contingência.
 
Para evitar erro de validação é preciso validar os dados no momento de realizar o cadastro dos clientes, produtos, etc.
  • Curtir 1
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

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