antallet af records på en side skal være deleligt med to.
Jeg har en rapport der har noget tekst i header, footer og detail sektionerne.
da headeren er af forskellig størelse fra gang til gang ved jeg ikke hvor mange records der er plads til i detail sektionen.
Det er således lavet at de records der bliver skrevet hænger logisk sammen to og to. Som systemet er nu kan jeg ricikerer at to sammenhængende poster bliver delt.
jeg vil gerne have det således at hvis den sidste record på en side er "ulige" bliver den vippet over på den næste...
kan records gruperes således at de skal være to sammen? måske noget med at gruperer og "keep together"... ved bare ikke hvordan.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Kan kun lade sig gøre med kode. Hvis du kender detaljesektionens højde og footerens højde, kan du på headerens Format hændelse regne dig frem til hvor mange detalje linier der er plads til på f.eks. et A4 papir (29,7 cm). Fra det antal du (koden) finder frem til trækker du modulus 2 af samme antal, så du runder ned til nærmeste lige tal - husk at VBA-kode regner i Twips (der går 567 Twips på en cm). På deltalje sektionens Format hændelse tæller du nu en global variabel op, op tester på om variablen er nået op til det beregnede antal. Hvis den er det kalder du metoden ForceNewPage på detalje sektionen (Me.Detail.ForceNewPage 1) og nulstiller den globale variabel. Lyder måske besværligt, men er simpel kode, som primært er en matematisk øvelse, og mig bekendt den eneste måde du kan løse dit problem på.
Det lyder som om du med fordel kunne kigge på den forespørgsel rapporten trækker på, således at de to sammenhængende rækker blev joinet. På den måde ville du kunne udskrive de to linier på en gang (placere felterne i to linier på detail-sektionen.
Er der nogen måde disse data kan relateres til hinanden (samme kontonummer, f.eks.)? Hvorfor hænger de to linier sammen?
God pointe, men nej, det virker! Jeg havde dog lige lavet et par fejl. Man skal også lige trække top- og bundmargin fra papirets højde (29,7 - 2*2,5 = 24,7 i nedenstående eksempel). Desuden er det ikke på detalje-sektionens format hændelse, men print hændelsen man skal styre antallet (ups!!!). Endelig skal forcenewpage sættes til 2 (after section) i stedet for 1. Nedenstående eksempel er gjort lidt omstændeligt, men burde til gengæld være nemt at gennemskue - prøv det...
Option Compare Database Option Explicit
Dim intHeaderHeight As Integer Dim intDetailHeight As Integer Dim intFooterHeight As Integer Dim intDetailCount As Integer Dim intDetailNumber As Integer
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) intDetailNumber = intDetailNumber + 1 If intDetailNumber = intDetailCount Then intDetailNumber = 0 Me.Detail.ForceNewPage = 2 End If End Sub
Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) intHeaderHeight = Me.PageHeaderSection.Height intDetailHeight = Me.Detail.Height intFooterHeight = Me.PageFooterSection.Height
intDetailCount = (24.7 * 567) - intHeaderHeight - intFooterHeight intDetailCount = intDetailCount \ intDetailHeight intDetailCount = intDetailCount - (intDetailCount Mod 2) End Sub
Endnu en utilgivelig fejl. Detail.ForceNewPage skal sættes til 0 for hver ny side, så koden skal se således ud:
Option Compare Database Option Explicit
Dim intHeaderHeight As Integer Dim intDetailHeight As Integer Dim intFooterHeight As Integer Dim intDetailCount As Integer Dim intDetailNumber As Integer
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) intDetailNumber = intDetailNumber + 1 If intDetailNumber = intDetailCount Then intDetailNumber = 0 Me.Detail.ForceNewPage = 2 End If End Sub
Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) Me.Detail.ForceNewPage = 0 intHeaderHeight = Me.PageHeaderSection.Height intDetailHeight = Me.Detail.Height intFooterHeight = Me.PageFooterSection.Height
intDetailCount = (24.7 * 567) - intHeaderHeight - intFooterHeight intDetailCount = intDetailCount \ intDetailHeight intDetailCount = intDetailCount - (intDetailCount Mod 2) End Sub
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.