Página 1 de 1

Rotina para pegar o numero do XML ACBRNFe

Enviado: 12 Abr 2011 15:17
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.

Re: Rotina para pegar o numero do XML ACBRNFe

Enviado: 17 Abr 2011 18:22
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