Ik heb een rapport in Access, om een overzicht te geven van alle artikelen in de database. Artikelen worden gesorteerd in hoofdgroepen, vervolgens in subgroepen en daarna op artikelnummer.
Boven elke subgroep wil ik de naam van de hoofd- en subgroep weergeven. Als deze subgroep doorloopt naar een volgende pagina, wil ik ook dat deze gegevens weer worden weergegeven.
Artikelen bevinden zich in een subgroep, welke zich weer in een hoofdgroep bevinden. Dit komt op het volgende neer:
Daarvoor heb ik een query gemaakt, die het volgende resultaat geeft
Dit gaat allemaal nog prima. Het rapport is gemaakt op basis van deze laatste query.
Het rapport heeft de volgende secties:
• Pagina koptekst (koptekst "Assortimentoverzicht")
• Subgroep koptekst (geen weergegeven elementen)
• Header (namen van de hoofd- en subgroep)
• Detail (artikelgegevens)
• Subgroep voettekst (een lijn om het einde ve subgroep te markeren)
• Pagina voettekst (datum afdrukken, paginanummers)
Sorteren en groeperen is als volgt ingesteld:
• hoofdgroep_id - oplopend, geen kop- en voetteksten
• subgroep_id - oplopend, kop- en voettekst (kop: subgroep koptekst, voet: subgroep voettekst)
• artikelnummer - oplopend, koptekst (kop: header)
De subgroep-koptekst bevat geen weer te geven gegevens, omdat deze wel altijd boven de subgroep worden weergegeven, maar niet opnieuw als er een nieuwe pagina wordt begonnen. Dit wil ik oplossen door deze kop (met de naam van de hoofd- en de subgroep) boven elk artikel te plaatsen (in de sectie 'Header') en deze alleen te formatten als er een nieuwe subgroep of een nieuwe pagina is begonnen. Dit doe ik middels VBA.
Elke kop- en voettekst die wordt weergegeven op het rapport heeft een _format() functie, welke wordt aangeroepen voordat hij geformat wordt (dit gebeurt ook met 'subgroep koptekst' - er staat alleen geen weer te geven data in).
In de klasse van het rapport is een boolean 'showHeaders' gedefinieerd. Deze is dus door alle functies te benaderen.
De code:
Zoals het hier staat, wordt bij elke pagina of subgroep aangegeven dat de headers moeten worden weergegeven. Zodra de sectie 'Header' wordt bereikt wordt geëvalueerd of deze moet worden weergegeven en daarnaar gehandeld.
Dit werkt perfect - behalve voor de eerste subgroep op de eerste pagina! Hoewel daaraan voorafgaand eerst Pagina_koptekst_format én Subgroep_koptekst_Format worden aangeroepen is showHeaders False als de functie Header_Format wordt aangeroepen...
Wat zie ik hier over het hoofd? Of is dit een bug van Access?
Boven elke subgroep wil ik de naam van de hoofd- en subgroep weergeven. Als deze subgroep doorloopt naar een volgende pagina, wil ik ook dat deze gegevens weer worden weergegeven.
Artikelen bevinden zich in een subgroep, welke zich weer in een hoofdgroep bevinden. Dit komt op het volgende neer:
code:
1
2
3
4
5
| tbl_Artikelen tbl_Subgroepen tbl_Hoofdgroepen -------------------- --------------------- ----------------------- artikel_id /-> subgroep_id /-> hoofdgroep_id artikel_omschrijving / subgroep_omschrijving / hoofdgroep_omschrijving artikel_subgroep ----/ subgroep_hoofdgroep --/ |
Daarvoor heb ik een query gemaakt, die het volgende resultaat geeft
code:
1
2
3
4
5
6
7
8
| qry_Overzicht ----------------------- artikel_id artikel_omschrijving subgroep_id subgroep_omschrijving hoofdgroep_id hoofdgroep_omschrijving |
Dit gaat allemaal nog prima. Het rapport is gemaakt op basis van deze laatste query.
Het rapport heeft de volgende secties:
• Pagina koptekst (koptekst "Assortimentoverzicht")
• Subgroep koptekst (geen weergegeven elementen)
• Header (namen van de hoofd- en subgroep)
• Detail (artikelgegevens)
• Subgroep voettekst (een lijn om het einde ve subgroep te markeren)
• Pagina voettekst (datum afdrukken, paginanummers)
Sorteren en groeperen is als volgt ingesteld:
• hoofdgroep_id - oplopend, geen kop- en voetteksten
• subgroep_id - oplopend, kop- en voettekst (kop: subgroep koptekst, voet: subgroep voettekst)
• artikelnummer - oplopend, koptekst (kop: header)
De subgroep-koptekst bevat geen weer te geven gegevens, omdat deze wel altijd boven de subgroep worden weergegeven, maar niet opnieuw als er een nieuwe pagina wordt begonnen. Dit wil ik oplossen door deze kop (met de naam van de hoofd- en de subgroep) boven elk artikel te plaatsen (in de sectie 'Header') en deze alleen te formatten als er een nieuwe subgroep of een nieuwe pagina is begonnen. Dit doe ik middels VBA.
Elke kop- en voettekst die wordt weergegeven op het rapport heeft een _format() functie, welke wordt aangeroepen voordat hij geformat wordt (dit gebeurt ook met 'subgroep koptekst' - er staat alleen geen weer te geven data in).
In de klasse van het rapport is een boolean 'showHeaders' gedefinieerd. Deze is dus door alle functies te benaderen.
De code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| Private Sub Pagina_koptekst_Format(Cancel as Integer, FormatCount as Integer) showHeaders = True 'bij elke nieuwe pagina moet de header worden weergegeven End Sub Private Sub Subgroep_koptekst_Format(Cancel as Integer, FormatCount as Integer) showHeaders = True 'bij elke nieuwe subgroep moet de header worden weergegeven End Sub Private Sub Header_Format(Cancel as Integer, FormatCount as Integer) Cancel = Not showHeaders 'als showHeaders onwaar is, wordt Cancel waar en andersom 'als Cancel waar is, wordt de sectie niet opgemaakt '--> als showHeaders waar is, wordt deze sectie opgemaakt ' als showHeaders onwaar is, wordt deze sectie niet opgemaakt showHeaders = False 'de sectie is weergegeven, dus wordt showHeaders weer teruggezet naar 'False, zodat hij niet boven het volgende artikel wordt weergegeven 'showHeaders wordt pas weer waar bij de volgende pagina of subgroep End Sub |
Zoals het hier staat, wordt bij elke pagina of subgroep aangegeven dat de headers moeten worden weergegeven. Zodra de sectie 'Header' wordt bereikt wordt geëvalueerd of deze moet worden weergegeven en daarnaar gehandeld.
Dit werkt perfect - behalve voor de eerste subgroep op de eerste pagina! Hoewel daaraan voorafgaand eerst Pagina_koptekst_format én Subgroep_koptekst_Format worden aangeroepen is showHeaders False als de functie Header_Format wordt aangeroepen...
Wat zie ik hier over het hoofd? Of is dit een bug van Access?
met een hamer past alles