Rotina para pegar o numero do XML ACBRNFe

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Rotina para pegar o numero do XML ACBRNFe

Mensagem por Itamar M. Lins Jr. »

Ola!
Com a versão/modelo 2 o ACBRNFe mudou a forma de como é gerado o número final.
Consegui agora descobrir como é. Pelo menos acredito :)

Segue a formula.

Código: Selecionar todos

cUf      := substr(em->CodCidIBGE,1,2)
cAnoMes  := hb_dtoc(sa->emissao,'YYMM')
cCNPJ    := em->cnpj
cMod     := '55'
cSerie   := '001'
cNF      := strzero(sa->numero,9)
cXML     := cUF+cAnoMes+cCNPJ+cMod+cSerie+cNF+'1'+substr(cNF,2,8) 
cNFDV    := substr(cNF,2,8)+modulo11( cXML,2,9 ) 
cNFXML   := cUF+cAnoMes+cCNPJ+cMod+cSerie+cNF+'1'+cNFDV+'-nfe.xml'
O modulo11 é uma função do Maligno!
Tá no Dicas, Contribuições, Tutoriais.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Re: Rotina para pegar o numero do XML ACBRNFe

Mensagem por janio »

Valeu Itamar,

Pra facilitar ainda mais a vida dos colegas, segue função do Modulo11 de autoria do Maligno:

Código: Selecionar todos

//************************************************************************************************** 
function Modulo11(cStr,nPeso1,nPeso2) // módulo 11, com pesos nPeso1 (inicial) a nPeso2 (final), que 
local nTot := 0                       // serão utilizados no multiplicador dos dígitos, apanhados da 
local nMul := nPeso1                  // direita para a esquerda. Tal multiplicador será reciclado e 
local i                               // voltará para nPeso1, quando o limite (nPeso2) for atingido. 
* 
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)) 
viewtopic.php?t=6382

Mais fácil que isso somente melzinho na chupeta! hehehe
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Responder