Jump to content

Promoção de Natal SAC Mensal

Contrate e ganhe 1 Kit agenda + Caneta
Saiba mais

LANÇAMENTO
Curso Completo - Dominando o ACBrMonitor

Conheça o Curso

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

microporto.suporte

Valor inválido cNF precisei alterar os fontes para resolver meu problema.

Recommended Posts

Depois de ter batido a cabeça por um bom tempo tentando solucionar o erro de Valor Indevido cNF da NFe, seguindo a orientação do Ítalo de deixar a informação na ide.nNF com o numero sequencial da nota fiscal e o ide.cNF com zero para que ele assumisse sozinho um numero aleatório para o preenchimento do campo com 8 dígitos  ou utilizasse a função                         Ide.cNF := ACBrUtil.GerarCodigoDFe(Nronta+1) que não me adiantou nada fiz i seguinte:

deixei o campo Ide.cNF = 0 no fonte de nosso sistema e na unit pcnNFe.pas , na linha 248, dentro da função  TNFeW.GerarXml: Boolean criei um avariável _numNFe para manter o numero

do campo Ide.nNF com o numero sequencial  e fiz uma comparação de quando os campos Ide.cNF e Ide.nNf forem iguais cria um numero de oito digitos randômico e armazena no campo

Ide.cNF, conforme abaixo.

O problema é que quando eu for atualizar os componentes perco a solução.

function TNFeW.GerarXml: Boolean;
var
  Gerar: Boolean;
  _numNfe : Integer;   <--------
  xProtNFe : String;
  xCNPJCPF : string;
begin
  Gerador.ListaDeAlertas.Clear;

  FUsar_tcDe4 := (NFe.infNFe.Versao >= 3.10);
  FVersao     := Copy(NFe.infNFe.VersaoStr, 9, 4);

  xCNPJCPF := nfe.emit.CNPJCPF;

  if not EstaVazio(nfe.Avulsa.CNPJ) then
    xCNPJCPF := nfe.Avulsa.CNPJ;
  _numNfe := nfe.ide.nNF;                                           <------
  if ( nfe.ide.cNF = nfe.ide.nNF ) then                        <------
     nfe.ide.cNF := Round(random(99999999)); // 99999999 é o limite do numero randomico      <-------
  nfe.ide.nNF := _numNfe;                                           <------
  FChaveNFe := GerarChaveAcesso(nfe.ide.cUF, nfe.ide.dEmi, xCNPJCPF, nfe.ide.serie,
                            nfe.ide.nNF, StrToInt(TpEmisToStr(nfe.ide.tpEmis)),
                            nfe.ide.cNF, nfe.ide.modelo);
  nfe.infNFe.ID := 'NFe' + FChaveNFe;
 

 

Share this post


Link to post
Share on other sites
11 minutos atrás, microporto.suporte disse:

  if ( nfe.ide.cNF = nfe.ide.nNF ) then                        <------
     nfe.ide.cNF := Round(random(99999999)); // 99999999 é o limite do numero randomico      <-------

Se você precisou fazer essa alteração significa que ainda está passando o mesmo valor para nNF e cNF ao alimentar o componente na geração do XML.

Faça o que foi sugerido, informe 0 para cNF ou use a função GerarCodigoDFe(nNF) para gerar o numero randômico, assim não precisa alterar os fontes do ACBr.

  • Like 1

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Share this post


Link to post
Share on other sites

Uma dúvida sobre usar cNF := Round(random(99999999))

Exemplo:

Como vou fazer pra criar a chave baseado nos dados da nota gerada, caso precise?

Pois não vou saber o cNF.

me refiro case eu não salve a chave, e precisar fazer essa consulta abaixo.

NFE.CONSULTARNFE("c:\35XXXXXXXXXXXXXXXX550010000000050000000058-nfe.xml")

 

Paulo

 

Share this post


Link to post
Share on other sites

Boa tarde.

O recomendado é salvar estes dados em seu banco de dados com as demais informações relativas a NFe.

Att.

  • Like 2

Consultora SAC ACBr

Juliana Tamizou
Ajude o Projeto ACBr crescer - Assine o SAC

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Share this post


Link to post
Share on other sites
Em 14/08/2019 at 14:47, Pauloa1 disse:

Uma dúvida sobre usar cNF := Round(random(99999999))

Exemplo:

Como vou fazer pra criar a chave baseado nos dados da nota gerada, caso precise?

Pois não vou saber o cNF.

me refiro case eu não salve a chave, e precisar fazer essa consulta abaixo.

NFE.CONSULTARNFE("c:\35XXXXXXXXXXXXXXXX550010000000050000000058-nfe.xml")

 

Paulo

 

Paulo, tbm tinha essa dúvida,

não sei se estou certo, mas acabei fazendo um algoritmo para gerar o cNF baseado nas informações da nota, portanto não é randômico mas é diferente do nNF

Share this post


Link to post
Share on other sites

Bom dia, eu estou colocando nesse campo a data de emissão da nota ... StrToInt64( FormatDateTime('DDMMYYYY', FieldByName( 'NFS_DT_EMISSAO' ).AsDateTime ))

Share this post


Link to post
Share on other sites

Novamente lembrando a todos que o campo cNF da nota fiscal é um dispositivo de segurança.

Usar informações da própria nota para gerar o cNF, mesmo que usando um algoritmo que pode ser deduzido, deixa a nota vulnerável contra bisbilhoteiros.

Imagine o seu cliente sendo espionado pela concorrência. Imagine os clientes do seu cliente sendo vítimas de golpe por boletos falsos que pensou ser verídicos já que tinha informações da nota fiscal.


Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Share this post


Link to post
Share on other sites
Em 14/08/2019 at 14:52, Juliana Tamizou disse:

Boa tarde.

O recomendado é salvar estes dados em seu banco de dados com as demais informações relativas a NFe.

Att.

Eu salvo, mas as vezes por n motivos, pode não salvar.

 

Uma outra solução é pegar a série+numero e gerar um digito; exemplo serie 2 nota 35402 ficaria 2035402+digito

 

Paulo

Share this post


Link to post
Share on other sites

Bom dia Paulo,

Como assim, "eu salvo mas as vezes pode não salvar" ?

Se você esta usando o banco de dados que hora salva os dados, hora não salva, você não acha que esta na hora de mudar para um banco de dados mais confiável?

Ainda não entendi a dificuldade de usar a função que criamos, que gera o código da forma recomendada pela SEFAZ e o valida, garantido desta forma que a sua nota vai ser aceita pela SEFAZ.

Após gerar o código, salvar o mesmo com os demais dados da nota.

Obviamente que para isso será necessário acrescentar mais um campo na tabela para armazenar o código.

Eu acredito que isso não deva ser uma tarefa extremamente complicada, ou estou enganado?

A minha aplicação de emissão de NF-e foi escrita em 2008, ao ler o manual da NF-e mais precisamente as paginas que se refere o layout da NF-e e encontrei isso:

cNF.jpg

Note que o tamanho do código naquela época era de 9 dígitos, depois foi alterado para 8 pois acrescentaram na chave entre o numero e o código o tipo de emissão.

Portanto, não se trata de frescura nossa, não é algo novo que a SEFAZ inventou agora para complicar a nossa vida.

A recomendação de gerar o código de forma aleatória já faz anos e põe anos nisso.

Eu entendi o recado da SEFAZ escrito na última coluna e segui a recomendação.

Inclusive no meu artigo: Código Numerico inválido chave não gerada mostro como eu gerava o código na minha aplicação e a alteração que fiz para passar a usar a função que foi criada.

Para finalizar, a aplicação é sua faça da forma que achar melhor, motivos para gerar o código de forma aleatória existem de sobra.

  • Like 1
  • Thanks 2

Consultor SAC ACBr Italo Jurisato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...