Ir para conteúdo
  • Cadastre-se

dev botao

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

 

  • Fundadores
Postado

Seguindo a dica do Renato, rodando a Validação do XML no Demo do ACBrNFe, podemos ver que ele não fere a Validação do Schema, e apenas retornar "Alertas"...

image.png

  • 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

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á 592 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.