PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → XMLtoVariant para a DANFE Nfe do Brasil by Igor
XMLtoVariant para a DANFE Nfe do Brasil by Igor
Iniciado por Boller, mai., 05 2023 11:37 PM - Sem resposta
Membro registado
3.659 mensagems
Popularité : +175 (223 votes)
Publicado em maio, 05 2023 - 11:37 PM
PROCEDURE XMLtoVariant(pEnderecoXML)
XMLDoc is a xmlDocument
vXMLVariant is Variant


XMLDoc = XMLOpen(pEnderecoXML)

sChave is string = XMLDoc.nfeProc.NFe.infNFe:Id
//IF sChave = ""
// sChave = XMLDoc.NFEPROC.NFE.INFNFE:ID
// IF sChave = "" THEN
// sChave = XMLDoc..NoeudRacine[1]..NoeudFils[1]..NoeudFils[1]..Attribut[1]
// END
//END

vXMLVariant.Id = sChave
IF sChave = "" THEN
vXMLVariant.Erro = True
RESULT vXMLVariant
END

// IDE
ide is a xmlNode
FOR EACH ide OF XMLDoc.nfeProc.NFe.infNFe.ide
vXMLVariant.ide[ide..Name] = ide..Text
END


// EMITENTE
emit is a xmlNode
FOR EACH emit OF XMLDoc.nfeProc.NFe.infNFe.emit
IF emit..Name="enderEmit" // endereco
enderEmit is a xmlNode
FOR EACH enderEmit OF XMLDoc.nfeProc.NFe.infNFe.emit.enderEmit
vXMLVariant.emit.enderEmit[enderEmit..Name] = enderEmit..Text
END
ELSE
vXMLVariant.emit[emit..Name] = emit..Text
END
END


// DESTINATARIO
dest is a xmlNode
FOR EACH dest OF XMLDoc.nfeProc.NFe.infNFe.dest
IF dest..Name="enderDest" // endereco
enderDest is a xmlNode
FOR EACH enderDest OF XMLDoc.nfeProc.NFe.infNFe.dest.enderDest
vXMLVariant.dest.enderDest[enderDest..Name] = enderDest..Text
END
ELSE
vXMLVariant.dest[dest..Name] = dest..Text
END
END



// ITENS
FOR EACH det OF XMLDoc.nfeProc.NFe.infNFe ON det

//descrição dos itens
numItem is numeric = det:nItem
IF det.prod..Name="prod"
prod is a xmlNode
FOR EACH prod OF det.prod
vXMLVariant.det[numItem].prod.nItem = numItem
vXMLVariant.det[numItem].prod[prod..Name] = prod..Text
END
END

//total de tributos
IF det.imposto.vTotTrib..Name="vTotTrib"
vXMLVariant.det[numItem].imposto[det.imposto.vTotTrib..Name] = det.imposto.vTotTrib..Text
END

//icms
IF det.imposto.ICMS..Name="ICMS"
icms is a xmlNode
FOR EACH icms OF det.imposto.ICMS //det.imposto.ICMS
icms1 is a xmlNode
FOR EACH icms1 OF icms
vXMLVariant.det[numItem].imposto.ICMS[icms1..Name] = icms1..Text
END
END

// icmsST is a xmlNode
// FOR EACH icmsST OF det.imposto.ICMS //det.imposto.ICMS
// icms1 is a xmlNode
// FOR EACH icms1 OF icms
// vXMLVariant.det[numItem].imposto.ICMS[icms1..Name] = icms1..Text
// END
// END

END

//ipi
IF det.imposto.IPI..Name="IPI"
ipi is a xmlNode
FOR EACH ipi OF det.imposto.IPI
IF ipi..Name<>"IPINT" AND ipi..Name<>"IPITrib"
vXMLVariant.det[numItem].imposto.IPI[ipi..Name] = ipi..Text
END
ipi1 is a xmlNode
FOR EACH ipi1 OF ipi
IF ipi1..Name<>""
vXMLVariant.det[numItem].imposto.IPI[ipi1..Name] = ipi1..Text
END
END
END
END


//pis
IF det.imposto.PIS..Name="PIS"
pis is a xmlNode
FOR EACH pis OF det.imposto.PIS
pis1 is a xmlNode
FOR EACH pis1 OF pis
vXMLVariant.det[numItem].imposto.PIS[pis1..Name] = pis1..Text
END
END
END

//cofins
IF det.imposto.COFINS..Name="COFINS"
cofins is a xmlNode
FOR EACH cofins OF det.imposto.COFINS
cofins1 is a xmlNode
FOR EACH cofins1 OF cofins
vXMLVariant.det[numItem].imposto.COFINS[cofins1..Name] = cofins1..Text
END
END
END

//informacao adicional
IF det.infAdProd..Name="infAdProd"
vXMLVariant.det[numItem][det.infAdProd..Name] = det.infAdProd..Text
END

END


// TOTAL
total is a xmlNode
FOR EACH total OF XMLDoc.nfeProc.NFe.infNFe.total.ICMSTot
vXMLVariant.total.ICMSTot[total..Name] = total..Text
END


// PARCELAS
i is int = 0
cobr is a xmlNode
FOR EACH cobr OF XMLDoc.nfeProc.NFe.infNFe.cobr

//faturamento
IF cobr..Name="fat" THEN
fat is a xmlNode
FOR EACH fat OF cobr
vXMLVariant.cobr.fat[fat..Name] = fat..Text
END
END

//duplicatas
IF cobr..Name="dup" THEN
i++
dup is a xmlNode
FOR EACH dup OF cobr
vXMLVariant.cobr.dup[i][dup..Name] = dup..Text
END
END

END


// INFORMACOES
infCpl is a xmlNode
FOR EACH infCpl OF XMLDoc.nfeProc.NFe.infNFe.infAdic
vXMLVariant.infAdic.infCpl = infCpl..Text
END



vXMLVariant.Erro = False


RESULT vXMLVariant


by Igor B.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/