Inicio > Contabilidad, Programing > Administrar recepción de CFD/CFDI (update v1.1)

Administrar recepción de CFD/CFDI (update v1.1)

admincfds-01
Y como a partir del 2014 prácticamente el uso de la facturación electrónica se ha vuelto casi obligatorio, he retomando la administración de archivos xml, ya sea para CFD o CFDi, así que al verificar mi script realizado con anterioridad, resulta que no procesa los CFDi de forma correcta, así que a corregir el bug!!!

Ahora que ya conozco la estructura de un archivo xml para un cfdi v3.2 se que los nombres de los nodos van precedidos por la cadena “cfdi:”, así que manos a la obra.

Todas las modificaciones se realizan en la función getAtributos() quedando de la siguiente manera:

    def getAtributos(self):
        """ Regresa los atributos necesario para formar el nombre del archivo. """

        if os.path.isfile(self.nomFileXml):
            xmlDoc = minidom.parse(self.nomFileXml)
            nodes = xmlDoc.childNodes
            comprobante = nodes[0]
            
            compAtrib = dict(comprobante.attributes.items())
            self.atributos['serie'] = compAtrib['serie']
            self.atributos['folio'] = compAtrib['folio']
            # Se trunca la parte de la hora de emisión
            self.atributos['fecha'] = compAtrib['fecha'][:10]
            self.atributos['total'] = compAtrib['total'].rjust(10,'0')
            self.atributos['subTotal'] = compAtrib['subTotal'].rjust(10,'0')
            version = compAtrib['version']

            if version == "2.2" or version == "2.1": # CFD
                emisor = comprobante.getElementsByTagName('Emisor')
                impuestos = comprobante.getElementsByTagName('Impuestos')
            elif version == "3.2" or version == "3.1": # CFDi
                emisor = comprobante.getElementsByTagName('cfdi:Emisor')
                impuestos = comprobante.getElementsByTagName('cfdi:Impuestos')
            else:
                print
                print "El archivo xml no es una versión válida de cfdi!"
                print
                sys.exit(1)
                
            self.atributos['rfc'] = emisor[0].getAttribute('rfc')
            self.atributos['nombre'] = emisor[0].getAttribute('nombre')
            self.atributos['iva'] = impuestos[0].getAttribute('totalImpuestosTrasladados').rjust(10,'0')
        
        return self.atributos

Al ejecutarlo con un archivo cfdi se observa que ahora si es procesado de manera correcta:

$ ./admincfd-1.1.py FA000015.xml




    _       _           _          ____ _____ ____  _     
   / \   __| |_ __ ___ (_)_ __    / ___|  ___|  _ \( )___ 
  / _ \ / _` | '_ ` _ \| | '_ \  | |   | |_  | | | |// __|
 / ___ \ (_| | | | | | | | | | | | |___|  _| | |_| | \__ \
/_/   \_\__,_|_| |_| |_|_|_| |_|  \____|_|   |____/  |___/
                                                          
            
14-01-2014
rictor@cuhrt.com



Renombrando: FA000015.xml a: 2014-01-14_AAA010101AAA_FA_000015_0002940.00_0000470.40_0003410.40.xml

$ ls -lF
2012-04-02_OVI800131GQ6_VAGG_4774_0000257.76_0000041.24_0000299.00.xml
2014-01-14_AAA010101AAA_FA_000015_0002940.00_0000470.40_0003410.40.xml
admincfd-1.0.py
admincfd-1.1.py
CFD_VAGG4774.xml.original
FA000015.xml.original
$ 

Una mejor por hacer sería que no apareciera todo el banner y trabajara como un comando de unix para así poder usarlo para procesamiento por lotes y poder aplicarlo a n cantidad de archivo sin que aparezca el molesto banner (ya hasta a mi me resultó molesto hehehe! y lo bueno es que soy yo, así que prohibido quejarse!)

Y sigo pensando que más podría necesitar?

Y que los CFDi’s estén con ustedes!

Anuncios
  1. milo
    10 marzo, 2014 en 14:51

    Chevere gracias.

    • 10 marzo, 2014 en 22:13

      Hola Milo!

      Gracias a ti por comentar!

      Salu2+

  2. angel soria
    14 marzo, 2014 en 10:47

    Como creo o hago el archivo o ???? no entendi nada … disculpa, que se supone que es?

    • 9 abril, 2014 en 06:27

      Hola Angel

      En que parte te has quedado? esto es un programa (pequeño programa a veces llamado script) usando lenguaje de programación python que teóricamente funciona en pc’s con windows, linux o en mac.

      Cuando ejecutas el programa en una carpeta dónde tiene archivos xml de facturas recibidas, te renombra todos los archivos colocando los datos de los archivos mismos en el nombre (sólo algunos)

      Ya ha creado algunas modificaciones para que agrege más datos por ejemplo y otra modificación para que se produzca una lista de todos los xml para que pueda ser importada desde excel o calc por ejemplo.

      Ya han comentado que si se podría hacer un exe o algo así y ya está en lista de espera, de momento toca seguir la guía para ejecutarlo y en un momento que me quede algo de tiempo libre me pongo manos a la obra.

      Salu2+

  3. milo
    8 abril, 2014 en 13:36

    Yo lo uso seleccionando todos los archivos y los coloco encima del script.py y los convierte rapidamente. es muy util. estoy diseñando algo para generar las polizas a contabilizar.

    Saludos

    • 9 abril, 2014 en 06:29

      Hola Milo

      Gracias por responder, vaya esa forma de usarlo no lo he hecho…

      El arrastrar y soltar los archivos lo haces en windows?

      Haaa interesante eso de las pólizas, si compartes un poco más de como tendrían que ir las pólizas igual podría apoyar en algo 😉

      Salu2+

      • milo
        9 abril, 2014 en 09:47

        Asi es, es en windows mi estimado, asi como tambien desarrolle un, visor de xml en java, dime donde te lo puedo enviar, lo de las polizas es en excel, despues de generar la lista, se extraen las partes de fecha, nombre folio e importe, y con una macro generar el formato de polizas masivas.

      • 11 abril, 2014 en 08:40

        Hi Milo

        Haa windows, ok! eres programador? por lo de java 😉 yo algunes vés usé java, pero hoy lo de python me ha facinado, se me ocurre hacer un port ha python ¿que opinas? si gustas enviarlo a rictor[at]cuhrt.com lo revisamos!

        Los de las pólizas mira que esto podría ser un módulo aparte completo, algo así como xmltopolizas.py y que procese todo lo que esté en una carpeta y que al final entregue un archivo xls (formato de excel que puede leer casi cualquiera). Aquí lo que no se ¿cual es el formato de una póliza o pólizas masivas?

      • milo
        14 abril, 2014 en 11:04

        Buen dia mi buen rctorr, soy contador y pronto ISC, me gusta la programación y en esto de la facturación electrónica es complicado, con gusto comparto la herramienta que hice, he leido que adecuaste la lista, es excelente, en lo que pueda ayudarte mi correo es miloatapaz8@live.com saludos.

  4. 15 abril, 2014 en 04:11

    Hola Milo

    Contador heee ahora entiendo, eso de ISC no me suena 😦 … pero que te guste la programación y hayas realizado algo en java es insólito, aunque yo siempre creo que no es muy complicado, pocos se dan el tiempo para hacerlo, felicidades.

    Gracias también por los ánimos y me buscaré un poco de tiempo para revisar los formatos 😉

    Salu2+ y sigamos caminando!

    • milo
      15 abril, 2014 en 10:23

      Asi es rctorr es Ingeniero en sistemas Computacionales, te mande un correo con información para lo que hablamos, espero que si.
      Asi como si puedes publicar el programita seria muy util para muchas personas.

      Saludos y excelente resto del dia.

  5. 6 julio, 2014 en 12:46

    hola me manda un error de argumentos que es lo que posria estar pasando

  6. 11 julio, 2014 en 11:51

    buenos dias tengo errrores con este script me dice que los argumentos son invalidos alguna idea

  7. Ariosto Velasquez
    28 agosto, 2014 en 21:44

    Amigo que diseñaste el visor en JAVA podrás regalarmelo, mi correo. a_velasquezr13@outlook.com

    • 5 diciembre, 2014 en 12:21

      Hola Ariosto!

      No fuí yo, fué Milo!

      Hace tiempo Milo me lo envío, pero no encuentro el email donde lo hizo, sorry!

      Pero se lo podrías pedir a el 😉 o almenos eso creo!

      Salu2+

  8. Ariosto Velasquez
    28 agosto, 2014 en 21:59

    amigo donde puedo bajarlo no encuentro el link

  9. Alberto Carrasco
    3 octubre, 2014 en 17:23

    Buena tarde tengan he visto sus comentarios y creo entender que realizaron un pequeño programita para leer el xml a un formato mas legible es eso acertado seria posible que me guiaran a como realizarlo o algo parecido ya que he visto programas que convietten xml a pdf y muchas cosas pero no encuentro algo mas basico, agradeceria sus comentarios.

    Saludos!

  1. 19 enero, 2014 en 00:28

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: