Jump to content

Delphi chamada_delphi.png acbr.png

C6 chamada_c6.png botao.png

Melhorar mensagem "Falha na validação dos dados da nota"


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

Recommended Posts

  • Membros Pro

Olá a todos...

Atualmente uso o seguinte código para tratar as exceções visualmente para os usuários em caso de erros no envio:

except
	on E : Exception do
    	begin
         LogarErro(e.Message, cupom);
         messageBox(handle,Pchar(e.Message),'Erro!',MB_ICONERROR+mb_OK);
         Exit;
        end;

A princípio funciona muito bem, o problema é quando o retorno da exceção é Falha na validação dos dados da nota: XXXX. Nesse caso fico sem saber o que causou essa falha na validação e tenho que ficar procurando o erro.

Mas observei que o botão VALIDAR no projeto ACBrNFe_demo.exe dá detalhes sobre o erro que ocasionou a falha na validação, através do comando ACBrNFe1.NotasFiscais.Items[0].ErroValidacaoCompleto.

Perfeito, é o que eu preciso. Alterei o código da exceção e ficou assim agora:

except
	on E : Exception do
    	begin
         LogarErro(e.Message + ACBrNFe1.NotasFiscais.Items[0].ErroValidacaoCompleto, cupom);
         messageBox(handle,Pchar(e.Message + ACBrNFe1.NotasFiscais.Items[0].ErroValidacaoCompleto),'Erro!',MB_ICONERROR+mb_OK);
         Exit;
        end;

Se observarem, apenas acrescentei a função ACBrNFe1.NotasFiscais.Items[0].ErroValidacaoCompleto na mensagem que será exibida, pois eu ACHO que ela só retornará algo quando for erro de validação. Minha dúvida é sobre isso, estou correto? Meu código está bom ou posso melhorar em algo?

Desde já agradeço a atenção de todos

 

Link to comment
Share on other sites

  • Membros Pro

Só um detalhe, alterei o código novamente, pois em casos de Falha na Validação, a mensagem de exceção e o início da mensagem de validação completa são iguais. Agora coloquei assim:

except
	on E : Exception do
		begin
			if ACBrNFe1.NotasFiscais.Items[0].ErroValidacaoCompleto <> '' Then
				mensagemexcecao := ACBrNFe1.NotasFiscais.Items[0].ErroValidacaoCompleto
			else mensagemexcecao := e.Message;

			LogarErro(mensagemexcecao, cupom);
			messageBox(handle,Pchar(mensagemexcecao),'Erro!',MB_ICONERROR+mb_OK);
			Exit;
		end;

Mais uma vez estou supondo que a função ACBrNFe1.NotasFiscais.Items[0].ErroValidacaoCompleto só retornará algo em caso de Falha na validação, do contrário será uma mensagem qualquer de "CFOP não permitido", "Erro de time-out", "Data atrasada", etc.

Se for falha na validação, mostro apenas a mensagem de validação completa, pois o início dela (Falha na validação dos dados da nota: XXX) é sempre igual a mensagem da exceção (e.Message), se não eu mostro apenas a mensagem da exceção.

Estou correto?

Link to comment
Share on other sites

  • Membros Pro

Ao meu ver, também posso usar esse código aqui:

except
	on E : Exception do
		begin
			if (pos('falha na validação dos dados da nota', LowerCase(e.Message)) <> 0) then //ALTEREI ESSA LINHA ********************
				mensagemexcecao := ACBrNFe1.NotasFiscais.Items[0].ErroValidacaoCompleto
			else mensagemexcecao := e.Message;

			LogarErro(mensagemexcecao, cupom);
			messageBox(handle,Pchar(mensagemexcecao),'Erro!',MB_ICONERROR+mb_OK);
			Exit;
		end;

Correto?

Link to comment
Share on other sites

  • Consultores

Boa noite,

Um detalhe importante, a propriedade ErroValidacaoCompleto é populada ao validar o XML antes do seu envio.

Por ouro lado se a nota for rejeitada pela SEFAZ o motivo da rejeição é armazenada na propriedade xMotivo cujo acesso é feito de forma diferente.

Sendo assim não faz sentido ler uma propriedade que contem um erro de validação sendo que o erro é de rejeição gerado pela SEFAZ.

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

  • Membros Pro
15 horas atrás, Italo Jurisato Junior disse:

Boa noite,

Um detalhe importante, a propriedade ErroValidacaoCompleto é populada ao validar o XML antes do seu envio.

Por ouro lado se a nota for rejeitada pela SEFAZ o motivo da rejeição é armazenada na propriedade xMotivo cujo acesso é feito de forma diferente.

Sendo assim não faz sentido ler uma propriedade que contem um erro de validação sendo que o erro é de rejeição gerado pela SEFAZ.

Como acesso esse xMotivo?

Link to comment
Share on other sites

  • Consultores

Boa noite,

Desculpe pela demora em responder, tente da seguinte forma:

Mensagem := ACBrNFe1.WebServices.Consulta.XMotivo;
 

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.