Web Service HEB

Hay dos medios para facturar, por medios propios y mediante terceros autorizados, aqui se discuten las soluciones que hay en el mercado
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
agallardor13
Mensajes: 60
Registrado: Mié Oct 13, 2010 10:28 pm

Re: Web Service HEB

Mensajepor agallardor13 » Lun Oct 21, 2013 1:34 pm

No en realidad no se como se implementa la funcion GetSerializedInvoice() puedes ayudarme con un poco de código para ver que hiciste para serializarla?

saludos
agallardo

smendoza
Mensajes: 115
Registrado: Jue Jul 22, 2010 10:37 am

Re: Web Service HEB

Mensajepor smendoza » Lun Oct 21, 2013 2:18 pm

agallardor13 escribió:No en realidad no se como se implementa la funcion GetSerializedInvoice() puedes ayudarme con un poco de código para ver que hiciste para serializarla?

saludos
agallardo


En realidad es Des-serializarla, pero así le pusieron a la función.
Puedes econtrar mas información de serialzar y deserializar en este link. http://support.microsoft.com/kb/316730/es, basicamente tienes que mandar al ws un objeto del tipo comprobante o comprobante2(cfdi), como lo mencionaste en algun comentario.

Lo que hay que hacer es tomar el xml y deserializarlo para convertirlo en un objeto del tipo comprobante, no tengo el código en estos momentos pero seria algo así:

Dim ser As New System.Xml.Serialization.XmlSerializer(c2.GetType)
c2 = ser.Deserialize(objStreamReader)

donde c2 seria el objeto de tipo comprobante2 (viene en la defnicion del proxy del ws) objStreamReader seria un objeto del tipo StreamReader con el cual se lee el XML de la factura, al XML hay que hacerle algunos cambios para que lo puedas deserializar y convertirlo correctamente, de lo contrario te marcara error.

Pruebalo y me comentas, si no te mando el codigo en cuanto pueda.

saludos!

agallardor13
Mensajes: 60
Registrado: Mié Oct 13, 2010 10:28 pm

Re: Web Service HEB

Mensajepor agallardor13 » Lun Oct 21, 2013 7:23 pm

Que tal, a ver si me puedes ayudar un poco más en la parte de deserialización,

Intenté cargar un archivo XML más o menos con la idea que me diste:

Código: Seleccionar todo

               MDIS.Comprobante Comprobante = new MDIS.Comprobante();
                var Serializer = new System.Xml.Serialization.XmlSerializer(typeof(MDIS.Comprobante));
                System.IO.StreamReader sr = new System.IO.StreamReader(@"C:\TMP\G8084.xml");

                Comprobante = (MDIS.Comprobante)Serializer.Deserialize(sr);

Sin embargo al tratar de deserializar me marca:
Error en el documento XML (2, 2).

Como lo estás haciendo tu?

saludos
agallardo

smendoza
Mensajes: 115
Registrado: Jue Jul 22, 2010 10:37 am

Re: Web Service HEB

Mensajepor smendoza » Lun Oct 21, 2013 8:11 pm

agallardor13 escribió:Que tal, a ver si me puedes ayudar un poco más en la parte de deserialización,

Intenté cargar un archivo XML más o menos con la idea que me diste:

Código: Seleccionar todo

               MDIS.Comprobante Comprobante = new MDIS.Comprobante();
                var Serializer = new System.Xml.Serialization.XmlSerializer(typeof(MDIS.Comprobante));
                System.IO.StreamReader sr = new System.IO.StreamReader(@"C:\TMP\G8084.xml");

                Comprobante = (MDIS.Comprobante)Serializer.Deserialize(sr);

Sin embargo al tratar de deserializar me marca:
Error en el documento XML (2, 2).

Como lo estás haciendo tu?

saludos
agallardo


El error es porque hay que modificar el xml antes de deserializarlo, a cada nodo agregale el namespace http://www.sat.gob.mx/cfd/2 (en mi caso es cfd), esto yo lo hice abriendo el xml con un streamreader y sustituyendo partes del string...

Dim objStreamReader As New System.IO.StreamReader("C:\A4191.xml")
Dim xml As String = objStreamReader.ReadToEnd

xml = xml.Replace("xmlns=" & """http://www.sat.gob.mx/cfd/2""", "") ' hay que quitar el primer namespace
xml = xml.Replace("<Emisor", "<Emisor xmlns=" & """http://www.sat.gob.mx/cfd/2""")

hay que hacer lo mismo por cada nodo principal, emisor, receptor, conceptos, etc, al detallista hay que agregarle el namespace del detallista.

Una forma de saber que modificaciones hay que hacerle al xml, es crear un objeto Comprobante, llenar algunos datos manualmente y luego serializar el objeto para ver que xml nos crea...

Saludos!

Nota: Comprobante es para CFD, Comprobante2 para CFDi

japeredas
Mensajes: 4
Registrado: Mar Ago 13, 2013 11:30 am

Re: Web Service HEB

Mensajepor japeredas » Mar Oct 22, 2013 11:24 am

Buenos dias muchachos yo ya logre enviar la factura con exito de hecho se ocupa muchisimo codigo pero es basicamente talacha
lo primero es llenar el objeto MDIS.Comprobante2 comprobante = new MDIS.Comprobante2();
este es el que les dara toda la estructura del xml yo lo lleno a partir de la factura electronica ya timbrada.
comprobante.version = xmlcomprobante.Attributes["version"].Value;
y asi cada parte del objeto MDIS.Comprobante2 que es muy complejo lo tienes que llenar hasta que obtengan un xml como lo pide HEB.
pero primero de esto deben de crear un mecanismo de se capaz de bajar las ordenes de compra que se encuentran en este metodo
service.getPurchaseOrder(1, true, "XXX-123456-123", 0, false, DateTime.Now.AddMonths(-6), DateTime.Now, out mensaje);
este les regresa un xml que es la orden de compra y de ahi ocupan sacar ciertos datos como la direccion de envio y la #OC.
Bueno les dejo mi correo si ocupan de nuevo el codigo de ejemplo me avisan. mi correo para dudas es pereda.69@gmail.com.

smendoza
Mensajes: 115
Registrado: Jue Jul 22, 2010 10:37 am

Re: Web Service HEB

Mensajepor smendoza » Mar Oct 22, 2013 12:09 pm

japeredas escribió:Buenos dias muchachos yo ya logre enviar la factura con exito de hecho se ocupa muchisimo codigo pero es basicamente talacha
lo primero es llenar el objeto MDIS.Comprobante2 comprobante = new MDIS.Comprobante2();
este es el que les dara toda la estructura del xml yo lo lleno a partir de la factura electronica ya timbrada.
comprobante.version = xmlcomprobante.Attributes["version"].Value;
y asi cada parte del objeto MDIS.Comprobante2 que es muy complejo lo tienes que llenar hasta que obtengan un xml como lo pide HEB.
pero primero de esto deben de crear un mecanismo de se capaz de bajar las ordenes de compra que se encuentran en este metodo
service.getPurchaseOrder(1, true, "XXX-123456-123", 0, false, DateTime.Now.AddMonths(-6), DateTime.Now, out mensaje);
este les regresa un xml que es la orden de compra y de ahi ocupan sacar ciertos datos como la direccion de envio y la #OC.
Bueno les dejo mi correo si ocupan de nuevo el codigo de ejemplo me avisan. mi correo para dudas es pereda.69@gmail.com.


Que tal, yo pense hacerlo asi, dato por dato para llenar el Comprobante2, perla la verdad me dio flojera, al final lo hice con aproximadamente unas 10 lineas de código usando los métodos anteriores mencionados en mis comentarios :D .

Saludos!

japeredas
Mensajes: 4
Registrado: Mar Ago 13, 2013 11:30 am

Re: Web Service HEB

Mensajepor japeredas » Mar Oct 22, 2013 12:57 pm

aaa si(yo me hico el rudo y lo llene a mano. :D) pero si llenaste el complemento detallista ya que sin ese el envio aun no es funcional ya que en el se especifica todo el detalle de recepcion y la especificacion de los conceptos de las facturas.

agallardor13
Mensajes: 60
Registrado: Mié Oct 13, 2010 10:28 pm

Re: Web Service HEB

Mensajepor agallardor13 » Mar Oct 22, 2013 1:00 pm

Smendoza,

Porfa, comparte el truco en las 10 lineas de código, sigo sin poder pasar la parte de deserializar, me marca error en el XML (2,2)

saludos
agallardo

smendoza
Mensajes: 115
Registrado: Jue Jul 22, 2010 10:37 am

Re: Web Service HEB

Mensajepor smendoza » Mar Oct 22, 2013 1:21 pm

japeredas escribió:aaa si(yo me hico el rudo y lo llene a mano. :D) pero si llenaste el complemento detallista ya que sin ese el envio aun no es funcional ya que en el se especifica todo el detalle de recepcion y la especificacion de los conceptos de las facturas.


asi es, se lleno todo, ahi copio el codigo, denme un min...

smendoza
Mensajes: 115
Registrado: Jue Jul 22, 2010 10:37 am

Re: Web Service HEB

Mensajepor smendoza » Mar Oct 22, 2013 1:27 pm

queria hacerlos sufrir o que al menos le buscaran un poquito ;)

aqui esta mi implementacion de la función, espero les sirva a mas de uno.

Código: Seleccionar todo


Private Function getSerializedInvoice(ByVal rutaXml As String) As HEBWbsvc.Comprobante2

        Dim objStreamReader As New System.IO.StreamReader(rutaXml)
        Dim p2 As New HEBWbsvc.Comprobante2
        Dim xml As String = objStreamReader.ReadToEnd
        objStreamReader.Close()
        objStreamReader.Dispose()

        xml = xml.Replace("xmlns:cfdi=" & """http://www.sat.gob.mx/cfd/3""", "")
        xml = xml.Replace("cfdi:", "")
        xml = xml.Replace("Comprobante", "Comprobante2")
        xml = xml.Replace("<Emisor", "<Emisor xmlns=" & """http://www.sat.gob.mx/cfd/3""")
        xml = xml.Replace("<Receptor", "<Receptor xmlns=" & """http://www.sat.gob.mx/cfd/3""")
        xml = xml.Replace("<Conceptos", "<Conceptos xmlns=" & """http://www.sat.gob.mx/cfd/3""")
        xml = xml.Replace("<Impuestos", "<Impuestos xmlns=" & """http://www.sat.gob.mx/cfd/3""")
        xml = xml.Replace("<Complemento", "<Complemento xmlns=" & """http://www.sat.gob.mx/cfd/3""")

        xml = xml.Replace("<detallista:detallista", "<detallista:detallista xmlns=" & """http://www.sat.gob.mx/detallista""")

        Dim stream As New System.IO.MemoryStream(Text.Encoding.UTF8.GetBytes(xml))
        Dim ser As New System.Xml.Serialization.XmlSerializer(p2.GetType)
        p2 = ser.Deserialize(stream)

        stream.Close()
        stream.Dispose()
        getSerializedInvoice = p2

    End Function


Bueno, exagere un poquito con lo de la 10 lineas, son un poquito mas :)


Volver a “Soluciones Propias y de Terceros”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 10 invitados