A partir da versão 2.00 do leiaute da NF-e, o campo tpEmis (forma de emissão da NFe) passou a compor a chave de acesso da seguinte forma:
O tamanho do campo cNF - código numérico da NF-e foi reduzido para oito posições para não alterar o tamanho da chave de acesso da NF-e de 44 posições que passa ser composta pelos seguintes campos que se encontram dispersos na NF-e :
• cUF - Código da UF do emitente do Documento Fiscal
• AAMM - Ano e Mês de emissão da NF-e
• CNPJ - CNPJ do emitente
• mod - Modelo do Documento Fiscal
• serie - Série do Documento Fiscal
• nNF - Número do Documento Fiscal
• tpEmis – forma de emissão da NF-e
• cNF - Código Numérico que compõe a Chave de Acesso
• cDV - Dígito Verificador da Chave de Acesso
O Dígito Verificador (DV) irá garantir a integridade da chave de acesso, protegendo-a principalmente contra digitações erradas.
Eu já postei aqui a função para verificação do DV, agora vou postar a função que cria a chave de acesso, lembrando que a chave de acesso é obrigatória para o schema XML.
'---------------------------------------------------------------------
' Procedure : ChaveAcessoNFe
' Data : 08/02/2010
' Programador: Rodrigo de Oliveira
' Contato : thabis.wired@hotmail.com
' Descrição : Retorna a chave de Acesso da NFe
'---------------------------------------------------------------------
'
Public Function GeraChaveAcessoNFe() As Boolean
Dim Emissao As String
Dim Chave As String
Dim mod11 As Byte
'Prepara a data
On Error GoTo GeraChaveAcessoNFe_Error
Emissao = Format(DataEmissao, "dd/mm/yy")
'Essa parte do código gera o Código Numérico (Aleatório)
Randomize()
sCodigoNumerico = zeroEsquerda(CLng(Int((99999999 - 1 + 1) * Rnd + 1)), 8)
'gera a chave
Chave = CStr(UF) & Mid(Emissao, 7, 2) & Mid(Emissao, 4, 2) _
& sCNPJ & zeroEsquerda(sModelo, 2) & zeroEsquerda(sSerie, 3) _
& zeroEsquerda(sNumeroNF, 9) & sFormaEmissao & sCodigoNumerico
'calcula DV
mod11 = calculaDV(Chave)
'retorna a chave com 44 caracteres
sChaveAcessoNFe = Chave & mod11
'retorna o DV separado
sDV = mod11
'Retorna que a chave foi gerada com sucesso
GeraChaveAcessoNFe = True
Exit Function
GeraChaveAcessoNFe_Error:
MsgBox("Erro: " & Err.Number & vbNewLine & "Procedure ChaveAcessoNFe localizado em ChaveDV, na linha " & Erl, vbCritical, Err.Source)
Fun.LogErro(Err.Number, Err.Description, Err.Source, "Procedure GeraChaveAcessoNFe localizado em ChaveDV", Erl)
End Function
Abaixo segue uma função auxiliar que uso para gerar a chave.
'---------------------------------------------------------------------
' Procedure : zeroEsquerda
' Data : 08/02/2010
' Programador: Rodrigo de Oliveira
' Contato : thabis.wired@hotmail.com
' Descrição : coloca zeros a esquerda do valor passado na variavel
' número até ela obter o tamanho passado na variavel Zeros
'---------------------------------------------------------------------
Private Function zeroEsquerda(ByVal Numero As Long, ByVal Zeros As Byte) As String
Dim i As Byte
'verifica se o numero é maor que o padrão
On Error GoTo zeroEsquerda_Error
If Len(CStr(Numero)) > Zeros Then
zeroEsquerda = Right(CStr(Numero), 9)
Else
zeroEsquerda = Numero
End If
'coloca zeros a esquerda
For i = Len(CStr(Numero)) To Zeros - 1
zeroEsquerda = "0" & zeroEsquerda
Next
Exit Function
zeroEsquerda_Error:
MsgBox("Erro: " & Err.Number & vbNewLine & "Procedure zeroEsquerda localizado em ChaveDV, na linha " & Erl, vbCritical, Err.Source)
Fun.LogErro(Err.Number, Err.Description, Err.Source, "Procedure zeroEsquerda localizado em ChaveDV", Erl)
End Function
E é isso com essas duas funções e a função de DV que postei a alguns dias você consegue monta sua chave de acesso para NFe. E o melhor é que a função é valida para VBA e VB6 se necessidade de adaptações. Bem vou ficando por aqui, abraço.
OBS: Lembrando que Fun é uma classe particular que grava log de erro, logo posta sobre ela aqui.
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 17/02/2010 7:36 am