Berekeningen
Als je bij een component via het muismenu voor Berekeningen... kiest, dan krijg je een venster te zien, waarin je een rekenkundige formule kunt invoeren.
De database-componenten moeten wel gekoppeld zijn aan een database-veld!
Dit database-veld bepaalt namelijk het moment waarop de berekening moet worden uitgevoerd.
In het memoveld kun je de formule intikken. Een formule kan bestaan uit de volgende elementen:
-
Operator + - / * ( ) AND OR
-
Layout-veld, je kunt die selecteren met de knop Invoegen veld.
Selecteer je hetzelfde veld, dan wordt gerekend met de oorspronkelijke waarde van het veld; -
Functie, zie onderstaand overzicht;
- #13, gebruik deze code om een nieuwe regel te beginnen, bijvoorbeeld: ETIKETGEGEVENS_NAAM_1 + #13 + ETIKETGEGEVENS_NAAM_2.
De volgende veldtypes worden ondersteund:
-
Integer, geheel getal;
-
Double, getal met (eventueel) cijfers achter het decimaalteken;
-
DatumTijd, variant van een Double, bestaande uit een datum- en een tijddeel, van elkaar gescheiden door een decimaalteken. Doordat de datum wordt bijgehouden als het aantal dagen sinds 30 december 1899, kunnen gemakkelijk berekeningen worden uitgevoerd;
-
Tekst, teksten kunnen samengevoegd worden met +.
Een aanhalingsteken binnen een tekst moet worden aangegeven als \' of als '' (twee aanhalingstekens); -
Boolean, waar of niet waar. Gebruik kan worden gemaakt van de operatoren =, <>, <=, >=, > en <
Functie | Werking | Resultaat |
---|---|---|
ABSOLUTEPAGECOUNT() | geeft totale aantal pagina's van het document. In de layout moet Rapport doorlopen in menu Rapport ingesteld zijn op Tweemaal. Zie ook bij PAGECOUNT() | Integer |
Voorbeeld: |
ABSOLUTEPAGECOUNT()
|
|
ABSOLUTEPAGENO() | geeft het 'werkelijke' paginanummer; hierbij wordt geen rekening gehouden met eventuele wijzigingen in de nummering (bijvoorbeeld bij Groepen). Zie ook bij PAGENO() | Integer |
Voorbeeld: |
ABSOLUTEPAGENO()
|
|
ADDTIME(double,Tijd) | telt double bij tijd op en geeft tekst terug in het tijdformaat -u:mm | tekst |
Voorbeeld: |
AddTime (1.75,09:00)
|
10:45 9:00 |
ADDTIME(double) | geeft double als tekst terug in het tijdformaat -u:mm | tekst |
Voorbeeld: |
Addtime(1.75)
|
1:45 |
ABS(getal) | Geef absolute waarde van het getal | Integer |
Voorbeeld: |
ABS(-543)
|
543 |
BOOLTOSTR(boolean) | Geeft False of True in tekstvorm | Tekst |
Voorbeeld: |
BOOLTOSTR(SAMETEXT('King','KING'))
|
True |
BOOLTOSTR(boolean, 'strFalse', 'strTrue') | Geeft zelf op te geven tekst terug in plaats van False of True | Tekst |
Voorbeeld: |
BOOLTOSTR(SAMETEXT('King','KING'),'Fout','Goed')
|
Goed |
COMPAREDATE(datumtijd1, datumtijd2) | vergelijkt de datum van twee datumtijdvelden, de tijd wordt genegeerd. Geeft 0 als beide datums gelijk zijn, -1 als datumtijd1 vóór datumtijd2 valt en +1 als datumtijd1 na datumtijd2 valt. Zie ook bij SAMEDATE | Integer |
Voorbeeld: |
COMPAREDATE(NOW,KOPGEGEVENS_VERVALDATUM)
|
-1 |
COMPARENUMERIC(getal1, getal2, verschil) | controleert of beide getallen (floating points of integers) gelijk zijn, rekening houdend met een toegestaan verschil. Als geen verschil wordt opgegeven, wordt uitgegaan van een verschil van 0,01. Geeft 0 als beide getallen gelijk zijn, -1 als Getal1 kleiner is en +1 als Getal1 groter is. Zie ook bij SAMENUMERIC | Integer |
Voorbeeld: |
COMPARENUMERIC(0.542,0.543,0,001)
|
-1 |
COMPARETEXT ('tekst1', 'tekst2') | controleert of beide teksten gelijk zijn. Hierbij wordt onderscheid gemaakt tussen hoofdletters en kleine letters. Geeft 0 als beide teksten gelijk zijn, -1 als Tekst1 kleiner is en +1 als Tekst1 groter is. Zie ook bij SAMETEXT | Integer |
Voorbeeld: |
COMPARETEXT('King','M')
|
-1 |
COPY(‘tekst’, integer1, integer2) |
Geeft <integer2> tekens van <tekst> vanaf teken <integer1>. Zonder <integer2> geeft de functie <tekst> vanaf teken <integer1> |
Tekst |
Voorbeeld:
|
COPY('King Software',1,4)
|
King |
DATE |
Huidige systeemdatum volgens Windows short date format; alleen om af te drukken, niet geschikt voor berekeningen |
Tekst |
Voorbeeld:
|
DATE |
17-03-2012 |
DATEOF(datumtijd) | geef het datumdeel van een datumtijdveld. Zie ook bij TIMEOF | DatumTijd |
Voorbeeld: |
DATEOF(NOW)
|
17-3-2012 |
DAYOF(datumtijd) | dag van de maand van de datum (1 t/m 31) | integer |
Voorbeeld: |
DAYOF(KING_ALGEMEEN_DATUM)
|
2 |
DAYOFTHEWEEK(datumtijd) | dag van de week van de datum (1 t/m 7) volgens ISO 8601 | integer |
Voorbeeld: |
DAYOFTHEWEEK(KING_ALGEMEEN_DATUM)
|
3 |
DAYSBETWEEN(datumtijd1, datumtijd2) | geeft het aantal hele dagen tussen twee datumtijdvelden; de tijd wordt genegeerd. Zie ook bij DAYSPAN | Integer |
Voorbeeld: |
DAYSBETWEEN(NOW,KOPGEGEVENS_VERVALDATUM)
|
21 |
DAYSPAN(datumtijd1, datumtijd2) | geeft het aantal dagen tussen twee datumtijdvelden, rekening houdend met de tijd. Zie ook bij DAYSBETWEEN | Double |
Voorbeeld: |
DAYSPAN(NOW,KOPGEGEVENS_VERVALDATUM)
|
21,43017917824 |
DIV(getalX, getalY) |
GetalX gedeeld door GetalY, alleen de cijfers vóór het decimaalteken |
Integer |
Voorbeeld:
|
DIV(7.4,2) |
3 |
ENCODEDATETIME(jaar, maand, dag, uur, minuut, seconde) ENCODEDATE(jaar, maand, dag) ENCODETIME(uur,minuut, seconde) |
stelt een datumtijdveld samen | DatumTijd |
Voorbeeld: |
ENCODEDATE(2012, 3, 17)
|
17-3-2012 |
ENSURERANGE(getal, minimum, maximum) | geeft het getal tussen minimum en maximum dat het dichtste bij het opgegeven getal zit | Integer of Double |
Voorbeeld: |
ENSURERANGE(15, -5, 5)
|
5 |
FORMAT('formatstring', Arg1, Arg2, Arg3, enz.) | Geeft combinatie van tekst en/of getallen (floating points en integers) weer in zelf te bepalen formaat | Tekst |
Voorbeeld: |
FORMAT('Korting = %.3f %%', 2.0)
|
Korting = 2.000 % |
FORMATDATETIME('formaat', datumtijd, 'taalcode') |
Dit converteert het datum-tijdveld naar een tekst in een zelf op te geven formaat, rekening houdend met de opgegeven taalcode. Wordt er geen taalcode meegegeven, dan wordt de taalcode van het document (bijv. factuur) of anders de default-taal aangehouden. Aanvulling: 'c' staat voor de internationale datumtijdnotatie |
Tekst |
FORMATDATETIME('dddd d mmmm jjjj', NOW, 'N') | woensdag 29 februari 2012 | |
FORMATNUMERIC(‘formaat’, getal, 'taalcode') of FORMATNUMERIC(aantaldecimalen, getal, 'taalcode') |
Geeft getal weer in zelf te bepalen formaat of met het opgegeven aantal decimalen, rekening houdend met de opgegeven taalcode. Wordt geen taalcode meegegeven, dan wordt de taalcode van het document (bijv. factuur) of anders de default-taal aangehouden. |
Tekst |
Voorbeeld:
|
FORMATNUMERIC('#0.00',0.3,'N') |
0.30 |
FRAC(getalX) |
De cijfers ná het decimaal teken van getalX |
Integer |
Voorbeeld:
|
FRAC(459.0536) |
0.0536 |
GETENVVAR('naam') | geeft de waarde van een Windows Environment variabele | Tekst |
Voorbeeld: |
GETENVVAR('windir')
|
C:\Windows |
IF(conditie, consequent, antecedent) |
Als <conditie> waar is, dan <consequent>, en anders <antecedent>. Je kunt hierbij gebruik maken van de operatoren OR, AND en NOT. |
|
Voorbeeld:
|
IF(DIV(24,6)>3,'Waar','Onwaar') |
Waar |
IF(integer, Arg1, Arg2, Arg3) | Als <integer> kleiner dan 0 is, dan Arg1, als <integer> gelijk aan nul is, dan Arg2, en als <integer> groter dan 0 is, dan Arg3. Te gebruiken in combinatie met Compare-functies | |
Voorbeeld: |
IF(543,Negatief,Nul,Positief)
|
Positief |
INDEX(integer, atype, ...) |
Het door de <integer> aangegeven element uit een verzameling (het eerste element is 0). ‘Atype’ wil zeggen: elk veld type is toegestaan |
Alle |
Voorbeeld:
|
INDEX(2,'K','i','n','g',) |
n |
INDEXRANGE(expressie1, expressie2, ...) | geeft index van de eerste boolean expressie die WAAR is, beginnend bij 1. Let op de volgorde van de expressies. Is geen van de expressies WAAR, dan geeft de functie 0 terug | Integer |
Voorbeeld: |
INDEXRANGE(Gewichtlevering<10, Gewichtlevering<25, Gewichtlevering<50) (en het gewicht van deze levering is 35)
|
3 |
INDEXVALUE(expressie1, waarde1, expressie2, waarde 2, waarde 3) | geeft opgegeven waarde terug als de bijbehorende boolean expressie WAAR is. De laatste waarde is optioneel en wordt teruggegeven als geen van de expressies WAAR zijn. De waarden moeten alle van hetzelfde type zijn | Alle |
Voorbeeld: |
INDEXVALUE(Artikelgegevens_Magazijnvoorraad>0, 'Voorradig', 'Uitverkocht')
|
|
INRANGE(getal, minimum, maximum) | geeft true als opgegeven getal niet kleiner is dan minimum en niet groter dan maximum | Boolean |
Voorbeeld: |
INRANGE(kopgegevens_factuurdatum, TODAY, TODAY+30)
|
True |
INT(getalX) |
De cijfers vóór het decimaalteken van getalX |
Integer |
Voorbeeld:
|
INT(354.15) |
354 |
LOADFILE('bestandsnaam') |
Tekstbestand of afbeelding laden in Memoveld of Afbeelding.
NB. Indien je de afbeelding wilt weergeven, neem dan NIET loadfile in de berekening op, zie voorbeeld 2. |
|
Voorbeeld 1:
Voorbeeld 2 (met weergave afbeelding): |
LOADFILE('c:\voorbeeld.txt' +'.gif)
'c:\voorbeeld.txt'+'.gif'
|
|
LOWER(‘tekst’) |
Tekst in kleine letters |
Tekst |
Voorbeeld:
|
LOWER('King') |
king |
MOD(getal1, getal2) | geeft de rest van de deling van getal1 door getal2 | Integer |
Voorbeeld: |
MOD(7, 3)
|
1 |
MONTHOF(datum) | Maandnummer van opgegeven datum | |
Voorbeeld: |
MONTHOF(31-10-2009)
|
10 |
NOW | Geeft systeemdatum en -tijd | DatumTijd |
Voorbeeld: |
NOW
|
17-3-2012 9:40:07 |
ODD(getal) | geeft true als de waarde oneven is | Boolean |
Voorbeeld: |
ODD(PAGENO())
|
|
PAGECOUNT() |
geeft paginanummer van de laatste pagina van het document, rekening houdend met eventuele wijzigingen in de nummering (bijvoorbeeld bij Groepen). In de layout moet Rapport doorlopen in menu Rapport ingesteld zijn op Tweemaal. Zie ook bij ABSOLUTEPAGECOUNT() |
Integer |
Voorbeeld: |
PAGECOUNT()
|
|
PAGENO() | geeft huidige paginanummer, rekening houdend met eventuele wijzigingen in de nummering (bijvoorbeeld bij Groepen). Zie ook bij ABSOLUTEPAGENO() | Integer |
Voorbeeld: |
PAGENO()
|
|
PRETTY(‘tekst’) |
Tekst in kleine letters, met een hoofdletter aan het begin |
Tekst |
Voorbeeld:
|
PRETTY('KING') |
King |
REGEX('expressie', 'tekst') | voert een Regular Expression uit t.b.v. geavanceerde tekstcontroles | Boolean |
Voorbeeld: |
REGEX('^[0-9]{4} [A-Za-z]{2}$', '2908 LV')
|
True |
REGEX('expressie', 'tekst', True) | voert een Regular Expression uit t.b.v. geavanceerde tekstcontroles, maar is niet case sensitive | Boolean |
Voorbeeld: |
REGEX('^[0-9]{4} [a-z]{2}$', '2908 LV', True)
|
True |
REGEXREPLACE('tekst1', 'expressie', 'tekst2') | geeft tekst1 terug met matches uit tekst1 vervangen door tekst2 conform de opgegeven Regular Expression | Tekst |
Voorbeeld: |
REGEXREPLACE('abc123123', '123$', 'xyz')
|
abc123xyz |
REGEXREPLACE('tekst1', 'expressie', 'tekst2', boolean1, boolean2) | geeft tekst1 terug met matches uit tekst1 vervangen door tekst2 conform de opgegeven Regular Expression. Boolean 1 geeft aan of de match case sensitive is, Boolean2 of alle matches vervangen moeten worden of alleen de eerste | Tekst |
Voorbeeld: |
REGEXREPLACE('abc123123', '123$', 'xyz', True, True)
|
abcxyzxyz |
SAMENUMERIC(getal1, getal2, verschil) | controleert of beide getallen (floating points of integers) gelijk zijn, rekening houdend met een toegestaan verschil. Als geen verschil wordt opgegeven, wordt uitgegaan van een verschil van 0,01. Zie ook bij COMPARENUMERIC | Boolean |
Voorbeeld: |
SAMENUMERIC(0.542,0.543,0.01)
|
True |
SAMEDATE(datumtijd1, datumtijd2) | controleert of twee datumtijdvelden dezelfde datum hebben, de tijd wordt genegeerd | Boolean |
Voorbeeld: |
SAMEDATE(NOW,KOPGEGEVENS_FACTUURDATUM)
|
False |
SAMETEXT ('tekst1', 'tekst2') | controleert of beide teksten gelijk zijn (afgezien van hoofdletters of kleine letters); zie ook bij COMPARETEXT | Boolean |
Voorbeeld: |
SAMETEXT('King','KING')
|
True |
SIGN(getal) | Geeft -1 als getal kleiner is dan nul, 0 als getal gelijk is aan nul en +1 als getal groter is dan nul | integer |
Voorbeeld: |
SIGN(543)
|
1 |
SQRT(getalX) |
Wortel uit <getalX> |
Integer |
Voorbeeld:
|
SQRT(144) |
12 |
STR(argument) |
Argument omgezet in tekstvorm |
Tekst |
Voorbeeld:
|
STR(FORMATNUMERIC('#0.00',0.3)) |
0.30 |
STRINGOF('tekst', aantal) | Herhaalt de tekst <aantal> maal | Tekst |
Voorbeeld: |
STRINGOF('King',2)
|
KingKing |
STRLEN(‘tekst’) |
Het aantal tekens van een tekst |
Integer |
Voorbeeld:
|
STRLEN('King Software') |
13 |
STRPOS(‘tekst1’,’tekst2’,Integer1) | Geeft de positie aan waar het teken staat van tekst1 in tekst2. De integer1 is optioneel, hiermee kan je opgeven dat je niet naar de eerste maar naar de tweede tekst zoekt | Integer |
Voorbeeld:
|
STRPOS('-', 'abcd-efgh-ijkl') STRPOS('-', 'abcd-efgh-ijkl',2) |
5 10 |
STRTODATETIME('tekst') | Tekst omgezet naar datumtijdveld. Alleen mogelijk bij een geldige datum en tijd in het Windows-datumtijdformaat | DatumTijd |
Voorbeeld: |
STRTODATETIME('17-3-2010 10:45')
|
17-3-2012 10:45:00 |
STRTOFLOAT('tekst') |
Tekst omgezet naar Double. Als decimaalteken mag zowel een komma als een punt worden gebruikt. Een minteken mag voor of achter het getal staan | Double |
Voorbeeld: | STRTOFLOAT('32,14') | 32.14 |
STRTOFLOAT('tekst', default) |
Tekst omgezet naar Double; als dat niet lukt, wordt de default-waarde teruggegeven. Als decimaalteken mag zowel een komma als een punt worden gebruikt. Een minteken mag voor of achter het getal staan | Double |
Voorbeeld: |
STRTOFLOAT('ditisgeengetal', 1)
|
1 |
STRTOFLOAT('tekst', 'decimaalteken') |
Tekst omgezet naar Double. Te gebruiken als het scheidingsteken voor duizendtallen wordt gebruikt na het decimaalteken. Wordt geen decimaalteken meegegeven, dan wordt de Windows-instelling gebruikt. Een minteken mag voor of achter het getal staan |
Double |
Voorbeeld: |
STRTOFLOAT('12.500,75',',') STRTOFLOAT('12.500,75','.')
|
12500.75 12.50075 |
STRTOINT(‘tekst’) |
Tekst omgezet naar integer |
Integer |
Voorbeeld: |
STRTOINT('02072012')
|
2072012 |
STRTOINT('tekst',default) | Tekst omgezet naar integer, geeft default terug als tekst geen getal bevat | Integer |
Voorbeeld: |
STRTOINT('help', 0)
|
0 |
TIME |
Huidige systeemtijd volgens het Windows long time format; alleen om af te drukken, niet geschikt voor berekeningen |
Tekst |
Voorbeeld:
|
TIME |
13:19:11 |
TIMEOF |
geef het tijddeel van een datumtijdveld. Via de knop Controleren krijg je ook een datum te zien. Zie ook bij DATEOF |
DatumTijd |
Voorbeeld: |
TIMEOF(NOW)
|
10:25:53 |
TODAY | Geeft systeemdatum, tijd=0 | DatumTijd |
Voorbeeld: |
TODAY -1
|
(geeft datum van gisteren) |
TRIM(‘tekst’) |
Verwijdert de spaties aan het begin en einde van een tekst |
Tekst |
Voorbeeld:
|
TRIM(' King ! ') |
King ! |
UPPER(‘tekst’) |
Zet tekst in hoofdletters |
Tekst |
Voorbeeld: |
UPPER('Kapitaal')
|
KAPITAAL |
WEEKOF(datumtijd) | weeknummer van de datum volgens ISO 8601 | Integer |
Voorbeeld: |
WEEKOF(KING_ALGEMEEN_DATUM)
|
27 |
YEAROF(datumtijd) | jaar van de opgegeven datum | |
Voorbeeld: |
YEAROF(31-01-2012)
|
2012 |
YEAROFWEEK(datumtijd) | jaar behorende bij de week waarin opgegeven datum valt, volgens ISO 8601 | |
Voorbeeld: | YEAROFWEEK(01-01-2012) | 2011 |
Aandachtspunten:
-
Gebruik de punt als decimaalteken;
-
Zet tekst tussen enkele aanhalingstekens;
- Gebruik ; (punt-komma) om commentaar toe te voegen in een berekening;
- Gebruik het aanhalingsteken ' en dus niet `
-
Gebruik niet de haken < en >, maar ( en );
-
Indien een veld geen waarde heeft, is het resultaat van de berekening 0 of leeg;
-
Bij de DBSom-component moet het resultaat van de berekening numeriek zijn;
- Een Variabele of DBSom-component mag worden gebruikt in de berekening van andere componenten. Het is dus mogelijk om een ingewikkelde berekening die in meerdere componenten wordt gebruikt, eenmalig uit te voeren in een variabele, waarna die variabele overgenomen kan worden in een andere berekening. Die Variabele kan zelf op Onzichtbaar worden gezet als die Variabele alleen in andere componenten wordt gebruikt en zelf niet afgedrukt hoeft te worden;
- Met de variabele waarde kan met de huidige waarde van de component worden gerekend, bijvoorbeeld waarde + IF((REGELGEGEVENS_REGELTOTAAL_EXCL_BTW<1), 1, 0) telt het aantal orderregels met een negatief regeltotaal.
Voorbeeld:
Ook aan afbeeldingen kun je een berekening meegeven. Als we op ons briefpapier een ander bedrijfslogo, afhankelijk van de landcode van de klant. Indien een klant gevestigd is in Nederland of België, wordt als afbeelding logo1.jpg gebruikt en in alle andere gevallen, wordt logo2.jpg gebruikt:
> IF((KOPGEGEVENS_FACTUURADRES_LANDCODE = 'NL') OR (KOPGEGEVENS_FACTUURADRES_LANDCODE = 'BE'), 'C:\Afbeelding\Logo1.jpg', 'C:\Afbeelding\Logo2.jpg')
Voorbeeld:
In labels en memovelden kan je eigenlijk alleen berekeningen gebruiken die te maken hebben met teksten of delen van teksten. Zo kun je met behulp van een berekening bijvoorbeeld een extra tekst opnemen in het adresblok:
ETIKETGEGEVENS_NAAM_1 + #13 +
IF((ETIKETGEGEVENS_NAAM_2 <> '') AND (ETIKETGEGEVENS_NAAM_2 = 'N'), 'T.a.v. ', '') + ETIKETGEGEVENS_NAAM_2 + IF(ETIKETGEGEVENS_NAAM_2 <> '',#13, '') +
ETIKETGEGEVENS_STRAAT+ ' ' + ETIKETGEGEVENS_HUISNUMMER + #13 +
ETIKETGEGEVENS_POSTCODE + ' ' + ETIKETGEGEVENS_PLAATS
Je ziet dat achter elke regel de code "+ #13 + " wordt gebruikt. Met deze code geef je aan dat je op een nieuwe regel wilt beginnen.
-
Het door elkaar gebruiken van verschillende veldtypes is niet toegestaan;
-
Houd het type van het resultaat gelijk aan het veldtype. Wel probeert KING ERP altijd om het resultaat van de berekening te converteren naar het veldtype. Conversie van een numeriek resultaat naar een tekstveld is altijd mogelijk maar het converteren van een alfanumeriek resultaat naar een numeriek veld is niet mogelijk;
-
Als expressies op een bedragveld resulteren in een tekst, dan kan dat ‘bedrag’ niet worden omgerekend naar een andere valuta;
-
Om de som, het gemiddelde of het maximum/minimum te bepalen van een reeks berekende velden, dien je de component DBSom te gebruiken. Zie voor meer informatie bij Detailberekeningen.
Voorbeeld
Zie bij Detailberekeningen.
Controleren
Met de knop Controleren kun je controleren of de ingevoerde formule geldig is. Het resultaat zie je in de statusbalk.
Formaat
Bij FormatDateTime() kun je het formaat op twee manieren vastleggen:
- je kunt zelf het formaat samenstellen aan de hand van de codes die vermeld zijn bij Taalcodes: Datumformaat en Taalcodes:Tijdformaat.
- je kunt gebruik maken van onderstaande formaatcodes, die verwijzen naar het KING ERP-formaat zoals vastgelegd in de betreffende taalcode:
Formaatcode Betekenis TDK King Datumformaat kort TDM King Datumformaat midden TDL King Datumformaat lang T1 King Tijdformaat 1 T2 King Tijdformaat 2 T3 King Tijdformaat 3 SD Windows datumformaat kort LD Windows datumformaat lang ST Windows tijdformaat kort LT Windows tijdformaat lang Formaatcodes kunnen niet worden gecombineerd (gebruik dus niet 'TDK T1')!