Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado

bom dia amigos...

gostaria de saber uma coisa...

quando existe uma rejeição em uma nfe ele emite uma mensagem de erro conforme a imagem a baixo por exemplo.

eu gostaria de saber se tem como deixar essa mensagem mais clara... exemplo.. em vez de aparecer esse monte de coisas antes da tag NCM.... mostrar apenas NCM with value 000125 so isso e nao toda essa parte anterior...

existe essa possibilidade ?

image.png.cfba2c98c2a211d24bc9f709b5a2fa37.png

  • Moderadores
Postado

Não, essa mensagem vem da DLL de validação (libxml2, mxsxml).

Tem a propriedade ExibeErroSchema pra não mostrar esse conteúdo.

Na validação após a geração do XML pelo ACBr, ele adiciona os alertas do tipo "NCM - Conteúdo inválido" que são exibidos junto a mensagem de validação, o conteúdo dos alertas você pode alterar na propriedade ACBrNFe.Configuracoes.Geral.FormatoAlerta.

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

Projeto ACBr

 

 

  • Membros Pro
Postado
1 hora atrás, BigWings disse:

Não, essa mensagem vem da DLL de validação (libxml2, mxsxml).

Tem a propriedade ExibeErroSchema pra não mostrar esse conteúdo.

Na validação após a geração do XML pelo ACBr, ele adiciona os alertas do tipo "NCM - Conteúdo inválido" que são exibidos junto a mensagem de validação, o conteúdo dos alertas você pode alterar na propriedade ACBrNFe.Configuracoes.Geral.FormatoAlerta.

entao mas no meu caso a propriedade exibeerroSchema esta como false...
e a parte de formatoalerta... eu mudei de varias formas mas nao muda em nada... tem mais algum parametro q eu tenha de mudar ?

  • Moderadores
Postado
29 minutos atrás, tiagopassarella disse:

entao mas no meu caso a propriedade exibeerroSchema esta como false...

Verifique novamente, nesse caso não devia mostrar o erro gerado pela DLL, veja o trecho da unit ACBrNFeNotasFiscais.pas:

Citar

    if EstaVazio(AXML) then
    begin
      Erro := ACBrStr('NFe não encontrada no XML');
      NotaEhValida := False;
    end
    else
      NotaEhValida := SSL.Validar(AXML, GerarNomeArqSchema(ALayout, VerServ), Erro);

    if not NotaEhValida then
    begin
      FErroValidacao := ACBrStr('Falha na validação dos dados da nota: ') +
        IntToStr(NFe.Ide.nNF) + sLineBreak + FAlertas;
      FErroValidacaoCompleto := FErroValidacao + sLineBreak + Erro;

      raise EACBrNFeException.CreateDef(
        IfThen(Configuracoes.Geral.ExibirErroSchema, ErroValidacaoCompleto,
        ErroValidacao));
    end;

 

 

31 minutos atrás, tiagopassarella disse:

e a parte de formatoalerta... eu mudei de varias formas mas nao muda em nada... tem mais algum parametro q eu tenha de mudar ?

Na sua mensagem já não tem nenhum alerta, devia ter o do NCM por não estar no tamanho correto.

O que pode ser:

- Os teus fontes estão desatualizados

- Você fazendo simples validação do XML, sem passar pelo método de geração (é aqui que o ACBr gera os alertas).

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

Projeto ACBr

 

 

  • Membros Pro
Postado
12 minutos atrás, BigWings disse:

Verifique novamente, nesse caso não devia mostrar o erro gerado pela DLL, veja o trecho da unit ACBrNFeNotasFiscais.pas:

 

Na sua mensagem já não tem nenhum alerta, devia ter o do NCM por não estar no tamanho correto.

O que pode ser:

- Os teus fontes estão desatualizados

- Você fazendo simples validação do XML, sem passar pelo método de geração (é aqui que o ACBr gera os alertas).

meus fontes estao atualizados estou fazendo conforme codigo abaixo: 

 

TDatamodule.ACBrNFe1.Configuracoes.Geral.ExibirErroSchema := false;
     TDatamodule.ACBrNFe1.Configuracoes.Geral.FormatoAlerta    := '%MSG%.';
     TDatamodule.ACBrNFe1.NotasFiscais.Clear;
     TDatamodule.ACBrNFe1.NotasFiscais.LoadFromFile(Caminho);
     try
           TDatamodule.ACBrNFe1.NotasFiscais.Validar;
           if TDatamodule.ACBrNFe1.NotasFiscais.Items[0].Alertas <> '' then
     except
           ReenviaNFe := false;
           informar('Erro Completo: '+ TDatamodule.ACBrNFe1.NotasFiscais.Items[0].ErroValidacaoCompleto,'Aviso do sistema',true); //Útil para gravar em arquivos de LOG
     end;

  • Moderadores
Postado

Dessa forma realmente não gera os alertas, você está fazendo a simples validação, e não geração do XML e validação.

E também está ignorando, com o try..except, a exceção levantada pelo método validar (trecho de código que postei anteriormente), e exibindo explicitamente o erro de validação completo.

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

Projeto ACBr

 

 

  • Membros Pro
Postado
6 minutos atrás, BigWings disse:

Dessa forma realmente não gera os alertas, você está fazendo a simples validação, e não geração do XML e validação.

E também está ignorando, com o try..except, a exceção levantada pelo método validar (trecho de código que postei anteriormente), e exibindo explicitamente o erro de validação completo.

certo... vc tem um exemplo de como fazer a forma correta entao ? eu sinceramente nao compreendi...

pois nesse trecho do meu codigo que passei ele ja esta com xml gerado e carregado no componente... para depois chamar o .validar...

no caso eu tiro do try except somente ou tem mais coisas ?

 

  • Moderadores
Postado

Quem gera o XML é a sua aplicação, com ACBrNFe?

Quando você chama ACBrNFe.Enviar() ele já faz a geração, assinatura e validação do XML. Aqui vai ser exibida a mensagem de validação com os alertas, conforme a configuração do componente.

Quando você já tem o XML gerado e apenas carrega no componente, pode passar True para o segundo parâmetro do comando ACBrNFe.NotasFiscais.LoadFromFile, isso vai forçar nova geração do XML, isso vai criar os alertas, que vão ser exibidos na validação, mas pode também modificar o XML carregado.

Quanto à mensagem você pode fazer:

try
  ACBrNFe1.NotasFiscais.Validar;
except
  if .... then
   ...
  else
    raise;  // levanta novamente a exceção capturada
end;

Ou:

try
  ACBrNFe1.NotasFiscais.Validar;
except
  if ... then
    ...
  else
    ShowMessage(ACBrNFe1.NotasFiscais.Items[0].ErroValidacao);  // em vez do ErroValidacaoCompleto
end;

 

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

Projeto ACBr

 

 

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