Jump to content

110.png

Curso Gratuito para todos Usuários
+ Super Treinamento Assinando o SAC Anual

botao_campanha_thulio.png

sem_ttulo-620.fw_-e1583866078274.png 

Curso Dominando o ACBrMonitor
Novo Módulo Soluções de Varejo
Assine o SAC ACBr em qualquer plano e tenha acesso

Saiba Mais

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

MFincotto

GerarChaveAcesso e a validação do código numérico da NFe/NFCe

Recommended Posts

Boa tarde a todos. 

De acordo com a NT 2019.001, será implementada a validação do campo cNF: cNF não pode ser igual a nNF (id: B08). 

Foi implementado no componente o método ValidarCodigoDFe dentro da geração da chave de acesso na unit ACBrDFeUtil, tudo muito bem explicado aqui:

Ví relatos de algumas pessoas passando por dificuldade com este ponto, pois atualizam seus fontes e geraram uma versão de seus produtos já com a nova validação. Entretanto, como somente o ambiente de homologação está realizando esta validação, as chaves geradas de forma "errada" estão caindo na validação, visto que ainda podem não ter sido reimplementadas. 

Sendo assim, segue uma dica que realizei para contornar sem impactar em uma nova atualização:

function GerarChaveAcesso(AUF: Integer; ADataEmissao: TDateTime; const ACNPJ:String;
                          ASerie, ANumero, AtpEmi, ACodigo: Integer; AModelo: Integer = 55;
                          const AValidarCodigoNumerico: Boolean = False): String;
var
  vUF, vDataEmissao, vSerie, vNumero, vCodigo, vModelo, vCNPJ, vtpEmi: String;
begin
  if AValidarCodigoNumerico then
  begin
    if ACodigo > 0 then
      if not ValidarCodigoDFe(ACodigo, ANumero) then
        raise EACBrDFeException.Create('Código Numérico inválido, Chave não Gerada');
    if ACodigo <= -2 then
      raise EACBrDFeException.Create('Código Numérico inválido, Chave não Gerada');
  end;

  if ACodigo = -1 then
    ACodigo := 0;
  if ACodigo = 0 then
    ACodigo := GerarCodigoDFe(ANumero);

  vUF          := Poem_Zeros(AUF, 2);
  vDataEmissao := FormatDateTime('YYMM', ADataEmissao);
  vCNPJ        := PadLeft(OnlyNumber(ACNPJ), 14, '0');
  vModelo      := Poem_Zeros(AModelo, 2);
  vSerie       := Poem_Zeros(ASerie, 3);
  vNumero      := Poem_Zeros(ANumero, 9);
  vtpEmi       := Poem_Zeros(AtpEmi, 1);
  vCodigo      := Poem_Zeros(ACodigo, 8);

  Result := vUF + vDataEmissao + vCNPJ + vModelo + vSerie + vNumero + vtpEmi + vCodigo;
  Result := Result + Modulo11(Result);
end;

Criamos um parâmetro com valor default para validar a chave somente quando necessário, na chamada pode ficar assim:

GerarChaveAcesso(CUF, DATAEMISSAO, DOCUMENTO, SERIE, NRONF, TIPOEMISSAO, CNF, MODELO, AMBIENTE = taHomologacao);

Enfim, saliento que entendo a grande importância desta implementação sem a validação do ambiente, é somente uma dica para quem está meio perdido com essa alteração e quer manter uma retrocompatibilidade com fontes atualizados.

 

 

 

 

Share this post


Link to post
Share on other sites

Concordo que seja  necessário parametrizar essa verificação...

Estamos analisando 

  • Thanks 1

Consultor SAC ACBr

Daniel Simões de Almeida
Ajude o Projeto ACBr crescer - Assine o SAC

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

Share this post


Link to post
Share on other sites

Pessoalmente sou contra, desde da NFe 2 senão to errado é falado para não fazer isso so não era validado, a SEFAZ cansou de falar e começou a validar.

Se abrir brecha o usuário nunca vai mudar o código ai quando a validação for para o ambiente de produção vai ter esta mesma choração então é melhor deixar do jeito que esta, pois isso é trocar seis por meia duzia.


Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Desenvolvedor ACBrLib.

 

Share this post


Link to post
Share on other sites
4 minutos atrás, Rafael Dias disse:

Pessoalmente sou contra, desde da NFe 2 senão to errado é falado para não fazer isso so não era validado, a SEFAZ cansou de falar e começou a validar.

Se abrir brecha o usuário nunca vai mudar o código ai quando a validação for para o ambiente de produção vai ter esta mesma choração então é melhor deixar do jeito que esta, pois isso é trocar seis por meia duzia.

Rafael, eu concordo com você que a parametrização demasiada pode ocasionar defasagem no código. Porém, eu acredito que como tudo, este ponto pode demandar uma flexibilidade, pois é uma alteração tecnicamente simples, porém pode ocasionar transtornos para os desenvolvedores com seus clientes.

Acredito que neste caso cabe uma tratativa. 

Share this post


Link to post
Share on other sites

Apenas para deixar registrado.... Após amplo debate na Equipe do ACBr, e seguindo a sugestão do @Rafael Dias, essa verificação foi migrada para as "Regras de Negócios"...

Ou seja, o ACBr apenas irá fazer a crítica, se o usuário chamar o método de verificação de Regras de Negócios...

  • Like 1

Consultor SAC ACBr

Daniel Simões de Almeida
Ajude o Projeto ACBr crescer - Assine o SAC

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

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