Olá pessoal,
Quem atualizou os fontes e reinstalou a Suite ACBr, pode ser que esteja recebendo essa mensagem de erro no momento que vai gerar a NF-e / CT-e / MDF-e / BP-e.
Porque esta mensagem esta aparecendo para alguns e para outros não?
Simples, quando o XML é gerado com base em alguns dados do documento fiscal é gerado a chave do mesmo.
Essa mensagem de erro é devido a uma validação que foi implementada na função que gera a chave.
Essa validação visa garantir que a sua Nota (por exemplo) não seja rejeitada pela regra de validação B03-10 que consta na Nota Técnica 2019/001.
Como vocês podem ver na imagem acima, a aplicação dessa regra é obrigatória, ou seja, todas as SEFAZ-Autorizadoras devem implementar essa regra.
Ela será implementada no dia 01/07/2019 no ambiente de Homologação e no dia 02/09/2019 no ambiente de Produção.
A validação que foi implementada ao gerar a chave é exatamente a descrita na regra, ou seja, o valor de cNF não pode ser igual a nNF e a nenhum dos números listados na regra.
Por curiosidade resolvi pegar o Manual da NF-e mais antigo que tenho (Março de 2009) veja o que esta escrito na definição do campo cNF:
O Manual deixa claro que o numero atribuído a cNF tem que ser um numero aleatório.
Portanto quem costuma atribuir a cNF o mesmo numero atribuído a nNF esta fazendo errado e agora não vai ter perdão, pois se insistir a SEFAZ não vai aceitar a nota.
Mas a regra B03-10 da Nota Técnica 2019/001 não se refere apenas a NF-e / NFC-e?
Sim, mas tenham certeza que essa regra de validação em breve vai ser implementada para os demais DF-e - Documentos Fiscais Eletrônicos.
Alguém duvida disso?
O que devo fazer para que a minha aplicação não pare com a mensagem de erro: Código Numérico inválido, Chave não Gerada ?
Muito simples, vou dar como exemplo o fragmento de código da minha aplicação:
Como é hoje, note que eu já gerava o código como sendo um numero aleatório:
NotaFiscalVenda := (DM_VEN.NotasDocumento.AsInteger + 1);
CodigoChave := Random(99999999) + 1; // +1 para garantir que não seja zero
Como vai passar a ser, para ter uma garantia maior ainda:
NotaFiscalVenda : =(DM_VEN.NotasDocumento.AsInteger + 1);
CodigoChave := GerarCodigoDFe(NotaFiscalVenda);
A função GerarCodigoDFe esta definida na Unit ACBrDFeUtil, logo você vai ter informar essa Unit em Uses do seu Form.
Note que ela recebe como parâmetro o numero da nota, pois a função vai gerar o código aleatoriamente e vai validar o mesmo e pela regra o código não pode ser igual ao numero da nota.
De forma semelhante você terão que fazer o mesmo nas suas aplicações que emitem CT-e, MDF-e e BP-e.
É preferível fazer essa correção na aplicação agora do que receber dezenas ou até centenas de ligações de clientes que não estão conseguindo autorizar os seus documentos na SEFAZ.
Fica ai a dica.