Archivo para la categoría 'Programación'

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



Buenas prácticas en AbanQ: Usando vistas con PostgreSQL

Una de las características fundamentales de los sistemas ERP es el ofrecer información útil para el usuario. Generalmente, esa información útil surge de cruzar datos de diferentes orígenes (en nuestro caso, tablas de base de datos).

Vamos a poner un ejemplo: En AbanQ tenemos el formulario de artículos dentro del módulo de almacén. Quizás sería interesante añadir una opción para comprobar los movimientos de stocks, entendiendo por los mismos las entradas a almacén (albaranes dados de alta) y salidas (albaranes a clientes). Sería interesante visualizar en un TableDB el resultado de una query que agrupara ambas entradas. Claro, ocurre que para hacer esa query, es necesario utilizar una cláusula SQL, union.  Así por ejemplo, podríamos desear tener una consulta tal como esta

select 'Entrada' as tipo, lp.referencia, lp.cantidad, ap.idalbaran
from albaranesprov as ap inner join lineasalbaranesprov as lp
on ap.idalbaran = lp.idalbaran
union
select 'Salida' as tipo, lc.referencia, lc.cantidad, ac.idalbaran
from albaranescli as ac inner join lineasalbaranescli as lc
on ac.idalbaran = lc.idalbaran

 Read more...


Tiempos de reducción de costes… ¡¡Software libre!!

Realmente, utilizar software libre, implica reducir costes (ojo, software libre no es igual a gratis, pero sí reduce costes). Ejemplo, teníamos necesidad de una nueva centralita de teléfonos. La actual, estaba desfasada y daba problemas. Pidiendo presupuestos a diferentes empresas, cualquier solución suponía un coste de mínimo 2.500 €. Toda una cifra en esta época.

Telefónica oferta propiamente el alquiler de una centralita y sus terminales, pagando un alquiler por teléfono y centralita mensual que es realmente interesante… Pero aun así, pensé en hacer una prueba antes. Utilizar Asterisk, una herramientaen software libre que permite implementar una centralita, utilizando además, protocolos libres (detalle este muy importante para futuras interoperabilidades) como SIP.

Así que manos a la obra, lo único que necesitaba era adquirir una tarjeta que recibiera las líneas de teléfono analógicas que tenemos contratadas. Las reinas indiscutibles en este sector son las Digium, básicamente porque son las tarjetas que desarrolla la empresa del creador y principal motor de Asterisk. Su problema, el precio. 180 euros para una prueba (en cualquier caso, mucho menos que 2.500 euros!!). Así, que adquirí las OpenVox, concretamente la A400P, que es un clon de la TDM410P (la de Digium)… Sí, OpenVox es una empresa china. Además, adquirí un módulo FXS para recibir llamadas.

Y manos a la obra, instalé TrixBox, una distribución Linux que viene ya preparada con todo el software para configurar una centralita… Me reconoció todo el hardware… y configuré.

En unas 6 horas, había configurado la centralita, con operadora virtual, grupos de capturas, múltiples extensiones, franjas horarias, buzones de voz… todo en un ordenador un tanto antiguo (un Pentium III con 256 megas de RAM).

O sea, que probando, he conseguido ahorrar 2.500 €… Y eso es lo que voy a hacer. Ahora dejaré las pruebas, y haré la implementación real de Asterisk en un ordenador algo más potente.  Por supuesto, tuve FUD de algún que otro comercial (“ni te imaginas cuántas de esas asterisk he tenido que quitar…”). Asterisk es una solución tan buena como cualquier otra en este mundo. Hay empresas que se dedican a implementar este tipo de herramientas… y seguro que sale más barato. Por preguntar, y que os hagan una prueba, no perdéis nada.



Seguimos con el curso: Introducción a C++

Como parte de un agradabilísimo curso que he terminado de impartir, os dejo aquí la presentación con la introducción a C++. Como otras veces, los tenéis en formato PDF y OpenOffice Impress



Curso programación orientada a objetos: UML

Continuando con el curso, entro en detalle del modelado de sistemas de información utilizando UML. Os dejo la presentación en OpenOffice y PDF, bastante autoexplicativas.



Curso Programación Orientada a Objetos

Ayer empecé a dar un curso sobre Diseño Orientado a Objetos, UML y C++. Para hacer las prácticas, he decidido escoger las librerías Qt porque, para aprender (y para su uso en general) creo que son ideales:

  • Buena documentación
  • Gran cantidad de ejemplos
  • Abarca todas las tecnologías a mano (XML, SQL, OpenGL, protocolos de red, HTML…)
  • API desarrollada utilizando patrones de diseño
  • No se saltan demasiado el estandar C++, al menos los añadidos (moc, rcc y demás) son programas externos, con lo cual, el código de Qt se puede compilar con gcc, con Visual Studio, con mingw, con Borland C++ (no Builder)…

Mientras, os cuelgo la presentación sobre orientación a objetos… por si pudiera interesar. POO.odp: versión en OpenOffice y la versión en PDF.




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.