Y sigo con las reformas del SAT para faturación electrónica, ya que ahora seguramente tendremos muchos archivos xml, pero cada quien llama sus archivos como mejor conviene a su control interno, para para uno el nombre muchas veces no dice gran cosa y peor aún si necesito buscar un factura en particular, tengo que revisar todos o cuando menos gran parte de los archivos hasta dar con el que necesito, una tarea que sólo de pensarla ya me está dando hambre.
Una idea que inicialmente fué propuesta por @pixelead0 y he ido programando a través de varios post siendo la última propuesta Administrar recepción de CFD/CFDI (update v1.1), sin embargo finalmente he decidido crear un programa con funcionalidad completa que realiza lo siguiente:
RENAMECFD - Renombra archivos de CFD ------------------------------------ ### Descripción Este script lee un CFD con nombre archivo.xml para después renombrarlo de la siguiente manera: Fecha_RFCemisor_serie_folio_subtotal_iva_total.xml Donde: * Fecha: Fecha en que se generó el comprobante * RFCemisor: RFC de quien emite el cfd/cfdi * Serie y Folio: Numero de Serie y folio de la factura * Subtotal, iva, total: Importes de la factura. El nombre del xml se proporciona desde la línea de comandos, de tal forma que se puede usar en algún otro script para automatizar el proceso. Se permite indicar archivos con algún path distinto a donde se encuentra el script Se aceptan comodines para procesar grupos de archivos (ej *.xml) Puede leer tanto archivos xml correspondientes a CFD y CFDi
Pero además lo he liberado como software libre y también he creado un repositorio en Github para quien quiera meterle mano!
Para clonarlo usando git hacer lo siguiente
$ git clone https://github.com/rctorr/FacturaElectronica.git Cloning into 'FacturaElectronica'... remote: Counting objects: 18, done. remote: Compressing objects: 100% (15/15), done. remote: Total 18 (delta 3), reused 16 (delta 1) Unpacking objects: 100% (18/18), done. $
Para ejecutarlo desde linux podría ser así
$ cd FacturaElectronica $ ./renamecfd.py Usage: renamecfd.py [opciones] archivocfd.xml|*.xml Options: -h, --help muestra este mensaje de ayuda y termina -v, --verbose Va mostrando la lista de los archivos modificados $
Ahora si prefieres descargarlo en zip puedes dar click aquí (zip).
Espero que le sea útil a cuando menos uno de ustedes!
¿Cómo ejecutar el programa en windows?
—
Antes que nada agradecer el tiempo que algunos visitantes se toman para escribir algunas buenas observaciones y una de ellas es el título de esta sección.
¿Qué esperas que suceda al dar doble click?
Los usuario de windows comentan que sería bueno tener un exe para sólo hacer doble click, sin embargo un exe del programa tal como está posiblemente no sea de mucha utilidad, lo siento!. La razón es que el programa/script renombracfd.py
está pensado para ser usado desde una ventana de comandos o algún otro programa que haga uso de el para automatizar algunas tareas.
Entonces en la medida de lo posible me podrían ayudar a dar una respuesta a esta pregunta comentando que es lo que sería de utilidad para los usuarios de windows o incluso para cualquier sistema operativo al dar doble click.
Si puedes responder por acá https://github.com/rctorr/FacturaElectronica/issues/1 me ayudarías mucho, si no, puedes usar los comentaros de más abajo.
Gracias!
Mientras eso sucede voy con…
Ejecutando el script en windows
Esta es la opción rápida (según yo!) para que los usuarios de windows puedan aprovechar el programa siguiendo los siguientes pasos para la primera ves que lo ejecutes:
- Descarga el intérprete de python que es necesario para que el programa funcione. Puedes dar click aquí.
- Dar doble click sobre el archivo python-2.7.6.msi que has descargado, sigue las instrucciones hasta concluir con la instalación. Esto crea la carpeta C:\Python27, si tu unidad principal es la C:
- Luego crea una carpeta llamada
cfdi
en el escritorio - Coloca una copia del programa
renamecfd.py
dentro de la carpetacfdi
- Coloca también una copia de todos los archivos xml que necesites renombrar en esta misma carpeta
- Para usuarios de WinXP
- Da click en el menú inicio => ejecutar => escribe: cmd y presionar enter. Esto abre una ventana de comandos.
- Hay que cambiarse a la carpeta
cfdi
escribiendo:cd Escritorio\cfdi
y presionando enter.
- Para usuarios de WinVista, Win7 y posiblemente Win8
- Da click en menú inicio => En «Buscar programas y archivos» escribe: cmd y presiona enter.
- Hay que cambiarse a la carpeta
cfdi
escribiendo:cd Desktop\cfdi
y presionando enter.
- Para ejecutarlo escribir:
C;\Python27\python renamecfd.py *.xml
y presionar enter
Listo, todos tus archivos xml en la carpeta cfdi
renombrados
OJO: Para futuros usos sólo tienes que realizar lo siguiente:
- Abre la carpeta
cfdi
del escritorio y borra todos los archivos xml que no necesiten ser renombrados. - Coloca una copia de todos los archivos xml que necesites renombrar en esta misma carpeta
- Para usuarios de WinXP
- Da click en el menú inicio => ejecutar => escribe: cmd y presionar enter. Esto abre una ventana de comandos.
- Hay que cambiarse a la carpeta
cfdi
escribiendo:cd Escritorio\cfdi
y presionando enter.
- Para usuarios de WinVista, Win7 y posiblemente Win8
- Da click en menú inicio => En «Buscar programas y archivos» escribe: cmd y presiona enter.
- Hay que cambiarse a la carpeta
cfdi
escribiendo:cd Desktop\cfdi
y presionando enter.
- Para ejecutarlo escribir:
C:\Python27\python renamecfd.py *.xml
y presionar enter
Listo, tus nuevos archivos xml en la carpeta cfdi
renombrados.
Como obtener la lista de todos los archivos renombrados
Obtener la lista de los archivos renombrados podría ser necesaria por varias razones (cada quien que se invente las suyas hehe!) y el programa permite mostrar la lista de los archivos que va renombrando, así que lo que faltaría sería guardar esa lista en algún archivo txt para usarlo posteriormente.
Voy a partir que ya has realizado cuando menos el grupo de pasos que van del 1 al 7, si ya ejecutaste el 8, entonces borrar los archivos xml y vuelve a copiar los archivos que necesitas renombrar.
Entonces ahora realizas el paso 8 escribiendo el siguiente comando y presionando enter para ejecutarlo.
C:\Python27\python renamecfd.py -v *.xml > lista-de-archivos.txt
Ahora puedes abrir el archivo lista-de-archivos.txt
por ejemplo en calc o excel o notpad o write o word o algún otro programa para ver la lista de los archivos renombrados.
Finalmente…
¿Cómo ejecutar este script/programa en mac o linux?
Aquí hay varias alternativas, pero voy a describir la más simple para aquellos que son iniciados, para los tipo hackers clonen el repo de git y luego ya saben que hacer.
- Descarga un zip del programa desde aquí
- Descomprímelo en el escritorio, así que ahora tendrás una carpeta llamada
FacturaElectronica-master
- Copia en esta carpeta todos los archivos xml que requieras renombrar
- De alguna forma busca la manera de iniciar un terminal de comandos, un bash, una consola o algo que se le parezca.
- En la consola, hay que cambiar a la carpeta donde está el programa y los archivos xml
cd Desktop/FacturaElectronica-master <enter> o cd Escritorio/FacturaElectronica-master <enter>
usa una u otra línea, según se llame tu carpeta de Escritorio, dependerá del idioma y sistema operativo.
- Ejecutar el programa de la siguiente forma:
python renamecfd.py *.xml
lo anterior renombrar todos los archivos xml contenido en la misma carpeta donde está el programa.
Listo, a seguir siendo felices!
que tal , muy interesante tu program,a para renombrar archivos xml
solamente que el comun de la gente usamos windows todavia y ustedes estan con las opciones libres
no habra manera de que nos ayudaras a nostros y tuvieras una version para windows?
Hola Francisco!
Gracias por tomarte el tiempo de comentar, en realidad la idea de usar Python como lenguaje de programación es que funciona en windows, linux, mác y hasta tablets y/o smartphones, sólo que en el caso de windows hay que instalar primero el lenguaje Python (algo parecido a java) y posiblemente luego hacer algo más por ahi, algo a lo que estoy viendo los usuario de windows y mac no están muy acostumbrados, hummm! (pensando!)
Aprovechando tu disponibilidad, tu como usuario del programa ¿cómo tendría que ser el programa para que fuera práctico para ti?
En verdad gracias!
Salu2+
Saludos, este tipo de colaboraciones nos ayudan mucho, pero al no estar inmersos en el tema de programacion, nos apoyarias bastante si nos dieras las instrucciones de paso a paso de como ejecutar este script. o lo ideal si fuera un ejecutable donde pusieramos los xml en una carpeta, o que le indiquemos al programa donde se encuentran los archivos xml a renombrar
gracias, y sigo tratando de ejecutar el script
Hi Gonzaitamx!
Muchas gracias por tus comentarios, y muy ciertamente tienes razón está no he pensado en el usuario promedio que no es programador, aunque difícil no es, pero ciertamente una guía no estaría demás, así que trabajo en ello para que sea más útil.
Por otro lado si pueden colocar lo xml en la misma carpeta del programa y los puede procesar todos, o también podrías indicar otra carpeta, pero primero tienen que hacer funcionar el programa.
okok! primer paso… Como ejecutar el programa en windows, segundo paso hacer un exe!
Gracias en verdad por su tiempo!
Salu2+
si funciona como dices tambien para windows que tengo que hacer en mi equipo para ejecutar el archivo qeue nos compartes?
se me fue mas abajo mi comentario
aqui lo repito de nuevo
si funciona como dices tambien para windows que tengo que hacer en mi equipo para ejecutar el archivo que nos compartes?
Hola Francisco!
Listo he agregado las instrucciones!
Salu2+
estoy en mac, al abrir el archivo me abre la venta en IDLE y la primera parte del texto esta en rojo con la primera linea dice #!/usr/bin/env python, todavia no he encontrado en internet como ejecutar script, osea lo que sigue para hacer funcionarlo.
gracias por tu tiempo
Hola!
En mac es relativamente simple (no soy usuario de mac) pero veamos!
1. Tener una carpeta donde esté el programa renamecfdi.py
2. Colocar los archivos xml a renombrar en la misma carpeta
3. Abrir la aplicación de la terminal de comandos (o ventana de comandos)
4. Cambiarse a la carpeta donde está el programa y los xml, algo así como: cd Desktop/cfdi … pensando en que has creado una carpeta «cfdi» en el escritorio
5. Ejecutar el programa escribiendo: python renamecfdi.py *.xml
Nota 1: significa presionar la tecla ENTER
Nota 2: El lenguaje Python en MAC ya biene instalado (hasta donde se)
Nota 3: Sé feliz!
Espero sea de utilidad!
Salu2+
nota 4: sOY FELIZ
Ahora lo que voy a buscar es cambiar el orden del nombre que arroja, RFC
Haaa eso es simple, si puedes modificar el programa renamecfd.py en algún editor y miras en las líneas de la 109 a la 116 es donde se construye el nombre del archivo, si por ejemplo quieres que primero vaya el RFC entonces quedaría algo así:
—
nomFileXmlNew += self.atributos[‘rfc’]
nomFileXmlNew += ‘_’+self.atributos[‘fecha’]
nomFileXmlNew += ‘_’+self.atributos[‘serie’]
nomFileXmlNew += ‘_’+self.atributos[‘folio’]
nomFileXmlNew += ‘_’+self.atributos[‘subTotal’]
nomFileXmlNew += ‘_’+self.atributos[‘iva’]
nomFileXmlNew += ‘_’+self.atributos[‘total’]
nomFileXmlNew += ‘.xml’
—
ahora primero aparecería el RFC, luego la fecha y así!
Salu2+
ok gracias, eso es lo que estaba pensando y me lo confirmas, ahora tengo otra duda en los xml existe el rfc del receptor (quien compra) pero no veo diferencia en como agregarle esto:
un ejemplo de la parte que te comento dentro del xml:
<cfdi:Receptor rfc="IMC821202PH9"
como ves hasta donde esta receptor dice el RFC que necesito que tambien aparezca
se puede, o es mas complejo el cambio en el script?
gracias, nuevamente
Eso no lo consideré porque en teoría el receptor eres tu, ya sea persona física o moral…. hummmm! pero si eres contador tendrás muchos receptores y te gustaría poder clasificar por cliente… ¿cierto?
Pues ya he realizado un pequeño cambio, tendrás que bajar nuevamente el programa y el que tenías lo puedes desechar.
Ahora para hacer que aparezca el rfc del receptor al inicio del nombre del archivo lo tendrías que ejecutar algo así:
python renamecfd.py -r *.xml
de esta forma los nombres incluyen el rfc del receptor.
Puedes revisar algunos ejemplos aquí:
https://github.com/rctorr/FacturaElectronica
Salu2+
Gracias por tu ayuda, seguimos en el camino de mejorar, y con ayudas como esta es posible aligerar nuestro trabajo.
Para todos quienes preguntaron como ejecutar el programa, he agregados instrucciones para windows, linux y mac. Espero ayude a muchos poder usarlo.
Gracias por sus comentarios!
gracias totales My Lord rctorr (reverencia)
respondiendo tu pregunta yo como usuario del programa ¿cómo tendría que ser el programa para que fuera práctico para ti?
pues seria que al dar doble click al program en windows que me hiciera todo el proceso que tu describes progrmado en un .bat o algo asi bajo windows. si me doy a entender?
seria mas facil que estaa abriendo el msdos y ejecutar el comando bla bla bla
que todo se haga al dar doble click bajo windows
pero asi como lo explicas esta perfecto.
Hi Francisco!
jajaja me sonó a Lord DarkVader!
Muchas gracias por tus comentarios, creo que ese podría ser el siguiente paso, crear un bat (para windows) y un sh (para mac y linux)
Salu2+
pd. jajajaja!!! ya me siento todo un padagua!
padawan? tu ya eres un Jedi
“Vive el momento, no pienses; siente, utiliza tu instinto, siente La Fuerza”.
“El poder de un Jedi fluye de La Fuerza”.
palabras de yoda a Jedi rctorr
Houuuuuu! queriendo mover la laptop usando la fuerza!! …. plashhhhh! llegó al suelo! noooo! seguramente era la fuerza del lado obscuro! 😦
jajajajajajajaja! me sigo divirtiendo!
Muchas gracias Richard, eres mi sensei (master) y por todo tu apoyo, has ganado mas padawans.
Hola Alonso!
jajaja más padawas! ustedes si que me hacen pasar un buen rato!
Salu2+
Agregados algunos issues, que salieron al correrlo con mis xml.
https://github.com/rctorr/FacturaElectronica/issues
Hola Adan!
Esta es una gran participación, las mejoras que estas reportando son muy importantes, incluso veo que ya tienes hasta código, si puedes hacer push al github podemos incluso incluir tus mejoras.
Gracias mil
Salu2+
Hola rctorr
Primero, muchas gracias por el programa, no lo he podido hacer funcionar todabia, pero suena como una verdadera chulada
Quizá se deba a mi pobre programación, me peleo hasta con el EXCEL pero bueno, me esta dando un error, te lo transcribo (perdóname si no lo logro trascribir bien, estoy intentando ser cuidadoso)
C:\User\Admin\Desktop\CDFI>C:\Python27\python renamecfd.py *.xml
Traceback :
File renamecfd.py»,, line 164, in
main
File renamecfd.py»,, line 161, in main
xmlcfd.rename
File renamecfd.py»,, line 109, in rename
self.getatributos
File renamecfd.py»,, line 73, in getAtributos
self.atributos[‘serie’] = compatrib[‘serie’]
Key Error: ‘serie’
Sistema Operativo que uso
Win 8
¿Donde descarge esto?
https://github.com/rctorr/FacturaElectronica/archive/master.zip
Saludos
Hola Aguz!
Gracias por compartir tu experiencia con el programa y sin más te comento que ese error es porque el programa asume que todos los xml incluyen serie y folio, cuando el Anexo 20 define que para un cfdi v3.2 (que es la actual para facturación electrónica) la serie y el folio pueden ser opcionales.
Un posible solución es que lograras ubicar cuales son los xml que no tienen la serie y folio de momento.
La otra opción es que nos esperaras un poco (ver el comentario antes del tuyo) ya que un colega programador el día de hoy anotó eso que mencionas como una mejoras por hacer al programa.
Si te es posible participar agregando más observaciones o mejoras puedes mirar acá https://github.com/rctorr/FacturaElectronica/issues
Salu2+
Hola, me quedo impresionado por todo lo que han creado saben yo tengo ese problema ahora basicamente solo necesito renombrar archivos en esta forma RFC_SERIEFOLIO, no soy un programados pero alguien que por favor me ayude o que me guie en este camino.
Hola Jorge
Eso que necesitas, es relativamente sencillo, tienes que abrir el archivo renombracfd.py en un editor y luego ir a la línea 115
nomFileXmlNew += ‘_’+self.atributos[‘fecha’]
y agregar un símbolo de # al inicio de la línea, esto lo que hace es inhabilitar esa línea y por la misma razón en este caso el dato de fecha ya no se incluiría, quedando así:
# nomFileXmlNew += ‘_’+self.atributos[‘fecha’]
Esto realizas para cada línea entre la línea 115 y la línea 121
Si entre SERIEFOLIO no necesitas una separación, la línea original de folio es:
nomFileXmlNew += ‘_’+self.atributos[‘folio’]
cambiaríaa algo como:
nomFileXmlNew += self.atributos[‘folio’]
notar que se eliminó el caracter «_» (quión bajo)
Y listo es todo, se guarda el archivo y se ejecuta nuevamente.
Salu2+ y gracias por comentar!
Hola rctorr
Realmente hoy puedo decir que soy feliz con las instrucción que me diste realice dicha edición, luego agregue la rutina de pixelead0 de post anteriores para xml que no tienen ni serie ni folio y quedo lista la solución que estaba necesitando. Realmente te agradesco muchisimo todo el apoyo y que se preocupen por mejorar la vida de todos.
NO PUDE 😦 ME MANDAR ERROR…. este es el link de la imagen, que paso? que hice mal.
https://drive.google.com/file/d/0BzFsD1jq5euyeGE4a0FPWTd3c2c/edit?usp=sharing
saludos
Buenas Tardes, he corregido, con las modificaciones, pero ahora me da este error el cual les transcribo
Traceback (most recent call last):
File «renamecfd.py», line 174, in
main(sys.argv[1:])
File «renamecfd.py», line 171, in main
xmlcfdi.rename(options.verbose,options.receptorrfc)
File «renamecfd.py», line 118, in rename
self.getAtributos()
File «renamecfd.py», line 104, in getAtributos
self.atributos[‘rfc’] = emisor[0].getAttribute(‘rfc’)
IndexError: list index out of range
Hola Beto!
Pareciera que algún xml no tiene RFC o si el error aparece luego luego, entonces si es un problema de código, podrías enviarme el archivo renamecfd.py a rictor[at]cuhrt.com ?
O puedes pegar las línea de la 100 a 110 aprox
Salu2+
Buenas tardes, estoy tratando de usar este programa pero me aparece este error:
File «renamecfd.py», line 91
print «El archivo xml no es una versión válida de cfd!»
Revise todos los archivos y quite todos los que no tenian serie y/o folio
Espero me puedan ayudar
Ademas de esos dos renglones tambien me pone este:
SyntaxError: invalid syntax
se me paso ponerlo antes
gracias
Hola Miguel!
Creo que has instalado la versión 3.x de python, intenta desinstalar esa versión e instala la versión 2.7 de python!
Salu2+
Hola, que tal, no esta el vinculo para bajar el programa. gracias
Hola Dany!
Este comentario es muy muy atrasado lo se, pero si está el vínculo y el acceso a proyecto en git
Con cual link has tenido el problema?
Salu2+
Que tal.. buen script y de mucha ayuda. le he realizado algunos cambios para que te de un nombre asi: RFCemisor_Fecha_tipoDeComprobante_receptorRFC_folio.xml. (por la recepción de notas de crédito). Saludos.
Hola Diego!
Aca un poco atrasado con las repuestas, pero woooww que bien con la modificación! pero ¿como podrían tener los demás acceso a tu modificación?
Salu2+
Muy buen aporte, tendras algun programita para renombrar los recibos de nomina ya que tambien estan en xml
Hola Jorge!
Yo no he trabajado con recibos de nómina, pero a nivel programación debería de ser algo similar, sólo que no que datos son los que se deberían de mostrar.
No prometo nada, pero si me ayudas proporcionando información y unos xml de muestra podría realizar algo 😉
Por cierto, que sistema operativo usas?
Salu2+
Hola… Gran programa
Lo probé en diferentes OS y funciona excelente pero marco error en Windows 7 Ultimate:
«WindowsError: [Error 5] Acceso denegado»
Alguna posible solución?
Hola Samuel!
Gracias por corroborar el funcionamiento!
Ese error en Win7 Ultimate es algo extraña Acceso denegado .. ¿a que está denegando el acceso?
Sorry necesitaría un poco más de información!
Salu2+
hola que tal me ha sido de mucha utilidad, pero quiero renombrar el cfd con otros datos como lo hago soy nuevo en python
Hola Javier!
Creo que voy un poco tarde con los comentarios, pero pienso que más vale tarde que nunca
No se si todavía estés interesado en realizar modificaciones al código y bienvenido al mundo de python, en verdad es muy simple.
¿Cuáles son los datos que quieres incluir? ¿elige uno? y de ahí comenzamos!
Salu2+
Que tal amigo, muy buena tu utileria, pienso que sería mejor renombrar con el folio fiscal UUID, habrá manera de elegir algún otro dato o poner ambos RFC de emisor y receptor, porque en los CFDI de nóminas lo que interesa es el del Receptor.
Conocerás algún programa que pueda poner los datos de muchos XML en tablas o en excel, para revisar los requisitos de forma más visual.
Hola Ariosto!
Vaya tu petición del UUID está acumulando votos para ser una capacidad nueva a desarrollar 😮
Según recuerdo si se podía agregar ambos rfcs, hay una opción al momento de ejecutar que si lo agrega, en este momento no lo recuerdo 😦
En este mismo artículo se muestra como exportar los datos para crear un archivo .csv para que puedas importar la información en una hoja de cálculo (como Calc de LibreOffice o Excel de MicrosoftOffice)
Salu2+
Que tal amigos, regresando otra vez por aqui. Me pueden apoyar, como puedo incluir el UUID en el nombre del archivo (es el folio fiscal asignado por el SAT). Les agradezco de antemano su valiosa ayuda.
Hola Gozaita!
Hooo, eso es algo interesante y muy válido, desafortunadamente no lo hemos considerado, así me parece que tendría que ser una adición para la siguiente versión.
Una disculpa ya que dejado un poco abandonado el proyecto, pero ya estoy cuando menos respondiendo los comentarios!
Si sabes un poco de programación te invito a participar en el proyecto y realizar la modificación para incluir el UUID, esto es software libre, así que todo el código fuente está disponible, bueno es una posibilidad! jejeje!
Salu2+
Hola RCTORR, sabras si existe alguna restriccion para usar este codigo en una máquina win 64 bits?
Hola Jorge!
No existe esa restricción, yo lo he usado en una laptop con linux 64bits!
Si hay algún problema debiera ser por la versión de python instalada que no sea la relacionada con el sistema operativo que estés usando.
Salu2+
Listo ya quedo si era la versión
Muchas gracias¡¡¡
Hola a todos, muy buena aportación!
Pero.., como todo siempre habrá competencia 🙂 , por eso decidí desarrollar una app,
para que puedan renombrar sus CFDIS (incluyendo el UUID) y agruparlos por carpetas (RFC Emisro y/o RFC Receptor)
Nos encantaría que la probaran, nada pierden con intentarlo.
http://woodpeckercfdi.blogspot.mx/2014/12/renombrar-xml-de-cfdi-32.html
(cero programación, corre sobre java entonces solo debes asegurarte de tenerlo instalado)
(Daremos continuidad al mantenimiento y desarrollo de nuevas funcionalidades)
Saludos a todos.
Hola Woodpecker!
Hey! vaya, nunca imaginé una competencia y menos en java, aunque veo que sólo has publicado el ejecutable por decirlo así y entonces la pregunta es ¿vas a publicar el código fuente? eso sería bueno, ya que así cualquiera podría apoyar con el desarrollo, mejoras y cualquier idea que alguien más se le ocurra 😀
Salu2+
Wow, estas ultimas semanas hemos mejorado nuestro «plumaje» gracias a todos, ahora estamos estrenando la versión 1.3.0 no duden es descargara y darnos sus comentarios, nuestra misión es hacer les la vida mas facil para controlar sus CFDI.
http://woodpeckercfdi.blogspot.mx/2014/12/renombrar-xml-de-cfdi-32.html
Saludos a todos.
Hola Woodpecker!
Que bien que estés agregando más funcionalidades a tu versión, yo te dejé un comentario por allá en tu blog en que podríamos desarrollar una versión conjunta y tener tanto la versión en java como la versión en python, por tal motivo te he preguntado ¿de donde puedo bajar el código fuente de tu aplicación para poder revisarlo y realidad un diseño colaborativo?
Salu2+
hola! me podrías ayudar? dice que no encuentra la ruta, ya lo intenté muchas veces y no me sale T.T Te lo agradecería mucho tengo muchoso xml q renombrar T.T
Hola Faby MF!
Bueno, sería bueno saber que sistema operativo usas!
Salu2+
Soy un lego en la materia, pero con la explicación que das, hasta yo pude hecharlo andar. Muchas gracias!!!
Hi Carlos!
que gusto que hayas logrado hacerlo funcionar ;), me podrías comentar que sistema operativo usas?
Salu2+
Hola que tal excelente programa yo en lo personal no le quitaria nada despues de muchos apuros ya pude beneficiarme de tu aportacion gracias por preocuparte por tu projimo Dios te bendiga y sigue utilizando este don que Dios te dio.
vay saludos.
Hola Juan!
Sorry por esos muchos apuros, pero si has logrado ejecutarlo creo que has adquirido algunas nuevas habilidades que te serán de gran ayuda en estos tiempo donde todo es digital.
Gracias por compartir tus experiencias y por los buenos deseos!
Salu2+
Gracias me salvaste la vida y mis ojos despues de andar renomrbando muchos xml besos!!
Hola!
pensé que posiblemente esta herramienta ya no era necesaria 😮
gracias por compartir 😉
Hola como puedo hacer para agregar el uuid al nombre del archivo final?
Hola Rodolfo!
Pues tenía algunos meses, como unos 10 que no revisaba el código del programa y desafortunadamente no se ha obtenido el atributo uuid que es generado después del timbrado por el PAC y que además es el folio de cada factura.
Esto se puede convertir en un solicitud para agregar ese atributo para poder ser colocado en el nombre o generar un resultado incluyéndolo.
No puedo prometer nada, pero haré lo posible por agregarlo lo más pronto posible.
Salu2+
Rodolfo!
Lo que sucede es que primero hay que obtener el atributo a partir del archivo y luego ya estará disponible para poder integrarlo.
El detalle está en obtener el uuid desde el archivo, ya que hay que entender la gerarquía del xml, te lo platico por si te quieres aventurar ;). En verdad no es complicado, sólo es entender la lógica y listo.
Yo espero poder dedicarle un tiempo el fin de semana
Salu2+
Hola Rodolfo ya he agregado una opción para agregar el UUID por si aún te es de utilidad!
Salu2+
hola eh tratado con varias pruebas modificando el codigo que proporcionaste y no logro incluir el uuid ya lo modifique en el cua inclui fecha hora rfc nombre emisor rfc nombre receptor impuesto iva total descuento si es ingreso egreso version eh incluso una parte donde me dice que es nomina pero no eh lograo incluir el uuid quisiera saber si no has logrado incluirlo todavia gracias
Hola Enrique
Bueno, como le decía a Rodolfo, había primero que obtener el atributo de la sección del complemento y luego del tfd para luego agregarlo al nombre.
Como el UUID es muy largo es conveniente que sea opcional, aunque se que en realidad este es el verdadero folio de cada CDFi, pero para obtener el UUID en el nombre tendrás que usar la opción -U antes de cada nombre(s).
También he agregado un ejemplo a la documentación o ayuda.
Salu2+ espero te sea de utilidad!
hola rctorr donde puedo ver o bajar el ejemplo para probarlo ya que no lo encuentro gracias
Hola Enrique
Entra sl sitio del proyecto acá https://github.com/rctorr/FacturaElectronica y hay un botón para descargar en zip.
Salu2+
ok gracias rctorr lo estoy tratando de bajar gracias lo pruebo espero nos sigas ayudando a todos los que necesitamos este tipo de ayuda
pregunta perdí algunas facturas del mes de junio y julio en el sistema sae 5.0, tengo los pdf y xml, de esas facturas, tu me puedes ayudar para que con esos archivos jalar la informacion a excel y luego importarlos a la base de datos de sae.
necesito recuperar esa informacion.
mi correo es agcantonio@yahoo.com.mx y si me puedes mandar algun correo o tel. a donde llamarte, gracias.
saludos.
Hola Antonio!
Yo creo que si se puede, te envío email
Salu2+
buenas tardes muchas gracias por la gran ayuda que nos brindas! solo tengo un pequeño problema ya que no encuentro el programa renamecfd.py dentro de mi disco local «c». cuento con windows xp. me podrías deciar cual es el motivo, le agradecería mucho
Hola Denisse
En el artículo antes de iniciar con la explicación para hacerlo funcionar en windows hay un link para descargar un zip, descargalo, los dscomprimes y listo puedes continuar con el tutorial.
Salu2.
Hola Rctorr:
Agradezco mucho tu ayuda, pero al correr el script me tira un error, alguna idea de como solucionarlo?:
C:\Users\instal\Desktop\cfdi>C:\Python27\python renamecfd.py *.xml
Traceback (most recent call last):
File «renamecfd.py», line 311, in
main(sys.argv[1:])
File «renamecfd.py», line 307, in main
xmlcfd.rename(options)
File «renamecfd.py», line 186, in rename
self.getAtributos()
File «renamecfd.py», line 95, in getAtributos
xmlDoc = minidom.parse(self.nomFileXml)
File «C:\Python27\lib\xml\dom\minidom.py», line 1918, in parse
return expatbuilder.parse(file)
File «C:\Python27\lib\xml\dom\expatbuilder.py», line 924, in parse
result = builder.parseFile(fp)
File «C:\Python27\lib\xml\dom\expatbuilder.py», line 207, in parseFile
parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 1, column 0
De nuevo agradezco mucho tu apoyo y por compartir tu trabajo con todos nosotros.
Saludos.
Hola Sergio!
He revisando varias veces el error que has publicado y me parece que el error se debe a que hay un archivo xml que no está bien formado o que no es una factura o que no cumple con los requerimientos o algo así, necesitaría saber cual es el archivo o si tienes archivos xml que no sean facturas.
No se que tan problemático sea que pudiera obtener una copia de la carpeta de los xml que quieres renombrar para hacer pruebas y poder corregir el problema, si es así me lo puedes enviar a rictor@cuhrt.com o si te animas puedes publicar el error en https://github.com/rctorr/FacturaElectronica/issues/new agregando como adjunto un zip de tu carpeta.
Lo que tu puedes hacer es tratar de encontrar el xml que no es una factura o que tienen problemas y pasarlo a otra carpeta o ir quitando de uno por uno si es que no son demasiados.
Salu2+
Hola buen dia, no logro tener un scrip con la funciones que necesito son las siguientes, rfcreceptor_razonsocialreceptor_rfcemisor_razonsocialemisor_folio_fecha; si alguien me puede ayudar se lo agradeceria mucho, gracias
Hola Alexis!
Si pudieras colocar las líneas que has modificado para poder ayudarte un poco mejor y si no te urge por la noche podría dedicarla unos minutos más ya que en este momento salgo a dar un taller.
Salu2+ y ánimo, si se puede!
Hola ya logre hacerlo pero solo me falta que me aparesca el rfc del emisor no encuentro la falla, si me podrias ayudar gracias…
if version == «1.0» or version == «2.0» or version == «2.2»: # CFD
receptor = comprobante.getElementsByTagName(‘Receptor’)
emisor = comprobante.getElementsByTagName(‘Emisor’)
impuestos = comprobante.getElementsByTagName(‘Impuestos’)
elif version == «3.2» or version == «3.0»: # CFDI
receptor = comprobante.getElementsByTagName(‘cfdi:Receptor’)
emisor = comprobante.getElementsByTagName(‘cfdi:Emisor’)
impuestos = comprobante.getElementsByTagName(‘cfdi:Impuestos’)
impuestos2 = comprobante.getElementsByTagName(‘cfdi:Traslado’)
# complemento = comprobante.getElementsByTagName(‘cfdi:Complemento’)
# Se obtiene el elementos correspondiente al timbre emitido por el PAC
timbre = comprobante.getElementsByTagName(‘tfd:TimbreFiscalDigital’)
# Se obtiene el valor del atributo UUID
self.atributos[‘UUID’] = timbre[0].getAttribute(‘UUID’)
else:
print
print «El archivo xml no es una versión válida de cfd!»
print
self.atributos[‘rfc’] = receptor[0].getAttribute(‘rfc’)
self.atributos[‘nombre’] = receptor[0].getAttribute(‘nombre’)
self.atributos[‘Rfcreceptor’] = receptor[0].getAttribute(‘rfc’)
self.atributos[‘nombrereceptor’] = receptor[0].getAttribute(‘nombre’)
self.atributos[‘RFCemisor’] = emisor[0].getAttribute(‘RFCemisor’)
self.atributos[‘nombre’] = emisor[0].getAttribute(‘nombre’)
self.atributos[‘RFCemisor’] = emisor[0].getAttribute(‘RFCemisor’)
self.atributos[‘nombreemisor’] = emisor[0].getAttribute(‘nombre’)
if impuestos[0].getAttribute(‘totalImpuestosTrasladados’)==»»:
try:
self.atributos[‘iva’] = signo+impuestos2[0].getAttribute(‘importe’)
except:
self.atributos[‘iva’] = ‘0’
else:
self.atributos[‘iva’] = signo+impuestos[0].getAttribute(‘totalImpuestosTrasladados’)
self.atributos[‘version’] = version
return self.atributos
def rename(self, options):
«»» Renombra el archivo xml de la forma:
_Rfcreceptor_nombrereceptor_RFCemisor_nombreemisor_folio_fecha.xml
Regresa el nuevo nombre del archivo
«»»
self.getAtributos()
nomFileXmlNew = os.path.dirname(self.nomFileXml)
# Se separa la extension del nombre del archivo
nomFileOld = os.path.splitext(self.nomFileXml)
#Nombres de los archivos con extension pdf y xml
nomFilePdfOld = nomFileOld[0]+’.pdf’
nomFileXmlOld = nomFileOld[0]+’.xml’
nomFileXmlNew += os.sep if len(nomFileXmlNew) > 0 else «»
if options.receptorrfc: # Se adiciona sólo si la opción -r está incluida
nomFileXmlNew += ‘_’+self.atributos[‘Rfcreceptor’]
nomFileXmlNew += ‘_’+self.atributos[‘nombre’]
nomFileXmlNew += ‘_’+self.atributos[‘rfc’]
nomFileXmlNew += ‘_’+self.atributos[‘nombrereceptor’]
if options.RFCemisor: # Se adiciona sólo si la opción -e está incluida
nomFileXmlNew += ‘_’+self.atributos[‘RFCemisor’]
nomFileXmlNew += ‘_’+self.atributos[‘nombre’]
nomFileXmlNew += ‘_’+self.atributos[‘RFCemisor’]
nomFileXmlNew += ‘_’+self.atributos[‘nombreemisor’]
nomFileXmlNew += ‘_’+self.atributos[‘folio’]
nomFileXmlNew += ‘_’+self.atributos[‘fecha’]
Hola Alexis!
mira, creo que el problema es en estas líneas…
cambialo por:
Espero resuelva tu problema!
Salu2+
Hola que tal, me sale este error al poner esas 2 lineas, gracias.
Traceback (most recent call last):
File «renamecfd.py», line 335, in
main(sys.argv[1:])
File «renamecfd.py», line 331, in main
xmlcfd.rename(options)
File «renamecfd.py», line 217, in rename
nomFileXmlNew += ‘_’+self.atributos[‘rfc’]
KeyError: ‘rfc’
Presione una tecla para continuar . . .
Hola Alexis!
El error es porque al atributo ‘rfc’ para el emisor no existe en el xml, lo que se me hace extrañoya que es un atributo obligatorio, a menos que tengas CFDi’s que no sea facturas, es así?
Si estás seguro que todos tus archivos son facturas, entonces envíame tu archivo completo a rictor [at] cuhrt.com.
Salu2+
Si todas son facturas, en que parte te mando el archivo completo no encuentro como..gracias
Saludos..
A mi email, remplaza [at] por a roba, es para que lo motores de búsqueda no usen mi email para spam 😉
YA SE LO ENVIÉ.. GRACIAS
Buenas noches
No se si te lleo mi correo anterior porque no lo vi publicado.
Te comentaba que t programa esta muy bueno , gracias por ayudarnos a resolver eseste problema.
Tendras???? alguna version ultima con las correcciones que te ha sugierido desde la primera vez que lo publicaste????
Tengo el problema que en una pc con Win 7 no funciona y la probe en otra tambien con win 7 y funciono; lo referente a que cuando el nombre del archivo trae Ñ o ñ manda error y se detiene el proceso, estuve revisando y casi aseguro que el problma lo genera -*- coding: utf-8 -*-, mas sin embargo esta es una opcion que todos los windows lo traen , en fin , me podras ayudar en checar como resolver este detalle??
Te agradesco de antemano
Saludos y gracias
Fidel Macias H.
Hooo si me ha llegado, sólo que el filtrado de spam lo pone en espera para no inundar el blog con mensajes spam.
Mira te comparto un link con la última versión liberada en agosto del 2016, ya es un programa que se puede instalar en windows directamente, intenta con este a ver ya no suceden los mismos errores…
https://github.com/rctorr/FacturaElectronica/releases
Salu2+
saludos como se puede agregar al renombrado el metodo de pago me seria de gran apoyo para clasificarlos
Hola Enrique
Que gusto saber que el programa te sigue siendo útil, en cuanto a tu pregunta, no tengo a la mano el Anexo20 para ver el nombre del campo para le método de pago, pero es similar a como ya lo has hecho con otros datos, mira esto es sólo un ejemplo, ya que buscar cual es el nombre del atributo del método de pago real.
Como por la línea 160’s obtienes el valor del método de pago, ojo que no lleva acentos:
y luego como por la línea 210’s lo agregas al nombre del archivo:
Espero te sea de ayuda
Salu2+
saludos
ya intente pero me marca este error
traceback (most recent call last):
File «renamecfd.py, line 319, in (module)
main(sys.argv{1:})
File «renamecfd.py» line 315, in main
xmlcfd.rename(options)
File «renamecfd.py», line 218, in rename
nomFileXmlNew += ´_´+self.atributos {´metodoDePago´}
key error: ´metodoDePago´
Hola Enrique
El error posiblemente sea porque para indicar un nuevo atributo lo tienes que hacer hummmm, no recuerdo si es así …. +self.atributos(‘metodoDePago’) con paréntesis o con corchetes cuadrado …+self.atributos[‘metodoDePago’]
Intenta con alguna de las dos, seguro funciona 😉
Salu2+
Buen día.
Antes que nada agradecer por esta muy útil herramienta la cual nos ayuda a realizar de manera menos difícil nuestras actividades.
Te comento que en estos días he descargado nuevos archivos xml los cuales no han podido ser renombrados por el programita, creo que esto se debe a que ha cambiado la estructura de los nuevos xml.
No se si pudieras orientarnos al respecto, te anexo el código que arroja:
Traceback (most recent call last):
File «renamecfd.py», line 305, in
main(sys.argv[1:])
File «renamecfd.py», line 301, in main
xmlcfd.rename(options)
File «renamecfd.py», line 186, in rename
self.getAtributos()
File «renamecfd.py», line 116, in getAtributos
self.atributos[‘tipoDeComprobante’] = compAtrib[‘tipoDeComprobante’]
KeyError: ‘tipoDeComprobante’
De antemano agradezco mucho tu apoyo.
Saludos.
Hola Godin02!
Vaya ya hacía tiempo que no había comentarios, pensé que ya no era útil el programa, pero por el error que mencionas, seguramente es debido a la versión cfdi 3.3, aunque es una suposición claro está.
Al ejecutar el programa podrías identificar el archivo en el que marca el error?
de ser así, me podrías compartir sólo ese xml donde marca el error?
Como comento, creo que el programa va a necesitar una actualización mayor, pero posiblemente podría hacer una actualización menor para omitir los nuevos archivos y que procese los que si reconoce.
Salu2+
Hola!.
Claro que es de gran utilidad el programa, al igual que tu creo que se debe al cambio de version de cfdi, en un momento te envio el archivo xml que tiene problemas y ojala solo sea un cambio menor.
Muchas gracias por la gran ayuda.
hay que Diferenciar las Mayusculas y Minisculas, si no, no correra, en la nueva version es con T mayuscula…
Saludos.
Gracias, por las sugerencias, espero en estos días ya vea la luz una versión beta para cfdi 3.3
Salu2+
Estamos en las mismas, yo también estuve muy bien utilizando la herramienta que nos hiciste favor de liberar. Todo estaba de maravilla hasta que se comenzó a implementar la versión 3.3 en los CFDI. El error que marca es similar al que indica el compañero lineas arriba. Se podrá hacer una nueva versión? O porque no cobrar una cuota de recuperación para apoyo, por tan valiosa herramienta que nos proporcionas y que la misma se actualice. Creo que vas a tener a muchos interesados por tu trabajo. Saludos
Hola Alberto!
Gracias por tus comentarios, espero poder darme tiempo para tener la actualización a lo más pronto posible de forma libre, posiblemente más que cobrar, creo que agregaré una opción para donaciones, siempre serán bienvenidas.
Salu2+gracias por tus comentarios
Hola Rctorr Seguimos al pendiente de la liberación del renombrado para con la versión 3.3 del XML del SAT. Saludos y gran trabajo,
hola mcviin!
gracias por las palabras de apoyo
Salu2+
Estiomado Rctorr, espero nos ayudes con la nueva versión 3.3 nos esta dando muchos dolores de cabeza con el renombrado de los archivos y creo que solo tu nos puedes ayudar.
Gracias.
saludos Rctorr espero nos puedas ayudar para la renombrada de version 3.3 pues la chamba se junta actualmente lo hago uno por uno gracias de antemano
Buenas tardes
Es una gran ayuda tu programa. Gracias por compartir
Seria mucho pedir tu apoyo si publicaras correccion para poder leer en XML de factura cada una de las partidas tanto en las etiquetas de la rama Concepto como por ejemplo la eqtiqueta .Importe asi como la de los impuestos trasladado.base,: y poder hacer sumas , etc, cualquier operacion.
AQUI TE MANDO EJEMPLO
–
–
–
Espero me puedas ayudar y Gracias de Antemano
Fidel Macias H
Hola Fidel!
Gracias por tus comentarios, aunque sé que el script está des actualizado, ya que sólo funciona para CFDi v3.2 y no lo he actualizado para CFDi v3.3, sin embargo la mejora que mencionas va en el sentido de poder obtener información de cada uno de los conceptos que conforman la factura ¿cierto? Por eso mismo comentas la posibilidad de hacer sumas aunque ¿cuál sería la razón? Por cierto el ejemplo sólo aparecieron las viñetas.
Aunque si tuvieras un xml de ejemplo y mostraras los resultado que quisieras obtener sería más claro para mí.
Salu2!
Ricardo buenos dias
La idea es que necesito crear un ciclo para leer las partidas de la factura , CODIGO, PU /, IMPUESTO / IVA / ETC.
Ya vez que existen por cada partida en la etiqueta Principal de CONCEPTO, dos etiquetas que te comento enseguida.
y necesito restar ( segun se puede ver en el ejemplo) 432.66 de 420.89 y 1298 de 1262.,52, Estas dos cantidades son de GASOLINA y de DIESEL Y CADA PARTIDA TRAE EL IMPÓRTE ORIGINAL Y EL IMPORTE DISMINUIDO DEL IEPS
( logicamente cada partida traera sus propios valores) , de cada partida para asi calcular el impuesto de cada partida a la gasolina y una vez leidos los ieps de cada partida sumar un total de la factura, ya que el xml solo da el total de iva pero no da el total de ieps ( impuesto a la gasolina)
–
–
–
–
–
–
–
Espero haya yo logrado explicarme y si no se entiende con gusto intentare explicarlo a mas detalle.
Espero tus comentarios
Con mis saludos
Fidel Macias H.
Comentario : coloco las etiquetas que copio del xml en el correo que te enviare y las pega sin problema, pero al momento de enviarlas las quita en automatico, por donde te puedo enviar el ejemplo del xml??
Saludos
Fidel de envío un email por ahí pasamos la info 😉