Ir para conteúdo
  • Cadastre-se

dev botao

Exibir item que deu erro na validação do XML


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

Recommended Posts

  • Membros Pro
Postado

Como faço para exibir a mensagem de validação do XML incluindo o número do item que deu erro.

Por exemplo, hoje mostra somente:

Erro validação: Código de Enquadramento Legal do IPI. 

Mas não informa o item da nota que deu esse erro, em uma nota com mais de 100 itens fica difícil de encontrar.

  • Fundadores
Postado

Não deu pra compreender muito bem o problema.. Talvez você esteja querendo melhorar a mensagem de validação do Schema.. mas pode ser um erro do WebService

Por favor nos mostre como é exatamente a msg de erro (para sabermos qual rotina gera ela, e de onde ela vem)

Se possível, anexe um documento que demonstre a msg de erro...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Membros Pro
Postado (editado)

   dmACBr.ACBrNFe1.NotasFiscais.Validar;

   if dmACBr.ACBrNFe1.NotasFiscais.Items[0].Alertas <> '' then
   begin
    iMessageBox(handle,PChar(dmACBr.ACBrNFe1.NotasFiscais.Items[0].Alertas),'Erro Validação',MB_OK+MB_ICONWARNING);
 

Editado por zemarcio
  • Consultores
  • Solution
Postado

Boa tarde Marcio,

Além do método Validar que confronta o XML com os Schemas temos também o método ValidarRegrasdeNegocios.

Exemplos de uso:

  ACBrNFe1.NotasFiscais.ValidarRegrasdeNegocios(xErros); 

onde xErros é um "Log" que contem os erros encontrados.

Nesse Log caso existe algum dado errado referente a um determinado item da nota será apresentado o numero do item que contem esse dado errado.

Acredito que vai de encontro com o que você deseja.
 

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

  • Membros Pro
Postado

Desculpe, não entendi muito bem.

Como devo incluir isso aqui?

   dmACBr.ACBrNFe1.NotasFiscais.Validar;

   if dmACBr.ACBrNFe1.NotasFiscais.Items[0].Alertas <> '' then
   begin
    iMessageBox(handle,PChar(dmACBr.ACBrNFe1.NotasFiscais.Items[0].Alertas),'Erro Validação',MB_OK+MB_ICONWARNING);
 

  • Consultores
Postado

Bom dia Marcio,

Acredito que você não entendeu.

O método Validar é utilizado pelo componente para confrontar o XML com os schemas.

Já o método ValidarRegrasdeNegócio confronta o XML com as regras de validação impostas pela SEFAZ.

 

ACBrNFe1.NotasFiscais.ValidarRegrasdeNegocios(xErros); 

if xErros <> '' then

    MessageBox(handle,PChar(xErros),'Erro Validação',MB_OK+MB_ICONWARNING);

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

  • Membros Pro
Postado

e referente ao dmACBr.ACBrNFe1.NotasFiscais.Validar como faço para saber qual item está com erro?

Atualmente faço assim mas não retorna o item com problema:

try
   dmACBr.ACBrNFe1.NotasFiscais.Validar;

except on eExn : exception do
   begin

    iMessageBox(handle,PChar(eExn.Message),'Erro Validação',MB_OK+MB_ICONWARNING);
 

  • Moderadores
Postado
13 minutos atrás, zemarcio disse:

e referente ao dmACBr.ACBrNFe1.NotasFiscais.Validar como faço para saber qual item está com erro?

Como está a configuração de ACBrNFe1.Configuracoes.Geral.FormatoAlerta?

Na configuração padrão ele deve te mostrar uma mensagem assim:

image.png

Veja que o número do item é exibido junto ao caminho do elemento no XML, a %TAGNIVEL% do FormatoAlerta.

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Membros Pro
Postado

O formato de alerta está conforme acima mas mesmo assim não mostra o número do item.

Vi que o erro está no comando abaixo:

ACBrNFe1.NotasFiscais.Validar;

Ele gera uma exceção com uma mensagem de erro mas sem mostrar o número do item que está com o erro, se tiver mais de 100 itens como vou saber qual item está com a TAG errada?

  • Moderadores
Postado

Como está a mensagem de validação exatamente?

Veja este tópico sobre um problema parecido:

 

8 minutos atrás, zemarcio disse:

O formato de alerta está conforme acima mas mesmo assim não mostra o número do item.

Como exatamente está a configuração do FormatoAlerta?

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Membros Pro
Postado

TAG:%TAGNIVEL% ID:%ID%/%TAG%(%DESCRICAO%) - %MSG%.

1 hora atrás, BigWings disse:

Como está a mensagem de validação exatamente?

Veja este tópico sobre um problema parecido:

 

Como exatamente está a configuração do FormatoAlerta?

TAG:%TAGNIVEL% ID:%ID%/%TAG%(%DESCRICAO%) - %MSG%.

  • Membros Pro
Postado (editado)

Esse é o código completo:

Citar

 

  //valida
  try
   dmACBr.ACBrNFe1.NotasFiscais.Validar;

   dmACBr.ACBrNFe1.NotasFiscais.ValidarRegrasdeNegocios(xErros);
   if xErros <> '' then
     MessageBox(handle,PChar(xErros),'Erro Validação 1',MB_OK+MB_ICONWARNING);


   if dmACBr.ACBrNFe1.NotasFiscais.Items[0].Alertas <> '' then
   begin
    iMessageBox(handle,PChar(dmACBr.ACBrNFe1.NotasFiscais.Items[0].Alertas),'Erro Validação 2',MB_OK+MB_ICONWARNING);

    TVENDAS.Edit;
    TVENDASCHAVE_ACESSO.AsString    := Copy(dmACBr.ACBrNFe1.NotasFiscais[0].NFe.infNFe.ID,4,50);
    TVENDASMOTIVO_REJEICAO.AsString := Copy(dmACBr.ACBrNFe1.NotasFiscais.Items[0].Alertas,1,1500);
    TVENDAS.Post;
    dmConexao.IBTCONEXAO.CommitRetaining;

    pAtualizarTela;

    Exit;
   end
   else
   begin
    TVENDAS.Edit;
    TVENDASCHAVE_ACESSO.AsString := Copy(dmACBr.ACBrNFe1.NotasFiscais[0].NFe.infNFe.ID,4,50);
    TVENDAS.Post;
    dmConexao.IBTCONEXAO.CommitRetaining;
   end;

  except on eExn : exception do
   begin
    iMessageBox(handle, pwidechar(dmACBr.ACBrNFe1.NotasFiscais.Items[0].ErroValidacao), 'Erro Validação 3', MB_OK+MB_ICONWARNING);
    TVENDAS.Edit;
    TVENDASCHAVE_ACESSO.AsString    := Copy(dmACBr.ACBrNFe1.NotasFiscais[0].NFe.infNFe.ID,4,50);
    TVENDASMOTIVO_REJEICAO.AsString := Copy(eExn.Message,1,1500);
    TVENDAS.Post;
    dmConexao.IBTCONEXAO.CommitRetaining;

    pAtualizarTela;

    Exit;
   end;
  end;

 

E essa a mensagem que ele exibe no Erro de Validação 3

Falha na validação dos dados da nota: 3169
Unidade Comercial.
Código de Enquadramento Legal do IPI.

 

Editado por zemarcio
  • Moderadores
Postado
1 minuto atrás, zemarcio disse:

E essa a mensagem que ele exibe:

Falha na validação dos dados da nota: 3169
Unidade Comercial.
Código de Enquadramento Legal do IPI.

Verifique novamente a configuração FormatoAlerta, aparentemente está apenas como %DESCRICAO%.

Se também não exibe o erro gerado pela DLL de validação (LibXML2, MSXML) é por a configuração ExibeErroSchema estar desativada.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Membros Pro
Postado

Chic ITALO! Era isso mesmo!

Muito obrigado!

Mas agora teria como melhorar a mensagem abaixo, para ficar mais didático para o usuário:

Falha na validação dos dados da nota: 3169
TAG:<det nItem="1"><prod> ID:I09/uCom(Unidade Comercial) - Nenhum valor informado.
TAG:<det nItem="1"><imposto><IPI> ID:O06/cEnq(Código de Enquadramento Legal do IPI) - Tamanho maior que o máximo permitido [4215].
 

Ficar algo do tipo:

Item 1 Unidade Comercial : Nenhum valor informado.
Item 1 : Código de Enquadramento Legal do IPI : Tamanho maior que o máximo permitido. 

  • Fundadores
Postado

@zemarcio essa rotina se aplica a validação de vários Nós e Tags do XML... ela precisa ser genérica e dar a indicação de qual nó ocorreu a validação do Schema...

Na minha opinião, a sua aplicação não deveria deixar o problema chegar até esse ponto... No momento da Venda, antes de criar o XML.. você já poderia rodar várias regras de validação interna, e exibir alertas mais específicos para o usuário...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Este tópico foi criado há 1409 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.