Reports |
4.8 Modulo per la gestione della stampa dei totali in calce al report compresa gestione della stampa su più pagine. |
Davide La Mantia (Sib) |
Un sistema per realizzare un report con un numero costante di righe per pagina indipendentemente dal numero di record da stampare è usare un codice come questo:Option Compare Database Option Explicit Dim RigheStampate As Integer 'Conta le righe stampate Dim RigheTotali As Integer 'Righe da stampare in totale (vengono conteggiate all'inizio) Dim PagineTotali As Integer 'Pagine da stampare (vengono calcolate all 'inizio) Dim PagineStampate As Integer 'Conta le pagine stampate Const RighePerPagina = 20 'Righe da stampare in ogni pagina Const RigheFinali = 6 'Righe occupate dal pie' di pagina di gruppo Private Sub Corpo_Print(Cancel As Integer, PrintCount As Integer) Dim ctl As Control RigheStampate = RigheStampate + 1 If PagineStampate < PagineTotali Then If RigheStampate >= RighePerPagina Then If RigheStampate > RighePerPagina Then RigheVisibili False End If If RigheStampate < ((RighePerPagina + RigheFinali) * PagineStampate) Then Me.NextRecord = False End If End If Else If RigheStampate >= RigheTotali + (PagineTotali - 1) * RigheFinali Then If RigheStampate > RigheTotali + (PagineTotali - 1) * RigheFinali Then RigheVisibili False End If If RigheStampate < RighePerPagina * PagineStampate + (PagineTotali - 1) * RigheFinali Then Me.NextRecord = False End If End If End If End Sub Private Sub IntestazioneGruppo0_Print(Cancel As Integer, PrintCount As Integer) RigheTotali = DCount("idfatturerighe", "T_fatturerighe", "idfattura ='" & Me.IdFattura & "'") PagineTotali = Int(RigheTotali / RighePerPagina) + IIf((RigheTotali Mod RighePerPagina) > 0, 1, 0) PagineStampate = PagineStampate + 1 RigheVisibili True End Sub Private Sub PièDiPaginaGruppo1_Print(Cancel As Integer, PrintCount As Integer) RigheStampate = 0 PagineStampate = 0 PagineTotali = 0 End Sub Private Function RigheVisibili(fVisibili As Boolean) Dim ctl As Control For Each ctl In Me.Corpo.Controls ctl.Visible = fVisibili Next ctl End FunctionSi basa sul semplice principio che, per inserire righe vuote, è sufficiente ripetere la stampa dell'ultimo record tante volte quanto è necessario ad arrivare in fondo alla pagina senza però farne vedere il contenuto. In questa soluzione è previsto un pie' di pagina di gruppo che occupi 6 righe (RigheFinali), questo parametro serve per poter gestire la stampa su più pagine. Dato che il pie' di pagina di gruppo viene visualizzato solo sull'ultima pagina del gruppo è necessario aggiungere 6 righe vuote per mantenere costante il numero di righe per pagina. Nell'esempio proposto l'intestazione di gruppo è riportata su ogni pagina (altrimenti sarebbe necessario aggiungere righe vuote anche in testa). Certamente questo codice puo' essere migliorato sia nella compattezza sia nell'efficienza, ma svolge il suo compito correttamente. |