FileMaker - Tip
180
![]()
|
|
|
In MailMerge-toepassingen gebeurt het vaak dat we werken met Merge Fields. Dat zijn onze gewone velden, maar ze zien er dan even anders uit: het zijn niet langer de rechthoekige blokjes, maar enkel de veldnamen tussen aanhalingstekens. Het zijn tekstobjecten. Het knappe is dat we daar willekeurige tekst voor en achter kunnen plaatsen. Zo maken we dus mail merge-brieven! Zo'n Merge Field accepteert dat we speciale formaten vragen voor datums, getallen, enzovoort. Maar dat formaat geldt dan wel voor alle datums in dat tekstobject, en ook voor alle getallen. Hierdoor zou een factuurbedrag en een factuurnummer op dezelfde manier geformatteerd worden: niet alleen 128,35 EUR voor het bedrag, maar ook 4.508,00 EUR voor het factuurnummer, en dat is natuurlijk niet de bedoeling... Om dit probleem op te lossen moeten we dus het factuurnummer ongeformatteerd laten, en moeten we zelf zorgen voor de formattering van het bedrag. We moeten dus een getalformaat nabouwen in een tekstveld. Hoe doen we dat? De kern van het probleem is dat we met een tekstveld werken en dat we daar een specifiek getalformaat in willen. FileMaker laat echter niet toe een getalformattering toe te passen op een tekstveld als dat tekstveld geen Merge Field is. We kunnen dus niet anders dan het zelf doen: we moeten dus ons getal omzetten in een tekst, en daar zelf de formattering op toepassen. Hierna een voorbeeldje van zo'n formule: stel dat we het bedrag 108,47 EUR willen, afkomstig uit een numeriek veld, terwijl het uiteindelijk moet verschijnen als deel van onze tekst in een tekstveld. We gebruiken deze formule (er staat hier wel meer in dan we voor dit voorbeeld nodig hebben, maar dat is omdat de formule voor alle getallen moet werken, ook die zonder decimalen):
Int(Round(bedrag;2)) & "," & Right("00" & NumToText(Round(bedrag;2) * 100); 2)
Even uitleggen: Int(Round(bedrag;2)) geeft het gedeelte voor de komma: we ronden 108,47 af tot 2 cijfers na de komma, wat natuurlijk ook 108,47 geeft, en daar nemen we de Integer van, dat geeft 108. Daarna voegen we met een Concatenate zelf een decimaalkomma toe; dan hebben we al 108, Tenslotte moeten we nog het gedeelte na de komma, namelijk de decimalen toevoegen. Dat doen we met die
Right("00" & NumToText(Round(bedrag;2) * 100); 2)
We concatenaten twee nullen met de tekstversie van het bedrag afgerond tot 2 decimalen maal honderd. Dus 108,47 x 100 wat 10847 geeft, en daar die twee nullen voor. Dat geeft 0010847. Van dat "ding" nemen we de 2 meest rechtse posities, nl. 47. Dat concatenaten we aan die 108, zodat we 108,47 krijgen, maar dan in tekstformaat! We kunnen hier met Concatenate vooraf of achteraan nog munteenheden en om het even wat toevoegen. Nog meer in Tip 181.
|
avd@avd-ci.be - contactformulier