Ir para conteúdo
  • Cadastre-se

dev botao

Função Validar Xml


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

Recommended Posts

Amigos, gostaria de saber se existe alguma maneira de se receber todos os erros de validação do xml de uma vez. Segue abaixo o código que estou utilizando para retornar os erros da validação. Estou postando o código completo. No método abaixo, estou formatando o retorno que é recebido apenas para uma mensagem mais amigavel ao usuario mas se o arquivo xml contiver 20 produtos com erro em algum campo apenas um deles é exibido. Eu gostaria de saber se tem como exibir todos os 20 erros de uma vez.

 

      try
        ACBrNFe.NotasFiscais.Clear;
        ACBrNFe.NotasFiscais.LoadFromFile(pathArquivo);
        ACBrNFe.NotasFiscais.Valida;
      except
        on e:exception do
          begin
            if not Assigned(frmRetValidacao) then
              frmRetValidacao := TfrmRetValidacao.Create(application);
            frmRetValidacao.mmoTexto.Clear;
            frmRetValidacao.mmoCompleto.Clear;
 
            frmRetValidacao.mmoTexto.Text := ACBrNFe.NotasFiscais.Items[0].ErroValidacaoCompleto;
            frmRetValidacao.mmoTexto.Text := StringReplace(frmRetValidacao.mmoTexto.Text,RetornarConteudoEntre(frmRetValidacao.mmoTexto.Text,'value','failed'),' ',[rfReplaceAll]);            
 
            frmRetValidacao.mmoCompleto.Text := ACBrNFe.NotasFiscais.Items[0].ErroValidacaoCompleto;
 
            for i := 0 to frmRetValidacao.mmoTexto.Lines.Count do
              begin
                frmRetValidacao.mmoTexto.Lines := StringReplace(frmRetValidacao.mmoTexto.Lines,'violates pattern constraint of','não é um valor válido: ',[rfReplaceAll]);
                frmRetValidacao.mmoTexto.Lines := StringReplace(frmRetValidacao.mmoTexto.Lines,'{http://www.portalfiscal.inf.br/nfe},'[rfReplaceAll]);
                frmRetValidacao.mmoTexto.Lines := StringReplace(frmRetValidacao.mmoTexto.Lines,'The element','para o campo',[rfReplaceAll]);
                frmRetValidacao.mmoTexto.Lines := StringReplace(frmRetValidacao.mmoTexto.Lines,'with value','',[rfReplaceAll]);
                frmRetValidacao.mmoTexto.Lines := StringReplace(frmRetValidacao.mmoTexto.Lines,'failed to parse','',[rfReplaceAll]);
              end;
 
            frmRetValidacao.mmoTexto.Text := StringReplace(frmRetValidacao.mmoTexto.Text,RetornarConteudoEntre(frmRetValidacao.mmoTexto.Text,'válido','para o campo'),' ',[rfReplaceAll]);
 
            frmRetValidacao.mmoTexto.Lines.Text := StringReplace(frmRetValidacao.mmoTexto.lines.text, #13,'', [rfReplaceAll] );
            frmRetValidacao.mmoTexto.Lines.Text := StringReplace(frmRetValidacao.mmoTexto.lines.text, #10,'', [rfReplaceAll] );
 
            frmRetValidacao.ShowModal;
            frmRetValidacao.Release;
            frmRetValidacao := nil;
            result := false;
          end;
      end;
    end;
 
Vou colocar em anexo cujo erro está em no ncm dos dois produtos. mas o retorno que tenho desse codigo formatado é: 
 
Falha na validação dos dados da nota 32
'1' não é um valor válido para o campo 'NCM'  .
 
 
Gostaria que aparecesse o erro para os dois produtos da maneira abaixo:
Falha na validação dos dados da nota 32
'1' não é um valor válido para o campo 'NCM'  .
'1' não é um valor válido para o campo 'NCM'  .
 
Não sei se consegui ser objetivo e me desculpem pelo tópico extenso

 

35140906062050000180550010000000321000001441-nfe.xml

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Você tentou configurar o componente corretamente para mostrar as mensagens?

 

    // propriedades para melhorar a aparência dos retornos de validaçã dos schemas
    // %TAGNIVEL%  : Representa o Nivel da TAG; ex: <transp><vol><lacres>
    // %TAG%       : Representa a TAG; ex: <nLacre>
    // %ID%        : Representa a ID da TAG; ex X34
    // %MSG%       : Representa a mensagem de alerta
    // %DESCRICAO% : Representa a Descrição da TAG
    ACBrNFe.Configuracoes.Geral.ExibirErroSchema := False;
    ACBrNFe.Configuracoes.Geral.FormatoAlerta    := '[ %TAGNIVEL%%TAG% ]   %DESCRICAO% - %MSG%';

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

Amigo, primeiramente obrigado pela atenção. Eu tentei configurar o componente de duas maneiras. Se eu deixar com o parametro ExibirErroSchema = false o componente nao me retorna erros de quantidade de digitos no campo NCM por exemplo. Se eu deixo ele ativado ele me retorna apenas um dos erros de ncm, sendo que tenho erro em mais de um produto.

Link para o comentário
Compartilhar em outros sites

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