Generación de un CDFI mediante cfdv32.cs en C# XML 3.2
Hola a todos, en este caso les dejaré una información útil al realizar facturación electrónica y en su caso un CFDI (Comprobante Fiscal a Través de Internet), dicho comprobante se genera mediante XMl, los cuales se crearán por medio de las clases (cfdv32) que nos proporciona el SAT para su emisión.
Como primer paso es indispensable incluir a su proyecto la clase que dejo, al final de la publicación.
Para generar el XML se necesitan las siguientes librerías, las cuales realizan la serialización de objetos.
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
using System.Web.UI;
using System.Web.UI.WebControls;
Código de Generación
Se crea un método genera_xml_factura la cual crea la factura.
public int genera_xml_factura(Facturacion datos_facturacion_general)
{int estatus = 0;
try
{Comprobante objCompXSD = new Comprobante();
// Datos del CFDI Global
objCompXSD.version = «3.2»;
objCompXSD.folio =»1″;
objCompXSD.serie = «MAQ»;
objCompXSD.fecha = DateTime.Now;
objCompXSD.formaDePago = «Pago en una sola exhibicion»;
objCompXSD.total = Convert.ToDecimal(«1160»);
objCompXSD.subTotal = Convert.ToDecimal(«1000»);
objCompXSD.Moneda = «MXN»;
objCompXSD.metodoDePago = «Efectivo»;
objCompXSD.tipoDeComprobante = new ComprobanteTipoDeComprobante();
objCompXSD.LugarExpedicion =»Mexico»;// Datos del Emisor
objCompXSD.Emisor = new ComprobanteEmisor();
objCompXSD.Emisor.rfc = «AAA010101AAA»;
objCompXSD.Emisor.nombre = «TUPPROGRAMARAS, S.A. DE C.V.»;
// Datos del Domicilio del Emisor
objCompXSD.Emisor.DomicilioFiscal = new t_UbicacionFiscal();
objCompXSD.Emisor.DomicilioFiscal.calle = «CALLE»;
objCompXSD.Emisor.DomicilioFiscal.noInterior = «NO. INT»;
objCompXSD.Emisor.DomicilioFiscal.noExterior = «NO. EXT»;
objCompXSD.Emisor.DomicilioFiscal.colonia =»COLONIA»;
objCompXSD.Emisor.DomicilioFiscal.municipio = «MUNICIPIO»;
objCompXSD.Emisor.DomicilioFiscal.estado = «MEXICO»;
objCompXSD.Emisor.DomicilioFiscal.pais = «MEXICO»;
objCompXSD.Emisor.DomicilioFiscal.codigoPostal = «00000»;
// Regimen del Emisor
objCompXSD.Emisor.RegimenFiscal = new ComprobanteEmisorRegimenFiscal[1];
objCompXSD.Emisor.RegimenFiscal[0] = new ComprobanteEmisorRegimenFiscal();
objCompXSD.Emisor.RegimenFiscal[0].Regimen = «REGIMEN FISCAL»;// Datos del Receptor
objCompXSD.Receptor = new ComprobanteReceptor();
objCompXSD.Receptor.rfc = «RFC»;
objCompXSD.Receptor.nombre = «NOMBRE»;//// Datos del Domicilio del Receptor
objCompXSD.Receptor.Domicilio = new t_Ubicacion();
objCompXSD.Receptor.Domicilio.calle = «CALLE»;
objCompXSD.Receptor.Domicilio.noExterior = «NO. EXTERIOR»;
objCompXSD.Receptor.Domicilio.noInterior = «NO. INTERIOR» ;
objCompXSD.Receptor.Domicilio.colonia = «COLONIA»;
objCompXSD.Receptor.Domicilio.municipio = «MUNICIPIO»;
objCompXSD.Receptor.Domicilio.estado = «ESTADO»;
objCompXSD.Receptor.Domicilio.pais = «PAIS»;
objCompXSD.Receptor.Domicilio.codigoPostal = Convert.ToString(«CODIGO POSTAL»);
// Conceptops
objCompXSD.Conceptos = new ComprobanteConcepto[1]; // Numero de Filas
objCompXSD.Conceptos[0] = new ComprobanteConcepto(); // Instancia de la Fila
objCompXSD.Conceptos[0].importe = 11;
objCompXSD.Conceptos[0].valorUnitario = 22;
objCompXSD.Conceptos[0].descripcion = «33»;
objCompXSD.Conceptos[0].noIdentificacion = «44»;
objCompXSD.Conceptos[0].unidad = «55»;
objCompXSD.Conceptos[0].cantidad = 66;// [0] Debe aumentar para el siguiente Concepto
// Impuestos
objCompXSD.Impuestos = new ComprobanteImpuestos();
objCompXSD.Impuestos.totalImpuestosTrasladadosSpecified = true; // Estatus si aparece
objCompXSD.Impuestos.totalImpuestosTrasladados = 222;// Impuestos Traslados
objCompXSD.Impuestos.Traslados = new ComprobanteImpuestosTraslado[1];
objCompXSD.Impuestos.Traslados[0] = new ComprobanteImpuestosTraslado();
objCompXSD.Impuestos.Traslados[0].importe = 160 ;
objCompXSD.Impuestos.Traslados[0].tasa = 16;
objCompXSD.Impuestos.Traslados[0].impuesto = ComprobanteImpuestosTrasladoImpuesto.IVA;
// Complemento
// objCompXSD.Complemento = new ComprobanteComplemento();
// Creas los namespaces requeridos
XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces();xmlNameSpace.Add(«cfdi», «http://www.sat.gob.mx/cfd/3»);
xmlNameSpace.Add(«tfd», «http://www.sat.gob.mx/TimbreFiscalDigital»);
xmlNameSpace.Add(«xsi», «http://www.w3.org/2001/XMLSchema-instance»);
xmlNameSpace.Add(«schemaLocation», «http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd»);
// Creas una instancia de XMLSerializer con el tipo de dato Comprobante
XmlSerializer xmlSerialize = new XmlSerializer(typeof(Comprobante));
// Creas una instancia de XmlTextWriter donde se va a guardar el resultado de la serialización
XmlTextWriter xmlTextWriter = new XmlTextWriter(@»C:\xml\comprobanteSinTimbrar.xml», Encoding.UTF8);
xmlTextWriter.Formatting = Formatting.Indented;// Y serializas…
xmlSerialize.Serialize(xmlTextWriter, objCompXSD, xmlNameSpace);xmlTextWriter.Close();
}
catch (Exception ex) {estatus = 1;
}
return estatus;}
Ejemplo de XML
<?xml version=»1.0″ encoding=»utf-8″?>
<cfdi:Comprobante xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:schemaLocation=»http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd» version=»3.2″ serie=»MAQ» folio=»1″ fecha=»2015-07-27T16:07:44″ subTotal=»200.0000″ Moneda=»MXN» total=»232.0000″ tipoDeComprobante=»ingreso» metodoDePago=»NO IDENTIFICADO» LugarExpedicion=»MEXICO, ESTADO DE MEXICO» NumCtaPago=»0000″ xmlns:cfdi=»http://www.sat.gob.mx/cfd/3″>
<cfdi:Emisor rfc=»AAA010101AAA» nombre=»LAURA HERNANDEZ SANCHEZ»>
<cfdi:DomicilioFiscal calle=»ANGEL CHARBIEL » noExterior=»LOT. 10-B» noInterior=»COND. 1 MANZ. 10″ colonia=»CLAUSTROS DE SAN MIGUEL» municipio=»CUAUTITLAN IZCALLI» estado=»ESTADO DE MEXICO» pais=»MEXICO» codigoPostal=»54719″ />
<cfdi:RegimenFiscal Regimen=»REGIMEN DE INCORPORACION FISCAL» />
</cfdi:Emisor>
<cfdi:Receptor rfc=»XXXX000000XX0″ nombre=»LAURA HERNANDEZ SANCHEZ»>
<cfdi:Domicilio calle=»N/A» noExterior=»N/A» noInterior=»N/A» colonia=»N/A» municipio=»N/A» estado=»N/A» pais=»MEXICO» codigoPostal=»00000″ />
</cfdi:Receptor>
<cfdi:Conceptos>
<cfdi:Concepto cantidad=»1″ unidad=»PIEZA» noIdentificacion=»215183″ descripcion=»ANILLO» valorUnitario=»200″ importe=»200″ />
</cfdi:Conceptos>
<cfdi:Impuestos>
<cfdi:Traslados>
<cfdi:Traslado impuesto=»IVA» tasa=»16″ importe=»32.0000″ />
</cfdi:Traslados>
</cfdi:Impuestos></cfdi:Comprobante>
Espero que les ayude.
Para Soporte en http://tuprogramaras.com/soporte/
http://tuprogramaras.com/generacion-de-un-cdfi-mediante-cfdv32-cs-en-c-xml-3-2/