Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Avatar do usuário
Por jmarcelosp
Posts Avatar
#50668
Olá pessoal
Estou fazendo um trabalho onde tenho de digitar a chave do XMLs em uma planilha (cujo o leitor de barra não consegue ler ), como tenho de acumular um grupo de informações, pensei, preciso ir validando antes de consolidar das informações e achei essa receita de bolo para fazer isto, mas não sei criar o VBA e o esquema no excel para gerar a critica de o código esta correto conforme as regra de uma chave de XMls de notas fiscais.

Dígito Verificador da Chave de Acesso – saiba como calcular!
PUBLICADO EM 19/12/2017 POR LEONARDO
Descomplicamos o Cálculo do Dígito Verificador da Chave de Acesso em Documentos Fiscais Eletrônicos.
Um Documento Fiscal Eletrônico (DFe) é identificado a partir da sua chave de acesso, que é gerada com base em dados extraídos do conteúdo do próprio DFe.

Atualmente, documentos como a Nota Fiscal Eletrônica (NFe), Nota Fiscal de Consumidor Eletrônica (NFCe), Conhecimento de Transporte Eletrônico (CTe), Conhecimento de Transporte Eletrônico para Outros Serviços (CTe OS) e Manifesto de Documento Fiscal Eletrônico (MDFe) possuem a mesma estrutura de composição da chave de acesso, a qual veremos mais adiante.

No entanto, geralmente a dúvida que surge é quanto a geração do último componente da chave: o Dígito Verificador (DV), visto que é preciso realizar um cálculo para encontrá-lo.

Neste artigo, você vai aprender sobre como calcular o dígito verificador da chave de acesso do seu Documento Fiscal Eletrônico.

LÓGICA DO CÁLCULO
Para nosso exemplo, vamos tomar como base a geração do DV da chave de acesso da Nota Fiscal Eletrônica (NFe). Entretanto, o mesmo procedimento é válido para os outros DFes citados no início do artigo. A chave de uma NFe é composta por campos retirados do próprio XML do documento. São eles: Código da UF + Data da emissão + CNPJ do Emitente + Modelo + Série + Número da NFe + Código Numérico + Dígito Verificador.

De uma forma mais visual: 43–1712–07.364.617/0001–35–55–000–000.012.014–100.012.014–6. Para calcular o DV de uma nota, vamos utilizar todos os outros 43 primeiros caracteres, ou seja, usaremos os campos: Código da UF + Data da emissão + CNPJ do Emitente + Modelo + Série + Número da NFe + Código Numérico, ficando da seguinte forma: 4317120736461700013555000000012014100012014.

Conforme o Manual de Orientações do Contribuinte v 6.00, página 143, o cálculo do DV é feito através do módulo 11 destes 43 primeiros algarismos da chave. A partir daí, você deve multiplicar cada algarismo (da direita para a esquerda) pelos multiplicadores 2,3,4,5,6,7,8,9. Depois, realize a soma de todos os resultados e divida o total por 11.

O Dígito Verificador será o resultado da diferença entre 11 e o resultado da divisão (11 – resto).

NA PRÁTICA, O QUE ISSO SIGNIFICA?
Aplicando a teoria explicada acima em nossa chave anterior, utilizada como exemplo, teremos:



Somando cada resultado do produto entre o algarismo da chave e o multiplicador correspondente, temos:

16 + 9 + 2 + 63 + 8 + 14 + 0 + 35 + 12 + 18 + 8 + 54 + 8 + 49 + 0 + 0 + 0 + 3 + 6 + 45 + 40 + 35 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 7 + 12 + 0 + 4 + 12 + 2 + 0 + 0 + 0 + 6 + 10 + 0 + 3 + 8 = 489.

Dividindo: 489 / 11 = 44, tendo 5 como resto. Então, aplica-se na fórmula de 11 – resto: 11 – 5 = 6. O Dígito Verificador de nossa chave de acesso é o número 6.

Abaixo, confira um exemplo de cálculo feito em Visual Basic 6 (VB6), onde é necessário passar uma chave com 43 dígitos e a função retorna o dígito verificador para a chave passada:

Calcula DV
Public Function CalculaDV(chave43 As String)
Dim indice, multiplicador As Integer
Dim soma, resto, digito_verificador As Integer

'Zera a soma
soma = 0
'Multiplicador inicia com 9
multiplicador = 2

'Multiplica do 43° até o 1° caractere da chave
For indice = Len(chave43) To 1 Step -1
'Multiplica cada digito da chave pelo multiplicador correspondente e soma
soma = soma + (Mid(chave43, indice, 1) * multiplicador)
multiplicador = multiplicador + 1

'Se multiplicador chegou a 2, volta para 9
If (multiplicador > 9) Then multiplicador = 2
Next indice

'Pega o resto da divisão através da função mod
resto = soma Mod 11

'Dígito verificador é o resultado da subtração 11 - resto
digito_verificador = 11 - resto

'Testa se o DV é maior = 10
If (digito_verificador >= 10) Then digito_verificador = 0

'Retorna o DV
CalculaDV = Abs(digito_verificador)
End Function


Grato
Marcelo Silva
24 988083360
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord