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.