IMPORTAR PRODUTOS DA NFE
Olá estou tentando fazer uma rotina para importar produtos de uma nfe para uma grade.
Gostaria de uma ajuda para fazer um loop na parte dos produtos quando existem mais de um item.
Public Sub carregaprodutos()
Dim xmlDoc As New MSXML2.DOMDocument30
Dim listaNodeItens As IXMLDOMNodeList
Dim nodeXML As IXMLDOMElement
Grade.Clear
xmlDoc.async = False
xmlDoc.Load App.Path & [Ô]\Dados
fe.xml[Ô]
Set nodeXML = xmlDoc.selectSingleNode([Ô]//prod[Ô])
Grade.TextMatrix(1, 2) = nodeXML.selectSingleNode([Ô]//xProd[Ô]).Text
Grade.TextMatrix(2, 2) = nodeXML.selectSingleNode([Ô]//xProd[Ô]).Text
End Sub
Gostaria de uma ajuda para fazer um loop na parte dos produtos quando existem mais de um item.
Public Sub carregaprodutos()
Dim xmlDoc As New MSXML2.DOMDocument30
Dim listaNodeItens As IXMLDOMNodeList
Dim nodeXML As IXMLDOMElement
Grade.Clear
xmlDoc.async = False
xmlDoc.Load App.Path & [Ô]\Dados
fe.xml[Ô]
Set nodeXML = xmlDoc.selectSingleNode([Ô]//prod[Ô])
Grade.TextMatrix(1, 2) = nodeXML.selectSingleNode([Ô]//xProd[Ô]).Text
Grade.TextMatrix(2, 2) = nodeXML.selectSingleNode([Ô]//xProd[Ô]).Text
End Sub
Olá consegui resolver ,não sei se é a forma mais correta , mais já esta funcionando.
Select Case node.nodeName
Case [Ô]qCom[Ô]
Grade.TextMatrix(linha, 1) = node.nodeTypedValue
Case [Ô]xProd[Ô]
Grade.TextMatrix(linha, 2) = node.nodeTypedValue
Case [Ô]vUnCom[Ô]
Grade.TextMatrix(linha, 3) = node.nodeTypedValue
linha = linha + 1
End Select
Agora gostaria de uma ajudinha ;
dentro da pasta \dados\ tem vários xml
nfe1
nfe2
nfe3
como faço para abrir as tres , tipo abre a nfe1 importa fecha , passa pra proxima nfe2 importa fecha e passa para a nfe3.
Select Case node.nodeName
Case [Ô]qCom[Ô]
Grade.TextMatrix(linha, 1) = node.nodeTypedValue
Case [Ô]xProd[Ô]
Grade.TextMatrix(linha, 2) = node.nodeTypedValue
Case [Ô]vUnCom[Ô]
Grade.TextMatrix(linha, 3) = node.nodeTypedValue
linha = linha + 1
End Select
Agora gostaria de uma ajudinha ;
dentro da pasta \dados\ tem vários xml
nfe1
nfe2
nfe3
como faço para abrir as tres , tipo abre a nfe1 importa fecha , passa pra proxima nfe2 importa fecha e passa para a nfe3.
Colega RICOCARDOZO,
Para localizar os arquivos XML dentro de pastas, utilize o FileSystemObjets.
Tudo de bom.
Para localizar os arquivos XML dentro de pastas, utilize o FileSystemObjets.
Tudo de bom.
Até já sei como fazer mas queria implementar nesta rotina acima e não estou conseguindo.
Dim arq As String
[ô]arq = Dir(App.Path & [Ô]\Dados\*.xml[Ô])
[ô]Do While arq <> [Ô][Ô]
[ô]arq = Dir()
[ô]Loop
Dim arq As String
[ô]arq = Dir(App.Path & [Ô]\Dados\*.xml[Ô])
[ô]Do While arq <> [Ô][Ô]
[ô]arq = Dir()
[ô]Loop
Aprenda a desserializar xml nesse exemplo do KERPLUNK, caso contrario vc vai pirar com esses nod[ô]s.
youtube
youtube
Citação::
Aprenda a desserializar xml nesse exemplo do KERPLUNK, caso contrario vc vai pirar com esses nod[ô]s.
youtube
RICOCARDOZO, faça oq o amigo Nilson falou Desserializar XML. do video do KERPLUNK
cara vc nao vai se arrepender. é top show de bola. eu nao tive mais dor de cabeça depois q aprendi. com a ajuda do amigo Nilson e Kerplunk.
pega o video leia estude. é facil facil. :)
Bom dia ,
utilizo este código nos meus projetos
Sub ImportarProdutos()
Dim cprod As String, nitem As String, vuncom As String, qcom As String, xprod As String, vprod As String
Dim Caminho As String
Dim XMLdoc As Object
Dim I As Integer
Set XMLdoc = CreateObject([Ô]Microsoft.XMLDOM[Ô])
XMLdoc.async = False
Caminho = [Ô]c: emp este.xml[Ô]
XMLdoc.Load (Caminho)
qtdProd = XMLdoc.getElementsByTagName(sBn & [Ô]infNFe/det[Ô]).Length [ô]Contando quantos itens tem o nó det (detalhes)
For I = 0 To qtdProd - 1 [ô]Varrendo todos os itens
cprod = CStr(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/cProd[Ô]).Item(0).Text)
nitem = CStr(XMLdoc.getElementsByTagName([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).Attributes(0).value)
vuncom = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vUnCom[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
qcom = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/qCom[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
xprod = CStr(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/xProd[Ô]).Item(0).Text)
vprod = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vProd[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
Next I
Set XMLdoc = Nothing
End Sub
utilizo este código nos meus projetos
Sub ImportarProdutos()
Dim cprod As String, nitem As String, vuncom As String, qcom As String, xprod As String, vprod As String
Dim Caminho As String
Dim XMLdoc As Object
Dim I As Integer
Set XMLdoc = CreateObject([Ô]Microsoft.XMLDOM[Ô])
XMLdoc.async = False
Caminho = [Ô]c: emp este.xml[Ô]
XMLdoc.Load (Caminho)
qtdProd = XMLdoc.getElementsByTagName(sBn & [Ô]infNFe/det[Ô]).Length [ô]Contando quantos itens tem o nó det (detalhes)
For I = 0 To qtdProd - 1 [ô]Varrendo todos os itens
cprod = CStr(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/cProd[Ô]).Item(0).Text)
nitem = CStr(XMLdoc.getElementsByTagName([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).Attributes(0).value)
vuncom = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vUnCom[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
qcom = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/qCom[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
xprod = CStr(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/xProd[Ô]).Item(0).Text)
vprod = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vProd[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
Next I
Set XMLdoc = Nothing
End Sub
Diego, vc tem a parte dos impostos tbm ?
ola Edson, sim
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]imposto/IPI[Ô]).Length > 0 Then
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]imposto/IPI/IPITrib[Ô]).Length > 0 Then
vipi = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]imposto/IPI/IPITrib[Ô]).Item(0).getElementsByTagName([Ô]vIPI[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe /infNFe/det[Ô]).Item(I).getElementsByTagName([Ô]vICMSST[Ô]).Length > 0 Then
vicmsst = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).getElementsByTagName([Ô]vICMSST[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).getElementsByTagName([Ô]vFrete[Ô]).Length > 0 Then
vfrete = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).getElementsByTagName([Ô]vFrete[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).getElementsByTagName([Ô]vICMSDeson[Ô]).Length > 0 Then
vicmsdeson = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).getElementsByTagName([Ô]vICMSDeson[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).ChildNodes(1).ChildNodes(0).ChildNodes(0).SelectNodes([Ô]pICMS[Ô]).Length > 0 Then
picms = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).ChildNodes(1).ChildNodes(0).ChildNodes(0).SelectNodes([Ô]pICMS[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô]) / 100
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).ChildNodes(1).ChildNodes(0).ChildNodes(0).SelectNodes([Ô]vBC[Ô]).Length > 0 Then
vbc = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).ChildNodes(1).ChildNodes(0).ChildNodes(0).SelectNodes([Ô]vBC[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).ChildNodes(1).ChildNodes(0).ChildNodes(0).SelectNodes([Ô]vICMS[Ô]).Length > 0 Then
vicms = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).ChildNodes(1).ChildNodes(0).ChildNodes(0).SelectNodes([Ô]vICMS[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vOutro[Ô]).Length > 0 Then
voutro = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vOutro[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vDesc[Ô]).Length > 0 Then
vdesc = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vDesc[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vSeg[Ô]).Length > 0 Then
vseg = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vSeg[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]imposto/IPI[Ô]).Length > 0 Then
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]imposto/IPI/IPITrib[Ô]).Length > 0 Then
vipi = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]imposto/IPI/IPITrib[Ô]).Item(0).getElementsByTagName([Ô]vIPI[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe /infNFe/det[Ô]).Item(I).getElementsByTagName([Ô]vICMSST[Ô]).Length > 0 Then
vicmsst = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).getElementsByTagName([Ô]vICMSST[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).getElementsByTagName([Ô]vFrete[Ô]).Length > 0 Then
vfrete = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).getElementsByTagName([Ô]vFrete[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).getElementsByTagName([Ô]vICMSDeson[Ô]).Length > 0 Then
vicmsdeson = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).getElementsByTagName([Ô]vICMSDeson[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).ChildNodes(1).ChildNodes(0).ChildNodes(0).SelectNodes([Ô]pICMS[Ô]).Length > 0 Then
picms = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).ChildNodes(1).ChildNodes(0).ChildNodes(0).SelectNodes([Ô]pICMS[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô]) / 100
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).ChildNodes(1).ChildNodes(0).ChildNodes(0).SelectNodes([Ô]vBC[Ô]).Length > 0 Then
vbc = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).ChildNodes(1).ChildNodes(0).ChildNodes(0).SelectNodes([Ô]vBC[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).ChildNodes(1).ChildNodes(0).ChildNodes(0).SelectNodes([Ô]vICMS[Ô]).Length > 0 Then
vicms = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).ChildNodes(1).ChildNodes(0).ChildNodes(0).SelectNodes([Ô]vICMS[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vOutro[Ô]).Length > 0 Then
voutro = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vOutro[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vDesc[Ô]).Length > 0 Then
vdesc = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vDesc[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
If XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vSeg[Ô]).Length > 0 Then
vseg = Replace(XMLdoc.SelectNodes([Ô]nfeProc/NFe/infNFe/det[Ô]).Item(I).SelectNodes([Ô]prod/vSeg[Ô]).Item(0).Text, [Ô].[Ô], [Ô],[Ô])
End If
Diego, te passei um mensagem interna..
Tópico encerrado , respostas não são mais permitidas