martes, mayo 31, 2011

CFDI: Paso a paso con la libreria CFDI.NET

Pues bien, en respuesta a las preguntas acerca de como implementar la libreria CFDI.NET para generar un CFDI de principio a fin, aqui les dejo este post.

Una vez que agregues las referencias de la dll en visual studio, tienes que crear un objeto de tipo Comprobante de la siguiente manera:

Dim micomprobante As New CFDI.Comprobante

With micomprobante
.TruncarDecimales = True
.TruncarDecimalesLongitud = 2
.AgregaDatosEmisor("AAA010101AAA", "Empresa Demo", "Padre Mier", 1640, "", "Obispado", 53400, "Monterrey", "Nuevo Leon", "", "Mexico", "", True)
.AgregaDatosReceptor("CLI010101AAA", "Cliente Demo", "Padre Mier", 5512, "", "", 64060, "Monterrey", "Nuevo Leon", "", "Mexico", "")
.tipoDeComprobante = CFDI.ComprobanteTipoDeComprobante.ingreso
.formaDePago = "Pago en una sola exhibición"
.fecha = New Date(2011, 1, 8, 0, 16, 40)
.folio = 66
.tipoDeComprobante = CFDI.ComprobanteTipoDeComprobante.ingreso
.AgregaConcepto(2, 2, 2, 2, 2, "123456", "GDL", New Date(2010, 12, 12, 6, 0, 0))
.AgregaImpuesto(CFDI.ComprobanteImpuestosTrasladoImpuesto.IVA, 16)
.serie = ""
End With
Ahora crea el motor para generar los archivos que han de ser enviados al PAC
'crea el motor usando los certificados del demo del SAT
Dim mCFDI As New CFDI.MotorCFDI(archivocertificado, archivoLlave, _ contrasena,directorioDestino)

'agrega el comprobante al motor
mCFDI.Comprobantes.Add(micomprobante)

Dim resultado As CFDI.ResultadoProceso = mCFDI.GenerarArchivosPAC(True, False)


Envia los archivos usando el metodo que te proporcione el PAC, ese codigo depende de cada PAC. una vez que hayas recibido los archivos timbrados, puedes agregar las addendas

'vacia los comprobantes del motor
mCFDI.Comprobantes.Clear()

'procesa los archivos recibidos
For Each archivoRecibidoPAC As String In listaArchivosRecibidosPAC
'regenera el objeto a partir de un archivo fisico
Dim comprobanteConTimbre As CFDI.Comprobante = CFDI.Comprobante.DeserializeFromFile(archivoRecibidoPAC)

'para el demo, tengo la addenda en un txt
Dim textoXMLAddenda As String
Using
sr As New IO.StreamReader(archivoAddenda)
textoXMLAddenda = sr.ReadToEnd
End Using

'agrega el texto del xml que quieres adicionar al comprobante
comprobanteConTimbre.AgregaXMLAddenda(textoXMLAddenda)

'guarda el archivo con la addenda incluida, en este caso estoy sobreescribiendo el del PAC
comprobanteConTimbre.Serialize.Save(archivoRecibidoPAC)

'agrega el comprobante a la lista que se va a procesar para los PDF’s
mCFDI.Comprobantes.Add(comprobanteConTimbre)
Next

Por ultimo, genera el PDF

'reprocesa los comprobantes para generar los archivos del TFD y CBB
resultado = mCFDI.GenerarArchivosXMLPDF(False, False)

'establece cual sera el archivo de formado para los CFDI's
CFD.PDF.Globales.ArchivoREPX = "C:\MiFormatoCFDI.repx"

'envia los resultados al motor de PDF's
CFD.PDF.Generar.ArchivosPDF(resultado.ArchivosXMLPDF())

Cuando generas el PDF, se genera un archivo extension .pdf.xml, en este se incluyen algunos valores que seran de utilidad a la hora de generar el archivo PDF, por ejemplo, las cadenas original y de TFD


image


image



Ahi tienen, eso es todo lo que hay que hacer para generar archivos XML validos usando la libreria, sin problemas. Espero sus comentarios

lunes, mayo 30, 2011

Addenda de AMECE usando las librerias CFD / CFDI

Con las librerias CFD, es muy sencillo agregar addendas a un CFD o CFDI incrustando un fragmento de XML a manera de string .

Sin embargo tambien existe la posibilidad de utilizar una serie de objetos previamente construidos por nuestra parte y serializarlos para hacer las cosas aun mas sencillas.

En este ejemplo estoy utilizando un objeto que representa la especificacion de addenda de la AMECE, para construir el xml que necesito incrustar en mi CFD

Este es el ejemplo que me envian

image

Desde visual studio solo tengo que escribir el siguiente codigo

'crea el objeto de la addenda
Dim addenda As New CFD.Addendas.AMECE.Addenda.AddendaRequestForPayment

With addenda
'atributos
.DeliveryDate = "2010-12-17"
.documentStatus = "ORIGINAL"
.documentStructureVersion = "AMC7.1"
.contentVersion = "1.3.1"
.type = "SimpleInvoiceType"

'ELEMENTO: <requestForPaymentIdentification>
.requestForPaymentIdentification = New List(Of CFD.Addendas.AMECE.Addenda.AddendaRequestForPaymentRequestForPaymentIdentification)
Dim pi As New CFD.Addendas.AMECE.Addenda.AddendaRequestForPaymentRequestForPaymentIdentification
pi.entityType = "INVOICE"
pi.uniqueCreatorIdentification = "ABC9999999"
.requestForPaymentIdentification.Add(pi)

'ELEMENTO: <specialInstruction>
.specialInstruction = New List(Of CFD.Addendas.AMECE.Addenda.AddendaRequestForPaymentSpecialInstruction)
Dim si As New CFD.Addendas.AMECE.Addenda.AddendaRequestForPaymentSpecialInstruction
si.code = "SOC"
si.text = "1000"
.specialInstruction.Add(si)

'ELEMENTO: <orderIdentification>
.orderIdentification = New List(Of CFD.Addendas.AMECE.Addenda.referenceIdentification)
Dim oi As New CFD.Addendas.AMECE.Addenda.referenceIdentification
oi.type = "ON"
oi.Value = "45000888722"
.orderIdentification.Add(oi)

End With

y el resultado en XML es


image


para incrustarlo en el el CFD, usa el metodo AgregaXMLAddenda()


cfd.AgregaXMLAddenda(addenda.Serialize, False, False)