Las modificaciones de AbanQ en la última versión del código fuente
InfoSial publicó el 16 de Marzo una nueva versión del código fuente de AbanQ. He actualizado los cambios que hice en el fuente de AbanQ según esa versión. Los archivos que debéis bajaros para compilar con esos nuevos fuentes son:
Como ya sabéis los cambios son:
- Posibilidad de presentar en los componentes FLTableDB el resultado de una consulta.
- Guarda automáticamente los tamaños de los formularios, y los recupera. El usuario por tanto, decide el tamaño de los formularios.
- Los formularios aparecen centrados.
Desde InfoSial me han comunicado su intención de incluir estos cambios en su nueva versión del motor de AbanQ, así que espero poder colaborar con ellos para incluir estos cambios (que principalmente son de usabilidad).
Corrección de bugs en las modificaciones de AbanQ
Os dejo por aquí el código fuente de la librería flbase modificada, corrigiendo bugs para conseguir la funcionalidad mostrada en anteriores posts. Había múltiples bugs (algunos debidos a mi desconocimiento del código de AbanQ y otros a efectos no contemplados). Creo que esta versión es bastante más robusta que la anterior. Permite además, efectos muy chulos, por ejemplo, modificar desde QSA la query de visualización de una FLTableDB por lo que puedes, en una misma ventana cargar datos de diferentes consultas según las diferentes opciones que el usuario seleccione.
A ver qué os parece...
Ejemplo práctico de la modificación: Mostrando más información en los Stocks de AbanQ
Quizás no quedó del todo clara la modificación que hice sobre AbanQ, y la mejor manera es un ejemplo práctico para mostrar qué se puede lograr.
Vamos a trabajar con el formulario "Regularización de stocks" del módulo de Almacén del Área de Facturación. Cuando entramos en este formulario, vemos lo siguiente.
Bien. Vamos a suponer que queremos introducir una regularización de Stocks de, por ejemplo, el artículo Aditivo de Mojado. Bien, en este ejemplo, tenemos Referencias "autoidentificables", con lo cual, no es complicado averiguar que CONSOFFADITMOJADO, se corresponde al artículo en cuestión... ¿De verdad no es complicado? Quizás para algunos usuarios sí, y para otros no. Veamos una solución con la modificación que realicé:
Mostrando el resultado de consultas en los FLFormDB de AbanQ (y II)
Conseguido! Creo que ya tengo una versión más o menos estable del ejecutable de AbanQ para Windows con las siguientes modificaciones:
- He eliminado la paleta que incluía InfoSial y a que a mí personalmente, no me gustaba estéticamente
- He corregido algunos problemas con el centrado de los formularios en pantalla. Los únicos que no se centran son las ventanas de Áreas. Estoy trabajando en un tratamiento especial para estos.
- He agregado la propiedad qryVisualizacion a los componentes FLTableDB que se incluyen en QtDesigner. Esto permite, como ya he explicado, mostrar en este tipo de componentes el resultado de una query SQL en lugar de una tabla. Esto es útil, si queremos ver el valor de columnas (o campos) de otras tablas relacionadas y que no se incluyen de manera duplicada en la tabla que editamos (política general de los módulos de AbanQ).
La instalacion Quick para Windows la tenéis aquí.
La instalación normal para Windows está aquí.
Los ficheros fuentes modificados están aquí.
Voy a explicar brevemente cómo utilizar la última característica que he añadido. Vamos a hablar de la tabla artículos. En la definición de articulos.mtd tenemos el codfamilia, y esto es lo máximo que podremos ver en el componente FLTableDB cuando pinchamos en Almacén->Artículos. ¿Y si quisiéramos ver a qué familia pertenece ese artículo? Pues o nos sabemos a qué corresponde el código de la familia (útil para expertos en ERP) o bien entramos a editar el artículo para ver la familia (lo que hace la mayoría).
Esta solución permite un paso intermedio y nos va a permitir visualizar en masterarticulos.ui no la tabla articulos, sino una query con el nombre de la familia.
Mostrando el resultado de consultas en los FLFormDB de AbanQ
Uno de los puntos que ya comenté en su día es la duplicidad de información en AbanQ que se produce en su modelo de datos. Pongo un ejemplo: Factura de proveedores.
Cuando creamos una factura de proveedores, según el formulario que muestro en la imagen, escogemos el Código de proveedor (Cod. Proveedor), y automáticamente el formulario muestra el nombre del proveedor y su CIF. Lo esperable es que en la tabla de facturas de proveedores (facturasprov) se guarde sólo el código de proveedor (codproveedor).
Pero no!!! En la tabla de facturas de proveedores, se guarda también el nombre del proveedor y su CIF. ¿Y si por ejemplo, hemos creado un proveedor y pasado un mes descubrimos que nos hemos equivocado en una letra en el nombre del proveedor? Deberíamos corregirlo en la definición del proveedor y en todas y cada una de las facturas del proveedor. Este tema lo traté en los foros oficiales de AbanQ en este hilo.
Guardando automáticamente los tamaños de los formularios en AbanQ
Como comentaba en un post anterior, hay determinados detalles que pueden marcar el éxito de una aplicación, y uno de ellos es la interfaz gráfica sin duda. En AbanQ uno de los puntos que he encontrado deficiente, ha sido el de guardar el tamaño de los formularios (o ventanas) de la aplicación según el gusto del usuario. La idea: se abre el formulario, y el usuario redimensiona la ventana para verla según su gusto. Cuando cierra ese formulario y vuelve a abrirlo espera el mismo tamaño, y no el antiguo, que puede resultarle incómodo.
Para redimensionar formularios, y guardar su tamaño, la librerías Qt son especialmente válidas (de hecho, el estándar en Qt es hacer formularios o ventanas (widgets) redimensionables).
Voy a explicar los cambios que habría que hacer en el código de AbanQ para conseguir esto: La idea es que guardaremos en el registro (en los "settings" que definen Qt, que es el registro de Windows en la versión de Windows o en archivos de configuración en el home del usuario en el caso Unix) el tamaño de la ventana cuando el usuario la cierra, y redimensionaremos la ventana al abrirla según el último tamaño guardado del usuario.
Modificaciones en AbanQ
Ha sido bastante tiempo sin escribir (mucho trabajo, y demasiadas gripes una detrás de otra...) pero vuelvo por aquí.
He estado trabajando bastante en AbanQ para implementar un ERP en una imprenta. La verdad, es que, con soluciones como esta, sobran herramientas cerradas y que además, no suelen tener una adaptación tan buena como ésta tiene.
Uno de los aspectos más importantes de una aplicación, es su interfaz. Los programadores muchas veces no tienen en consideración el interfaz de las aplicaciones, pero son en muchas ocasiones un factor subjetivo clave a la hora de percibir, y por extensión valorar, una aplicación.
Y el aspecto de AbanQ en su versión para Windows, a mí me parecía... feo. Os pongo una captura de el aspecto original que tienen los ejecutables que InfoSial ofrece amablemente para descarga.

AbanQ antes de las modificaciones
Otro detalle se unía a que la interfaz no me pareciera... correcta. Los formularios se abrían en determinadas zonas del escritorio ocultando muchas veces la botonera de navegación porque quedaban fuera del mismo. ¿Solución? Todos los formularios que se abran se centrarán en el escritorio.
Os voy a explicar cómo hacer estos cambios tan sencillos en el código fuente.
[Modificación 27-febrero-2009]: A petición del foro de AbanQ de Google Groups, os pongo un enlace a la aplicación compilada en windows (con MinGW) y con todos los archivos necesarios aqui. Es una versión Quick.
Avanzando con AbanQ
Estos días he estado intensamente dedicado a seguir estudiando AbanQ para la implementación en el taller. Inicialmente dije que era un producto de funcionalidad reducida y tengo que reconocer que hay que matizar esa afirmación. Comparado con Openbravo o con OpenXpertya, es un producto que (con los módulos básicos de facturación) es de menor funcionalidad que éstos.
Ahora bien, es una plataforma que ofrece unas posibilidades de crecimiento francamente interesantes. No sé si me atrevería a calificarlo de ERP en el sentido estricto de la palabra. Ahora, es una plataforma que permite un crecimiento modularizado de una herramienta de gestión básica de una manera francamente sencilla. Básicamente:
- Definiendo el modelo de datos
- Definiendo los formulario de edición
- Definiendo los informes
podemos implementar en muy poco espacio de tiempo cualquier registro de datos. Unido a esto la posibilidad de asociar scripts de acciones, y poder programar comportamientos propios, hacen la herramienta muy interesante.
Aun así, hay alguna incertidumbre ante el lote de trabajar que me voy a pegar. Estoy utilizando la versión v2.3, pero la nueva versión v3 (realizada en Qt4 y con interfaz web) promete, no mucho, muchísimo. ¿Me estaré hartando de trabajar en una versión a la que sólo queda un mes de vida? Desde InfoSiAL no hay mucha información sobre la fecha de lanzamiento. Aparte, aunque el producto es Open Source, su desarrollo no se hace en plataformas abiertas.
Voy a avanzar un poco qué he ido modificando para ir adecuando la herramienta a mis necesidades:
Otro ERP se une a la liza… OpenERP
Permitidme que copie una entrada de Jordi Esteve en barrapunto, que me ha hecho plantearme el estudio de OpenERP.
Empieza aquí....
OpenERP . Hace 1 año escaso el repositorio SVN del desarrollo de OpenERP solo era accesible por sus partners que pagaban una cuota "elevada" (Abanq actualmente no ofrece ni esto). Hace 6 meses el repositorio SVN fue abierto a todo el mundo y hace 3 meses todo el desarrollo se ha migrado a launchpad, plataforma de desarrollo de software libre creada por Canonical. Aquí se
gestionan diferentes ramas con bazaar (similar a svn), bugs, translations (en este momento Español está casi al 100% y catalán al 80-90%), ...
En OpenERP Commiters casi 60 personas, muchas sin relación con la empresa madre, estamos desarrollando módulos que posteriormente algunos son traspasados a la versión oficial por el OpenERP Quality Team.También hace pocas semanas se ha creado el OpenERP Spanish Localization Project a partir del código desarrollado en el svn de google-code. Aquí se alojan los módulos de localización como la validación cifs, cuentas bancarias, planes contables, remesas de recibos 19 y 58, importación extractos bancarios 43, ...
La tecnología que usa también es muy importante: framework de desarrollo en python y ficheros XML, modular (más de 300 módulos), informes diseñados desde OpenOffice, clientes de escritorio para windows, mac y linux versión Qt y versión Gtk, cliente-sevidor web (si, la misma aplicación es a la vez una aplicación de escritorio y una aplicación web), conectores para diferentes tiendas on-line: os-commerce, virtuemart, magento, ...
Termina aquí...
A ver qué tal es OpenERP...
Detalles que no me van gustando…
Estoy ya enfrascado en adaptar tanto AbanQ como OpenBravo a mis necesidades de almacenaje de materias primas para el proceso productivo (que en el caso de las artes gráficas, es papel, tintas o barnices, y determinados consumibles para maquinaria, que aunque no son materias primas, sí inciden en la producción, como mantillas, solución de mojado, etc).
La primera en la frente con AbanQ. Una de las premisas básicas de los sistemas ERPs es la de la no duplicidad de la información en el modelo de datos. Para ello, por ejemplo, se tiene un maestro de proveedores (que puede ser una tabla donde se almacenan todos los proveedores). Y cuando debemos hacer una referencia a un proveedor desde cualquier otra entidad (por ejemplo, un pedido a proveedor o un albarán de proveedor), incluimos en esta otra tabla una columna o campo que almacena un dato, el identificador único de la tabla maestra de proveedores. De esta forma, tenemos una relación establecida y los datos no duplicados.
Veo que el modelo de datos de los módulos oficiales de AbanQ en su versión 2.2, duplican la información. Tenemos una tabla de proveedores, donde existen campos o columnas como el nombre o el CIF del mismo. Sin embargo, veo, con desagrado, que en la tabla de pedidos a proveedores, encuentro campos que duplican información: veo en esa tabla, el id del proveedor (lógico), pero también el nombre del mismo o su cif. ¿Para qué quiero tener repetida la información del proveedor en la tabla de pedidos de proveedores? Pero ya no es sólo la repetición. Imaginemos que modificamos el nombre del proveedor. Estamos obligando al sistema a que extienda esa modificación del nombre a todos las tablas que también almacenan el nombre del proveedor.
Este es un error de diseño grave del modelo relacional. Voy a preguntarlo en los foros, a ver qué respuesta obtengo, porque también existe la posibilidad, de que esté interpretando mal el modelo de datos.
Este error no ocurre en OpenBravo, donde de hecho existe un maestro genérico, "Terceros" que almacena todas las entidades ajenas a la empresa pero que influyen en la misma: Clientes, Proveedores, Acreedores, Empleados, etc. OpenBravo y su modelo de datos, respeta ese diseño básico del modelo relacional de bases de datos.
Actualizado a 21 de Noviembre de 2008. Me ha contestado Federico Albujer en los foros de AbanQ a esta inquietud en el modelo. Reproduzco aquí su respuesta, ya que me ha parecido muy interesante:


