quinta-feira, 14 de maio de 2009

LENDO O XML DA NFE COM O XMLDOCUMENT

este codigo , Le o xml da nfe , para posterior impressao da DANFE no Quick Report.

ainda estou desenvolvendo a segunda parte, se alguem manja de Quick report para dar uma força .


CODE

procedure TForm1.Button11Click(Sender: TObject);var vXMLDoc: TXMLDocument; NodePai: IXMLNode; id,qntItens : string; strTeste : String;
Node,Node_ide,Node_det,Node_produto,Node_Imposto,Node_ICMS: IXMLNode; NoICMSxx, Node_PIS,PISxx, Node_COFINS,COFINSxx , Node_Total ,Node_ICMSTot : IXMLNode; Node_Transp, Node_Lacres ,Node_Volumes,Node_Transportadora,Node_InfAdic,Node_Compra : IXMLNode; // Nodes,Nodes_filhos_det,Nodes_filhos_imposto,Nodes_filhos_ICMS: IXMLNodeList; I,nfd,d,nfi,nfc: Integer;begin // Cria a variável baseada no TXMLDocument vXMLDoc := TXMLDocument.Create(self); // Le conteúdo do arquivo XML informado vXMLDoc.LoadFromFile('c:\nfe_arquivos\enviados\42090582636911000506550020001693556229502037-nfe.xml'); vXMLDoc.Active := True;
NodePai := vXMLDoc.DocumentElement.ChildNodes.FindNode('infNFe'); Id := NodePai.GetAttributeNS('Id',''); // Id := NodePai.GetAttributeNS('Id',''); NodePai.ChildNodes.First; strTeste := NodePai.NodeName; Nodes := NodePai.ChildNodes;
if NodePai.HasChildNodes then begin for I := 0 to Nodes.Count - 1 do begin strTeste := Nodes[I].NodeName; if Nodes[I].NodeName = 'ide' then begin Node_ide := NodePai.ChildNodes['ide']; strTeste := Node_ide.ChildNodes['natOp'].text; strTeste := Node_ide.ChildNodes['nNF'].text; strTeste := Node_ide.ChildNodes['dEmi'].text; strTeste := Node_ide.ChildNodes['dSaiEnt'].Text;
end ;
if Nodes[I].NodeName = 'det' then begin Node_det := NodePai.ChildNodes['det']; Id := Node_det.GetAttributeNS('nItem',''); Nodes_filhos_det := Node_det.ChildNodes;
for nfd := 0 to Nodes_filhos_det.Count - 1 do begin strTeste := Nodes_filhos_det[nfd].NodeName; if Nodes_filhos_det[nfd].NodeName = 'prod' then begin Node_produto := Node_det.ChildNodes['prod']; strTeste := Node_produto.ChildNodes['cProd'].text; strTeste := Node_produto.ChildNodes['cEAN'].text; strTeste := Node_produto.ChildNodes['xProd'].text; strTeste := Node_produto.ChildNodes['CFOP'].text; strTeste := Node_produto.ChildNodes['uCom'].text; strTeste := Node_produto.ChildNodes['qCom'].text; strTeste := Node_produto.ChildNodes['vUnCom'].text; strTeste := Node_produto.ChildNodes['vProd'].text; strTeste := Node_produto.ChildNodes['uTrib'].text; strTeste := Node_produto.ChildNodes['qTrib'].text; strTeste := Node_produto.ChildNodes['vUnTrib'].text
end; if Nodes_filhos_det[nfd].NodeName = 'imposto' then begin Node_Imposto := Node_det.ChildNodes['imposto']; Nodes_filhos_imposto := Node_Imposto.ChildNodes; for nfi := 0 to Nodes_filhos_imposto.Count - 1 do begin
strTeste := Nodes_filhos_imposto[nfi].NodeName; if Nodes_filhos_imposto[nfi].NodeName = 'ICMS' then begin Node_ICMS := Node_Imposto.ChildNodes['ICMS']; Nodes_filhos_ICMS := Node_ICMS.ChildNodes; for nfc := 0 to Nodes_filhos_ICMS.Count - 1 do begin
strTeste := Nodes_filhos_ICMS[nfc].NodeName; if 'ICMS40' = Nodes_filhos_ICMS[nfc].NodeName then begin NoICMSxx := Node_ICMS.ChildNodes['ICMS40']; strTeste := NoICMSxx.ChildNodes['orig'].text; strTeste := NoICMSxx.ChildNodes['CST'].text; end; if 'ICMS50' = Nodes_filhos_ICMS[nfc].NodeName then begin NoICMSxx := Node_ICMS.ChildNodes['ICMS50']; strTeste := NoICMSxx.ChildNodes['orig'].text; strTeste := NoICMSxx.ChildNodes['CST'].text; end; end;
end; if Nodes_filhos_imposto[nfi].NodeName = 'PIS' then begin Node_PIS := Node_Imposto.ChildNodes['PIS']; PISxx := Node_PIS.ChildNodes['PISAliq']; strTeste := PISxx.ChildNodes['CST'].text; strTeste := PISxx.ChildNodes['vBC'].text; strTeste := PISxx.ChildNodes['pPIS'].text; strTeste := PISxx.ChildNodes['vPIS'].text; end; if Nodes_filhos_imposto[nfi].NodeName = 'COFINS' then begin Node_COFINS := Node_Imposto.ChildNodes['COFINS']; COFINSxx := Node_COFINS.ChildNodes['COFINSAliq']; strTeste := COFINSxx.ChildNodes['CST'].text; strTeste := COFINSxx.ChildNodes['vBC'].text; strTeste := COFINSxx.ChildNodes['pCOFINS'].text; strTeste := COFINSxx.ChildNodes['vCOFINS'].text; end;
////////////////////////////////////// end;
end;

end; end; if Nodes[I].NodeName = 'total' then begin Node_Total := NodePai.ChildNodes['total']; Node_ICMSTot := Node_Total.ChildNodes['ICMSTot'];
strTeste := Node_ICMSTot.ChildNodes['vBC'].text; strTeste := Node_ICMSTot.ChildNodes['vICMS'].text; strTeste := Node_ICMSTot.ChildNodes['vBCST'].text; strTeste := Node_ICMSTot.ChildNodes['vST'].text; strTeste := Node_ICMSTot.ChildNodes['vProd'].text; strTeste := Node_ICMSTot.ChildNodes['vFrete'].text; strTeste := Node_ICMSTot.ChildNodes['vSeg'].text; strTeste := Node_ICMSTot.ChildNodes['vDesc'].text; strTeste := Node_ICMSTot.ChildNodes['vII'].text; strTeste := Node_ICMSTot.ChildNodes['vIPI'].text; strTeste := Node_ICMSTot.ChildNodes['vPIS'].text; strTeste := Node_ICMSTot.ChildNodes['vCOFINS'].text; strTeste := Node_ICMSTot.ChildNodes['vOutro'].text; strTeste := Node_ICMSTot.ChildNodes['vNF'].text; end; if Nodes[I].NodeName = 'transp' then begin Node_Transp := NodePai.ChildNodes['trans']; strTeste := Node_Transp.ChildNodes['modFrete'].text;
Node_Transportadora := Node_Transp.ChildNodes['transportadora'];
strTeste := Node_Transportadora.ChildNodes['CNPJ'].text; strTeste := Node_Transportadora.ChildNodes['xNome'].text; strTeste := Node_Transportadora.ChildNodes['IE'].text; strTeste := Node_Transportadora.ChildNodes['xEnder'].text; strTeste := Node_Transportadora.ChildNodes['xMun'].text; strTeste := Node_Transportadora.ChildNodes['UF'].text;
Node_Volumes := Node_Transp.ChildNodes['vol'];
strTeste := Node_Volumes.ChildNodes['qVol'].text; strTeste := Node_Volumes.ChildNodes['esp'].text; strTeste := Node_Volumes.ChildNodes['marca'].text; strTeste := Node_Volumes.ChildNodes['nVol'].text; strTeste := Node_Volumes.ChildNodes['pesoL'].text; strTeste := Node_Volumes.ChildNodes['pesoB'].text;
Node_Lacres := Node_Volumes.ChildNodes['lacres']; strTeste := Node_Lacres.ChildNodes['nLacre'].text;
end; if Nodes[I].NodeName = 'infAdic' then begin Node_InfAdic := NodePai.ChildNodes['infAdic']; strTeste := Node_InfAdic.ChildNodes['infAdFisco'].text; strTeste := Node_InfAdic.ChildNodes['infCpl'].text; end; if Nodes[I].NodeName = 'compra' then begin Node_Compra := NodePai.ChildNodes['compra']; strTeste := Node_Compra.ChildNodes['xPed'].text; end;
//ShowMessage('Nodes('+Format('%.2d', [I])+') é '+Nodes[I].NodeName); end; end;
vXMLDoc.Active := false;end;

Nenhum comentário: