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)

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:

  1. Estas usando visual studio para generar aplicaciones casi instantaneas
  2. Puedes extender de manera natural las aplicaciones escribiendo tu propio codigo
  3. Las aplicaciones son generadas con SilverLight, lo que te permite publicarlas para el escritorio o ambiente web sin tener que hacer practicamente ningun ajuste
  4. 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

  1. 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
  2. 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.

Visual Studio 2010 LightSwitch Developer Center

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.

image

Ahora intentalo con el reporte mensual

image

martes, enero 04, 2011

Its Alive!, el validador del SAT funciona de nuevo!

Acabo de revisar el validador del SAT y aparentemente el post de Asteka, les dijo que tenian que componer… todo de vuelta a la normalidad.

image

Error al generar la cadena, misterio resuelto, (Gracias Asteka!)

En uno de los comentarios al post anterior, Asteka ha publicado lo siguiente:

La respuesta a esta burla del SAT.

Ya no le busquen mas, el problema es del SAT les explico por que...
Accesen con explorer a este link:
http://www.sat.gob.mx/sitio_internet/cfd/2/cadenaoriginal_2_0/cadenaoriginal_2_0.xslt

Dentro de esta pagina
Este xlst hace referencia a otros xlst si abren cada uno de ellos funcionan EXCEPTO el ultimo. Esto es el verdadero problema que nos envia el validador. Alguien del SAT ha eliminado el archivo terceros.xslt o en caso de no ocuparse han olvidado quitar la referencia de llamada al mismo.

Atte.
Asteka

Asi que mis sospechas eran correctas, un error al generar la cadena del lado del validador del SAT esta generando un sello digital basado probablemente en una cadena vacia, que al ser comparado contra el contenido del sello de nuestros CFD’s esta reportando obvias diferencias. Bravo SAT, espero que no sea un indicador de lo que nos espera este 2011!

Saludos!

How To : Agregar informacion adicional a la addenda

Para agregar informacion adicional a la addenda, se puede usar el metodo AgregaXMLAddenda  enviando como argumento una cadena que represente un fragmento XML de la siguiente manera

image

Esto dara como resultado que el archivo XML generado contenga ese fragmento en el nodo Addenda

image

Una vez que esta informacion se encuentra en el XML podemos usarla como dato desde el formato de generacion de nuestros PDF’ s editando el archivo .REPX

image

lunes, enero 03, 2011

Error al Generar la Cadena Original

Si al validar tus comprobantes usando el validador en linea del SAT te aparece el mensaje “Error al generar la cadena” esto es lo que responde el SAT.

image

viernes, diciembre 31, 2010

How To : Controlar la generacion de los archivos generados por la libreria CFD 1.3.5

Una de las peticiones que nos han hecho es el poder tener mas control sobre los archivos que son generados por la libreria bueno pues con esta ultima actualizacion les ofrecemos un par de herramientas para lograr este control.

- NOMENCLATURA

Para cambiar el nombre de los archivos se incluyen en el MotorCFD un nuevo grupo de propiedades :

image

- GENERACION

Ahora si se especifican las rutas de archivo en el comprobante, el motor generara en esas ubicaciones los archivos

image

Ademas en el motor esta la opcion de omitir la generacion de los archivos de sello y cadena original

image

martes, diciembre 28, 2010

How To: Cancelar folios de comprobantes fiscales digitales emitidos

La cancelacion de folios relacionada con los comprobantes fiscales digitales (CFD’s) se reporta en el archivo mensual de uso de folios que se envia al SAT, para la generacion de este archivo usa el metodo

CFD.Generar.ReporteMensual

Enviando al final un arreglo de cadenas que representen al folio de la siguiente manera [Serie][Folio], ejemplo “A101”, “A115”

image

Validacion de Comprobantes Fiscales Digitales

En estos dias se actualizo el validador de CFD’s en la pagina del SAT, para verificar los archivos es necesario ir a esta liga: https://www.consulta.sat.gob.mx/SICOFI_WEB/ModuloECFD_Plus/ValidadorComprobantes/Validador.asp

y seleccionar

  • Validaciones Estandar
  • Folio
  • Vigencia del CSD

image

CFDI : Version Beta

Acabo de integrar a la ultima version de las librerias, la DLL que genera los archivos XML correspondientes al CFDI, un ejemplo de codigo es el siguiente:

Sub Main()
 
        'licencia para el RFC del demo de SAT
        CFDI.Licenciamiento.AgregaLicencia("ckW2u05Nn5vSmlxpwURi995TfVMStrXgpAVD028yQR0=")
 
        'crea un nuevo comprobante CFDI
        Dim micomprobante As New CFDI.Comprobante
        With micomprobante
            .TruncarDecimales = True
            .TruncarDecimalesLongitud = 2
            .AgregaDatosEmisor("PPL961114GZ1", "PHARMA PLUS SA DE CV", _
                               "AV. RIO MIXCOAC", "No.140", "", _
                               "ACACIAS", "03240", "BENITO JUAREZ", _
                               "MEXICO, D.F.", "", "Mexico", "")
 
            .AgregaDatosExpedidoEn("AV. UNIVERSIDAD", 1858, "", _
                                   "OXTOPULCO", "03910", "", _
                                   "DISTRITO FEDERAL", "", "Mexico", "")
 
            .AgregaDatosReceptor("PEPJ8001019Q8", "JUAN PEREZ PEREZ", _
                                 "AV UNIVERSIDAD", "16 EDF 3", _
                                 "DPTO 101", "COPILCO UNIVERSIDAD", _
                                 "04360", "COYOACAN", "DISTRITO FEDERAL", _
                                 "", "Mexico", "")
 
            .formaDePago = "PAGO EN UNA SOLA EXHIBICION"
            .fecha = New Date(2010, 3, 6, 20, 38, 12)
            .tipoDeComprobante = CFDI.ComprobanteTipoDeComprobante.ingreso
            .AgregaConcepto(1, "CAPSULAS", "", "VIBRAMICINA 100MG 10", 244)
            .AgregaConcepto(1, "BOTELLA", "", "CLORUTO 500M", 137.93)
            .AgregaConcepto(1, "TABLETAS", "", "SEDEPRON 250MG 10", 84.5)
            .AgregaImpuesto(CFDI.ComprobanteImpuestosTrasladoImpuesto.IVA, 0, 0)
            .AgregaImpuesto(CFDI.ComprobanteImpuestosTrasladoImpuesto.IVA, 16, 22.07)
            .subTotal = "488.50"
            .total = "488.50"
            .folio = 1
            .serie = ""
        End With
        'crea el motor usando los certificados del demo del SAT
        Dim mCFDI As New CFDI.MotorCFDI( _
                                        "D:\FE\Certif_PACyEmisor\emisor.cer", _
                                        "D:\FE\Certif_PACyEmisor\emisor.key", _
                                        "a0123456789", "D:\FE\Test\CFDI")
 
        'agrega el comprobante al motor
        mCFDI.Comprobantes.Add(micomprobante)
 
        'revisa el resultado del procesamiento de comprobantes
        Dim resultado As CFDI.ResultadoProceso = mCFDI.ProcesarComprobantes(True, False)
        If resultado.Errores Then
            For Each c1 As CFDI.Comprobante In resultado.ComprobantesNoGenerados
                Console.WriteLine(c1.ErrorGeneracion)
            Next
            Console.ReadLine()
        Else
            Process.Start(mCFDI.DirectorioDestino)
            Console.WriteLine("termino")
        End If
 
End Sub

Los archivos CER y KEY los puedes descargar de http://www.sat.gob.mx/sitio_internet/asistencia_contribuyente/principiantes/comprobantes_fiscales/66_19430.html


y el validador para los archivos CFDI esta en : https://www.consulta.sat.gob.mx/sicofi_web/moduloECFD_plus/ValidadorCFDI/Validador%20cfdi.html

lunes, diciembre 27, 2010

Could not load file or assembly 'ChilkatDotNet2, Version=9.0.8.0, Culture=neutral, PublicKeyToken=eb5fc1fc52ef09bd' or one of its dependencies. Se ha intentado cargar un programa con un formato incorrecto."

Este mensaje se da cuando en visual studio esta seleccionada la opcion de ANY CPU como arquitectura de nuestra aplicacion

image

para usar la libreria CFD.NET es necesario elegir x86 o x64 y tomar como referencia las DLL’s correspondientes.
Para cambiar la arquitectura del proyecto en VS2008 sigue estos pasos:

Elige la opcion de configuracion

image

Selecciona la opcion para crear una nueva configuracion

image

Selecciona x86 o x64 y da clic en el boton OK

image

por ultimo cierra la ventana de administracion de configuracion y tu proyecto ha quedado listo para compilar en la arquitectura seleccionada. ahora solo asegurate de hacer referencia a las DLL’s adecuadas para la arquitectura seleccionada y el error debe desaparecer.

jueves, diciembre 23, 2010

How To : Modificar el formato PDF para que aparezcan los datos de informacion aduanera

Una vez que se agregan los datos de informacion aduanera a los conceptos es necesario modificar el formato PDF para que aparezcan, edita el archivo .REPX, agregando las etiquetas del nodo Concepto_InformacionAduanera

image

Este es el resultado

image

lunes, diciembre 20, 2010

CFD.NET 1.3 , ACTUALIZACION OBLIGATORIA!!!!

Se les notifica que al genera el reporte mensual se presenta por error el RFC del EMISOR en lugar del RECEPTOR, es obligatorio que actualicen la libreria antes de generar archivos de reporte mensual.

jueves, diciembre 16, 2010

How To : Examinar el numero de serie del certificado (archivo .cer)

Para examinar el numero de serie del archivo .CER que nos proporciona el SAT, a partir de la version 1.2.6 se incluye una nueva clase llamada CertificadoDigital esta clase lleva un constructor que recibe como parametro la ruta fisica del archivo CER.

image

Una vez creada la instancia podemos acceder a algunas propiedades de uso comun.

image

domingo, diciembre 12, 2010

How To : Agregar informacion adicional a la impresion del CFD en los conceptos

Para esas ocasiones en que se requiere imprimir informacion adicional en la seccion de conceptos en el PDF que entregamos al cliente, la libreria CFD.NET,  a partir de la version 1.2.5 permite agregar hasta 5 datos adicionales al concepto por medio de las propiedades ImpresionPDF1, ImpresionPDF2, ImpresionPDF3, ImpresionPDF4 e ImpresionPDF5.

 image

Una vez agregados los datos al concepto, debes editar el formato (archivo .REPX) con el editor de formato que viene en el paquete de la libreria CFD.NET para la generacion de comprobantes fiscales digitales.

Modifica la propiedad Data Source’s Schema especificando el archivo .pdf.xml

image

image

Una vez seleccionado el archivo .pdf.xml te deben aparecer en el listado del nodo Comprobante_Conceptos, los campos ImpresionPDF1, ImpresionPDF2, ImpresionPDF3, ImpresionPDF4 e ImpresionPDF5

image

Arrastra los que requieras mostrar al area de detalles en el editor del formato .repx y genera de nuevo tu factura, ahora aparecera la informacion en el area de conceptos

image

 

IMPORTANTE: El nodo donde se encuentran los datos ImpresionPDF es el Conceptos_Concepto

image

 

image