Jump to content

Assista tectoy.png

Traduzir Erro na validação do XML para o usuário


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

Recommended Posts

Pessoal, alguem ja tentou "Traduzir" aqueles erros(quando tem erro é claro) que aparece na validação das TAGS no XML atraves do componente ACBRNFe, pois um simples erro por exemplo de NCM gera um monte de "Caracteres" mensagem de TAGS, que o usuário não sabe o que fazer... não teria como fazer algo assim, "FAVOR CORRIGIR NCM DO ITEM TAL..." OU "INFORMAR CFOP DO ITEM xxxxx" , "INFORMAR UNIDADE MEDIDA DO ITEM xxxxxxx' , seria bem mais facil pro usuário final tomar a ação..

att.

Ricardo

  • Like 1

Ricardo

Flexnet Sistemas

Link to comment
Share on other sites

  • Membros Pro

Esse tipo de verificação faço no meu Software, se algum item não estiver com os dados obrigatórios preenchidos, mando a menssagem para um listbox, dizendo qual item e qual erro.

Caso exista algum erro, não deixo o usuario emitir a NFe, Até o momento esta dando certo.

Link to comment
Share on other sites

Souza, também pensei em fazer a validação via codigo, antes de enviar a NF-e, mas são N possibilidades, e sempre fica um brecha... o usuário que o diga.... sempre acha um errinho....mas se o ACBR faz essa validação seria melhor fazer um aproveitamento desta função, o problema é que muitos erros não corresponde o que ele realmente é, um NCM faltando ou inválido gera, muitas informações que confundem o usuario final. Poderia ser melhorado isso no componente ACBRNF-e

att.

Flexnet

Ricardo

Flexnet Sistemas

Link to comment
Share on other sites

Acredito que a solucao seja fazer o que foi dito mesmo, testar vc mesmo ANTES de assinar ou enviar o xml. É claro, no comeco ainda vai continuar acontecendo alguns erros que só os usuarios conseguem fazer, mas depois de um tempo nao é para acontecer mais (se vc foi corrigindo a lista de testes). Aqui a gente fez assim, e sempre funciona. Raramente volta um XML.

Link to comment
Share on other sites

  • 3 months later...

O ACBR podia apresentar uma mensagem mais legível ao usuário, aquela tela com um monte de mensagem de erro não faz sentido !, que não tem a ver o o que realmente esta causando o problema !!!

Ricardo

Flexnet Sistemas

Link to comment
Share on other sites

Pessoal,

Acho que ta havendo um problema de concepção do projeto, nos manuais de qualquer e-doc(ct-e, nf-e, nfs-e, etc.....etc)

tem-se as mensagens de erro, dentro do seu projeto voce criando uma tabela com todos estes erros descritos no manual por tipo de documento se seu projeto possibilita a emissão de mais de um destes documentos, voce tem a possibilidade de fazer melhor ainda para seu usuário, que é dar a Solução da Validação ou erro, pois vem um código, este código vc vai nesta tabela captura a mensagem e ja mostra a solução para o usuário,

com isto vc trata os RAISE existentes no componente, não mostrando isto para o usuário,

caputra o código e vai em sua tabela de códigos já traduzidos conforme o manual.

exemplo

codigo do erro sefaz : 531 -

na sua tabela

REJEICAO: TOTAL DE BC ICMS DIFERE DO SOMATORIO DOS ITENS

SOLUÇÃO : VERIFIQUE SE OS VALORES UNITÁRIOS E SE AS CONDIÇÕES DE TRIBUTAÇÃO DE CADA ITEM DA NOTA INFORMADA ESTÃO SATISFATÓRIOS, SE NÃO HOUVER SOLUÇÃO CONTATE O SETOR FISCAL E INFORME OS DADOS DESTA

NOTA FISCAL.

espero ter colaborado.

Hilderaldo Barbosa

Link to comment
Share on other sites

Hideraldo, o erro não é de retorno da SEFAZ, é na validação do XML pelo componente ACBr, uma vez que o mesmo faz isto, mas não apresenta uma responda objetiva para o usuário.

Veja se tem cabimento o usuário interpretar a tela anexo !

post-483-13548987967505.png

Ricardo

Flexnet Sistemas

Link to comment
Share on other sites

Ta saindo essa mensagem sem cabimento pq a geracao do XML esta errada!

Olha o que o manual diz:

Informar os campos O10 e O13 caso o

cálculo do IPI seja por alíquota ou os

campos O11 e O12 caso o cálculo do

IPI seja valor por unidade.

Nao pode informar o vUnid com a pIPI...

e o mesmo vale para o campo vProd, vc esta informando mais de 2 casas decimais????

Link to comment
Share on other sites

Igor, ai é que tá a questão, neste caso não foi problema de Unidade e muito menos de IPI, mas sim um cEAN de um item que estava inválido, onde o tal erro apareceu na ultima linha que gerou toda essa mensagem, é nisso que ACBR poderia ser mais legível, uma vez que a mensagem aparece em tela para o usuário final.

Ricardo

Flexnet Sistemas

Link to comment
Share on other sites

  • 2 months later...

boa tarde!

esta validação pode ser feita em separado utilizando a classe NFeW da unit pcnGerador.

Em NFeW.Gerador.Opcoes.FormatoAlerta é possivel personalizar as mensagens de alerta. segue commentario do procedimento wAlerta:

// O Formato da mensagem de erro pode ser alterado pelo usuario alterando-se a property FFormatoAlerta: onde;

// %TAGNIVEL% : Representa o Nivel da TAG; ex:

// %TAG% : Representa a TAG; ex:

// %ID% : Representa a ID da TAG; ex X34

// %MSG% : Representa a mensagem de alerta

// %DESCRICAO% : Representa a Descrição da TAG

eu normalmente valido a nota antes do processo de envio, pego a lista de erros do gerador (propriedade ListaDeAlertas) e valido uma a uma.

meu formato é mais ou menos assim: '[TN]%TAGNIVEL%[/TN] [TG]%TAG%[/TG] [DSC]%DESCRICAO%[/DSC] [MSG]%MSG%.[/MSG]'

por exemplo:

percorro a lista de erros geradas e verifico qual a tag nivel:

for i:0 to ListaDeErros.Count-1 do

begin

  if pos('[TN][/TN]) > 0 then // significa que retornou um erro nos dados do emitente

  begin

    erros_emit.add(RetornarConteudoEntre(ListaDeErros[i], '[DSC]','[/DSC]') +': '+RetornarConteudoEntre(ListaDeErros[i], '[MSG]','[/MSG]') ;

  end;

  ...

end;
depois de ler e organizar todos os erros, eu pego de bloco por bloco e organizo a mensagem. Exemplo:
  msg_erro.add('DADOS DO EMITENTE');

  tot_erros := tot_erros + erros_emit.count;

  msg_erro.add(erros_emit.Text);

assim no final eu tenho uma mensagem apresentavel para o usuario final que fica mais ou menos assim:

...

DADOS DO EMITENTE

- CNPJ: Conteúdo inválido

- Nome de fantasia: Nenhum valor informado

PRODUTOS

ITEM 1

- Valor total bruto dos produtos ou Serviços: Numero maximo de casas decimais permitidas 2.

Quando gera 3 ou 4 mensagens eu mostro ao usuário na tela, se gerar mais que isso, verifico se ele quer ver o relatório de erros e gero um arquivo html com os erros e apresento num WebBrowser. Faço isso pra não ter que mostrar uma mensagem gigante para o usuario como o nosso amigo a alguns posts atras.

Até hoje houve pouquissimas reclamações sobre isso, alem domais, se houver alguma tag que precisa de um traqtamento especial ou se eu quizer apresentar uma mensagem diferente eu ja vou tratando tudo dentro do primeiro exemplo que citei.

é isso ai pessoal, fica uma sugestão pra quem precisa melhorar a apresentação das mensagens, peço desculpas se houver erros mas eu fui fazendo tudo de cabeça.

abraço

Link to comment
Share on other sites

  • 2 weeks later...
  • 6 months later...

Boa tarde!!

 

Depois de pesquisar uma maneira de traduzir as mensagens de validação do XML, me deparei com um artigo que explica que o MSXML 5 foi lançado exclusivamente para o Office sendo a única versão com métodos para assinatura digital, distribuída a partir do Office 2003 até a versão 2007.

 

Segue o artigo que explica: http://balaiotecnologico.blogspot.com.br/2012/07/assinando-documentos-xml-com-capicom-e.html).

 

Então me ocorreu que em um Office em português essas DLLs do MSXML5 poderiam ser do mesmo idioma, e foi ai que eu me dei bem. :mrgreen:

 

Instalei um Office 2007 em Português e peguei a DLL "msxml5r.dll" (DLL de resource c/todas as mensagens) e deu certo. Só precisa desta, a outra eu mantive igual a que está no SVN, pois a versão era mais recente.

 

Em anexo a DLL "msxml5r.dll".

 

Espero ter ajudado.

 

_____________________________

Cristiam Silva Azambuja

msxml5r.7z

msxml5r.7z

  • Like 1
Link to comment
Share on other sites

  • 3 years later...
Em 04/09/2012 at 14:20, Roberto.Godinho disse:

boa tarde!

 

esta validação pode ser feita em separado utilizando a classe NFeW da unit pcnGerador.

Em NFeW.Gerador.Opcoes.FormatoAlerta é possivel personalizar as mensagens de alerta. segue commentario do procedimento wAlerta:

 

 

 

eu normalmente valido a nota antes do processo de envio, pego a lista de erros do gerador (propriedade ListaDeAlertas) e valido uma a uma.

 

meu formato é mais ou menos assim: '[TN]%TAGNIVEL%[/TN] [TG]%TAG%[/TG] [DSC]%DESCRICAO%[/DSC] [MSG]%MSG%.[/MSG]'

 

por exemplo:

 

percorro a lista de erros geradas e verifico qual a tag nivel:

 

 
for i:0 to ListaDeErros.Count-1 do

begin

  if pos('[TN][/TN]) > 0 then // significa que retornou um erro nos dados do emitente

  begin

    erros_emit.add(RetornarConteudoEntre(ListaDeErros[i], '[DSC]','[/DSC]') +': '+RetornarConteudoEntre(ListaDeErros[i], '[MSG]','[/MSG]') ;

  end;

  ...

end;

depois de ler e organizar todos os erros, eu pego de bloco por bloco e organizo a mensagem. Exemplo:

 
  msg_erro.add('DADOS DO EMITENTE');

  tot_erros := tot_erros + erros_emit.count;

  msg_erro.add(erros_emit.Text);

 

 

assim no final eu tenho uma mensagem apresentavel para o usuario final que fica mais ou menos assim:

 

 

 

Quando gera 3 ou 4 mensagens eu mostro ao usuário na tela, se gerar mais que isso, verifico se ele quer ver o relatório de erros e gero um arquivo html com os erros e apresento num WebBrowser. Faço isso pra não ter que mostrar uma mensagem gigante para o usuario como o nosso amigo a alguns posts atras.

 

Até hoje houve pouquissimas reclamações sobre isso, alem domais, se houver alguma tag que precisa de um traqtamento especial ou se eu quizer apresentar uma mensagem diferente eu ja vou tratando tudo dentro do primeiro exemplo que citei.

 

é isso ai pessoal, fica uma sugestão pra quem precisa melhorar a apresentação das mensagens, peço desculpas se houver erros mas eu fui fazendo tudo de cabeça.

 

abraço

Roberto, bom dia.

Agradeço o exemplo apresentado, porém, estou com uma dúvida. A classe TNFeW é privada, com isso não consigo ter acesso a ela pelo ACBrNFe para obter a ListaDeAlertas. Tentei desta forma (FACBrNFe.CartaCorrecao.CCe.Gerador.ListaDeAlertas.Count) mais parece que não é a mesma lista pois ela fica zerada. Com isso eu mando Assinar, quando mando validar ele já estoura o erro pelo próprio ACBR, não dando tempo de eu tratar o erro. Eu tenho que alterar a unidade do ACBR ? O código abaixo é da unidade ACBrNFeNotasFiscais e é chamado quando mando validar FACBrNFe.NotasFiscais.Validar. Eu vou ter de tirar esse Raise Exception e colocar o tratamento ali ?

 

procedure NotaFiscal.Validar;
var
  Erro, AXML, DeclaracaoXML: String;
  NotaEhValida, ok: Boolean;
  ALayout: TLayOut;
  VerServ: Real;
  Modelo: TpcnModeloDF;
  cUF: Integer;
begin
  AXML := XMLAssinado;

  with TACBrNFe(TNotasFiscais(Collection).ACBrNFe) do
  begin
    VerServ := FNFe.infNFe.Versao;
    Modelo  := StrToModeloDF(ok, IntToStr(FNFe.Ide.modelo));
    cUF     := FNFe.Ide.cUF;

    if EhAutorizacao( DblToVersaoDF(ok, VerServ), Modelo, cUF) then
      ALayout := LayNfeAutorizacao
    else
      ALayout := LayNfeRecepcao;

    // Extraindo apenas os dados da NFe (sem nfeProc)
    DeclaracaoXML := ObtemDeclaracaoXML(AXML);
    AXML := DeclaracaoXML + '<NFe xmlns' +
            RetornarConteudoEntre(AXML, '<NFe xmlns', '</NFe>') +
            '</NFe>';

    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;
  end;
end;

Link to comment
Share on other sites

  • 5 months later...
  • 1 year later...
  • Moderadores
57 minutos atrás, carlessoflu disse:

Realmente, também estou precisando escrever melhor esses erros para ficar mais fácil para o usuário final. Alguém tem algum exemplo, demo, que possa nos ajudar?

Bom dia, carlessoflu.

Esse Tópico é antigo, sugiro que crie um novo tópico, relatando o seu problema.

Equipe ACBr

Felipe Eduardo Resende Mesquita

Ajude o Projeto ACBr crescer - Assine o SAC

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

 

 

 

Link to comment
Share on other sites

  • Este tópico foi criado há 1459 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.