Visual Basic.NET - AYUDA!!!. Leer Factura XML (cfdi:conceptos)

   
Vista:
sin imagen de perfil
Pos: 163
Val: 15
Ha disminuido su posición en 10 puestos en Visual Basic.NET (en relación al último mes)

AYUDA!!!. Leer Factura XML (cfdi:conceptos)

Publicado por angel montores (6 intervenciones) el 08/07/2016 09:44:42
Hola amigos, estoy atorado tratando de leer los CFDI:CONCEPTOS de varios xml. Son varias facturas (xml) que tengo que verificar que el valorUnitario sea el correcto segun el NoDescripcion. Pero tengo problema al tratar de contar cuantos conceptos contiene e iniciar un ciclo para leerlos.

1
2
3
4
5
6
7
8
9
<cfdi:Conceptos>
 
<cfdi:Concepto importe="646425.00" valorUnitario="13.00" descripcion="GLUCOSA SERICA Y PARA LIQUIDOS ORGANICOS UNIDAD : PRUEBAS<br>" noIdentificacion="a023" unidad="SR" cantidad="49725.0000"/>
<cfdi:Concepto importe="604825.00" valorUnitario="13.00" descripcion="UREA SERICA Y URINARIA UNIDAD : PRUEBAS<br>" noIdentificacion="b345" unidad="SR" cantidad="46525.0000"/>
<cfdi:Concepto importe="660725.00" valorUnitario="13.00" descripcion="CREATININA SERICA Y URINARIA. UNIDAD : PRUEBAS<br>" noIdentificacion="b234" unidad="SR" cantidad="50825.0000"/>
<cfdi:Concepto importe="476450.00" valorUnitario="13.00" descripcion="ACIDO URICO SERICA Y URINARIA. UNIDAD : PRUEBAS<br>" noIdentificacion="b178" unidad="SR" cantidad="36650.0000"/>
<cfdi:Concepto importe="438425.00" valorUnitario="13.00" descripcion="COLESTEROL PRUEBAS UNIDAD : PRUEBAS<br>" noIdentificacion="b084" unidad="SR" cantidad="33725.0000"/>
 
</cfdi:Conceptos>


Este es mi código donde no he podido contar cuantos conceptos son, y tampoco declarar el ciclo para extraer los datos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Imports System.Xml
 
try
Dim mValorUnitario as Decimal
Dim mNoIdentificacion as String
Dim m_xmld As New System.Xml.XmlDocument
Dim m_nodelist As System.Xml.XmlNodeList
Dim m_node As System.Xml.XmlNode
m_xmld = New XmlDocument()
m_xmld.Load("C:\XML\invoice.xml")
m_nodelist = m_xmld.ChildNodes()
    For Each m_node In m_nodelist
      Dim mValorUnitario = m_node.Attributes.GetNamedItem("cfdi:conceptos").ChildNodes(0).Attributes.GetNamedItem("valorUnitario").Value
       Dim mNoIdentificacion = m_node.Attributes.GetNamedItem("cfdi:conceptos").ChildNodes(0).Attributes.GetNamedItem("noIdentificacion").Value
       'aquí insertaría un código para validar con la base de datos
  Next
Catch ex As Exception
End try


Les agradezco la ayuda de antemano. Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Pos: 163
Val: 15
Ha disminuido su posición en 10 puestos en Visual Basic.NET (en relación al último mes)

AYUDA!!!. Leer Factura XML (cfdi:conceptos)

Publicado por Angel MR (6 intervenciones) el 10/07/2016 09:21:48
Les comparto como puede resolver mi problema:
CODIGO VB


1
2
3
4
5
6
7
8
Dim nsCFDi As XNamespace = "http://www.sat.gob.mx/cfd/3" 'para que pueda identificar el prefijo CFDI
Dim archivoXML As XDocument = XDocument.Load("C:\XML\books.xml") 'selecciona y abre la factura electrónica xml
Dim importe As Integer = 0 'contador para saber cuantos conceptos tiene la factura
For Each lconcepto As XElement In archivoXML.Descendants(nsCFDi + "Comprobante").Elements(nsCFDi + "Conceptos").Elements() 'ciclo que recorre todos los conceptos de la factura
Dim Name As String = lconcepto.Attribute("descripcion").Value 'obtiene el valor de la descripción para darle tratamiento posterior
importe = importe + 1
Next
MsgBox(importe & " descripciones") 'imprime cuantos conceptos encontro 
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Pos: 21
Val: 97
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)

AYUDA!!!. Leer Factura XML (cfdi:conceptos)

Publicado por xve (100 intervenciones) el 10/07/2016 18:51:41
Gracias por compartirlo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA!!!. Leer Factura XML (cfdi:conceptos)

Publicado por Guillermo (27 intervenciones) el 22/11/2017 19:40:22
Buenos dias una pregunta tendras el codigo un ejemplo que me puedas compartir tengo dudas como declaras como lo haces espero se pueda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Pos: 163
Val: 15
Ha disminuido su posición en 10 puestos en Visual Basic.NET (en relación al último mes)

AYUDA!!!. Leer Factura XML (cfdi:conceptos)

Publicado por angel montores (6 intervenciones) el 24/11/2017 06:04:34
Te envió un formulario que permite leer facturas electrónicas en versión 3.3, ya que a partir de diciembre solo serán las únicas validas. Si quieres que lea los campos para la versión 3.2 tienes que cambiar los nombres de los campos en el código para que pueda leerlos. El proyecto esta en VbNet 2010.

saludos.


Este es el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Imports System.Xml
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Version_xml As String
        Dim implocaltraladados As Decimal
        Dim implocalretenidos As Decimal
        Dim retenidos As Decimal
        Dim trasladados As Decimal
        Dim Subtotal As Decimal
        Dim valor_noIdentificacion As String
        Dim preciounitarioxml As Decimal
        Dim importeconcepto As Decimal
        Dim cantidadvendida As Decimal
        Dim subtotalclave As Decimal = 0
        Dim descripcionxml As String
        Dim Emisor_Nombre As String
        Dim total As Decimal
        Dim UUID As String
        Dim VarConceptos As XmlNodeList
        On Error Resume Next
        Dim VarDocumentoXML As XmlDocument = New XmlDocument()
        Dim VarManager As XmlNamespaceManager = New XmlNamespaceManager(VarDocumentoXML.NameTable)
        VarDocumentoXML.Load("c:\factura3_3_prueba.xml")  'Aqui puedes definir la ruta del archivo mediante un OpenFileDialog o  algun otro metodo para especificar la ubicacion del XML
        VarManager.AddNamespace("cfdi", "http://www.sat.gob.mx/cfd/3")
        VarManager.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital")
        VarManager.AddNamespace("implocal", "http://www.sat.gob.mx/implocal")
        Version_xml = VarDocumentoXML.SelectSingleNode("/cfdi:Comprobante/@Version", VarManager).InnerText
        If Version_xml = "3.3" Then
            total = VarDocumentoXML.SelectSingleNode("/cfdi:Comprobante/@Total", VarManager).InnerText
            Emisor_Nombre = VarDocumentoXML.SelectSingleNode("/cfdi:Comprobante/cfdi:Emisor/@Nombre", VarManager).InnerText
            UUID = VarDocumentoXML.SelectSingleNode("/cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital/@UUID", VarManager).InnerText
            Label2.Text = Emisor_Nombre
            Label4.Text = UUID
            Label5.Text = total.ToString("c")
            implocalretenidos = VarDocumentoXML.SelectSingleNode("/cfdi:Comprobante/cfdi:Complemento/implocal:ImpuestosLocales/@TotaldeRetenciones", VarManager).InnerText
            implocaltraladados = VarDocumentoXML.SelectSingleNode("/cfdi:Comprobante/cfdi:Complemento/implocal:ImpuestosLocales/@TotaldeTraslados", VarManager).InnerText
            retenidos = VarDocumentoXML.SelectSingleNode("/cfdi:Comprobante/cfdi:Impuestos/@TotalImpuestosRetenidos", VarManager).InnerText
            trasladados = VarDocumentoXML.SelectSingleNode("/cfdi:Comprobante/cfdi:Impuestos/@TotalImpuestosTrasladados", VarManager).InnerText
            Subtotal = VarDocumentoXML.SelectSingleNode("/cfdi:Comprobante/@SubTotal", VarManager).InnerText
            VarConceptos = VarDocumentoXML.SelectNodes("/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto", VarManager)
            For Each node In VarConceptos
                valor_noIdentificacion = node.attributes("NoIdentificacion").value
                preciounitarioxml = node.attributes("ValorUnitario").value
                importeconcepto = node.attributes("Importe").value
                cantidadvendida = node.attributes("Cantidad").value
                subtotalclave = node.attributes("Importe").value
                descripcionxml = node.attributes("Descripcion").value
            Next
        Else
            MsgBox("Archivo XML no es una factura version 3.3")
        End If
    End Sub
End Class
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA!!!. Leer Factura XML (cfdi:conceptos)

Publicado por gregor f1982@hotmail.es (1 intervención) el 10/03/2018 05:43:18
hola angel tu programita lee facturas electronicas de sunat. si no fuera asi crees que me puedes ayudar a leer los xml de sunat y convertirlo en pdf. Escribeme a f1982@hotmail.es
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Pos: 163
Val: 15
Ha disminuido su posición en 10 puestos en Visual Basic.NET (en relación al último mes)

AYUDA!!!. Leer Factura XML (cfdi:conceptos)

Publicado por angel MR (6 intervenciones) el 10/03/2018 21:53:03
Hola gregor:
El código solo leería facturas emitidas por el SAT Mexico V3.3, debido a las palabras reservadas:
1
2
3
VarrManager.AddNamespace("cfdi", "http://www.sat.gob.mx/cfd/3")
VarManager.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital")
VarManager.AddNamespace("implocal", "http://www.sat.gob.mx/implocal")
Desconozco la estructura de las facturas de tu país. Tendrías que revisar alguna(s) y cambiar las palabras en el código anterior.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA!!!. Leer Factura XML (cfdi:conceptos)

Publicado por Javier (1 intervención) el 10/03/2018 23:58:52
Hola, gracias por tu ejemplo, una duda en caso de un cfdi 3.3. como podria obtener los impuestos de traslado, es decir su tasa, importe etc., tendras un ejemplo mas completo gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Pos: 163
Val: 15
Ha disminuido su posición en 10 puestos en Visual Basic.NET (en relación al último mes)

AYUDA!!!. Leer Factura XML (cfdi:conceptos)

Publicado por angel MR (6 intervenciones) el 12/03/2018 21:49:37
Con el siguiente código puedes leer los impuestos trasladados como retenidos, solo tendrías que agregar los nodos de los otros datos que desees:

1
2
3
4
5
6
7
8
9
varNodestraslados = VarDocumentoXML.SelectNodes("/cfdi:Comprobante/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado", VarManager)
varNodesretenidos = VarDocumentoXML.SelectNodes("/cfdi:Comprobante/cfdi:Impuestos/cfdi:Retenciones/cfdi:Retencion", VarManager)
 
For Each node In varNodestraslados
    .impuestostraslados = .impuestostraslados + (node.Attributes("Importe").Value)
Next
For Each node In varNodesretenidos
    .impuestosretenidos = .impuestosretenidos + (node.Attributes("Importe").Value)
Next


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

me falta algo en mi codigo

Publicado por JOSE ANTONIO (1 intervención) el 10/01/2019 01:52:59
Buenas noches, en el código anterior hace falta leer el Receptor del Cfdi.
Para leer el emisor el código dice:
Emisor_Nombre = VarDocumentoXML.SelectSingleNode("/cfdi:Comprobante/cfdi:Emisor/@Nombre", VarManager).InnerText

Pero para leer el receptor que ¿debo poner?:
esto no me funciona:
Receptor = VarDocumentoXML.SelectSingleNode("/cfdi:Comprobante/cfdi:Receptor Nombre").InnerText
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA!!!. Leer Factura XML (cfdi:conceptos)

Publicado por HECTOR BAUTISTA hectorbg01@yahoo.com.mx (2 intervenciones) el 11/01/2019 21:57:05
Angel MR: estoy leyendo un XML version 3.2, tome tu codigo, como referencia, pero al querer leer el xml
quiero leer el NumPerLicoAut que es ="4444", pero no me lo permite el XML que pongo es:

<cfdi:Complemento>
<servicioparcial:parcialesconstruccion NumPerLicoAut="4444" Version="1.0">
<servicioparcial:Inmueble Estado="20" CodigoPostal="53290" Calle="CERRADA DEL MUERTO 43" Municipio="morelia" />
</servicioparcial:parcialesconstruccion>
<implocal:ImpuestosLocales TotaldeTraslados="0.00" TotaldeRetenciones="5224.24" version="1.0">
<implocal:RetencionesLocales Importe="5224.24" TasadeRetencion="5" ImpLocRetenido="FONDO GARANTÍA" />
</implocal:ImpuestosLocales>
<tfd:TimbreFiscalDigital UUID="CD256C34-D0F9-143B-B6F5-03322591E845" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" selloSAT="GnK+wWuttfh/lSyFCxbOCjlUIeogGDdg8C0Nj8tHpkCNekPy=" selloCFD="HwFjQYCu6ZRpw0YS7Wfkz5iG4QYzo8PzcHKfMw+e45u9nLLjFzUmPgrij/kguqcDITrVslx99af43PlfvOBtqCh7UClrtZCU6ZK6jY9zIeVPp41lz9VFtF2dx+in8EbUXn9dspKTnoen9gkmvZnAXrFUUYx0wrOT9hGkAoljPwA=" FechaTimbrado="2015-05-22T11:43:13" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd" noCertificadoSAT="00001000000102285872" version="1.0" />
</cfdi:Complemento>
</cfdi:Comprobante>

el codigo que uso es
For Each lconcepto As XElement In archivoXML.Descendants(nsCFDi + "servicioparcial").Elements(nsCFDi + "parcialesconstruccion").Elements() 'ciclo que recorre todos los conceptos de la factura
'MsgBox("inica ciclo")
Dim Name As String = lconcepto.Attribute("NumPerLicoAut").Value 'obtiene el valor de la descripción para darle tratamiento posterior
' Dim Name As String = lconcepto.Attribute("descripcion").Value '32
Dim tmp = lconcepto.Attribute("NumPerLicoAut").Value
'Dim tmp = lconcepto.Attribute("descripcion").Value '32
If lconcepto.Attribute("NumPerLicoAut").Value = strDescripcionO.Trim Then
'MsgBox(lconcepto.Attribute("descripcion").Value)

ElseIf result = DialogResult.No Then
'MessageBox.Show("No pressed")

End If
End If


importe = importe + 1
Next

Por que no puedo ver la información? si puedes contactarme por correo a hectorbg01@yahoo.com.mx gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA!!!. Leer Factura XML (cfdi:conceptos)

Publicado por HECTOR BAUTISTA hectorbg01@yahoo.com.mx (2 intervenciones) el 11/01/2019 21:55:37
Angel MR: estoy leyendo un XML version 3.2, tome tu codigo, como referencia, pero al querer leer el xml
quiero leer el NumPerLicoAut que es ="4444", pero no me lo permite el XML que pongo es:

1
2
3
4
5
6
7
8
9
10
<cfdi:Complemento>
    <servicioparcial:parcialesconstruccion NumPerLicoAut="4444" Version="1.0">
      <servicioparcial:Inmueble Estado="20" CodigoPostal="53290" Calle="CERRADA  DEL MUERTO 43" Municipio="morelia" />
    </servicioparcial:parcialesconstruccion>
    <implocal:ImpuestosLocales TotaldeTraslados="0.00" TotaldeRetenciones="5224.24" version="1.0">
      <implocal:RetencionesLocales Importe="5224.24" TasadeRetencion="5" ImpLocRetenido="FONDO GARANTÍA" />
    </implocal:ImpuestosLocales>
    <tfd:TimbreFiscalDigital UUID="CD256C34-D0F9-143B-B6F5-03322591E845" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" selloSAT="GnK+wWuttfh/lSyFCxbOCjlUIeogGDdg8C0Nj8tHpkCNekPy=" selloCFD="HwFjQYCu6ZRpw0YS7Wfkz5iG4QYzo8PzcHKfMw+e45u9nLLjFzUmPgrij/kguqcDITrVslx99af43PlfvOBtqCh7UClrtZCU6ZK6jY9zIeVPp41lz9VFtF2dx+in8EbUXn9dspKTnoen9gkmvZnAXrFUUYx0wrOT9hGkAoljPwA=" FechaTimbrado="2015-05-22T11:43:13" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd" noCertificadoSAT="00001000000102285872" version="1.0" />
  </cfdi:Complemento>
</cfdi:Comprobante>

el código que uso es
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
For Each lconcepto As XElement In archivoXML.Descendants(nsCFDi + "servicioparcial").Elements(nsCFDi + "parcialesconstruccion").Elements() 'ciclo que recorre todos los conceptos de la factura
    'MsgBox("inica ciclo")
    Dim Name As String = lconcepto.Attribute("NumPerLicoAut").Value 'obtiene el valor de la descripción para darle tratamiento posterior
    ' Dim Name As String = lconcepto.Attribute("descripcion").Value '32
    Dim tmp = lconcepto.Attribute("NumPerLicoAut").Value
    'Dim tmp = lconcepto.Attribute("descripcion").Value '32
    If lconcepto.Attribute("NumPerLicoAut").Value = strDescripcionO.Trim Then
        'MsgBox(lconcepto.Attribute("descripcion").Value)
 
        ElseIf result = DialogResult.No Then
            'MessageBox.Show("No pressed")
 
        End If
    End If
 
 
    importe = importe + 1
Next

Por que no puedo ver la información? si puedes contactarme por correo a hectorbg01@yahoo.com.mx gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA!!!. Leer Factura XML (cfdi:conceptos)

Publicado por ST (1 intervención) el 19/01/2019 02:16:48
Esta excelente el ejercicio, gracias por compartirlo,, solo me queda una duda,,, estoy haciendo vaciandolos datos en una tabla, pero al momento de tratar de obtener los impuestos por cada concepto no logro entrar en el nodo hijo,,

1
2
3
4
5
6
7
8
<cfdi:Concepto Cantidad="2.000" ClaveProdServ="50202203" ClaveUnidad="H87" Descripcion="EL COTO CRIANZA 750ML" Descuento="50.09" Importe="333.92" NoIdentificacion="COT75002B12" Unidad="PIEZA" ValorUnitario="166.962">
    <cfdi:Impuestos>
        <cfdi:Traslados>
        <cfdi:Traslado Base="283.83" Importe="75.21" Impuesto="003" TasaOCuota="0.265000" TipoFactor="Tasa"></cfdi:Traslado>
            <cfdi:Traslado Base="359.04" Importe="57.45" Impuesto="002" TasaOCuota="0.160000" TipoFactor="Tasa"></cfdi:Traslado>
        </cfdi:Traslados>
    </cfdi:Impuestos>
</cfdi:Concepto>

Hasta los conceptos si alcanzo a obtener los datos e introducirlos en lineas diferentes,, pero si quiero amarrar el impuesto con su debido concepto no lo logro, pense que dandole otro espacio de nombre debería hacerlo y meter ese espacio en cada concepto, pero al final solo me da el ultimo valor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
VarConceptos = VarDocumentoXML.SelectNodes("/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto", VarManager)
 
varNodestrasladosXLinea = VarDocumentoXML.SelectNodes("/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado", VarManager)
 
 
For Each node In VarConceptos
Dim dr As DataRow = dt.NewRow()
 
dr("ID") = "0" & GridViewDetalleCompras.RowCount + 1
dr("Cantidad") = node.Attributes("Cantidad").Value
dr("IDProveedor") = node.Attributes("NoIdentificacion").Value
dr("IDInterno") = ""
dr("Descripcion") = node.Attributes("Descripcion").Value
dr("Unidad") = ""
dr("Costo") = node.Attributes("ValorUnitario").Value
dr("Descuento") = node.Attributes("Descuento").Value
 
For Each node2 In varNodestrasladosXLinea
 
    Select Case node2.Attributes("Impuesto").Value()
 
        Case "003"
            dr("TasaIEPS") = node2.Attributes("TasaOCuota").Value()
            dr("IEPS") = node2.Attributes("Importe").Value()
 
        Case "002"
            dr("TasaIVA") = node2.Attributes("TasaOCuota").Value()
            dr("IVA") = node2.Attributes("Importe").Value()
 
    End Select
 
Next

LA intencion de esto es obtener en una sola linea los datos generales del producto,, IDentificador, descripcion, costo, importe ieps, importe iva, total,, etc
Si pudieras mas o menos orientarme por donde va el asunto,,, he tratado de invocar el node2 basado en el node conceptos pero no encuentra nada,,,

GRacias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad