Página 6 de 8
Re: Web Service HEB
Publicado: Lun Oct 21, 2013 12:34 pm
por agallardor13
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
Re: Web Service HEB
Publicado: Lun Oct 21, 2013 1:18 pm
por smendoza
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!
Re: Web Service HEB
Publicado: Lun Oct 21, 2013 6:23 pm
por agallardor13
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
Re: Web Service HEB
Publicado: Lun Oct 21, 2013 7:11 pm
por smendoza
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
Re: Web Service HEB
Publicado: Mar Oct 22, 2013 10:24 am
por japeredas
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.
Re: Web Service HEB
Publicado: Mar Oct 22, 2013 11:09 am
por smendoza
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

.
Saludos!
Re: Web Service HEB
Publicado: Mar Oct 22, 2013 11:57 am
por japeredas
aaa si(yo me hico el rudo y lo llene a mano.

) 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.
Re: Web Service HEB
Publicado: Mar Oct 22, 2013 12:00 pm
por agallardor13
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
Re: Web Service HEB
Publicado: Mar Oct 22, 2013 12:21 pm
por smendoza
japeredas escribió:aaa si(yo me hico el rudo y lo llene a mano.

) 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...
Re: Web Service HEB
Publicado: Mar Oct 22, 2013 12:27 pm
por smendoza
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
