Abanq ERP: Arquitectura, Funcionamiento y Manipulación de Bases de Datos
Abanq, anteriormente conocido como FacturaLUX, es un sistema ERP (Enterprise Resource Planning) modular, diseñado específicamente para la administración y gestión de PYMES. Está disponible para múltiples plataformas, incluyendo Linux, MAC OS X y Windows 2000/NT, y se distingue por ser software libre, lo que permite su distribución, copia y modificación de todo su código fuente. Esto otorga a las PYMES la propiedad de la tecnología que utilizan, liberándolas de la dependencia de software propietario y terceros. El objetivo inicial de Abanq es ofrecer un marco de trabajo sólido, estable y optimizado para el desarrollo rápido de soluciones orientadas a la administración, gestión comercial, finanzas y cualquier aplicación que maneje grandes bases de datos y procesos administrativos.
Abanq incluye su propia plataforma de desarrollo rápido para adaptar la aplicación. Actualmente, existen módulos integrados en continuo desarrollo para facturación, almacén, gestión de tesorería, contabilidad financiera, talleres de automoción, formación, TPV, control de producción (MRP) y soporte completo para códigos de barras. InfoSiAL es la empresa propulsora, principal desarrolladora y administradora del proyecto Abanq, reconocido por la OSDN (Open Software Development Network) y alojado en Sourceforge.net. Lidera un equipo de desarrolladores propio y desarrolladores independientes interesados en Abanq que han colaborado o colaboran en él, siguiendo el modelo del software libre.
Arquitectura de Abanq
La arquitectura de Abanq ha sido cuidadosamente diseñada mediante capas perfectamente definidas. Las capas inferiores ofrecen mediante su interfaz (API) su funcionalidad a las capas superiores.
Lenguajes de Programación
- Lenguaje C++: Es el utilizado para crear el núcleo de Abanq, es decir, la aplicación base. Se emplea Qt, una biblioteca multiplataforma para desarrollar interfaces gráficas de usuario.
- Lenguaje QSA: Es el utilizado en los scripts de los módulos, basado en ECMAScript y, por tanto, muy parecido a JavaScript.
El funcionamiento básico es el siguiente: los objetos definidos en Qt (núcleo de la aplicación) pueden ser accedidos desde QSA (scripts), pero no directamente por razones de seguridad. Desde el código QSA se pueden crear objetos de las clases interfaz para acceder a los correspondientes objetos Qt. Por lo tanto, solo se podrá acceder a aquellas clases (y, dentro de estas, a los métodos) de Qt que hayan sido explícitamente definidos en el interfaz.
El interfaz es el puente entre los scripts en lenguaje QSA y el núcleo de Abanq programado en C++ a través de las librerías Qt. Para permitir el acceso a ciertos objetos desde los scripts se ha creado un conjunto de clases intermedias que sí son accesibles desde QSA y que permiten trabajar con clases de C++. Por ejemplo, sabemos que podemos acceder a un cursor de una tabla para manipular sus datos desde un script. Hemos usado un objeto de la clase FLSqlCursor. Es importante destacar que muchas de las clases del interfaz se han definido con el formato nombre_clase + Interface, pero desde los scripts accederemos a ellas solo por el nombre_clase.
Funcionamiento y Acceso a Datos en Abanq
Scripts y Variables
Cuando declaramos una variable con la palabra clave var, su ámbito se reduce al bloque en el que ha sido declarada, convirtiéndola en una variable local.
function nomFuncion() { // ... cuerpo de la función ...}La palabra nomFuncion es el nombre de la función, y el paréntesis indica los parámetros que se le pasan a la función (en este caso, no los hay). Todo el cuerpo de la función se encuentra encasillado por llaves ({}). Para que esta función se ejecute, se debe realizar una llamada. En este caso, la función se encuentra en el script correspondiente a la etiqueta que pertenece al formulario de edición.
Objetos y Métodos Habituales para Acceso a Datos
Los formularios permiten crear cursores. Un cursor sobre un formulario da acceso a todos los objetos que forman parte del mismo. Todos los componentes del formulario se consideran hijos de este.
- La variable nombre contiene el elemento fdbNombre del formulario, que a su vez se refiere a un campo de la tabla asociada a dicho formulario. La variable nombre será un objeto del mismo tipo que el componente del que procede, frecuentemente un FLFieldDB.
- this.child("nombretab") se utiliza para poder trabajar directamente con los datos de una tabla sin pasar por un formulario.
Algunos métodos importantes para la manipulación de cursores:
| Método/Propiedad | Descripción |
|---|---|
| setModeAccess | Define el modo de acceso del cursor sobre la tabla. Puede ser Insert, Edit, Del o Browse. |
| valueBuffer | Para leer un valor de un campo de la tabla. |
| select() | Establece un criterio de búsqueda para el cursor. |
| first() | Posiciona el cursor sobre el primer registro que cumple el criterio de búsqueda. |
En un ejemplo, se crea una variable que contiene el valor 155, la cual es utilizada como criterio de búsqueda. La función select() establece este criterio, y la función first() posiciona el cursor sobre el registro deseado.
Funciones Predefinidas
Las funciones predefinidas son invocadas automáticamente al producirse determinados eventos y pueden ser redefinidas según las necesidades del programador. Salvo que se indique lo contrario, estas funciones se deben ubicar en el script correspondiente al formulario en el que se produce el evento.
- Uso: Acciones de inicialización del formulario.
- Momento de ejecución: Apertura del formulario asociado con el script que la contenga.
- Parámetros: Nombre del campo.
- Valor de retorno: Devuelve el valor del campo contador que se pasa como parámetro a la función.
- Uso: Esta función se utiliza para calcular los campos que en la base de datos se han definido como de tipo contador (true).
- Valor de retorno: Si las acciones y validaciones realizadas son correctas, la función devuelve true. En caso contrario, devuelve false.
- Script de ubicación: En el script principal del módulo.
Desarrollo de Módulos en Abanq: Ejemplo de Módulo de Gráficos
Para practicar lo aprendido, podemos desarrollar un pequeño módulo de gráficos. Una estrategia efectiva es reutilizar la gran mayoría de un módulo existente, como el módulo de informes, y centrarse solamente en crear una nueva capa de presentación para los resultados. El módulo de informes de facturación funciona realizando consultas parametrizadas a la base de datos según cada tipo de documento (presupuestos, pedidos, albaranes, facturas, etc.) y a nivel de resumen o detalle.
El grado de reutilización es muy alto, lo que genera un ahorro de tiempo significativo. En definitiva, el módulo de informes y de gráficos compartirán la mayoría de los formularios, consultas y tablas. Para saber qué incluir o modificar, se realiza un análisis de los scripts del módulo de informes, observando que todos están asociados a los formularios maestros de cada uno de los tipos de documentos, como i_masterfacturascli.qs, i_masterpedidoscli.qs, i_masteralbaranescli.qs, i_masterfacturasprov.qs, etc.
ERP ABANQ-MODULO DE FACTURACION
La capacidad de Abanq para garantizar la funcionalidad futura es crucial para las empresas, más allá de la funcionalidad presente. Abanq ofrece una adaptabilidad y robustez que lo hacen atractivo para la administración y gestión empresarial.
