IMPORTAR PRODUTOS DA NFE

RICOCARDOZO 01/11/2016 17:21:37
#468677
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
RICOCARDOZO 03/11/2016 14:52:42
#468712
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.
SINCLAIR 03/11/2016 16:02:25
#468714
Colega RICOCARDOZO,

Para localizar os arquivos XML dentro de pastas, utilize o FileSystemObjets.

Tudo de bom.
RICOCARDOZO 03/11/2016 16:50:28
#468717
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
NILSONTRES 03/11/2016 17:21:04
#468719
Aprenda a desserializar xml nesse exemplo do KERPLUNK, caso contrario vc vai pirar com esses nod[ô]s.
youtube
JOHNSTEVE 03/11/2016 17:31:19
#468720
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. :)

DIEGODOM 04/11/2016 08:22:52
#468727
Resposta escolhida
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
FUTURA 04/11/2016 09:00:14
#468730
Diego, vc tem a parte dos impostos tbm ?
DIEGODOM 04/11/2016 09:34:42
#468731
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
FUTURA 04/11/2016 10:21:24
#468732
Diego, te passei um mensagem interna..
Tópico encerrado , respostas não são mais permitidas