Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

  • Membros Pro
Postado (editado)

Boa Tarde a todos.

Tenho uma NF-e autorizada em homologação. Quando uso a função de consultar ela altera o DigestValue do xml, na primeira vez aparentemente dá certo, mas se consultar de novo vai dar a mensagem "DigestValue do documento 43150905883223000168550010000007171000007170 não confere."

Rotina:
       dm.ACBrNFe1.NotasFiscais.Clear;
       dm.ACBrNFe1.NotasFiscais.LoadFromFile(43150905883223000168550010000007171000007170-nfe original.xml);
       dm.ACBrNFe1.Consultar;

 

Resultado: "DigestValue do documento 43150905883223000168550010000007171000007170 não confere." 
Realmente o digestvalue foi alterado ao Consultar.

Em anexo os 2 arquivos.

Desde já agradeço qualquer dica.

Ps.: Trunk2 atualizado hoje.

43150905883223000168550010000007171000007170-nfe original.xml

43150905883223000168550010000007171000007170-nfe.xml

Editado por DOCFABIO
  • Consultores
Postado

Boa tarde Fabio,

Seria interessante neste caso termos o XML de retorno do envio que consta o primeiro DisgestValue e o de retorno a consulta.

Desta forma vamos saber quem esta gerando o DisgestValue errado.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Membros Pro
Postado

O primeiro arquivo de retorno não tenho mais pois ele substituiu mas anotei antes o digestvalue: <DigestValue>umMI0sLsacDVEwadMFJSRmH53v8=</DigestValue>

E o último arquivo de retorno da consulta em anexo. Nele aparentemente está o correto, mas quando salva o xml final ele grava outro digest (anexo lá em cima). <DigestValue>NKASAfX5hiw6qvpL8yRSYBYuLGg=</DigestValue>

 

43150905883223000168550010000007171000007170-sit.xml

  • Consultores
Postado

Bom dia Fabio,

Descobri o motivo de estar gerando um novo DigestValue.

O XML "original" não possui a TAG <nItemPed> já o outro possui, isso faz com que ao assinar novamente tenhamos um novo DigestValue.

A TAG nItemPed é opcional, e por se tratar de uma informação numérica do tipo inteiro, o componente não gera a TAG se o valor for zero, mas a TAG foi gerada justamente com o valor zero na segunda vez, porque?

Vamos a um teste, ao executar o LoadFromFile passe como segundo parâmetro o valor False, isso vai fazer com que o componente não gere o XML novamente.

Exemplo:

dm.ACBrNFe1.NotasFiscais.Clear;
dm.ACBrNFe1.NotasFiscais.LoadFromFile(sNomeXML, False);
dm.ACBrNFe1.Consultar;

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Membros Pro
Postado (editado)

Então tá explicado. Eu realmente tenho que manipular essa tag <nItemPed> assunto já tratado aqui (http://www.projetoacbr.com.br/forum/topic/19850-campo-nitemped-integer-para-string/#comment-133948), altero o fonte do acbr para usar essa tag como string e não integer em razão de uma multi-nacional que exige receber o xml com esse campo preenchido assim: 00123 se o campo for inteiro vai cortar o zero na frente e eles não aceitam, dá erro pra eles na hora de importar xml, sabemos que errado isso por parte deles mas infelizmente eles exigem, dizem que todos mandam certo, etc.

Voltei o fonte original e deu tudo certo. Desculpa ter colocado aqui um problema causado por mim mesmo.

Eu costumo alterar o fonte do acbr nos arquivos PCNNFE.PAS e pcnNfeW.pas trocando nitemped de integer para string. Talvez tenha que fazer isso também em algum outro lugar, ou, se não for pedir muito, fazer o que outro usuário pediu no post acima de trocar geral no acbr esse campo para string? A princípio é mais fácil tratar string como inteiro do que o contrário...

Quanto ao teste que você pediu, realmente daí ele não gera um novo xml e fica o xml original com o digest correto.

Obs.: No trunk1 mesmo usando como string o Consultar não gerava essa diferença.

Editado por DOCFABIO
  • Consultores
Postado

Fabio,

Alterei o tipo do campo nItemPed de Integer para String.

Fiz isso não por causa de algumas empresas quererem colocar zeros a esquerda, mas sim pelo fato desse campo ser numérico e ter tamanho fixo igual a 6, conforme consta na Nota Técnica 2013/005 versão 1.22 página 57.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • 2 meses depois ...
Postado

Boa tarde a todos,

Estou enfrentando o mesmo problema acima referente ao Digestvalue, e meus fontes não houveram alterações, o que notei nos testes efetuados é que o fato de haver todo o processo de adição da nf-e no componente e posteriormente a consulta para verificar sua existência origina-se erro.

Notei que se utilizo o comando ACBrNFe.NotasFiscais.Clear o erro não ocorre ao consultar, contudo ao capturar o xml ele está vazio devido a chamada da função Clear.

Cheguei alterar o momento da consulta, deixando a função acima da adição da nota no componente, porém o problema é que ao capturar o xml ele não vem com os dados de autorização.

Existe alguma forma de concatenar os dados de autorização da nf-e com o xml gerado pelo componente ?

 

Em anexo xml gerado através da consulta e geração da nf-e e xml ativo na SEFAZ (homologação).

 

Observação: este procedimento de geração do xml e consulta funciona no trunk1, ele foi criado para corrigir problema de duplicidade de notas fiscais que devido problemas de comunicação com a resposta da SEFAZ não atualizava os dados de autorização da nf-e.

 

35151210296642000133550010000039391000039394 (ERP).xml

35151210296642000133550010000039391000039394 (SEFAZ).xml

35151210296642000133550010000039391000039394-ped-sit.xml

35151210296642000133550010000039391000039394-sit.xml

[]´s

Edgar de Souza

"Tudo que é preciso para o triunfo do mal é que as pessoas de bem nada façam." (Edmund Burke)

  • Consultores
Postado

Bom dia Edgar,

O Clear tem que ser executado antes de você carregar o XML exemplo:

ACBrNFe.NotasFiscais.Clear;

ACBrNFe.NotasFiscais.LoadFromFile(sArqXML);

ACBrNFe.Consultar;

Outra coisa quando você diz capturar o XML após a consulta o que você quer dizer?

Se você se refere a salvar o arquivo em disco, você atribuiu o valor True a propriedade: Configuracoes.Arquivos.Salvar ?

Agora se você esta lendo uma propriedade para salvar no banco de dados como é a linha?

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado
7 horas atrás, Italo Jurisato Junior disse:

Bom dia Edgar,

O Clear tem que ser executado antes de você carregar o XML exemplo:

ACBrNFe.NotasFiscais.Clear;

ACBrNFe.NotasFiscais.LoadFromFile(sArqXML);

ACBrNFe.Consultar;

Outra coisa quando você diz capturar o XML após a consulta o que você quer dizer?

Se você se refere a salvar o arquivo em disco, você atribuiu o valor True a propriedade: Configuracoes.Arquivos.Salvar ?

Agora se você esta lendo uma propriedade para salvar no banco de dados como é a linha?

Boa tarde Italo,

Já localizei o problema que estava ocorrendo, houve alteração nas informações do xml referente a alíquota do ICMS de 18% para 12%, com isto ao validar o xml começou ocorrer este problema de Digestvalue, efetuei a correção para a alíquota correta e funcionou corretamente.

Em relação aos questionamentos acima, na realidade o que eu precisava era capturar o xml completo com os dados de autorização, onde faço através do comando ACBrNFe.NotasFiscais.Items[0].XML, como o clear era utilizado antes, ao tentar capturar o arquivo era originado o erro sobre o componente estar vazio.

 

Desculpe pela falta de atenção e obrigado pelo seu posicionamento Italo.

  • Curtir 1

[]´s

Edgar de Souza

"Tudo que é preciso para o triunfo do mal é que as pessoas de bem nada façam." (Edmund Burke)

  • 2 semanas depois ...
  • Consultores
Postado

Bom dia,

Para que o DigestValue que esta no XML da NF-e ser diferente do que consta no retorno da consulta é simples, algum dado do da NF-e foi alterado, o XML foi gerado e assinado novamente, consequentemente o seu DigestValue é recalculado.

Vamos a um exemplo:

1. suponha que o XML foi gerado, assinado, valido e enviado para a SEFAZ.

2. Por algum motivo não ocorreu o retorno do protocolo de autorização.

3. Para corrigir esse problema o XML é carregado e é feita a consulta.

4. Mas surge o erro informando que o DigestValue não confere.

No passo 3 o XML é carregado com o LoadFromFile (por exemplo) só que esse método possui 2 parâmetros, o primeiro informamos o caminho mais nome do XML que desejamos carregar e o segundo que é opcional tem como valor padrão True, isso faz com que o XML seja gerado e assinado novamente. Por outro lado se for False, o XML é apenas carregado exatamente como ele esta gravado.

Mas tem pessoas que preferem alimentar novamente o componente lendo as informações do banco de dados para gerar e assinar e depois consultar, tudo bem, mas e se nesse meio tempo alguém realizar uma pequena alteração no cadastro do destinatário, por exemplo acrescentar uma virgula no endereço ou trocar um Z por S. Isso já é suficiente para que o DigestValue seja diferente.

Concluímos que é preciso avaliar como esta sendo feita essa rotina e muda-la, no meu entendimento devemos apenas ler o XML através do LoadFromFile e atribuir o valor False para o segundo parâmetro e não recriar do zero o XML.

Espero ter ajudado.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Bom dia Italo, bom eu fiz das duas formas usando o False e o True mas mesmo assim o erro ainda continua, e o cadastro do cliente não foi alterado.

Por exemplo fiz uma nota em offline e quando vou consultar a mesma ja aparece o problema

Postado

esse que esta sendo o problema, quando é offline e mando consultar esta dando o problema, bom estou fazendo isso com o banco de dados do cliente e o mesmo me informou que so envia a nota offiline e quando é consultada esta dando o problema

  • Consultores
Postado

Como você esta falando em offline estou entendendo que a nota seja uma NFC-e, correto?

Sendo assim, não existe essa história de enviar offline.

Você gera a Nota segundo o tipo de emissão offline e imprime o DANFE.

Depois a nota tem que ser enviada sem nenhuma alteração para SEFAZ quando os problemas forem sanados.

Não se deve alterar o tipo de emissão para normal ao ser enviada para SEFAZ.

Só é necessário a consulta caso a nota que foi enviada não recebeu o protocolo de autorização, por motivo de falha no retorno.

 

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

O problema é a bendita data de emissão que esta sendo alterada, fiz a alteração e creio q foi sanado o problema estou testando para ver se o problema ira continuar mas até o momento deu certinho... com as mudanças no sistema

  • Curtir 1
  • 4 semanas depois ...
Postado

Pessoal eu sei que ja discutiram sobre este erro do digestvalue, mas segue meu problema.

Tentei enviar uma NFCe em homologação para fazer alguns testes, na hora o sistema apresentou um erro, mas chegou a enviar o xml, porem nao gravou os dados no meu banco de dados.

A nota foi enviada pra receita, porem não gravei nenhuma informação no banco e também fiquei sem o xml original, ou seja, no meu sistema ficou como se a NFCe nunca tivesse sido enviada.

Repeti o processo de enviar novamente, ai ele gera o xml mas da a mensagem DigestValue do documento 41160109005135000114650010000001991000001990 não confere.

Eu tenho feito da seguinte maneira, monto o xml, 

Pude observar que o digestvalue que vem no retorno realmente é diferente do que foi gerado qdo tento enviar novamente

Digestvalue do retorno -> 'ZBZlu7SVdlJfjVbxay4Ksz2GeP8='

Deixei a propriedade ValidarDigest = false, enviei novamente e deu certo.

Acabei de ler o manual Acbrnfe 1.04 e nao achei nada especifico sobre o campo digestvalue, a não ser onde diz que a propriedade True faz a comparação.

Gostaria de uma orientação, caso aconteca novamente como citei acima, onde a NFCe esta autorizada mas por alguma razão não foi gravado nada no banco.

E tambem se devo deixar a propriedade true ou false, e por que?

 

41160109005135000114650010000001991000001990-nfe erro digestvalue.xml

41160109005135000114650010000001991000001990-nfe funciona.xml

  • Consultores
Postado

Boa tarde Alessandro,

Acredito que seria interessante antes de realizar o envio, salvar no banco o XML gerado, assinado e validado, assim você não ocorre esse risco de nem sequer ter o XML da venda, você não acha?

E ao receber o protocolo de autorização salvar em um outro campo o XML completo, ou seja, assinado e com o protocolo de autorização.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

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