[Access] Sectie weergeven/verbergen obv subgroep/pagina

Pagina: 1
Acties:
  • 239 views sinds 30-01-2008
  • Reageer

  • Punksmurf
  • Registratie: September 2002
  • Laatst online: 06-01-2024
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:

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


  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

Wil je nu je header van subgroep op elke pagina met zien? Daar is een property voor:

Zet RepeatSection op Yes (True)

[ Voor 15% gewijzigd door PhysicsRules op 17-11-2006 12:33 ]


  • Punksmurf
  • Registratie: September 2002
  • Laatst online: 06-01-2024
Ik wil hem dus wél op elke pagina hebben... en RepeatSection op True zetten lost dat dus op!
edit:
Zoals je het nu zegt dus :)


Omg, zo simpel. Ik kon me al niet voorstellen dat die mogelijkheid er niet was, maar heb hem niet kunnen vinden :|

Problem solved.. thanks! :*)

Desalnietemin vraag ik me nog wel af waarom mijn bovenstaande code niet werkt... Dus als iemand daar nog een idee over heeft? :)

[ Voor 25% gewijzigd door Punksmurf op 17-11-2006 12:49 ]

met een hamer past alles


  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

Alstjeblieft :)

Laat die code de header nu bij het tweede artikel op de eerste pagina zien?

  • Punksmurf
  • Registratie: September 2002
  • Laatst online: 06-01-2024
Nee, de eerse subgroep op de eerste pagina heeft geen header (showHeader is False bij de aanroep van alle header_format()'s, totdat de volgende subgroep of pagina begint...). Als deze subgroep langer is dan 1 pagina, heeft hij op pagina 2 wel keurig een header.

met een hamer past alles