09 - Geavanceerde Expressies
In sessie 3 heb je eenvoudige expressies geleerd: velden combineren, vermenigvuldigen en IIF(). Nu breiden we dat uit met functies voor tekst, datums en getallen die je nodig hebt bij het bouwen van professionele rapporten.
Vergelijk de expressie-editor met een gereedschapskist: in sessie 3 had je een hamer en een schroevendraaier. Nu voegen we er een zaag, een waterpas en een meetlint aan toe.
Tekstfuncties
| Functie | Wat het doet | Voorbeeld | Resultaat |
|---|---|---|---|
Left(tekst, n) | Eerste n tekens | {Left(Order.Klant.Naam, 3)} | Bak |
Right(tekst, n) | Laatste n tekens | {Right(Order.OrderNummer, 4)} | 0042 |
Mid(tekst, start, n) | Deel uit het midden | {Mid(Order.OrderNummer, 2, 4)} | 0042 |
Trim(tekst) | Verwijdert spaties aan begin en einde | {Trim(Order.Klant.Naam)} | Bakkerij de Zon |
Replace(tekst, oud, nieuw) | Vervangt tekst | {Replace(Order.Klant.Telefoon, "-", "")} | 0612345678 |
ToUpperCase(tekst) | Alles in hoofdletters | {ToUpperCase(Order.Klant.Plaats)} | UTRECHT |
Datumfuncties
| Functie | Wat het doet | Voorbeeld | Resultaat |
|---|---|---|---|
Today | Datum van vandaag | {Today} | 2024-03-15 |
DateDiff(d1, d2) | Verschil in dagen | {DateDiff(Order.Datum, Today)} | 7 |
AddDays(datum, n) | Datum plus n dagen | {AddDays(Order.Datum, 30)} | 2024-04-14 |
Year(datum) | Jaartal | {Year(Order.Datum)} | 2024 |
Month(datum) | Maandnummer | {Month(Order.Datum)} | 3 |
Day(datum) | Dagnummer | {Day(Order.Datum)} | 15 |
Getalfuncties
| Functie | Wat het doet | Voorbeeld | Resultaat |
|---|---|---|---|
Round(getal, n) | Afronden op n decimalen | {Round(Regels.Prijs * 1.21, 2)} | 5.45 |
Abs(getal) | Absolute waarde | {Abs(Regels.Saldo)} | 150.00 |
Ceiling(getal) | Naar boven afronden | {Ceiling(Regels.Gewicht)} | 5 |
Floor(getal) | Naar beneden afronden | {Floor(Regels.Gewicht)} | 4 |
Functies combineren
Je kunt functies in elkaar nesten. Een veelvoorkomend patroon:
{Format("{0:dd MMMM yyyy}", AddDays(Order.Datum, 30))} Dit berekent de datum 30 dagen na de orderdatum en toont die als 14 april 2024. Je combineert hier een datumfunctie (AddDays) met een opmaakfunctie (Format).
Nog een voorbeeld — een betaaltermijn op een factuur:
Uiterste betaaldatum: {Format("{0:dd-MM-yyyy}", AddDays(Factuur.Datum, 30))} ReflexBlue-functies
Naast de standaard Stimulsoft-functies biedt ReflexBlue een set eigen functies. Je vindt ze in het woordenboek onder Functies > ReflexBlue. Hier de belangrijkste:
| Functie | Wat het doet | Voorbeeld |
|---|---|---|
Coalesce(val1, val2, ...) | Geeft de eerste niet-lege waarde terug | {Coalesce(Order.Klant.Email, "Geen e-mail")} |
AreDatesEqual(d1, d2) | Vergelijkt twee datums (negeert tijdsdeel) | {IIF(AreDatesEqual(Order.Datum, Today), "Vandaag", "")} |
ISOWeek(datum) | Weeknummer volgens ISO 8601 | {ISOWeek(Order.Datum)} → 12 |
Filter(bo, expressie, kolom) | Zoekt in een business object en geeft de kolomwaarde van de eerste match terug | {Filter(Artikelen, "Code==\"A001\"", "Naam")} |
Translate(bo, kolom, taal) | Vertaalt een kolom van een business object | {Translate(Artikel, "Omschrijving", Taal)} |
VatToDutch(type) | BTW-type naam in het Nederlands | {VatToDutch(Regels.BTWCode)} → Hoog tarief |
Er zijn ook VatToFrench(), VatToGerman() en VatToSpanish() voor meertalige facturen.
Twee gespecialiseerde functies voor het verdelen van waarden over meerdere pagina’s:
| Functie | Wat het doet |
|---|---|
Chunk(waarde, chunkGrootte, paginaNummer) | Verdeelt een waarde over pagina’s (bijv. 10 / chunk 3 = 3, 3, 3, 1) |
ToRatio(ratio, waarde, chunkGrootte, paginaNummer) | Berekent een proportionele waarde verdeeld over pagina’s |
De expressie-editor als hulpmiddel
Bij complexe expressies is de expressie-editor je beste vriend:
- Links zie je alle beschikbare functies, gegroepeerd per categorie (inclusief de ReflexBlue-functies)
- Rechts zie je alle velden uit het woordenboek
- De editor geeft syntax-highlighting en foutmeldingen
Dubbelklik op het tekstvak en klik op Expressie om de editor te openen.
Samenvatting
- Tekstfuncties:
Left(),Right(),Mid(),Trim(),Replace(),ToUpperCase() - Datumfuncties:
Today,DateDiff(),AddDays(),Year(),Month(),Day() - Getalfuncties:
Round(),Abs(),Ceiling(),Floor() - ReflexBlue-functies:
Coalesce(),AreDatesEqual(),ISOWeek(),Filter(),Translate(),VatToDutch() - Functies kun je nesten: combineer berekening + opmaak in één expressie
- De expressie-editor helpt bij complexe expressies