Archivo para la categoría 'Librerías Qt'

AbanQ: Antes de seguir… cómo se compila

Bueno, antes de seguir con los artículos de cómo integrar JasperServer, u OpenKM, o introducir alguno de los cambios que propongo… creo que es mejor proporcionaros las herramientas para compilar estas versiones de AbanQ tanto en windows como en linux, para crear así los clientes con las opciones de debug, o quick.

He creado un .zip con mi versión actual de AbanQ, y digo “mi” versión, porque incluye los múltiples cambios que he ido publicando en este blog, y que enumero

  • Formateado automático de los FLFieldDB que contienen números, de tal forma, que las cantidades tales como 100000 se representan como 100.000,00 Esto hace mucho más legible las cantidades. Aquí
  • Desde QSA (el lenguaje de scripting) pueden accederse al manejo de los QComboBox (así, por ejemplo, he podido meter en algunos formularios objetos QComboBox y utilizarlos directamente sin necesidad de tener que estar asociados a columnas de bases de datos. Esto es especialmente útil para realizar filtrados de campos estáticos o no guardados en bases de datos).
  • Los FLTableDB pueden presentar el resultado de Querys complejas, al agregarse una propiedad: qryVisualizacion. De esta forma, la riqueza visual de lo que pueden representar es mayor. La diferencia con la versión oficial de AbanQ, es que ese FLTableDB no es readonly, sino que se utiliza en la edición, creación y eliminación de registros. Aquí
  • Cambios estéticos que afectan principalmente a la versión para Windows, ya que la original, no me gustaba (dejo el tema de windows por defecto, sin modificarlo). Aquí
  • Los tamaños y posiciones de los formularios utilizados se almacenan, permitiendo una mejor experiencia del usuario. Aquí.
  • Posibilidad de utilizar vistas cuando se utilice un motor PostgreSQL. Esto, entre otras cosas, permite una mejor integración de los datos de otros programas con AbanQ. Aquí
  • Corrección de un bug por el que no se filtraban adecuadamente campos con valores int, uint o double. Aquí.
  • Incorporación del estilo Windows XP (esto no lo incluye la versión original de AbanQ).
  • El código de la integración con JasperServer que se verá en siguientes artículos.

Sólo tenéis que descomprimir el archivo .zip que os adjunto. Una vez hecho esto, si utilizáis Windows, debéis ajustar las variables señaladas en los archivos setenv.bat y build-config.bat. Si utilizáis Linux, debéis hacer lo mismo en el archivo setenv.h

Para compilar en Linux, necesitáis gcc, g++ y demás herramientas que seguro tendréis instaladas. Para compilar en Windows, necesitáis descargaros, MinGW. Además, es conveniente instalar el MinGW API for MS-Windows  de aquí.

Compilación bajo Windows. Ubicados en el directorio donde habéis descomprimido las fuentes, ejecutar en este orden (por si no me explico bien haced un Inicio->Ejecutar-> cmd y cd al directorio en el que tengáis las fuentes ;-):

setenv.bat
build-config.bat
build-pthreads.bat
build-qt.bat
build-qsa.bat
build-abanq.bat

Para los que estéis en Linux, es tan sencillo, como desde una consola, y en el directorio de las fuentes, ejecutar

setenv.sh
compilar-qt.sh
compilar-qsa.sh
compilar-abanq.sh

Por defecto, la versión Windows viene preparada para compilar una versión final con un cliente quick, y la versión de Linux, para compilar una versión debug y con cliente “pesado” o completo.

Tened en cuenta que hay dependencias cruzadas, que no están muy bien resueltas: Por ejemplo, flbase depende de kugar, y kugar depende de flbase… así que al construir por primera vez, puede que os de error (la librería de flbase quiere enlazar a la de kugar, pero la de kugar no está construida porque faltan archivos objetos de flbase que no pueden construirse sin hacer previamente un moc de flbase…). Solución si os perdéis un poco en estos temas: entrad directamente en los directorios (src/flbase o src/kugar) y haced ahí el make.

Espero que con estas herramientas muchos os animéis a compilar y a introducir modificaciones, y corregir los muchos fallos que seguro he cometido. Cuanto más crezca la comunidad, mejor para todos.

Aquí teneís el archivo

Nota: Muchas de las modificaciones necesarias para compilar bajo Windows, las proporcionó juancrobles, a través del foro de AbanQ en Google, a  través de diversos hilos y del fichero Modificaciones_abanq2.3-v1.1.zip disponible aqui.



AbanQ: Integrando con JasperServer / JasperReports (I)

No me gusta el editor de informes de AbanQ… ni me gusta Kugar, ni me gusta que Qt Designer como gestor de informes. El primero, porque creo que está muy por detrás de otros motores de generación de informes que existen en el mundo del software libre (aparte de que está abandonado como proyecto, para integrarlo en KOffice dentro de Kexi, y del segundo, porque no es un generador de informes.

Me gusta JasperReports: Es una herramienta muy completa, en software libre y que rivaliza con cualquier herramienta de generación de informes (he sido usuario/programador durante mucho tiempo de Crystal Reports y Oracle Reports y realmente, para mis necesidades y según mi experiencia, JasperReports está por encima).

Además, JasperReports, tiene una interfaz de usuario para la edición de informes, iReports. Si la probáis, veréis que es muy muy superior a Kugar o QtDesigner (utilizando esta como generación de informes) y por encima de Crystal Repors, por ejemplo.

Por si esto no fuera poco, dispone de JasperServer que es una aplicación, que actúa como servidor y/o repositorio de los diferentes documentos que generéis con las anteriores aplicaciones. En realidad, es mucho más, tratando de ser una herramienta de Bussiness Inteligence… permitiendo, junto con JasperAnalysis, ser una herramienta de análisis….

La idea de funcionamiento con estas herramientas es la siguiente:

Se instala JasperServer en vuestro servidor. (Yo lo tengo instalado en un Jboss con PostgreSQL). Os proporciona una aplicación web en la que podéis gestionar, administrar y utilizar los informes que vayáis definiendo. No sólo eso, permite programar informes, enviando los resultados a correo electrónico, generación automática de los informes de formato HTML, PDF, Excel, OOffice…

Utilizáis iReport en vuestro ordenador para crear los informes (bien sea con los asistentes o desde cero)… los informes permiten agregarles código Java, con lo cual podéis hacer cualquier cosa, repito cualquier cosa con los informes. Genero documentos, que nunca diríais que están generados por una herramienta de gestión de informes… pensaríais que son cartas escritas por una persona. Desde iReport, y mediante webservices podéis interactuar y manipular el repositorio de JasperServer de una manera muy cómoda, con lo que la  creación, modificación o actualización de informes es una tarea sencilla y fácilmente asumible.

¿Cómo integrar esto con AbanQ? Queremos unir mundo Java y C++… además, queremos integrar un servidor de informes en nuestro AbanQ. Solución: WebServices. JasperServer permite acceder a todo su repositorio desde WebServices… Y eso es lo que haremos en AbanQ. Para ello, integraremos dentro de AbanQ, la librería de C++ gsoap.

Vamos a hacer una integración sencilla, pero funcional (cuando termine los artículos indicaré por dónde creo que deberían ir las líneas de mejora de esto).



Bug en AbanQ: Filtrado de campos double, int o uint desde FLTableDB

Creo haber descubierto un bug en AbanQ. La manera de reproducirlo es la siguiente:

Desde un FLTableDB, pinchamos en la opción Ver/Ocultar filtro. Escogemos ahora cualquier campo del tipo “double”, “int” o “uint”, modificamos la operación a Igual a (cualquier otra también vale para reproducirlo) e introducimos un valor. Al intentar ejecutar el filtro, si tenéis una base de datos PostgreSQL os dará un error, indicando que no se puede ejecutar la función “upper” sobre el campo.

El lugar donde se produce el bug en el código está situado en FLTableDB.cpp, en las líneas 1132 hasta 1137, dentro del método tdbFilterBuildWhere, y es fácil de ver: (código correspondiente al fuente del build 15245 disponible en la web de AbanQ)

case QVariant::UInt:
case QVariant::Int:
case QVariant::Double:
case QVariant::String:
case QVariant::StringList: {
        fieldArg = "upper(" + fieldName + ")";

Si os fijáis se aplica la función de base de datos “upper” a todos los campos. Esta función sirve para poner en mayúsculas una cadena de texto (AbanQ la utiliza para garantizar la comparación de cadenas de caracteres independientemente de que el usuario la introduzca en mayúsculas o minúsculas: se compara siempre en mayúsculas). El error está en que PostgreSQL se queja cuando a una columna integer o double precision se le hace un upper.

Así no es posible aplicar un filtro a este tipo de campos. ¿Solución? Super sencilla. Cambiad ese código por este, y recompilad

case QVariant::String:
case QVariant::StringList: {
        fieldArg = "upper(" + fieldName + ")";
case QVariant::UInt:
case QVariant::Int:
case QVariant::Double:

Así, el upper sólo se aplica a las cadenas.



Mejorando la experiencia de usuario en AbanQ

La verdad, es que cada día que pasa, me sorprende más gratamente AbanQ. Primero porque examinando el código, es robusto, y está construido con criterio (es raro ver código creado utilizando paradigmas de programación orientado a objetos reales y especialmente utilizandos patrones de diseño adecuadamente, como el objeto FLObjectFactory, que implementa el patrón del mismo nombre…).

Pero siempre hay detalles que son mejorables, especialmente en la interfaz final del usuario, y en la llamada “experiencia de usuario” (qué dificultades o ayudas encuentra el usuario en el programa, siendo simplistas). Partimos de la base de utilizar la versión 2.3 y los módulos 2.2.

Existe una opción en el área de Facturación, dentro de Facturas, en el formulario maestro de Facturas de Proveedores: el botón “Asociar” (nombre mal elegido según mi punto de vista) que permite crear una factura de proveedor a partir de los albaranes emitidos por este. En este formulario, se pueden especificar unos parámetros de búsqueda para así obtener el listado de albaranes que cumplen esos criterios. Esos albaranes se agregan en un control QListView.

El problema de usabilidad viene cuando uno desea consultar algunos datos de ese QListView. Por ejemplo, no presenta ninguna opción de ordenación. ¿Es posible ordenarlo? Veamos como

Read more…



AbanQ: Dando formato a los FLFieldDB numéricos.

Cuando uno trabaja con un ERP, y con AbanQ en particular, hecha de menos que el sistema formetee según la configuración las diferentes cifras con las que se trabaja. Veámoslo:

FLFieldDB sin formato aplicado

FLFieldDB sin formato aplicado

Vale, al menos a mí me pasa, si voy con prisas, si voy con bulla (¿os suena en el curro?), ¿Qué cifra pone ahí? ¿ trece mil o ciento treinta mil?. Veamos lo siguiente:

FLFieldDB visualizando la cifra con Locale.

FLFieldDB visualizando la cifra con Locale.

Se ve un poco mejor, ¿no? Voy a explicaros cómo se programa este pequeño cambio en AbanQ.

Read more…



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).

Read more…



Calculando el coste hoja de un pliego offset…

Calcular el coste hoja de un pliego offset (por ejemplo, en 50×70 o 70×100) a partir del coste en €/Tonelada que te proporciona un proveedor de papel, es un proceso de reglas de tres consecutivas. Muchos impresores, tras años de experiencia se saben la fórmula de memoria y la aplican mecánicamente en su día a día.

Aquí os traigo un pequeño desarrollo, hecho en Qt4, software libre con licencia GPL para que lo utilicéis libremente. Todos los campos son editables y el cambio en un de ellos, implica recálculo en el resto. Os dejo también una captura de pantalla.

La descarga podéis hacerla desde aquí. Eah, a disfrutarlo.

Calculadora de costes de pliegos offset.

Calculadora de costes de pliegos offset.



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.

Regularización de stocks antes del cambio

Regularización de stocks antes del cambio

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é:

Read more…



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.

Read more…




Puede seguir las respuesta a esta entrada a través del feed RSS 2.0 Puede dejar una respuesta, o un trackback desde su propio sitio.