none
ler nota fiscal eletronica VB.NET RRS feed

  • Pergunta

  • Boa tarde!

    Estamos com um projeto aq na empresa onde eu trabalho e tenho ler nfe, estou usando o seguinte codigo:

    Private Sub btnXML_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnXML.Click

            'Cria uma instância de um documento XML
            Dim doc As XmlDocument = New XmlDocument()
            doc.PreserveWhitespace = True

            'Define o caminho do arquivo XML 
            Dim ArquivoXML As String = Me.txtCam.Text
            'carrega o arquivo XML
            doc.Load(ArquivoXML)

            Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
            nsmgr.AddNamespace("nfe", "http://www.portalfiscal.inf.br/nfe 2.00")


            'Lê o filho de um Nó Pai específico 
            Dim cnpj As String' = String.Empty
            cnpj = doc.SelectSingleNode("/nfe/infNFe/emit/CNPJ", nsmgr).InnerText
            '*** Exibe Dados do aluno
            Me.lsbInf.Items.Add(cnpj)

        End Sub

    mas qnd executo ele retorna o seguinte erro:

    Referência de objeto não definida para uma instância de um objeto.

    alguém poderia me ajudar?

    quinta-feira, 25 de julho de 2013 20:16

Respostas

  • Cara, eu faço a importação dos xmls das NFes tanto de clientes, fornecedores ou nossas próprias, para o meu controle interno.

    Antes eu usava uma função bem rudimentar, que lia item a item e dava muita dor de cabeça, ainda mais quando os xmls diferiam de padrão (atualmente está bem raro, mas as vezes aparece ainda um xml que não contenha algum tipo de tag que deveria existir...como isso acontece eu não sei, pq vem dos fornecedores ou clientes as nfs).

    Depois de apanhar muito eu finalmente entendi como usar um dataset para ler a nfe, aí ficou bem mais fácil.

    Eu faço assim:

    Dim xmlDoc As New XmlDocument
    
    xmlDoc.Load(sXML)
    
    Dim Ds As New DataSet
    Ds.ReadXml(sXML)
    
    Dim bdsAux As New BindingSource
    bdsAux.DataSource = Ds
    bdsAux.DataMember = "infNFe" 'aqui é o pulo do gato!
    'Nessa linha acima é que vc literalmente navega pelos diferentes "tag groups" da nfe. 
    'Nesse em questão, eu selecionei a tag principal (ou uma das principais) infNFe.
    'Para acessar uma informação filho direto dessa tag faça:
    
    bdsAux.Current("Id").ToString
    'Aqui eu to buscando o ID da nfe!
    
    'E para mudar de tag, mesmo sendo filho ou não da tag pai, faça:
    
    bdsAux.DataMember = "ide"


    É muito mais fácil do que usar o outro método (na minha opnião é claro) em que vc tem que usar o navigator etc...

    Qualquer dúvida, só perguntar!

    Att.

    Giovani

    ******** OBS: no exemplo de código, nem precisa das duas primeiras linhas. Eu fui extraindo partes de códigos do meu sistema e acabei colando código antigo em desuso. A variável sXML é o caminho do arquivo ok?


    • Editado Giovani Rodrigues terça-feira, 6 de agosto de 2013 16:42
    • Marcado como Resposta Erickt4b quinta-feira, 8 de agosto de 2013 12:20
    terça-feira, 6 de agosto de 2013 16:40

Todas as Respostas

  • É muito provável que nessa linha :

    cnpj = doc.SelectSingleNode("/nfe/infNFe/emit/CNPJ", nsmgr).InnerText

    O valor está indo null, reveja novamente e seu XPath para ver se está correta essa sua navegação.


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    quinta-feira, 25 de julho de 2013 20:32
  • Erick

    você que ler XML ou o conteúdo no site da fazenda?

    Antônio.

    quinta-feira, 25 de julho de 2013 20:37
  • cara contem valor...

    obrigado por responder

    sexta-feira, 26 de julho de 2013 12:32
  • eu já tenho as notas.....
    sexta-feira, 26 de julho de 2013 12:32
  • Cara, eu faço a importação dos xmls das NFes tanto de clientes, fornecedores ou nossas próprias, para o meu controle interno.

    Antes eu usava uma função bem rudimentar, que lia item a item e dava muita dor de cabeça, ainda mais quando os xmls diferiam de padrão (atualmente está bem raro, mas as vezes aparece ainda um xml que não contenha algum tipo de tag que deveria existir...como isso acontece eu não sei, pq vem dos fornecedores ou clientes as nfs).

    Depois de apanhar muito eu finalmente entendi como usar um dataset para ler a nfe, aí ficou bem mais fácil.

    Eu faço assim:

    Dim xmlDoc As New XmlDocument
    
    xmlDoc.Load(sXML)
    
    Dim Ds As New DataSet
    Ds.ReadXml(sXML)
    
    Dim bdsAux As New BindingSource
    bdsAux.DataSource = Ds
    bdsAux.DataMember = "infNFe" 'aqui é o pulo do gato!
    'Nessa linha acima é que vc literalmente navega pelos diferentes "tag groups" da nfe. 
    'Nesse em questão, eu selecionei a tag principal (ou uma das principais) infNFe.
    'Para acessar uma informação filho direto dessa tag faça:
    
    bdsAux.Current("Id").ToString
    'Aqui eu to buscando o ID da nfe!
    
    'E para mudar de tag, mesmo sendo filho ou não da tag pai, faça:
    
    bdsAux.DataMember = "ide"


    É muito mais fácil do que usar o outro método (na minha opnião é claro) em que vc tem que usar o navigator etc...

    Qualquer dúvida, só perguntar!

    Att.

    Giovani

    ******** OBS: no exemplo de código, nem precisa das duas primeiras linhas. Eu fui extraindo partes de códigos do meu sistema e acabei colando código antigo em desuso. A variável sXML é o caminho do arquivo ok?


    • Editado Giovani Rodrigues terça-feira, 6 de agosto de 2013 16:42
    • Marcado como Resposta Erickt4b quinta-feira, 8 de agosto de 2013 12:20
    terça-feira, 6 de agosto de 2013 16:40
  • E amigo,

    Por favor não se esqueça de fazer as mudanças de "tag" no dataset dentro de um bloco try catch.

    Isso vale também para quando vc for tentar acessar um membro da tag. Se caso a tag ou membro da tag não existir, o seus sistema não cai!!! rsrsrs Digo isso pq várias vezes esqueci disso...e de repente o sistema caia...

    Lógico que se começar a faltar muita tag, possivelmente o xml está com defeito. Mas ultimamente isso é raro. No começo das nfe's que era terrível!

    Att.

    Giovani

    quinta-feira, 8 de agosto de 2013 16:18
  • Cara!
    Vc é o Cara! kkk

    Muito obrigado.

    sábado, 7 de fevereiro de 2015 02:29
  • Oi Giovani,

    Eu vc tem um exemplo um pouco mais completo de leitura de xml de nota fiscal. Tenho que fazer isso aqui na empresa, mas está muito complicado e eu ainda não entendi muito bem o seu exemplo.

    Grato,

    Altair.

    segunda-feira, 27 de julho de 2015 13:21
  • Boa tarde,

    Usando BindingSource, como vc faz pra ler por exemplo, os impostos de cada item, onde tem que testar cada grupo existente? 

    terça-feira, 9 de março de 2021 18:52