Inicio > Contabilidad, Programing > Renombra archivos xml de CFD/CFDi y se feliz :)

Renombra archivos xml de CFD/CFDi y se feliz :)

renamecfd-01
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:

  1. Descarga el intérprete de python que es necesario para que el programa funcione. Puedes dar click aquí.
  2. 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:
  3. Luego crea una carpeta llamada cfdi en el escritorio
  4. Coloca una copia del programa renamecfd.py dentro de la carpeta cfdi
  5. Coloca también una copia de todos los archivos xml que necesites renombrar en esta misma carpeta
  6. Para usuarios de WinXP
    1. Da click en el menú inicio => ejecutar => escribe: cmd y presionar enter. Esto abre una ventana de comandos.
    2. Hay que cambiarse a la carpeta cfdi escribiendo: cd Escritorio\cfdi y presionando enter.

    La imagen muestra la carpeta cfdi con el programa renamecfdi.py y los archivos xml a renombrar, también se muestra la ventana de comandos ya listo para ejecutar el programa

    La imagen muestra la carpeta cfdi con el programa renamecfdi.py y los archivos xml a renombrar, también se muestra la ventana de comandos ya listo para ejecutar el programa

  7. Para usuarios de WinVista, Win7 y posiblemente Win8
    1. Da click en menú inicio => En “Buscar programas y archivos” escribe: cmd y presiona enter.
    2. Hay que cambiarse a la carpeta cfdi escribiendo: cd Desktop\cfdi y presionando enter.
  8. Para ejecutarlo escribir: C;\Python27\python renamecfd.py *.xml y presionar enter

La imagen muestra la carpeta cfdi con los archivos xml ya renombrados y la ventana de comandos muestra como se ejecutó el programa.

La imagen muestra la carpeta cfdi con los archivos xml ya renombrados y la ventana de comandos muestra como se ejecutó el programa.


Listo, todos tus archivos xml en la carpeta cfdi renombrados

OJO: Para futuros usos sólo tienes que realizar lo siguiente:

  1. Abre la carpeta cfdi del escritorio y borra todos los archivos xml que no necesiten ser renombrados.
  2. Coloca una copia de todos los archivos xml que necesites renombrar en esta misma carpeta
  3. Para usuarios de WinXP
    1. Da click en el menú inicio => ejecutar => escribe: cmd y presionar enter. Esto abre una ventana de comandos.
    2. Hay que cambiarse a la carpeta cfdi escribiendo: cd Escritorio\cfdi y presionando enter.
  4. Para usuarios de WinVista, Win7 y posiblemente Win8
    1. Da click en menú inicio => En “Buscar programas y archivos” escribe: cmd y presiona enter.
    2. Hay que cambiarse a la carpeta cfdi escribiendo: cd Desktop\cfdi y presionando enter.
  5. 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
Guardando la lista de archivos renombrados

Se muestra el archivo lista-de-archivos.txt generado

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.

  1. Descarga un zip del programa desde aquí
  2. Descomprímelo en el escritorio, así que ahora tendrás una carpeta llamada FacturaElectronica-master
  3. Copia en esta carpeta todos los archivos xml que requieras renombrar
  4. De alguna forma busca la manera de iniciar un terminal de comandos, un bash, una consola o algo que se le parezca.
  5. 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.

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

Cambiando a la carpeta y ejecutando en una terminal en Linux

Cambiando a la carpeta y ejecutando en una terminal en Linux


Listo, a seguir siendo felices!

Anuncios
  1. francisco
    6 febrero, 2014 en 11:33

    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?

    • 6 febrero, 2014 en 12:01

      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+

      • gozaita perez
        6 febrero, 2014 en 13:45

        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

      • 6 febrero, 2014 en 15:25

        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+

      • francisco
        6 febrero, 2014 en 17:30

        si funciona como dices tambien para windows que tengo que hacer en mi equipo para ejecutar el archivo qeue nos compartes?

    • francisco
      6 febrero, 2014 en 17:34

      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?

      • 8 febrero, 2014 en 06:45

        Hola Francisco!

        Listo he agregado las instrucciones!

        Salu2+

  2. gozaita perez
    6 febrero, 2014 en 16:24

    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

    • 6 febrero, 2014 en 16:34

      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+

  3. gozaita perez
    6 febrero, 2014 en 16:47

    nota 4: sOY FELIZ

    Ahora lo que voy a buscar es cambiar el orden del nombre que arroja, RFC

    • 6 febrero, 2014 en 16:56

      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+

  4. gozaita perez
    6 febrero, 2014 en 17:03

    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

    • 8 febrero, 2014 en 07:32

      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+

      • gozaita perez
        1 marzo, 2014 en 16:43

        Gracias por tu ayuda, seguimos en el camino de mejorar, y con ayudas como esta es posible aligerar nuestro trabajo.

  5. 8 febrero, 2014 en 06:42

    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!

    • francisco
      9 febrero, 2014 en 12:09

      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.

      • 10 febrero, 2014 en 00:26

        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!

  6. francisco
    10 febrero, 2014 en 17:07

    padawan? tu ya eres un Jedi

  7. francisco
    10 febrero, 2014 en 17:13

    “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

    • 10 febrero, 2014 en 17:42

      Houuuuuu! queriendo mover la laptop usando la fuerza!! …. plashhhhh! llegó al suelo! noooo! seguramente era la fuerza del lado obscuro! 😦

      jajajajajajajaja! me sigo divirtiendo!

  8. Alonso
    11 febrero, 2014 en 08:43

    Muchas gracias Richard, eres mi sensei (master) y por todo tu apoyo, has ganado mas padawans.

    • 11 febrero, 2014 en 14:11

      Hola Alonso!

      jajaja más padawas! ustedes si que me hacen pasar un buen rato!

      Salu2+

  9. 25 febrero, 2014 en 16:23

    Agregados algunos issues, que salieron al correrlo con mis xml.
    https://github.com/rctorr/FacturaElectronica/issues

    • 25 febrero, 2014 en 17:55

      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+

  10. 25 febrero, 2014 en 17:17

    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

    • 25 febrero, 2014 en 18:04

      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+

  11. Jorge Luis Figueroa
    10 marzo, 2014 en 18:34

    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.

    • 11 marzo, 2014 en 01:56

      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!

      • Jorge Luis Figueroa
        11 marzo, 2014 en 18:33

        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.

  12. angel soria
    14 marzo, 2014 en 11:30

    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

  13. beto64
    2 abril, 2014 en 13:42

    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

    • 11 abril, 2014 en 08:43

      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+

  14. Miguel
    10 abril, 2014 en 14:11

    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

  15. Miguel
    10 abril, 2014 en 14:19

    Miguel :
    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

    • 11 abril, 2014 en 08:34

      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+

  16. Dany
    20 mayo, 2014 en 13:16

    Hola, que tal, no esta el vinculo para bajar el programa. gracias

    • 5 diciembre, 2014 en 11:57

      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+

  17. CP_Diego
    10 julio, 2014 en 10:45

    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.

    • 5 diciembre, 2014 en 11:56

      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+

  18. 17 julio, 2014 en 22:22

    Muy buen aporte, tendras algun programita para renombrar los recibos de nomina ya que tambien estan en xml

    • 5 diciembre, 2014 en 11:54

      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+

  19. Samuel
    18 julio, 2014 en 18:10

    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?

    • 5 diciembre, 2014 en 11:52

      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+

  20. javier
    22 julio, 2014 en 13:16

    hola que tal me ha sido de mucha utilidad, pero quiero renombrar el cfd con otros datos como lo hago soy nuevo en python

    • 5 diciembre, 2014 en 11:50

      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+

  21. Ariosto Velasquez
    28 agosto, 2014 en 21:32

    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.

    • 5 diciembre, 2014 en 11:48

      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+

  22. gozaita perez
    28 octubre, 2014 en 11:52

    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.

    • 5 diciembre, 2014 en 11:44

      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+

  23. Jorge Luis Figueroa
    5 diciembre, 2014 en 11:34

    Hola RCTORR, sabras si existe alguna restriccion para usar este codigo en una máquina win 64 bits?

    • 5 diciembre, 2014 en 11:40

      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+

      • Jorge Luis Figueroa
        5 diciembre, 2014 en 11:56

        Listo ya quedo si era la versión

      • Jorge Luis Figueroa
        5 diciembre, 2014 en 11:56

        Muchas gracias¡¡¡

  24. 12 diciembre, 2014 en 22:26

    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.

    • 13 diciembre, 2014 en 01:06

      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+

  25. 10 enero, 2015 en 01:09

    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.

    • 10 enero, 2015 en 15:16

      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+

  26. 14 febrero, 2015 en 11:25

    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

    • 14 febrero, 2015 en 11:45

      Hola Faby MF!

      Bueno, sería bueno saber que sistema operativo usas!

      Salu2+

  27. carloshc
    18 mayo, 2015 en 14:30

    Soy un lego en la materia, pero con la explicación que das, hasta yo pude hecharlo andar. Muchas gracias!!!

    • 18 mayo, 2015 en 20:55

      Hi Carlos!

      que gusto que hayas logrado hacerlo funcionar ;), me podrías comentar que sistema operativo usas?

      Salu2+

  28. juan. dgo
    22 mayo, 2015 en 09:10

    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.

    • 22 mayo, 2015 en 09:42

      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+

  29. elepipiola@hotmail.com
    16 junio, 2015 en 18:49

    Gracias me salvaste la vida y mis ojos despues de andar renomrbando muchos xml besos!!

    • 16 junio, 2015 en 20:32

      Hola!

      pensé que posiblemente esta herramienta ya no era necesaria 😮

      gracias por compartir 😉

  30. Rodolfo
    30 junio, 2015 en 09:05

    Hola como puedo hacer para agregar el uuid al nombre del archivo final?

    • 30 junio, 2015 en 15:01

      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+

    • 1 julio, 2015 en 17:46

      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+

    • 12 agosto, 2015 en 08:58

      Hola Rodolfo ya he agregado una opción para agregar el UUID por si aún te es de utilidad!

      Salu2+

  31. 11 agosto, 2015 en 16:51

    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

    • 12 agosto, 2015 en 09:01

      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!

      • enrique
        2 septiembre, 2015 en 15:12

        hola rctorr donde puedo ver o bajar el ejemplo para probarlo ya que no lo encuentro gracias

      • 2 septiembre, 2015 en 15:16

        Hola Enrique

        Entra sl sitio del proyecto acá https://github.com/rctorr/FacturaElectronica y hay un botón para descargar en zip.

        Salu2+

      • enrique
        2 septiembre, 2015 en 15:58

        ok gracias rctorr lo estoy tratando de bajar gracias lo pruebo espero nos sigas ayudando a todos los que necesitamos este tipo de ayuda

  32. Antonio
    18 agosto, 2015 en 14:28

    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.

    • 18 agosto, 2015 en 14:33

      Hola Antonio!

      Yo creo que si se puede, te envío email

      Salu2+

  33. denisse
    11 febrero, 2016 en 16:49

    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

    • 12 febrero, 2016 en 01:20

      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.

  34. 7 julio, 2016 en 11:40

    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.

    • 11 julio, 2016 en 02:05

      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+

  35. alexis
    30 noviembre, 2016 en 11:29

    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

    • 30 noviembre, 2016 en 11:54

      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!

      • alexis
        30 noviembre, 2016 en 16:40

        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’]

      • 30 noviembre, 2016 en 22:17

        Hola Alexis!

        mira, creo que el problema es en estas líneas…

        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’)
        

        cambialo por:

        self.atributos[‘RFCemisor’] = emisor[0].getAttribute(‘rfc’)
        self.atributos[‘nombreemisor’] = emisor[0].getAttribute(‘nombre’)
        

        Espero resuelva tu problema!
        Salu2+

      • alexis
        2 diciembre, 2016 en 08:53

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

      • 2 diciembre, 2016 en 10:08

        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+

      • alexis
        2 diciembre, 2016 en 10:59

        Si todas son facturas, en que parte te mando el archivo completo no encuentro como..gracias
        Saludos..

      • 2 diciembre, 2016 en 11:17

        A mi email, remplaza [at] por a roba, es para que lo motores de búsqueda no usen mi email para spam 😉

      • alexis
        2 diciembre, 2016 en 15:37

        YA SE LO ENVIÉ.. GRACIAS

  36. Fidel Macias H.
    4 mayo, 2017 en 00:10

    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.

    • 4 mayo, 2017 en 00:47

      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+

  37. enrique
    6 mayo, 2017 en 13:20

    saludos como se puede agregar al renombrado el metodo de pago me seria de gran apoyo para clasificarlos

    • 6 mayo, 2017 en 19:53

      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:

      self.atributos[‘RFCemisor’] = emisor[0].getAttribute(‘rfc’)
      ...
      self.atributos[‘metodoPago’] = emisor[0].getAttribute(‘metodoPago’)
      

      y luego como por la línea 210’s lo agregas al nombre del archivo:

      nomFileXmlNew += '_'+self.atributos['total']
      ...
      nomFileXmlNew += '_'+self.atributos['metodoPago']
      

      Espero te sea de ayuda
      Salu2+

      • enrique
        11 mayo, 2017 en 13:19

        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´

      • 11 mayo, 2017 en 18:32

        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+

  1. 27 julio, 2015 en 10:53

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

PiKon

3D Printing + Raspberry Pi Camera = PiKon Telescope

gvSIG blog

gvSIG project blog

Python Adventures

Welcome to the Jungle!

A %d blogueros les gusta esto: