Página 1 de 1
Chave Nfe
Enviado: 30 Dez 2011 00:57
por janio
Código: Selecionar todos
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
Function ChaveNFe( Uf, datemi, cnpj, modelo, serie, numnfe, tpEmis )
Local CodUf
Local dEmis
Local ch
CodUf = VerUFibge ( uf )
dEmis = hb_dtoc( datemi, 'YYMM' )
Ch = CodUf + dEmis + cnpj + modelo + strzero( val(serie), 3 ) + strzero(numnfe,9) + tpEmis + strzero(numnfe,8)
Dv = Modulo11( ch ,2,9)
Return ( Ch + Dv )
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
Function VerUFibge ( uf )
Local oRet
Do Case
Case uf = "RO"
oRet := "11"
Case uf = "AC"
oRet := "12"
Case uf = "AM"
oRet := "13"
Case uf = "RR"
oRet := "14"
Case uf = "PA"
oRet := "15"
Case uf = "AP"
oRet := "16"
Case uf = "TO"
oRet := "17"
Case uf = "MA"
oRet := "21"
Case uf = "PI"
oRet := "22"
Case uf = "CE"
oRet := "23"
Case uf = "RN"
oRet := "24"
Case uf = "PB"
oRet := "25"
Case uf = "PE"
oRet := "26"
Case uf = "AL"
oRet := "27"
Case uf = "SE"
oRet := "28"
Case uf = "BA"
oRet := "29"
Case uf = "MG"
oRet := "31"
Case uf = "ES"
oRet := "32"
Case uf = "RJ"
oRet := "33"
Case uf = "SP"
oRet := "35"
Case uf = "PR"
oRet := "41"
Case uf = "SC"
oRet := "42"
Case uf = "RS"
oRet := "43"
Case uf = "MS"
oRet := "50"
Case uf = "MT"
oRet := "51"
Case uf = "GO"
oRet := "52"
Case uf = "DF"
oRet := "53"
EndCase
Return oRet
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
Function Modulo11(cStr,nPeso1,nPeso2)
local nTot := 0
local nMul := nPeso1
local i
*
for i := Len(cStr) to 1 step -1
nTot += Val(SubStr(cStr,i,1)) * nMul
nMul := if(nMul=nPeso2, nPeso1, nMul+1)
next
return if(nTot%11 < 2, "0", Str(11-(nTot%11),1))
Chave Nfe
Enviado: 06 Jan 2012 23:51
por marcos.gurupi
Parabens pela contruibuicao. Qual seria o significado do parametro Tpemis ? Seria S para SAIDA ou E para ENTRADA?
Marcos Roberto.
Chave Nfe
Enviado: 07 Jan 2012 21:40
por janio
O parametro Tpemis passou a compor a chave da nfe a partir da vs 2.0
Assim, deve ser informado:
"1" para Normal – emissão normal;
"2" para Contingência FS – emissão em contingência com impressão do DANFE em Formulário de Segurança;
"3" para Contingência SCAN – emissão em contingência no Sistema de Contingência do Ambiente Nacional – SCAN;
"4" para Contingência DPEC - emissão em contingência com envio da Declaração Prévia de Emissão em Contingência –
DPEC;
"5" para Contingência FS-DA - emissão em contingência com impressão do DANFE em Formulário de Segurança para Impressão de Documento Auxiliar de Documento Fiscal Eletrônico (FS-DA).
Chave Nfe
Enviado: 07 Jan 2012 23:49
por marcos.gurupi
Caro, me permita descontar. Eu acho que se trata de 0 para entrada e 1 para saida.
Marcos Roberto.
Chave Nfe
Enviado: 08 Jan 2012 22:27
por fladimir
perdão pela minha ignorância, mas esta função seria para o cliente conferir (validar) a chave do danfe se esta correta?
Não entendi direito a aplicabilidade?
Eu uso o ACBRNFe, não sei se influencia na resposta....
[]´s
Chave Nfe
Enviado: 09 Jan 2012 00:21
por janio
marcos.gurupi,
O parametro Tpemis serve exatamente para o que falei. Pode conferir.
fladimir,
Em diversas situações no manuseio da nfe precisamos saber da respectiva chave. Se vc possuir uma rotina para consulta da nfe direto no site da receita, por exemplo, vai precisar da chave para fazer essa consulta. Além disso, eu guardo no banco de dados tudo relacionado a nfe: chave, path do xml, protocolo disso, protocolo daqui, etc, etc, etc, etc.
Janio
Chave Nfe
Enviado: 09 Jan 2012 01:29
por fladimir
Ah sim entendi... obrigado colega, era o q imaginava...
[]´s Feliz 2012
Chave Nfe
Enviado: 13 Jan 2012 14:30
por billy1943
Notei na rotina do colega Janio que ele não usa o número aleatório, colocando em seu lugar o mesmo número da NFe.
Como eu utilizo no SEFAZ-SP, na versão 2.0, foi informado para gerar o código numérico aleatório para compor a chave, evitando acesso indevido, a rotina do nosso colega não propiciaria tal acesso ?
Chave Nfe
Enviado: 14 Jan 2012 17:57
por janio
Colega,
Eu uso o ACBrNfeMonitor e este gera a chave examente como fiz na rotina, ou seja, colocando no espaço destinado ao numero aleatorio o mesmo numero da nfe.
Até hj nao deu problema.
No link abaixo um colega explica pq tambem resolveu usar o mesmo numero da nfe no campo "numero aleatorio"
viewtopic.php?f=20&t=11816
Chave Nfe
Enviado: 15 Jan 2012 14:55
por billy1943
Deixe-me explicar onde vejo onde possa haver acesso indevido aos dados:
- basta gerar uma rotina com o CNPJ de uma empresa, para um determinado ano/mês, começar de um determinado número de nota/série, e esse programa gerará todas as chaves das NFe dessa empresa.
Não que eu classifique isso de problema, mas você gostaria que alguém tivesse acesso a todo o seu faturamento ?
Ele ficará sabendo os seus produtos, preços de venda, clientes, etc.
Quem não usar o número aleatório estará sujeito a isso.