In sintesi
Termina l'analisi delle librerie degli oggetti relativi ai Book.
Nota: questo video corso è stato realizzato con la versione 4 di Instant Developer. Anche se i contenuti sono ancora attuali e sono utili per imparare ad utilizzare Instant Developer, alcune affermazioni sono di fatto superate. Per i dettagli e le ultime novità sulle funzionalità illustrate vi rimandiamo alla sezione di reference che viene tenuta aggiornata giornalmente.
Completiamo la panoramica sulle proprietà, procedure e funzioni definite in libreria per gli oggetti del Book.
Vediamo l'oggetto Report. Innanzitutto vediamo la proprietà Max Rows che permette di limitare a run-time il numero massimo di record che la Master Query del report deve restituire. Ovviamente occorre impostare il valore di questa proprietà prima che il book venga stampato in quanto le query dei report vengono eseguite all'inizio della stampa.
Poi vediamo la proprietà Visibile analoga al flag visibile nella videata delle proprietà del Report.
Poi la funzione Records Count che restituisce il numero di record restituito dalla Master Query.
La procedura Refresh Query fa sì che il report riesegua la Master Query. La procedura SQL Where Clause, infine, permette di aggiungere a run-time una clausola Where alla Master Query di un report.
Proseguiamo ora con l'oggetto Section. Innanzitutto le proprietà Height, Visible, Show Children, stile visuale analoghe a quelle disponibili nella videata delle proprietà dell'oggetto Section.
Poi la proprietà Group Level permette di cambiare a run-time il livello a cui si trova un gruppo. Vediamo un esempio. Supponiamo di aver definito a design time un report che contenga un gruppo A al cui interno sia definito un altro gruppo B. Il gruppo A si trova al livello 1 mentre il gruppo B al livello 2. Ora, a run-time, possiamo cambiare il livello del gruppo B a 1 mediante la proprietà Group Level (il sistema modificherà automaticamente il livello del gruppo A a 2). In questo modo invertiamo a run-time l'ordine in cui i due gruppi vengono stampati. Questa proprietà è utilizzabile per le sole sezioni di tipo Group Header e Group Footer.
Poi vediamo la funzione Record Number, che restituisce il numero di record corrente.
La funzione Ypos restituisce la posizione, in unità di misura del book all'interno della box della pagina Template, dove la sezione è stata stampata.
Seguono poi tutte le funzioni aggregate disponibili per le sezioni. Vedremo successivamente un esempio di utilizzo.
Poi l'evento di On Formatting scatenato quando la sezione viene stampata. Infine la procedura Set Reprint che permette di stampare una sezione anche se non ci sono più records da stampare.
Vediamo come calcolare i totali in un report. Vediamo che nell'espressione dello span abbiamo chiesto alla sezione corrente il numero di records fornendo alla funzione aggregata una colonna della tabella prodotti. Avendolo fatto nel Group Footer questo numero di records rappresenta esattamente il numero di details stampati tra il Group Header ed il Group Footer.
Vediamo ora un esempio di utilizzo della funzione Ypos e della procedura Set Reprint. Supponiamo di voler stampare il report Categorie 1 che vediamo. Come vediamo la form contiene due book identici. L'unica differenza è che per il primo book abbiamo utilizzato l'evento di On Formatting della sezione Detail. La sezione detail viene stampata per ogni Categoria. Quando non ci sono più records nella Master Query la stampa del book termina. Quando questo avviene, però, vogliamo continuare a stampare la sezione Detail fino alla fine della pagina (o meglio fino al riempimento della box della pagina Template) per ottenere una griglia.
Per fare questo è sufficiente fare quanto indicato nell'evento di On Formatting. Innanzitutto occorre sapere che se forziamo la ristampa di una sezione quando non ci sono più records il book utilizza come valore degli span l'ultimo disponibile. Quindi da quando cominciamo a ristampare vogliamo nascondere le box. Utilizziamo una variabile globale per farlo. Nell'evento controlliamo se siamo all'inizio del book. In questo caso smettiamo di nascondere le box se lo stavamo facendo. Poi se dobbiamo nascondere le box lo facciamo. Infine se il numero di record corrente è uguale al numero di records restituiti dalla Master Query vuol dire che siamo alla fine. Allora finchè Ypos della sezione Detail più l'altezza della sezione è inferiore all'altezza della box entro cui si stampa la sezione, ovvero quando il lato inferiore della sezione Detail è inferiore all'altezza della box, continuiamo a ristampare nascondendo le box.
Vediamo l'effetto.
Entrambi i book sono uguali. Il book di sinistra però utilizza l'evento di On Formatting che abbiamo visto e ristampa la sezione Detail fino alla fine della box mentre il book di destra non ha l'evento di On Formatting e la stampa del book termina quando i records sono finiti.