| 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 Function
Si 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. |