05 - Groepering
Je kunt nu data herhalen in een databand en zelfs meerdere niveaus nesten. Maar wat als je de data wilt organiseren — bijvoorbeeld alle producten groeperen per categorie, of alle orders per klant?
Dat doe je met groepering. Vergelijk het met sorteren van post in vakjes: je verdeelt de brieven (databandrijen) over vakjes (groepen), en elk vakje krijgt een etiket (GroupHeader) en eventueel een samenvatting (GroupFooter).
Wat doet groepering?
Groepering voegt twee nieuwe secties toe rond een databand:
┌─────────────────────────────────────┐
│ GroupHeader (1x per groep) │
│ Groepsnaam, bijv. "Meel" │
├─────────────────────────────────────┤
│ DataBand (herhaalt per rij) │
│ Tarwebloem 50 │
│ Roggebloem 20 │
│ Speltbloem 15 │
├─────────────────────────────────────┤
│ GroupFooter (1x per groep) │
│ Subtotaal: 85 │
├─────────────────────────────────────┤
│ GroupHeader (volgende groep) │
│ "Suiker en zoetstof" │
├─────────────────────────────────────┤
│ DataBand │
│ Kristalsuiker 100 │
│ Vanillesuiker 25 │
├─────────────────────────────────────┤
│ GroupFooter │
│ Subtotaal: 125 │
└─────────────────────────────────────┘ GroupHeader vs. GroupFooter
| Sectie | Verschijnt | Typisch gebruik |
|---|---|---|
| GroupHeader | Eenmalig vóór elke groep | Groepsnaam, groepstitel |
| GroupFooter | Eenmalig ná elke groep | Subtotaal, aantal items in de groep |
Je kunt ze onafhankelijk gebruiken — een GroupHeader zonder GroupFooter is prima als je geen subtotalen nodig hebt.
Groepering vs. geneste databanden
Dit zijn twee verschillende technieken die op elkaar lijken maar anders werken:
| Geneste databanden | Groepering | |
|---|---|---|
| Wanneer | Twee aparte niveaus in het business object (Order → Regels) | Eén lijst die je wilt opdelen (producten opdelen per categorie) |
| Databronnen | Twee verschillende business objects | Eén business object met een groepeerveld |
| Canvas | DataBand in DataBand | GroupHeader + DataBand + GroupFooter |
Vuistregel: als de niveaus al in de boomstructuur zitten (hiërarchische data), gebruik geneste databanden. Als je een platte lijst wilt opdelen op basis van een veld, gebruik groepering.
Groepering en tekstregels
In de praktijk loop je tegen een probleem aan: als je orderregels groepeert op bijvoorbeeld BTW-type of merk, dan hebben tekstregels die waarde niet. Ze vallen dan in een “lege” groep.
De oplossing: filter de DataBand op alleen artikelregels en gebruik een geneste databand voor de bijbehorende tekstregels per artikel. In het business object vind je die onder Lines.TextLines.
Een concreet voorbeeld
Een leverancier levert de volgende producten:
| Product | Categorie | Aantal |
|---|---|---|
| Tarwebloem | Meel | 50 |
| Roggebloem | Meel | 20 |
| Kristalsuiker | Suiker | 100 |
| Vanillesuiker | Suiker | 25 |
Zonder groepering: één lange lijst van vier rijen. Met groepering op Categorie: twee groepen (“Meel” en “Suiker”), elk met hun eigen rijen en optioneel een subtotaal.
Samenvatting
- Groepering verdeelt een databand in groepen op basis van een veld
- GroupHeader verschijnt vóór elke groep, GroupFooter erna
- Gebruik groepering om een platte lijst op te delen — gebruik geneste databanden als de niveaus al in het business object zitten
- Vergelijk het met post sorteren in vakjes: elk vakje krijgt een etiket en een samenvatting