Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 679 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 obter mais detalhes da rejeição de erro da NF-e tal como no validador da SEFAZ RS?

Atualmente utilizamos da forma, mas só consigo obter o retorno "Rejeição: Falha no Schema XML do lote de NFe", mas quando passo o XML no validador de XML da SEFAZ RS retorna com mais detalhes da seguinte forma: "Schema XML: 225 - Rejeicao: Falha no Schema XML da NFe The 'http://www.portalfiscal.inf.br/nfe:NCM' element is invalid - The value '000334764' is invalid according to its datatype 'String' - The Pattern constraint failed."

 try  

  dmACBr.ACBrNFe1.Enviar('1', False, False);

except on E : Exception do

  TVENDASMOTIVO_REJEICAO.AsString := Copy(E.Message,1,1500);


 

  • Fundadores
Postado

Essa msg de erro vem da LibXML2...

Observe que a msg cita problemas no campo NCM, que esta faltando...

As msgs de erro da LibXML2, vem em Inglês... você poderia fazer rotinas de conversão do texto inglês para o Português

Mas definitivamente não é uma boa estratégia depender as msgs de erro de validação de Schema para informar o usuário no PDV... Esses erros nem deveriam existir no momento da emissão...

O sistema deveria fazer essas validações no momento do cadastro, ou pelo menos evitar que um itens com problemas no cadastro sejam vendidos

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

Olá Daniel, obrigado pelo retorno!

Sim, eu já fiz várias validações aqui no sistema para evitar isso, mas caso isso ocorra gostaria de mostrar a mensagem completa em inglês mesmo que seria essa: Schema XML: 225 - Rejeicao: Falha no Schema XML da NFe The 'http://www.portalfiscal.inf.br/nfe:NCM' element is invalid - The value '000334764' is invalid according to its datatype 'String' - The Pattern constraint failed."

Como consigo mostrar a mensagem acima através do componente da ACBr?

  • Fundadores
  • Solution
Postado

Essa msg será disparada em um Exception, então você pode capturar ela em blocos Try/Except...

Talvez uma estratégia melhor do que exibir essa msg ao usuário, seja capturar ela e gravar em um Log, que poderia ser analisado com calma pelo suporte após o relato 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

Olá Daniel,

Talvez eu não tenha sido bem claro, mas o que estou querendo é justamente mostrar essa mensagem:

Schema XML: 225 - Rejeicao: Falha no Schema XML da NFe The 'http://www.portalfiscal.inf.br/nfe:NCM' element is invalid - The value '000334764' is invalid according to its datatype 'String' - The Pattern constraint failed."

Da forma como utilizo atualmente só está mostrando:

"Rejeição: Falha no Schema XML do lote de NFe"

  • Fundadores
Postado

Peguei... desculpe, foi falha de interpretação minha...

Eu acredito que o componente deva retornar o erro completo... ( a LibXML2 retorna para nós esse erro )

Vou ver no código e com os "universitários", se há alguma propriedade ou configuração, para exibição do erro completo

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.

  • Fundadores
Postado

Acho que achei... estava enferrujado..

Veja esse trecho dos fontes...

    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,     // <--------- AQUI -----------
        ErroValidacao));
    end;
  end;   

Então acho que basta ligar "Configuracoes.Geral.ExibirErroSchema"

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

Olá Daniel, já estou usando essa propriedade (conforme imagem abaixo), mas mesmo assim não traz a mensagem completa. Meu código está da seguinte forma, teria que mudar algo para pegar a mensagem mais detalhada?

 try  

  dmACBr.ACBrNFe1.Enviar('1', False, False);

except on E : Exception do

  TVENDASMOTIVO_REJEICAO.AsString := Copy(E.Message,1,1500);

image.thumb.png.ab97a558c4739720c4d19ca8fc168ebc.png

  • Membros Pro
Postado

Olá Italo, também não funcionou.

Pelo que verifiquei inclusive ele passa sem problema pela Validação da Nota, ou seja, consegue validar o XML.

Depois de enviar que dá o erro.

Como faria para capturar mais informações do erro nesse caso?

  • Membros Pro
Postado

Olá Renato, essas funções retornam também só o básico sem os detalhes:

ACBrNFe1.WebServices.Enviar.xMotivo = Lote recebido com sucesso

ACBrNFe1.WebServices.Retorno.xMotivo = Rejeição: Falha no Schema XML do lote de NFe

Mas pelo que percebi, de fato o XML de retorno só tem isso (anexo). Ou seja, essa validação mais detalhada que a SEFAZ RS seria diferente então, ou seja, nem mesmo a validação local pelo schema teria esse detalhe que o problema está no NCM?

 

 

351000173857973-pro-rec-soap.xml

  • Consultores
Postado

Tente com o programa de exemplo para ter certeza que não tem algum detalhe na sua aplicação.

A exceção ao enviar deveria mostrar o retorno completo da validação dos schemas.

Carregue o mesmo XML do envio ( não este de retorno ).

Teste também a opção ACBrNFe1.NotasFiscais.Validar.

 

  • Membros Pro
Postado

De fato pelo ACBR dá o alerta completo.

Pelo que analisei no meu código está retornando que a nota é válida e não está caindo na parte abaixo.

Como faço para verificar o código do SSL.Validar? Ou tem alguma opção/parâmetro que pelo meu fonte esteja fazendo que a nota retorne válida.
 

   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;

falha.png

  • Consultores
Postado

Veja se sua aplicação está apontando para a mesma pasta de schemas que o programa de exemplo.

Screenshot_20230407-212722_Chrome.jpg

Revise se as configurações da sua aplicação estão iguais as do programa de exemplo.

Screenshot_20230407-212621_Chrome.jpg

Veja se o formato de alerta está igual ao exemplo.

Se tudo acima estiver ok, tente debugar ambos para identificar onde está a diferença de comportamentos.

Screenshot_20230407-212451_Chrome.jpg

Coloque um ponto de parada no "enviar" da sua aplicação e navegue com F7/F8 até chegar o ponto de validação dos schemas.

Faça o mesmo com o programa de exemplo para avaliar onde está a diferença.

  • Curtir 1
  • Membros Pro
Postado

Olá Renato, ainda to quebrando a cabeça aqui.

Mas outra dúvida, como faço para exibir o número do item de forma mais clara para o usuário, ou seja, ao invés de TAG:<det nItem="1"> exibir Item Número 1?

  • Fundadores
Postado

Olá @Datacaixa, não há Exception na hora de validar, porque a validação de Schema da NFe não prevê esse erro que estamos tratando nesse tópico...

 

Na verdade a validação de Schema não pegará vários Erros possíveis no documento da NFe, e muito menos as Validações existentes nas regras de negócio da NFe...

O ACBr gera o "Alerta", abaixo quando ele monta o XML...

Alertas: Campo:Código NCM - Tamanho maior que o máximo permitido [000334764]
Campo:Código NCM - Conteúdo inválido

 

O ACBr remonta o XML, quando ele é carregado, de um arquivo, ou String... Observe que o método TNotasFiscais.LoadFromString tem um parâmetro AGerarNFe que por padrão é True...

function TNotasFiscais.LoadFromString(const AXMLString: String;  AGerarNFe: Boolean): Boolean;        

Esse método chamará a rotina "Writer" do ACBr, que irá gerar o Alerta do NCM, no método procedure TNFeW.GerarDetProd(const i: Integer);   de pcnNFeW.pas

 

Você poderia tentar capturar esse Alerta, no momento em que está gerando o XML... Mas observe que um Alerta pode não ser necessariamente, um erro...

ACBrNFe1.NotasFiscais.Clear;
ACBrNFe1.NotasFiscais.LoadFromString(AXML, True);
if ACBrNFe1.NotasFiscais.Items[0].Alertas <> '' then
  ShowMessage('Alertas: '+ACBrNFe1.NotasFiscais.Items[0].Alertas);

 

Voltando a minha consideração inicial desse tópico...

Creio que você precise construir as suas próprias rotinas de validação de Cadastro de Produtos... e chamar elas, a cada produto Criado/Alterado e também a cada Produto Vendido, e não permitir a venda de um Produto com erro no cadastro...

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

Olá @Renato Rubinho e @Daniel Simoes

Obrigado pelo retorno! Eu já fiz as validações aqui no sistema para evitar esse tipo de erro. Mas agora estou curioso mesmo em relação a mensagem aparecer mais completa. De fato vi que no exemplo do ACBr está mostrando, então estou quebrando a cabeça aqui ainda.

Mas outra dúvida, como faço para exibir o número do item de forma mais clara para o usuário, ou seja, ao invés de TAG:<det nItem="1"> exibir Item Número 1?

 

  • Fundadores
Postado
39 minutos atrás, Datacaixa disse:

Mas outra dúvida, como faço para exibir o número do item de forma mais clara para o usuário, ou seja, ao invés de TAG:<det nItem="1"> exibir Item Número 1?

Acho que não há uma maneira "amigável" de fazer isso, a não ser capturar de dentro da String que é enviada no erro.. (isso não é recomendado)

Mas se você aplica a validação no lado do seu sistema, antes da venda, como sugerido... não haveria dificuldades de identificar o item com problema...

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

Olá @Daniel Simoes e @Renato Rubinho!

Por algum motivo no meu fonte a função abaixo retorna como true e no ACBr retorna false, usando o mesmo XML.

NotaEhValida := SSL.Validar(AXML, GerarNomeArqSchema(ALayout, VerServ), Erro);

Para não perder mais tempo com isso usei aquela função mesmo dos alertas que vocês me indicaram e ficou assim:

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

   if dmACBr.ACBrNFe1.NotasFiscais.Items[0].Alertas <> '' then
   begin
    iMessageBox(handle, pwidechar(dmACBr.ACBrNFe1.NotasFiscais.Items[0].Alertas),'Validação', MB_ICONEXCLAMATION);
    TVENDAS.Edit;
    TVENDASSITUACAO.AsString:='Rejeitada';
    TVENDASMOTIVO_REJEICAO.AsString:=dmACBr.ACBrNFe1.NotasFiscais.Items[0].Alertas;
    TVENDAS.Post;
    dmConexao.IBTCONEXAO.CommitRetaining;
    pAtualizarTela;
    dbeNumero.OnChange(nil);  //para exibir na tela o motivo rejeicao
    Exit;
   end;

Dessa forma consegui resolver, obrigado pessoal!

  • Obrigado 1
  • Consultores
Postado

Boa noite,

Só uma última dica, se no programa de exemplo funciona e na sua aplicação não, provavelmente você não deva estar utilizando a LibXml2 na configuração da sua aplicação, caso queira fazer uma última verificação.

Confirme se está com as dlls atualizadas da LibXml2 na pasta da aplicação.

../trunk2/DLLs/LibXml2/

Obrigado pelo retorno, fechando.

Em 07/04/2023 at 21:38, Renato Rubinho disse:

Veja se sua aplicação está apontando para a mesma pasta de schemas que o programa de exemplo.

Screenshot_20230407-212722_Chrome.jpg

Revise se as configurações da sua aplicação estão iguais as do programa de exemplo.

 

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

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...