noticias / Newsletter

Importador 7.2

Albert Cervera i Areny

Importador 7.2

Hola,

una de las piezas clave en buena parte de los proyectos de implantación de un ERP es la migración de los datos del sistema (¡o sistemas!) actuales al nuevo.

Es un proceso que hacemos en la inmensa mayoría de implantaciones y por tanto, ya hace más un montón de años que nos peleamos y hemos pasado por unas cuantas fases.

Pero antes de explicarlas, te tengo que decir que cuando arrancamos un nuevo proyecto no hacemos un traspaso de datos, sino que creamos un proceso de traspaso de datos.

Es decir, buscamos tener la capacidad de reproducir el traspaso de datos tantas veces como sea necesario. De esta forma, podemos hacer el definitivo en cuestión de minutos o pocas horas y permite que los usuarios no tengan que mantener simultáneamente los datos en su software anterior y en el nuevo durante semanas.

Utilizar un ETL

Cuando empezamos parecía evidente: lo mejor para realizar la importación de datos es utilizar Kettle, un ETL (del inglés Extract Transform Load) de código abierto.

Un ETL es un tipo de herramienta gráfica especializada en la transformación y carga de información así que lógicamente parecía la única opción. Incluso hicimos un plugin para Kettle para cargar los datos directamente al ERP.

El problema era que el trabajo realizado no era fácil de reutilizar entre diferentes proyectos, era lento y sobre todo se volvía muy complicado a medida que crecía el proceso de importación.

La conclusión para nosotros ha sido que cuando existe complejidad, lo que te conviene es utilizar un lenguaje de programación, no una herramienta que te promete ahorrarte programar. Si no, acaba siendo peor el remedio que la enfermedad.

Scripts y programas a medida

Al ver que claramente la cosa no funcionaba empezamos a crear scripts (pequeños programas) para cada proyecto.

Ciertamente era mejor que utilizar un ETL pero realmente hay cosas que son similares de un proyecto a otro y era algo frustrante tener que copiar y pegar y modificar.

Al mismo tiempo esto hacía imposible que clientes o consultores sin conocimiento de programación hicieran migraciones de datos.

Por otra parte, hay casos en los que se quieren incorporar datos al sistema después del arranque. Por ejemplo, para importar tarifas de proveedores anualmente, pedidos de clientes a diario, etc.

El módulo importer

La decisión fue crear el módulo Tryton importer que sirviera tanto para importaciones iniciales como para posteriores.

Creamos un sistema que permite a los usuarios importar datos a partir de diferentes formatos de archivo (como CSV, XLSX), copiando y pegando, poniendo un enlace directo a una hoja de cálculo de Google Drive o accediendo directamente a otra base de datos.

Sobre esta base fuimos implementando varios importadores de datos específicos para apuntes contables, pedidos, productos, terceros (clientes y proveedores), etc.

Esto daba mucha autonomía a clientes y consultores ya que podían realizar importaciones desde la interfaz del programa y ahorraba a programación la parte de leer diferentes formatos de archivo porque internamente teníamos un sistema unificado.

Crear un importador nuevo requería muchas menos horas.

A pesar de la mejora, vimos que podíamos hacer mucho más si poníamos el foco en la velocidad. No sólo en el sentido del tiempo que pasa desde que aprietas el botón hasta que tienes los datos en el ERP sino también en la velocidad de adaptar el importador a las necesidades de cada proyecto.

Por eso, a partir de la versión 7.2 hemos hecho unas cuantas mejoras...

Módulo importer 7.2

De hecho, hemos incorporado más de 25 mejoras en el módulo importer para la nueva versión.

Te dejo las más destacadas:

  • El usuario puede definir valores por defecto cuando el documento de origen no tiene datos en una columna, ahorrando tener que modificar el documento original.
  • Antes mostrábamos al usuario todas las columnas que el sistema aceptaba. Ahora también le mostramos un listado con todas las columnas del archivo origen. Esto ayuda al usuario a ser exahaustivo y responder a dos preguntas: ¿Estoy llenando todos los campos que quiero? Y también: ¿estoy cogiendo a todos los que quiero del documento de origen?
  • El proceso de importación es más rápido gracias a la creación de memorias intermedias (cache), extremadamente fáciles de utilizar a nivel de programación.
  • Varias mejoras van en la línea de poder realizar muchas más pruebas. La importación es un proceso de muchos detalles, así que es muy importante que sea rápida pero también que no falle con el primer error que se encuentra. Hemos añadido varias mejoras que lo permiten y además permiten saber con precisión cuáles son los registros problemáticos una vez terminado el proceso. También es posible importar sólo una parte de los datos para realizar pruebas rápidas de cambios concretos.
  • Ahora el programador puede cambiar el comportamiento del proceso según si el usuario ha decidido importar o no un campo. Antes, si llegaba un valor en blanco no podíamos saber si es que llegaba vacío del archivo de datos o es que simplemente no existía la columna.
  • Es posible utilizar el nombre del archivo que se está importante para cargar datos. Por ejemplo, un cliente nuestro recibe pedidos donde el nombre del archivo contiene el código de cliente. Con esta mejora, el sistema ya sabe a qué cliente se hace referencia simplemente seleccionando el archivo.
  • Es más fácil importar los datos que dependen de la compañía, así como los nombres y textos que varían según el idioma.
  • Podemos eliminar los datos que se acaban de importar con sólo un clic. Así, podemos corregir el proceso y volver a intentar la importación rápidamente.
  • Hemos creado un exportador de importadores. Suena a juego de palabras, pero es simplemente un mecanismo que nos permite fácilmente guardar el proceso de importación.
  • Nos hemos dotado de la infraestructura necesaria para poder importar información a partir de archivos PDF, es más laborioso pero hay casos en los que la empresa sólo puede obtener la información en este formato. Lo tenemos resuelto.

Además, hemos adaptado la mayoría de importadores (productos, terceros, ventas, etc) para utilizar todas estas mejoras.

¿Y no puede ser más sencillo?

Una buena pregunta a hacerse es si no podemos tener un importador 100% genérico: es decir, según los campos que tiene el ERP permita importar cualquier dato.

Pero de hecho, ese importador ya existe en Tryton.

¿El problema? No sirve.

Y no sirve porque una cosa es importar los datos cuando ya tienen la estructura que necesitas y la otra es transformarla a partir del formato que existe en el sistema actual de la empresa.

Por ejemplo, algo tan sencillo como la provincia, en unas bases de datos lo obtendremos con un nombre ligeramente diferente al de las provincias que ya tiene Tryton cargadas (Illes balears / Islas Baleares), en otros casos deberemos deducirlas a partir del código postal (si está).

Y un problema añadido es que en la mayoría de los casos la calidad de la información original es baja. Siguiendo el ejemplo: códigos postales que no coinciden con la provincia correcta en los datos a importar y decidir qué prevalece.

Repetir el proceso

Con todas estas mejoras en su sitio, hemos ganado mucho pero todavía no era suficiente.

Como te contaba al principio nosotros no hacemos un traspaso de datos, sino que creamos un proceso de traspaso de datos.

De la misma forma que para perfeccionar un plato de cocina no hay nada como hacerlo muchas veces, a fin de asegurarnos de que este proceso funciona bien es extremadamente importante repetirlo. Y cuanto más lo repites, mejor funcionará el día D.

Así que hemos creado un mecanismo 100% automatizado que repite varias veces al día el proceso de importación de un nuevo proyecto.

Tenemos el objetivo de no realizar un mismo trabajo dos veces y el proceso de importación todavía era de aquellas tareas que debíamos lanzar manualmente varias veces antes que no arrancaba definitivamente un cliente.

Un proceso más automatizado.

¡Salud y buena semana!