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.

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.

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!
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
Esto dara como resultado que el archivo XML generado contenga ese fragmento en el nodo Addenda
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

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.

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 :
- GENERACION
Ahora si se especifican las rutas de archivo en el comprobante, el motor generara en esas ubicaciones los archivos
Ademas en el motor esta la opcion de omitir la generacion de los archivos de sello y cadena original

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”
![]()
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
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 CFDIDim 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 SATDim 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 motormCFDI.Comprobantes.Add(micomprobante)
'revisa el resultado del procesamiento de comprobantesDim 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)
NextConsole.ReadLine()
ElseProcess.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
Este mensaje se da cuando en visual studio esta seleccionada la opcion de ANY CPU como arquitectura de nuestra aplicacion
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
Selecciona la opcion para crear una nueva configuracion
Selecciona x86 o x64 y da clic en el boton OK
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.
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
Este es el resultado

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.
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.
Una vez creada la instancia podemos acceder a algunas propiedades de uso comun.

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

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

Cuando haces referencia a la libreria CFD para la generacion de comprobantes fiscales digitales en la facturacion electronica desde un proyecto de visual studio 2010, compilando con el framework 4.0, es probable que te aparezca el mensaje :
Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.
Esto es porque falta agregar un parametro de configuracion que permita la compatibilidad con versiones anteriores del framework. Esto se logra modificando el archivo .config de la siguiente manera:
http://devonenote.com/2010/08/mixed-mode-assembly-error-after-upgrading-to-dotnet-4-0/
Acabo de hacer publica la version 1.2 del CFD.NET, en esta version ya se considera el cambio de encripcion MD5 a SHA1 en los comprobantes generados a partir del 1 de Enero de 2011.
Internamente lo que sucede es que cuando el motor detecta un comprobante con fecha anterior al 1 de Enero de 2011, aplicara la encripcion MD5 para el sello digital, si el comprobante tiene fecha igual o superior al 1 de Enero de 2011 entonces generara el sello digital con encripcion SHA1.
Esto es completamente transparente, lo unico que necesitas es actualizar la libreria en tus proyectos y listo!
Para formatear la cantidad de decimales incluidos en los valores del comprobante fiscal, se agregaron las propiedades
La manera de usarlos es: ANTES de agregar cualquier valor al comprobante establecer la manera en que se debe actuar sobre las cantidades
El codigo anterior se encargara de que cualquier cantidad que la libreria maneje, sea REDONDEADO a 2 posiciones decimales, y aparezca con 2 posiciones despues del cero en los archivos XML generados.
En el caso de que requieras agregar informacion aduanera a los conceptos del comprobante fiscal debes usar la coleccion Items del concepto de la siguiente manera:
Con versiones anteriores a la 1.1.12
Con versiones a partir de la 1.1.12
Esto generara la informacion requerida en el xml y a partir de ahi en el reporte mensual.
Es un caso comun que ademas de la informacion incluida en el XML del comprobante fiscal digital, requieras incluir otro grupo de datos a la hora de generar el PDF. Pues bien, a partir de la version 1.1.10 el comprobante incluye una propiedad llamada DatosImpresion esta propiedad es de tipo hashtable asi que te permite agregar una lista de “nombres-valor” que seran convertidos a elementos XML en el archivo que servira como origen de datos a la hora de generar el PDF.
Bueno … y entonces como se agregan estos datos a la impresion?
Supon que requieres agregar la direccion de envio del producto, estos datos no forman parte de la especificacion del SAT asi que tus opciones son:
en este post, me enfocare en la segunda ya que la integracion de datos a la addenda depende enteramente de tus aplicaciones, asi que sin mayot preambulo aqui van los pasos…
PASO 1: Definicion de datos
Para agregar la informacion de la direccion de envio, le agrego el identificador y el valor a la propiedad DatosImpresion de la siguiente manera
Solo debes recordar que esto se traducira a nodos XML asi que el identificador es sensible a mayusculas. DomicilioEnvio NO es lo mismo que domicilioenvio una vez agregada esta informacion necesitas ejecutar el metodo ProcesarComprobantes para generar el archivo con terminacion .pdf.xml que sera usado en el siguiente paso.
El motor ha creado un elemento XML llamado Impresion y dentro de este, informacion que estara disponible para la generacion del PDF, incluidos los datos que acabamos de especificar.
PASO 2: Modificacion del REPX
Debes editar el archivo .REPX para que tome en cuenta la informacion que sera enviada (en este caso DomicilioEnvio) asi que abre el archivo .REPX que se encuentra en tu directorio de ejecucion de la aplicacion o el directorio especificado en la propiedad compartida CFD.Globales.DirectorioRecursosXSD
Una vez que abres el archivo con el editor de formato, debes ir a la propiedad DataSource’s Schema
Y seleccionar el archivo generado en el paso anterior
Una vez que se asigno el archivo como esquema de datos, aparecera disponible la propiedad DomicilioEnvio
Para incluirla en el reporte solo hay que agregar una etiqueta desde el toolbox
Dando un clic en el smarttag, aparece el editor de la etiqueta, modifica la propiedad DataBinding para que tome el valor de la propiedad DomicilioEnvio
Listo, ahora si puedes generar tus pdf’s y la informacion que envies como DomicilioEnvio sera mostrada en la etiqueta.
| ANTES | AHORA |
Asi o mas facil? Espero sus comentarios!
Aqui les dejo unos recursos para programadores que pueden ser de utilidad, por no decir que son un MUST-READ
http://amazedsaint.blogspot.com/2010/09/7-freely-available-e-booksguides-i.html