Come creare un report con Gambas

Sono almeno 10 anni che esiste il componente report. Forse è giunto il momento di documentarlo.

Per prima cosa ti chiedo di controllare eventuali errori nella versione inglese (e anche in questa traduzione n.d.t.) e di avvisarmi, se lo farai te ne sarò grato.

Gambas Report: concetti di base

Ho disegnato il componente report di Gambas perché sia in grado di soddisfare al massimo le esigenze degli utenti. Ma è decisamente diverso dai comuni generatori di report.

Esso non si basa su una sezione di disegno (anche se ne esiste una, con diversi fini, così nominata) ma sul Boxed Design delle pagine web incentrato su Contenitori/Oggetti. Quindi segue il vincolo derivato dai container (parent) e object (children) per disegnare la pagina e definire quando generarne una nuova.

Il contenitore ReportVBox

È sicuramente il contenitore più importante della famiglia Report. È il contenitore che gestisce i children (figli) verticalmente.
Se ci metti degli oggetti, imposterà la larghezza nella larghezza del contenuto (=Container Width - Container.Padding Width - Container.Border Width) e terrà conto anche del margine dell'oggetto. Quindi sistemerà gli oggetti verticalmente in funzione dell'altezza richiesta da ciascun oggetto. Se un oggetto non ha spazio per essere disegnato nello spazio Verticale corrente, viene generata una nuova pagina con tutti i vBoxParents e quindi il disegno dei figli può continuare fino alla fine.

Se un oggetto è più grande di un intero spazio contenitore (intendo un oggetto tipo un'immagine) verrà tagliato.

Il contenitore ReportHBox

Questo contenitore organizza i suoi elementi orizzontalmente. Imposta l'altezza dei suoi figli con le stesse regole utilizzate da ReportVBox. Se alcuni elementi non si adattano al suo interno, la parte rimanente verrà semplicemente ignorata.

Le proprietà per disporre gli oggetti

  • Proprietà Expand : l'altezza dell'oggetto sarà lo spazio rimanente.
    Se più di un oggetto di ReportVBox ha la sua opzione Expand attivata, l'altezza dell'oggetto sarà lo spazio rimanente diviso per il numero di oggetti nella pagina corrente.

  • Proprietà Ignore : questo oggetto non è organizzato dal contenitore e le sue proprietà Left e Top vengono utilizzate per posizionarlo relativamente alla posizione del contenitore.

  • Proprietà Fixed : questo oggetto verrà ripetuto ogni volta che si disegna il contenitore.

  • Proprietà Margin : questa proprietà consente all'oggetto di definire una distanza minima tra l'oggetto e un altro.
    Il valore più grande viene preso in considerazione tra due oggetti. Il margine non è fuso con il riempimento del contenitore in modo che i due valori vengano accumulati.
    Il margine può essere impostato individualmente per ciascun bordo dell'oggetto.

Le proprietà per disporre i contenitori

  • Proprietà Arrangement : questa proprietà è attualmente presente solo nel contenitore del pannello.

    È possibile definire 4 valori diversi: None, Fill, Vertical, Horizontal.
    Verticale e orizzontale agiscono rispettivamente come ReportVBox e ReportHBox.

  • Proprietà Spacing : questa proprietà definisce una distanza tra due oggetti. È diversa dal valore Margin poiché mette lo spazio solo tra gli oggetti.

  • Proprietà ForceNewPage : è una caratteristica particolare. Ogni volta che questo contenitore viene ripetuto, forza una nuova pagina.

  • Proprietà OnePiece : il contenuto di questo contenitore verrà mostrato su una sola pagina. Verrà fatto di tutto per raggiungere questo obiettivo.