Descripció tècnica de GestiONG.


Què característiques mínimés ha de proporcionar un programa de gestió?


Pense que un programa de gestió ha de proporcionar el següent a l´usuari final:

Què es necesita per a realitzar un programa de gestió sota GNU?

Una base de dades.
Aquest es el requeriment menys complicat. Existeixen dos servidors de dades SQL de us lliure, PostgreSql amb licencia BSD i Mysql  de us lliure encara que amb licencia propietària.

Un llenguatge orientat a objetes.
Un programa d´aquestes característiques es un programa que pot tindre facilment trenta formularis de manteniment de fitxers de la base de dades. El funcionamient d´aquestos es bàsicament idèntic, per lo tant, es imprescindible dissenyar un formulari base amb tota la funcionalitat i derivar la resta de formularis a partir de ell. Així, qualsevol modificació que hi haja que fer en tots els formularis de manteniment, només hi ha que realitzar-la en el formulari base. Aquest objectiu ho he aconseguit amb C++ y Qt Designer.

Un IDE decent amb una depuració decent.
KDevelop com a editor deixa molt a desitjar, per a grans edicions faig us de emacs, però com a depurador es molt fàcil d´usar i funciona molt be. L´opció de recerca en fitxers està molt be. La versió 3.0 de KDevelop sembla ser molt bona.

Generació automàtica de codi

Treballar amb trenta fitxers de la base de dades es un proc$eacute;s molt costos. Dissenyar trenta formularis, trenta classes per a llegir i gravar en la base de dades, trenta entrades en el menú, seixanta informés, etc es un procés imposible durant una vida humana sense una heina de generació automàtica de codi. I lo que es pitjor, cualsevol adició o supresió de un simple camp en una base de dades implica un munt de treball i de probes i, per suposat, de errors.
En aquest punt, la meua ferramenta de definició de codi llegeix la definició del fitxer de la base de dades que està en un fitxer XML i em genera el fitxer .ui del Qt Designer, per a que jo ho revise desprès i el deixe bonito, em genera el codi del formulari que he deixat bonito amb el Qt, em genera la classe per a llegir i escriure en la base de dades, em genera les entrades en el menú, la documentació i un munt mès de coses, pràcticament tot el que te a veure amb esa taula. A més, pot regenerarlo cada vegada que faig un canvi en la base de dades i tot s´actualitza automàticament. D´aquesta forma, afegir una nova taula a la base de dades amb el seu formulari i tot funcionand perfectament m´ocupa només unes tres hores.

Un dissenyador de formularis flexible, còmode i que permeta modificar el codi generat.
Qt Designer es un dels mijors dissenyadors de GUIs que he probat. (Quan pose un control en un lloc, es queda ahí :)

Uns controls de edició personalitzats.

Per a que el programa siga àgil de maneixar i la presentació de dades en pantalla siga clara, es necessari retocar tots els controls de edició, com llinies de text, botons, llistes, combos, etc. La redefinició d´aquestos controls standard de la biblioteca Qt es tan fàcil com a crear una nova classe derivada i canviar alguns mètodes i propietats.
La validació de dades es molt important en aquest tipus de programés en els que la informació que es trata es de vital importància. Per lo tant, el programa ha de permetre que les dades, per exemple una data, s´introduixquen de forma ràpida i sense ambigüitats i a més que es tinga la certesa de que sempre son correctes. Es a dir, el control més important es el que permiteix l´introducció de números, dates, cadenes amb format, hores, quantitas monetàries, etc. Aquest control es el IMaskedLineEdit i te les següents propietats més destacades:

Un formulari base per als manteniments de les bases de dades

Aquest formulari s´ha de encarregar de mostrar una llista amb les dades del fitxer i una vista de edició de un registre individual. Ha de llegir de la base de dades, mostrar els botons per a afegir, borrar, etc... i de fer que funcionen. Vegeu FrmEditRecBase i FrmEditRec.

Un generador d´Informés
Aquest es fins ara el major problema, encara que ja he començat amb el disseny d´un. No he trobat cap heina de disseny d´informés que agafe dades de una base de dades SQL i genere un informe decent, en el que pugues fer sumés, grups, fórmules, etc.
Aquest projecte tardarà una mica més, pero amb l´ajuda de la generació automàtica de codi, qui sap...

Cóm està organizat GestiONG?

GestiONG està desenvolupant-se en C++, sota Linux i amb soport de la biblioteca Qt 3.x

El programa pot separar-se en tres nivells:
- Nivell d´acces a la base de dades.
- Nivell d´aplicació
- Nivell d´Interfaz gràfica d´usuari.

La part més difícil del programa es la Interfaz Gràfica de l´Usuari, encara que la biblioteca Qt junt amb Qt Designer fan aquesta part menys complicada. L´acces a les bases de dades es molt fàcil també gracies a la biblioteca Qt. El nivell d´aplicació es molt sencill, ja que un programa de contablitat realment no te grans procesos.

Actualment no hi ha separació en projectes d´aquestos tres nivells, ja que l´etapa de desenvolupament en la que estem es encara molt temprana. Pero, més endavant serà totalment necessari separar estos nivells en distints projectes.


Nivell d´acces a la base de dades.

per a veure la definició de la base de dades, vegeu 'dictionary.xml'

El programa està dissenyat de forma que es puga fer servir amb qualsevol servidor de base de dades. Actualment funciona amb MySQL i PostGreSQL.
L´acces a les bases de dades es molt fàcil amb Qt. S´han creat una serie de classes per a encapsular les de Qt i afegir-les algunes funcions útiles.

D´aquesta forma, la lógica d´acces a una taula de la base de dades es aixi:
Nivell d´aplicació

Aquest nivell està totalmente barrejat amb el GUI, degut a les característiques de l´aplicació. No obstant, hi ha algunes clases que es consideren bàsiques i que es poden definir independientement de l´interfaz gràfic:



Nivel d´interfaz gràfica d´usuari (GUI).


Es pot dir sense por que el 90% del desenvolupament del programa resideix en pelear-se amb el GUI. La part més complicada consisteix en que els formularis d´introducció de dades funcionen de la forma que esperem. Per exemple, que la tecla INTRO i el CURSOR ABAJO avancen al següent camp, que el cursor no puga eixir de un camp si les dades no son correctes, que la tecla ESCAPE anule l´edició però avants mostre un missatge de confirmació, que alguns formularis siguen modals, etc.

No sé exactament per què, però tant Qt com GTK no proporcionen això de forma fàcil, ni molt menys predefinida. No obstant, amb Qt al menys es pot aconseguir, encara que hi ha que estar constantment investigant, i ací es on es demostra el principal avantatge del software amb llicencia GPL, es pot consultar el codi font per a veure cóm funciona la biblioteca Qt i trobar una solució.

El programa GestiONG es pot simplificar considerantlo´l com a la edició dels fitxers de la base de dades. D´aquesta forma, casi totes les operacions que es realitzaran sobre el fitxer de comptes serà el seu manteniment, això es, altes, baixes, modificacions, consultes, recerques, etc. Per això, el disseny d´un formulari bàsic per a realitzar el mantenimient dels fitxers de forma unificada i completa es fonamental i a més ens completa més de la meitat del programa. Aquest formulari es el FrmEditRec, que proporciona una finestra en la que mostrar els camps del fitxer i tota la lògica per a llegir, editar i gravar les dades. A partir d´aquest simple formulari, es deriven :





¿Qué avantatges i qué inconvenients presenta Linux com a plataforma de desenvolupament?

Avantatges:
- Accés al codi font de les heines i biblioteques amb les que es treballa.
- Gratuïtat d´aquestes heines i biblioteques.
- Ajuda per part de la comunitat de desenvolupament.
- Disponibilitat de heines de tractament de fitxers de text, com sed, diff, patch, tar, etc. molt útils en algunes ocasions.
- Disponibilitat nativa de CVS.

Inconvenients:
- Poca estabilitat de l´entorn de desenvolupament, principalment de l´editor.