Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

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;
 

 

  • Moderadores
Postado
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.

  • Curtir 1
  • Obrigado 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado

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

 

  • Administradores
Postado

Boa tarde.

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

Att.

  • Curtir 2
Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

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

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


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Postado
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

Postado

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

  • Moderadores
Postado

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

 

 

Postado
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

  • Consultores
Postado

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.

  • Curtir 1
  • Obrigado 3
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á 1928 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.