LER XML NFE

FUTURA 23/09/2015 19:17:21
#451750
Pessoal, com ajuda de alguns colegas aqui do fórum e através de exemplos estou montando rotina pra importar xml da nfe, porém não estou conseguindo montar uma lógica para ler as tags dos produtos e suas subs, como impostos. Estou usando o msxml 6.0 ( domdocumet) no vb6, se alguém tiver um exemplo, agradeço.
KERPLUNK 23/09/2015 19:32:48
#451752
1 - Pegue um XML de exemplo completo
2 - Use a ferramenta XSD no prompt de comando para converter o XML em classes correspondentes.
3 - Use métodos para desserializar o XML em dados

é uma das dificuldades mais comuns entre programadores mais antigos, ver XML como texto simplesmente. XML é muito mais que simplesmente texto. Ele pode até mesmo representar um pequeno banco de dados. O método que você está usando, pode até parecer que funciona, SQN.

Um exemplo de como gerar as classes:

D:    emp>xsd test.xml
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file [ô]D:    emp    est.xsd[ô].

D:    emp>xsd test.xsd /classes
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file [ô]D:    emp    est.cs[ô].


Sei que você está usando VB6, mas essa é uma boa [Ô]desculpa[Ô] para começar a usar .NET, ao menos o módulo de leitura do XML.
WILSONJOSE 24/09/2015 10:39:34
#451778
peguei essa rotina aqui

[ô]*** Importa o arquivo xml
Dim xmlDoc As New XmlDocument
xmlDoc.Load(W_ARQUIVO.Text)

Dim strxml As String = xmlDoc.InnerXml.ToString

[ô]*** Remove tags e nomespace ***
strxml = Replace(strxml, [Ô]<?xml version=[Ô][Ô]1.0[Ô][Ô] encoding=[Ô][Ô]UTF-8[Ô][Ô]?>[Ô], [Ô][Ô])
strxml = Replace(strxml, [Ô]xmlns=[Ô][Ô]http://www.portalfiscal.inf.br/nfe[Ô][Ô][Ô], [Ô][Ô])
strxml = Replace(strxml, [Ô]xmlns=[Ô][Ô]http://www.w3.org/2000/09/xmldsig#[Ô][Ô][Ô], [Ô][Ô])

[ô]*** Importa XML tratada sem tags e nomespace
Dim xDoc As New XmlDocument()
xDoc.LoadXml(strxml)

Using scope As New TransactionScope()

Try


[ô]*** Percorre a Estrutura do XML para a extração dos Dados ***
xNodeDest = xDoc.SelectSingleNode([Ô]nfeProc[Ô])
For Each xnfeProc As XmlNode In xNodeDest.ChildNodes

Select Case xnfeProc.Name

Case [Ô]NFe[Ô]

For Each xNFe As XmlNode In xnfeProc.ChildNodes

Select Case xNFe.Name

Case [Ô]infNFe[Ô]

For Each xInfNFe As XmlNode In xNFe.ChildNodes

Select Case xInfNFe.Name

Case [Ô]ide[Ô]

Case [Ô]NFref[Ô]

Case [Ô]emit[Ô]

Case [Ô]avulsa[Ô]

Case [Ô]dest[Ô]

Case [Ô]retirada[Ô]

Case [Ô]entrega[Ô]

Case [Ô]total[Ô]

Case [Ô]transp[Ô]

End Select

Next

Case [Ô]Signature[Ô]

End Select

Next

Case [Ô]protNFe[Ô]

End Select

Next

scope.Complete()

MessageBox.Show([Ô]XML importado![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)

Catch ex As Exception

MessageBox.Show([Ô]XML não importado![Ô] + vbCrLf + ex.Message, [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End Using
WILSONJOSE 24/09/2015 10:46:39
#451779
http://www.vbmania.com.br/index.php?modulo=detalhe&id=9429

http://www.vbmania.com.br/index.php?modulo=detalhe&id=9426
FOXMAN 24/09/2015 21:50:42
#451814
Citação:

:
peguei essa rotina aqui

[ô]*** Importa o arquivo xml
Dim xmlDoc As New XmlDocument
xmlDoc.Load(W_ARQUIVO.Text)

Dim strxml As String = xmlDoc.InnerXml.ToString

[ô]*** Remove tags e nomespace ***
strxml = Replace(strxml, [Ô]<?xml version=[Ô][Ô]1.0[Ô][Ô] encoding=[Ô][Ô]UTF-8[Ô][Ô]?>[Ô], [Ô][Ô])
strxml = Replace(strxml, [Ô]xmlns=[Ô][Ô]http://www.portalfiscal.inf.br/nfe[Ô][Ô][Ô], [Ô][Ô])
strxml = Replace(strxml, [Ô]xmlns=[Ô][Ô]http://www.w3.org/2000/09/xmldsig#[Ô][Ô][Ô], [Ô][Ô])

[ô]*** Importa XML tratada sem tags e nomespace
Dim xDoc As New XmlDocument()
xDoc.LoadXml(strxml)

Using scope As New TransactionScope()

Try


[ô]*** Percorre a Estrutura do XML para a extração dos Dados ***
xNodeDest = xDoc.SelectSingleNode([Ô]nfeProc[Ô])
For Each xnfeProc As XmlNode In xNodeDest.ChildNodes

Select Case xnfeProc.Name

Case [Ô]NFe[Ô]

For Each xNFe As XmlNode In xnfeProc.ChildNodes

Select Case xNFe.Name

Case [Ô]infNFe[Ô]

For Each xInfNFe As XmlNode In xNFe.ChildNodes

Select Case xInfNFe.Name

Case [Ô]ide[Ô]

Case [Ô]NFref[Ô]

Case [Ô]emit[Ô]

Case [Ô]avulsa[Ô]

Case [Ô]dest[Ô]

Case [Ô]retirada[Ô]

Case [Ô]entrega[Ô]

Case [Ô]total[Ô]

Case [Ô]transp[Ô]

End Select

Next

Case [Ô]Signature[Ô]

End Select

Next

Case [Ô]protNFe[Ô]

End Select

Next

scope.Complete()

MessageBox.Show([Ô]XML importado![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)

Catch ex As Exception

MessageBox.Show([Ô]XML não importado![Ô] + vbCrLf + ex.Message, [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)

End Try

End Using



Ai eu pego o mesmo XML e faço assim :

XmlDocument x = new XmlDocument();
x.Load(@[Ô]C:
fexml.xml[Ô]);
XmlSerializer serializer = new XmlSerializer(typeof(NFe));
using (StringReader reader = new StringReader(x.OuterXml))
{
NFe = (NFe)(serializer.Deserialize(reader));
}


E bingoooo, minha classe está populada com uma NFe.....


LEANTRONIC 29/09/2015 09:38:33
#451898
No meu modulo de importar XML eu usei o projeto da NF-e daqui, só fiz adaptação e usei a parte de impressão da danfe pra carregar as informações no meu formulario e grades
FUTURA 29/09/2015 11:50:51
#451910
e para fazer a importação para a base de dados, voces amarram com o código de barras ?, pois ai, mesmo que comprem o mesmo produto de distribuidores diferentes, daria certo, pois fornecedor é um e marca/fabricante é outro...seria esta lógica ?

FOXMAN 29/09/2015 13:46:55
#451917
Citação:

:
e para fazer a importação para a base de dados, voces amarram com o código de barras ?, pois ai, mesmo que comprem o mesmo produto de distribuidores diferentes, daria certo, pois fornecedor é um e marca/fabricante é outro...seria esta lógica ?



Porem, nem sempre(ou quase nunca) os distribuidores geram seus xmls com a Tag cEan preenchida.
O distribuidor A utiliza o codigo 333 para o produto A, o distribuidor B utiliza o codigo 444 para o produto A, e por ai vai.
E repito, nem sempre a tag cEan vem preenchida, uma vez que ela é opcional.

Eu tive que criar um algorítimo que automatizasse o máximo possível. Hoje é algo de 80% automático o processo de importação, mas volta e meia o usuário tem que intervir e informar o produto correto.
Para isso, tive que restruturar o banco de dados ao que diz respeito a produto.

FUTURA 29/09/2015 14:35:17
#451921
Pois é Fox, é isso mesmo, campo cEan não sendo obrigatório, sobra o código do produto no fornecedor, ou referência do fornecedor, mas amarrar por ele, pode gerar duplicidade de cadastro mesmo produto/marca ou ainda o fornecedor fazer alterações nos produtos que implicam mudanças nestes campos referidos, ai fica arriscado, acho que o correto seria mesmo amarrar pelo cEan, e a partir dai, fazer a manutenção necessária, pois se de um lado a importação facilita, de outro aumenta o risco de problemas no estoque.
LEANTRONIC 01/10/2015 09:51:11
#452007
é bom ter uma tabela com Codigo do produto, Codigo do fornecedor e numero da NF-e...

Ai depois sempre que vc for importar uma nota daquele fornecedor o sistema verifica nessa tabela se vc ja comprou o produto dele, caso ja tenha comprado ele vincula automatico... eu tenho isso no meu!

Os itens novos na tela de importação fica em vermelho... no caso o usuario clica 2 vezes sobre o item e aparece a tela de pesquisa de produtos... ao escolher ele ja vincula o item com o do cadastro e fica verde e somente acrescenta o estoq e altera os preços, na proxima vez q for importado o mesmo item.... ele vai usar o codigo do produto do fonecedor
FUTURA 01/10/2015 15:39:28
#452045
Leantronic, analisei esta opção do código do fornecedor, o problema, é que o mesmo produto pode vir de distribuidores diferentes, ai cada distribuidor teria seu código interno, mas seria o mesmo produto/marca/fabricante a nível de estoque..

Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas