HumbertoMartinez.com
Pasele, aqui es... Facturacion Electronica con .NET en 5 minutos.
lunes, agosto 15, 2011
HowTo: Timbrar usando el servicio de Buzon Fiscal
http://gooru.mx/Noticias/tabid/69/EntryId/33/CFDI-NET-Timbrar-usando-BuzonFiscal.aspx
Nos mudamos a Gooru.mx
los correos siguen siendo :
contacto [arroba] humbertomartinez.com
hm [arroba] gooru.mx
:D
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.ComprobanteAhora crea el motor para generar los archivos que han de ser enviados al PAC
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
'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
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
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
para incrustarlo en el el CFD, usa el metodo AgregaXMLAddenda()
cfd.AgregaXMLAddenda(addenda.Serialize, False, False)
miércoles, abril 20, 2011
Its LightSwitch, im in love.
Soy fan de las herramientas para productividad entonces no es ninguna sorpresa que en cuanto supe de LightSwitch de Visual Studio 2010, inmediatamente lo descargue y comence a jugar con el.
Las ventajas que le veo hasta ahora son:
- Estas usando visual studio para generar aplicaciones casi instantaneas
- Puedes extender de manera natural las aplicaciones escribiendo tu propio codigo
- Las aplicaciones son generadas con SilverLight, lo que te permite publicarlas para el escritorio o ambiente web sin tener que hacer practicamente ningun ajuste
- Visual Studio LighSwitch te permite publicar tus aplicaciones directamente sobre Azure!!!
Ahora, no todo es miel, tambien hay algunas cosas que no estan TAN COOL
- Debido a que las aplicaciones son generadas con SilverLight, no puedes importar directamente tus librerias existentes .NET, unicamente se permiten referencias a librerias compiladas especificamente para SilverLight
- No hay un disenador de pantallas en la manera en que visual studio me tiene acostumbrado, tienes que usar unos templates ya preestablecidos y aunque en teoria puedes generar tus propios templates aun no lo he intentado. (Esto en parte es buena senal, porque he podido hacer lo que necesito SIN tener que generar mis propios templates).
En resumen, creo que esta version BETA 2 va muy bien, y definitivamente es un producto al que no hay que perder de vista.
martes, abril 12, 2011
CFD / CFDI : Facil con la libreria .NET
Sabias que tambien puedes generar los archivos XML requeridos por el servicio de timbrado (PAC) usando la libreria? Solo descarga la version de evaluacion y usa la libreria Gooru.Componentes.CFDI
Dim micomprobante As New CFDI.Comprobante
With micomprobante
.TruncarDecimales = True
.TruncarDecimalesLongitud = 2
.AgregaDatosEmisor("DEMO101010A1A", "EMPRESA S.A. de C.V.", _
"AV. JUAREZ", "1111", "", _
"CENTRO", "64000", "MONTERREY", _
"NUEVO LEON", "MONTERREY", "MEXICO", "", True)
.AgregaDatosReceptor("PEPJ750101A1A", "JUAN PEREZ PEREZ", _
"AV UNIVERSIDAD", "123", _
"", "CENTRO", _
"64000", "MONTERREY", "NUEVO LEON", _
"MONTERREY", "MEXICO", "")
.formaDePago = "PAGO EN UNA SOLA EXHIBICION"
.fecha = Now
.tipoDeComprobante = CFDI.ComprobanteTipoDeComprobante.ingreso
.AgregaConcepto(1, "CAPSULAS", "", "VIBRAMICINA 100MG 10", 244)
.AgregaImpuesto(CFDI.ComprobanteImpuestosTrasladoImpuesto.IVA, 16)
.folio = 1
.serie = ""
End With
lunes, enero 31, 2011
How To: Agregar Impuesto Local
Este es un ejemplo de como agregar impuestos locales al comprobante fiscal digital
With miComprobante
Dim imploc As New CFD.ImpuestosLocales
imploc.AgregaRetencion(New CFD.ImpuestosLocalesRetencionesLocales("IVA", 16, 1000))
imploc.AgregaTraslado(New CFD.ImpuestosLocalesTrasladosLocales("ISR", 2, 100))
.Complemento = New CFD.ComprobanteComplemento()
.Complemento.Any = imploc.Serialize
End With
miércoles, enero 05, 2011
How To : Determinar errores en el proceso de generacion de comprobantes o reporte mensual
Para examinar los posibles errores en la generacion de los comprobantes fiscales digitales y el reporte mensual, las funciones
- CFD.MotorCFD.ProcesarComprobantes
- CFD.Generar.ReporteMensual
Regresan un objeto de tipo CFD.ResultadoProceso, este objeto tiene una propiedad de tipo booleano llamada Errores esta propiedad nos muestra si dentro del proceso se encontro algun problema.
Ademas el objeto CFD.ResultadoProceso cuenta con 2 colecciones de tipo CFD.Comprobante
- ComprobantesGenerados
- ComprobantesNOGenerados
Examinando la propiedad ErrorGeneracion de cada uno de los objetos en la lista de ComprobantesNOGenerados podemos averiguar por que no se genero el comprobante.
Ahora intentalo con el reporte mensual