Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado

Boa tarde,

Não sei se isso é muito comum, mas, às vezes ocorre de se tentar enviar uma nota eletrônica e o processo de envio e recebimento da resposta não finalizar por completo, ou seja, o XML é transmitido, mas o retorno da SEFAZ com o protocolo da nota não chega. Nesses casos é preciso realizar uma nova conexão para consultar a nota e ver se ela está autorizada, certo?

Eu procedo assim no meu sistema:

ACBrNFe1.NotasFiscais.Clear;
ACBrNFe1.NotasFiscais.LoadFromFile(VArqXML);
ACBrNFe1.Consultar;

if ACBrNFe1.WebServices.Consulta.cstat = 100 then
 begin
  meuDataSet.FieldByName('SITUACAO').AsString := 'Autorizada';
  meuDataSet.FieldByName('PROTOCOLO').AsString := ACBrNFe1.WebServices.Consulta.protNFe.nProt; 
  meuDataSet.FieldByName('DHEMI').AsDateTime := ACBrNFe1.WebServices.Consulta.protNFe.dhRecbto;
 end;

Minha dúvida é a seguinte: pelos .cStat, .protNFe.nProt e protNFe.dhRecbto eu consigo verificar se a nota foi autorizada, o protocolo de autorização e data de autorização. Até aí tudo certo. Mas tem como eu verificar o valor em R$ que essa nota lá no servidor para eu conferir e só liberar essa nota no meu sistema como autorizada se o valor registrado no sistema é o mesmo retornado pela servidor da receita?

Obrigado!

 

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Consultores
Postado

Boa tarde Valdir,

Você pegar o valor da Nota em qual servidor?

O da SEFAZ?

Não entendi a necessidade, se o retorno da consulta da forma que você já diz com exatidão que a nota foi ou não autorizada.

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

Certo Italo, é isso mesmo, ou seja, consigo obter esses três dados dessa consulta a posteriore e atualizo o meu BD e gravo o protocolo no XML original, tudo tranquilo. Fica tudo certo.

Mas veja bem o que um usuário fez esta semana: ele emitiu uma nota (número 10) no banco de dados com valor de R$ 100,00. 

Antes de emitir essa nota, ele fez uma copia do BD onde a última nota emitida era a de nr 9. Aí emitiu a nota 10 tudo certo. Então ele pegou aquela cópia do BD, substituiu o arquivo na pasta do sistema e acessou o sistema e fez uma nota com valor de R$ 1.500,00. Ao iniciar a essa nota, o sistema, corretamente a iniciou com númeror 10. Porém, ao tentar enviar a nota 10, ocorreu rejeição de duplicidade, pois essa nota tinha sido enviada com o outro banco de dados. Quando isso ocorre, a orientação é ele fazer essa consulta que mencionei na abertura deste post, para atualizar a situação da nota no sistema. Ao fazer isso, a SEFAZ retorna cstat, situaçao e data da nota. O que o meu sistema faz? Atualiza a situação dessa nota no sistema como autorizada e imprime um Danfe no valor de R$ 1.500,00, enquanto que a nota 10, lá na SEFAZ está com valor de R$ 100,00.

Entendeu a sacanagem que o cara conseguiu fazer?

Por isso, se tiver como eu capturar o valor que a nota autorizada está lá na SEFAZ, aí eu comparo com essa nota consigo impedir essa esperteza do usuário.

Obrigado.

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Consultores
Postado

Boa noite Valdir,

Na chave da NF-e temos um campo chamado código numérico.

Ess código possui um tamanho de 8 dígitos e a sua posição é a penúltima, pois a última é o digito verificador.

Chave: ......12345678D

A letra D representa o digito verificador da chave.

Como você gera o código?

Usa o mesmo numero da nota?

Se sim, esta errado, pois fazendo dessa forma a chave da sua nota é considerada fraca e tem um detalhe, o numero da nota pode chegar até 9 dígitos e o código somente 8, logo o que você vai fazer quando a sua nota chegar a ter 9 dígitos?

No Manual da NF-e existe uma recomendação que esse código seja aleatório e diferente de zero.

A minha sugestão é acrescentar um campo chamado CodNF na tabela onde você salva os dados da nota no banco de dados.

Desta forma ao gerar no banco de dados um registro para armazenar os dados da nota de numero 10 (por exemplo), gere o código com no máximo 8 dígitos e que seja diferente de zero através do Randomize  e salve no campo CodNF.

Ao alimentar o componente com os dados da venda, atribua o conteúdo campo CodNF a propriedade ide.cNF

Desta forma ao gerar a chave o componente vai utilizar esse numero como código numérico da Nota Fiscal.

Você concorda que ao emitir a nota de numero 10 teríamos um código numérico aleatório para essa nota e ao restaurar o banco emitir novamente uma outra nota de numero 10 teríamos u código aleatório totalmente diferente da primeira?

Desta forma você teria uma informação para comparar se realmente se trata da mesma nota ou não.

Pense nisso.

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

Bom dia,

Perfeito Italo. Suas ponderações e sugestões são 100% corretas e me serão muito úteis. Mestre é mestre, hehe! Obrigado.

Na verdade eu utilizo código aleatório, mas deixo o Acbr gerar esse código, pois na geração da nota seto -> Ide.cNF := -1.

Mas não faço o controle cruzado de cNF da venda com cNF da nota. Vou seguir sua sugestão e fazer isso a partir de agora. Dessa forma creio que eliminarei totalmente a possibilidade do usuário criar esse problema novamente.

Obrigado.

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Moderadores
Postado

Faça a consulta e verifique se o DigestValue é igual, Ex:

ACBrNFe1.WebServices.Consulta.protNFe.digVal = ACBrNFe1.NotasFiscais.Items[0].NFe.signature.DigestValue

Se os valores foram iguais vc terá certeza q se trata da mesma nota.

  • Curtir 2
djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.xpos.com.br
  • 3 semanas depois ...
  • Membros Pro
Postado
Em 02/02/2018 at 10:25, André Ferreira de Moraes disse:

Faça a consulta e verifique se o DigestValue é igual, Ex:


ACBrNFe1.WebServices.Consulta.protNFe.digVal = ACBrNFe1.NotasFiscais.Items[0].NFe.signature.DigestValue

Se os valores foram iguais vc terá certeza q se trata da mesma nota.

Boa tarde,

Fiz um teste com essa sua sugestão, mas ao que parece, ACBrNFe1.WebServices.Consulta.protNFe.digVal e ACBrNFe1.NotasFiscais.Items[0].NFe.signature.DigestValue não têm a mesma informação. O primeiro traz o digVal do protocolo final da nota na SEFAZ. Enquanto que o segundo traz o digestValue do meu XML. E essas duas informações não serão iguais. Pelo menos nos arquivos que tenho aqui, não são

Obrigado.

 

Valdir Dill

Rio de Janeiro - RJ

 

 

  • Consultores
Postado

Boa tarde Valdir,

Pois tem que ser iguais o campo digVal que consta no grupo de informações do protocolo tem que ser igual ao digestValue que consta no grupo da assinatura.

Se os XML que você tem estão diferente isso significa duas coisas, ou o protocolo não pertence a essa nota ou a nota foi gerada novamente com alguma alteração e resultou em um novo digestValue.

  • 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

×
×
  • 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.