Automatizar en Odoo es dificil

Gustavo Orrillo
- 13/08/2021 - 5 min. de lectura


Uno de los tantos aspectos subestimados en Odoo es la complejidad de la automatización de las tareas. Muchas veces se piensa que automatizar una tarea (por ejemplo validar en AFIP automaticamente unas quinientas facturas, otro ejemplo sería generar cientos de facturas en base a los contratos) es una tarea facil. Pero son tareas que en su mayoría son dificiles de implementar por varios motivos:

  • Se deben manejar contingencias, y eso muchas veces no esta contemplado

  • Se debe contemplar el manejo de grandes volumenes de datos

  • La automatízación incluye la interacción con otros sistemas (muchas veces externos)

  • Odoo out-of-the-box esta configurado para ser un sistema transaccional, no optimizado para batches de información

  • Control de las tareas automatizadas

El otro problema grande es que cuando uno automatiza procesos y sale todo bien, es genial. Pero cuando en la automatización existen problemas; se automatizan los errores y los mismos crecen de manera exponencial. Es por eso que es necesario resolver los mismos de manera automática.

Manejo de contingencias

Muchas veces se planifica considerando que todo va a salir bien. Que nunca van a haber problemas. Y no estoy hablando "el server se quedó sin espacio en disco". Sino contingencias como "en AFIP se autorizó la mitad de las facturas y de repente se cayó AFIP. Que se hace?". O no se pueden procesar todos los registros debido a problemas en los datos.

Un aspecto que complica la automatización es como lidiar con estas contingencias. Como se reportan estos problemas y como se puede accionar sobre ellos, incluyendo el reproceso de los registros problemáticos. Que partes del proceso deben ser manuales y cuales automáticos. Y cuales son los puntos de control. Muchas veces desarrollar y testear para estos escenarios es igual o más complejo que desarrollar para los escenarios donde todo sale bien.

Volumenes de datos

Odoo esta preparado para manejar transacciones de a una. No para manejar procesos de miles de registros (probaron alguna vez actualizando el padron de ARBA? o importando más de diez mil clientes?). Si bien Odoo puede manejar estos volumenes, a nivel programación debemos tener en cuenta una serie de consideraciones que no son muy comunes; como por ejemplo como acelerar los tiempos de carga por medio de batches o cada cuanto commitear cada una de las transacciones.

integración con otros sistemas

Odoo es un sistema que no cubre todas las necesidades. Cubre muchas, pero no todas. De movida en Argentina Odoo debe integrarse con AFIP para autorizar las facturas electrónicas. Y muchas veces se necesita conectar con un server de e-mails para enviar mails, o un sistema de terceros (por ejemplo una empresa financiera) para obtener una autorización. Y esta clase de trabajos, y como manejar cada una de las integraciones no es algo trivial. Va mucho más alla de generar un archivo de texto para enviar via FTP.

Aca hay un escenario bastante aterrador. Supongamos que usamos el módulo de contratos y queremos automatizar la creación y validación de facturas en Argentina. Eso implica que cada factura debe obtener el CAE de AFIP. Supongamos que se deben procesar 200 facturas. Y se procesan sin problemas 100 facturas (obteniendo el CAE de dichas facturas). En la factura 101 AFIP te da error (por motivo X, supongamos timeout). En ese caso en Odoo se hace un rollback de las facturas creadas. Y uno termina con 100 facturas extras validadas en AFIP, y ninguna factura en Odoo. Mete miedo el escenario... no? Se dan cuenta porque hay que planificar las contingencias?

odoo es transaccional

Odoo es un sistema optimizado para correr operaciones via web. Es decir, espera recibir un request desde un browser y busca (la mayoría de las veces) responder en el menor tiempo posible. Las tareas automatizadas son tareas que llevan mucho tiempo de ejecución, el cual muchas veces supera los treinta minutos. Es por ello que las tareas planificadas se tienen que desarrollar de forma tal que se ejecuten de forma desatendida y tengan un reporte de sus excepciones; asi los usuarios pueden saber cuales fueron los registros creados/actualizados y cuales fueron los registros problemáticos durante la ejecución. Tambien se debe brindar la posibilidad de volver a  procesar los registros con problemas.

Por otra parte, Odoo por lo general tiene un enfoque (acertado en el 99% de las veces) de "una operación del usuario es una transacción de la base de datos". Lo que lleva a que si existe algun error durante la ejecución del proceso, todos los cambios realizados se vuelven para atras. Es por ello que se debe o automatizar los procesos mediante xmlrpc (el cual commitea cada transacción) o por medio de módulos de Odoo (los cuales tienen bastantes limitaciones en lo que se refiere a ejecutar procesos de larga duración).

Recapitulando

Automatizar en Odoo (y cualquier otro ERP) no es soplar y hacer botellas. Por los motivos que expuse anteriormente (más los propios de las actividades de la implementación de software) son procesos complejos y costosos. Pero tienen su rédito. Por ejemplo el año pasado automatizamos muchas operaciones de un ISP en Argentina el cual tiene más de mil clientes. Muchas de sus operaciones (facturación, envio de mails, procesamiento de pagos) son automáticas. Lo cual le permite manejar la operación con poco personal y así cuidar la rentabilidad en un entorno que es complejo; como es el entorno económico argentino.

Si uno piensa que automatizar es instalar un módulo, y de última pagarle unas pocas horas a un consultor... no va a llegar muy lejos. La automatización es parte de la infraestructura, y les guste o no a muchos pijoteros que no se cansan de googlear módulos; la infraestructura es cara. Y tiene que ser encarada con la seriedad (como escuche una vez, un cheque separa las palabras de un compromiso) invirtiendo en el desarrollo de la misma.

Cuando uno implementa la automatización, debe pensar en un esquema de trabajo de "Trust but verify" donde los procesos son automáticos, pero hay un equipo de trabajo que se ocupa de (y tiene las herramientas para) manejar las contingencias. Aplicar este principio no es gratis, pero como mencioné; tiene sus beneficios.


Acerca de:

Gustavo Orrillo

Apasionado de la programación, implementa Odoo para distintos tipos de negocios desde el año 2010. En Moldeo Interactive es Socio fundador y Programador; además de escribir en el Blog sobre distintos temas relacionados a los desarrollos que realiza.