Funktionen im Formularwesen

Funktionen im Formularwesen


Innerhalb des Formularwesens lassen sich viele Inhalte nach Ihren individuellen Wünschen auf dem Dokument darstellen.
Sollte allerdings ein Wert als Information fehlen oder umgewandelt werden müssen, ist die Verwendung von Funktionen meist unumgänglich. Im Folgenden möchten wir darlegen, wie Funktionen grundsätzlich aufgebaut sind und welche Funktionen verfügbar sind.

Aufbau von Funktionen

Grundsätzlich stehen Funktionen immer in eckigen Klammern. Innerhalb dieser eckigen Klammern können auch mehrere Funktionen miteinander verknüpft werden.

Normaler Text [<Funktion>] Weiterer normaler Text

AMS kennt eine Reihe von Funktionen welche für die unterschiedlichsten Anwendungsgebiete nützlich und sinnvoll sein können. Beim Funktionsnamen wird die Groß-/Kleinschreibung ignoriert. Die auszuwertenden Ausdrücke hingegen berücksichtigen Groß-/Kleinschreibung.

[DC(“AnredeBaustein”, 16)]
[Dc(“AnredeBaustein”, 16)]
[dC(“AnredeBaustein”, 16)]
[dc(“AnredeBaustein”, 16)]

Die Syntax der Formelauswertung basiert auf Clipper, welche als Sprache in AMS nicht vollintegriert ist. Diese externe Clipper-Dokumentation kann herangezogen werden.

Im weiteren Verlauf gibt es einen Abschnitt mit Beispielen, wo die Funktionsweise ausgewählter Funktionen demonstriert wird.

Operatoren

Beim Verwenden von komplexeren Funktionsaufrufen wird häufig eine Art von Vergleich von Werten notwendig. Grundlegend werden dafür folgende Operatoren unterstützt.

Operator

Verwendung

Art

Operator

Verwendung

Art

%

Modulo

Mathematisch

*

Multiplikation

Mathematisch

**

Potenzierung

Mathematisch

+

Addition

Mathematisch

-

Subtraktion

Mathematisch

/

Division

Mathematisch

->

Zuweisung

 

.AND.

Und

Logisch

.OR.

Oder

Logisch

.NOT.

Ungleich

Logisch

=

Gleich

 

!=

Ungleich

 

<>

Ungleich

 

>

Größer

 

>=

Größer-oder-gleich

 

<

Kleiner

 

<=

Kleiner-oder-Gleich

 

Verfügbare Funktionen

Allgemeine Funktionen

Funktion

Rückgabetyp

Beschreibung

Funktion

Rückgabetyp

Beschreibung

abs(Zahl)

Numerisch

Liefert den Abstand einer Zahl von Null, unabhängig von der Richtung zurück.

Beispiel:

[abs(-5)]

Ergebnis: 5

acos(Zahl)

Numerisch

Der Arkuskosinus ist die Umkehrfunktion der geeigneten eingeschränkten Sinus- bzw. Kosinusfunktion.

Beispiel:

[acos(-0.5)]

Ergebnis:

2.0943951023932

alltrim(Text)

Text

Entfernt die Leerzeichen am Anfang und Ende des Texts.

Beispiel:

[alltrim(" VorUndDanchSindLeerzeichen ")]

Ergebnis:

VorUndDanchSindLeerzeichen

asc(Buchstabe)

Ganzzahl

Die Buchstabenkonvertierungsroutine liefert den ASCII-Wert eines Buchstaben [0-255].

Beispiel:

[asc("A")]

Ergebnis:

65

asin(Zahl)

Numerisch

Der Arkussinus ist die Umkehrfunktion der trigonometrischen Winkelfunktion sin.

Beispiel:

[asin("1")]

Ergebnis:

1.5707963267949

at(Suchbegriff, Text)

Ganzzahl

Die Textfunktion bestimmt die Position des ersten Vorkommens des Suchbegriffs im Text - Die Indexierung startet bei 1.

Beispiel:

[at("bei", "Ich arbeite bei Assfinet")]

Ergebnis:

Im Worte arbeite ist der Suchtext bei enthalten,

entsprechend liefert die Funktion den Wert 7

zurück.

ati(Suchbegriff, Text)

Ganzzahl

Analoge Funktionsweise zu at. Groß- und Kleinschreibung wird in dieser Variante nicht unterschieden.

atan(Zahl)

Numerisch

Berechnet den Arkustangens einer bestimmten Zahl.

Beispiel:

[atan("1")]

Ergebnis:

0.785398163397448

between(Prüfwert, Anfangswert, Endwert)

Wahrheitswert

Die Funktion between bestimmt, ob der Prüfwert zwischen A oder B liegt. Sie ist inklusiv, Anfangswert und Endwert werden einbezogen.

Beispiele und deren Ergebnisse:

[between(2, 2, 4)]

.T. für Ja

[between("2", "2", "4")]

.T. für Ja

[between(5, 2, 4)]

.F. für Nein

[between("5", "2", "4")]

.F. für Nein

case(Ausdruck Auswahl, “Prüfwert 1: Anweisung 1”, “Prüfwert 2: Anweisung 2”, “Prüfwert n: Anweisung n”, “_ELSE_: Standardwert”)

Dynamisch

Die case-Funktion ist eine Alternative zur Auswertung von Anweisungen für die if-Formel.

Der erste Parameter ist der Ausdruck, welcher nach Ermittlung mit den Prüfwerten verglichen wird.

Anschließend folgen die Prüfwerte in Kombination mit der auszuführenden Anweisung.

Bitte beachten

Prüfwerte und Anweisungen müssen in Anführungszeichen ( “ “ ) gesetzt werden. Wenn Sie eine Formel mit weiteren Anführungszeichen wie amssqlsingle verwenden wollen, müssen Sie diese durch den Backslash ( \ ) kennzeichnen.

Sollten Sie einen Standardwert als Ergebnis wünschen, können Sie dies via _ELSE_ signalisieren.

Bitte beachten: _ELSE_ muss stets am Ende der Auflistung stehen. Das Schlüsselwort führt zum Abbruch der Prüfung.

Prüfwerte können Wörter oder Zahlen sein. Für Anweisungen können Formeln, Bausteine, Textvariablen, usw. verwendet werden.

Ein paar Formatregeln:

  • Prüfwerte können nicht leer sein, Sie müssen den linken Teil stets angeben

(":"Ja", "1:Nein")
  • Doppelte Bezeichnungen für Prüfwerte sind nicht erlaubt - Prüfwerte müssen eindeutig sein

("1:"Ja", "1:Nein")

Somit können via amssqlsingle Daten ermittelt und verglichen werden.

  • Das Schlüsselwort ELSE_ ist nur als letztes Prüfargument gültig. Andernfalls wird eine Fehlermeldung mit Positionsangabe in der Argumentliste ausgegeben. Theoretisch kann auch nur _ELSE_ als alleiniges Argument verwendet werden - Der Wert wird somit immer ausgegeben.

Formeln werden erst bei Übereinstimmung mit einem Prüfwert aufgelöst. Wenn Sie für vier Prüfwerte vier Formeln hinterlegen, wird nur für die Übereinstimmung die Formel aufgelöst, oder bei Angabe von _ELSE_.

Es folgen einige Beispiele und deren Ergebnisse:

Der erste Datensatz der Selektion für die Vertragsnummer in der Datenbank ist die 12345.

[case(amssqlsingle("SELECT FIRST 1 VNR FROM VERTRAG"), "12345:300", "1:400")]

Ergebnis:

300

[case(amssqlsingle("SELECT FIRST 1 VNR FROM VERTRAG"), "1:300", "12345:400")]

Ergebnis:

400

_ELSE_ ist optional.

[case(amssqlsingle("SELECT FIRST 1 VNR FROM VERTRAG"), "1:300", "1:400", "_ELSE_:500")]

Ergebnis:

500

Anbei weitere Beispiele für die Verwendung von Bausteinen und SQL-Abfragen im Anweisungsteil:

Verwendung einer Formularvariable im Kundenkontext:

Sollte die PLZ 53111 sein, erfolgt “Nein” als Ausgabe. Ansonsten erfolgt die Ausgabe der PLZ am Kunden.

[case(amssqlsingle("SELECT FIRST 1 VN_PLZ FROM KUNDE"), "53111:Nein","_ELSE_:(KUNDE->VN_PLZ)")]

Ausgabe eines Logos:

Bitte beachten Sie, dass die Anführungszeichen via \ entsprechend gekennzeichnet werden müssen.

[case(amssqlsingle("SELECT FIRST 1 VN_PLZ FROM KUNDE"), "1:","_ELSE_: dc(\"Logo\", 6)")]

Ausgabe einer PLZ anhand einer VNR:

[case(amssqlsingle("SELECT FIRST 1 VNR FROM VERTRAG"), "12345:Ja","_ELSE_:amssqlsingle(\"SELECT FIRST 1 VN_PLZ FROM KUNDE\")")]

Wenn die VNR 12345 ermittelt worden ist, wird “Ja” ausgegeben. Ansonsten wird in diesem Falle die PLZ des VN ausgegeben. Anführungszeichen müssen auch hier entsprechend mit \ maskiert werden.

ceiling(Numerischer Wert)

Numerisch

Rundet die übergebene Zahl auf eine Ganzzahl in Richtung plus unendlich auf.

Beispiele und deren Ergebnisse:

[ceiling(-2.8)]

-2

[ceiling(2.8)]

3

[ceiling(-1.0)]

-1

chr(ASCII-Wert)

Text

Die Buchstabenkonvertierungsroutine liefert den den Buchstaben eines ASCII-Wertes [0-255].

Beispiel:

[chr(65)]

Ergebnis:

A

cmonth(Datum)

Text

cmonth liefert den ausgeschriebenen Monatsnamen (Januar-Dezember) zu einer Datumsangabe.

Beispiel:

Es ist der 12.11.2024

[cmonth(date())]
[cmonth("01.11.2024")]

Ergebnis:

November

cos(Numerischer Wert)

Numerisch

Berechnet den Kosinus einer bestimmten Zahl.

Beispiel:

[cos(1.0)]

Ergebnis:

0.54030230586814

ctod(Datum)

Datum

Die Funktion konvertiert eine Textfolge zu einem Datumswert und liefert im Fehlerfall ein leeres Datum.

Somit können z.B. zwei Datumswerte mathematisch verglichen werden.

Beispiel:

Es ist der 12.11.2024

[ctod(date()) > ctod(date()-2)]

Ergebnis:

12.11.2024 ist größer als der 10.11.2024, somit

.T. für Ja.

[ctod("01.11.2024")]

Ergebnis:

01.11.2024

date()

Datum

date liefert das Systemdatum als Datumswert zurück.

Beispiel:

Es ist der 12.11.2024

[date()]

Ergebnis:

12.11.2024

day(Datum)

Ganzzahl

Liefert den Tag des Datums als Zahlenwert

Beispiel:

Es ist der 16.11.2024

[day(date())]

Ergebnis:

16

dow(Datum)

Ganzzahl

Liefert den numerischen Wert des Tages in der Woche. Abweichend von dow() in Clipper liefert die Funktion die Wochentage von Montag (1) bis Sonntag (7).

Beispiel:

Es ist der 16.11.2024, Samstag

[dow(date())]

Ergebnis:

6

dtoc(Datum)

dtoc(Zeit)

Text

Liefert das Datum oder die Zeit als Zeichenfolge.

Beispiel:

Es ist der 16.11.2024, Samstag

[dtoc(date())]

Ergebnis:

16.11.2024

Beispiel 2:

Es ist der 17:00 Uhr

[dtoc(time())]

Ergebnis:

17:00

dtos(Datum)

Text

Liefert das Datum als Zeichenfolge im Format yyyymmdd.

Beispiel:

Es ist der 16.11.2024

[dtos(date())]

Ergebnis:

20241116

empty(Prüfwert)

Wahrheitswert

Liefert einen Wahrheitswert, wenn der übergebene Wert leer ist.

Beispiele:

[empty("")]

.F. für Nein

[empty("Test")]

.T. für Ja

floor(Numerischer Wert)

Numerisch

Rundet die übergebene Zahl auf eine Ganzzahl in Richtung minus unendlich auf.

Beispiele und deren Ergebnisse:

[floor(-2.8)]

-3

[floor(2.8)]

2

[floor(-1.0)]

-1

iif(Bedingung, Wert WennWahr, wertWennFalsch)

Dynamisch

Anhand der übergebenen Bedingung wird der Wahrheitswert oder Unwahrheitswert zurückgegeben

if(bedingung, wertWennWahr, wertWennFalsch)

int(Numerischer Wert)

Ganzzahl

Liefert einen Ganzzahlenwert zurück.

Es wird kaufmännisch gerundet.

Beispiel:

[int(5.6)]

Ergebnis:

6

Beispiel:

[int(5.2)]

Ergebnis:

5

isAlpha(Text)

Wahrheitswert

Prüft, ob das erste Zeichen im Text alphabetisch ist.

Beispiel:

[isAlpha(5.6)]

Ergebnis:

.F. für Nein

Beispiel 2:

[isAlpha("A")]

Ergebnis:

.T. für Ja

isDigit(Text)

Wahrheitswert

Prüft, ob das erste Zeichen eine Zahl ist.

Beispiel:

[isDigit(4)]

Ergebnis:

.T. für Ja

Beispiel 2:

[isDigit("A")]

.F. für Nein

isLower(Text)

Wahrheitswert

Prüft, ob das erste Zeichen ein Kleinbuchstabe ist.

Beispiel:

[isLower("A")]

Ergebnis:

.T. für Ja

Beispiel 2:

[isLower("a")]

.F. für Nein

isUpper(Text)

Wahrheitswert

Prüft, ob das erste Zeichen ein Großbuchstabe ist.

Beispiel:

[isUpper("A")]

Ergebnis:

.T. für Ja

Beispiel 2:

[isUpper("a")]

.F. für Nein

kalenderwoche(Datum)

Text

Liefert die Kalenderwoche anhand eines Datums.

Beispiel:

Es ist der 17.11.2024

[kalenderwoche(date())]

Ergebnis:

46

left(Text, Anzahl Zeichen)

Text

Liefert die gewünschte Anzahl Zeichen einer Zeichenkette ausgehend von links zurück.

Beispiel:

[left("Ich bin", 3)]

Ergebnis:

Ich

Beispiel 2:

[left("Ich gehe nach Hause", 8)]

Ergebnis:

Ich gehe

len(Text)

Ganzzahl

Ermittelt die Textlänge der Zeichenkette.

Beispiel:

[len("Test")]

Ergebnis:

4

log(Numerisch)

Numerisch

Ermittelt den logarithmischen Wert einer Zahl.

Beispiel:

[log(100)]

Ergebnis:

4.60517018598809

log10(Numerisch)

Numerisch

Gibt den Logarithmus einer Zahl zur Basis 10 zurück.

Beispiel:

[log10(100)]

Ergebnis:

2

lower(Text)

Text

Die übergebene Zeichenkette wird in Kleinbuchstaben umgewandelt.

Beispiel:

[lower("Ich Bin Es")]

Ergebnis:

ich bin es

ltrim(Text)

Text

Entfernt die Leerzeichen am Anfang des Texts.

Beispiel:

[alltrim(" VorneSindLeerzeichen")]

Ergebnis:

VorneSindLeerzeichen

max(a, b)

Dynamisch

Liefert den größeren der beiden Übergabewerte zurück

min(a, b)

Dynamisch

Liefert den kleineren der beiden Übergabewerte zurück

mod(a, b)

Ganzzahl

Modulo-Berechnung

monatsanfang(datum)

Datum

Liefert den Anfang des Monats vom übergebenen Datum zurück

monatsende(datum)

Datum

Liefert das Ende des Monats vom übergebenen Datum zurück

month(datum)

Ganzzahl

Liefert den Monat als Ganzzahl zurück

padc(text, length, fillchar)

Text

Der übergebene Text wird gleichmäßig links und rechts um das Füllzeichen aufgefüllt

padl(text, length, fillchar)

Text

Der übergebene Text wird links um das Füllzeichen aufgefüllt

padr(text, length, fillchar)

Text

Der übergebene Text wird rechts um das Füllzeichen aufgefüllt

pi()

Numerisch

Es wird Mathematisch PI zurückgeliefert

pow(basis, exponent)

Numerisch

Ermittelt den Exponent

proper

 

 

rat(text, search)

Ganzzahl

Liefert die letzte Position des Suchwerts innerhalb des Suchstrings. “rat” agiert dabei ohne Beachtung von Groß/Kleinschreibung.

rati(text, search)

right(text, anzahlZeichen)

Text

Liefert die gewünschte Anzahl an Zeichen von Rechts des übergebenen Texts zurück

round(zahl, anzahlNachkommastellen)

Numerisch

Rundet eine Zahl auf die gewünschte Anzahl an Nachkommastellen

rtod(datum)

 

 

rtrim

Text

Befreit eine Zeichenfolge rechts von Leerzeichen

seconds()

Ganzzahl

Liefert die Anzahl der Sekunden seit Tagesbeginn

sin

 

 

space(anzahl)

Text

Liefert eine Zeichenkette aus Leerzeichen in der gewünschten Länge

sqrt(Numerisch)

Numerisch

Liefert die Wurzel der übergeben Zahl zurück

str(Text)

Text

Konvertiert eine Zahl zu einer Zeichenkette

str(Numerisch, Optional, Optional, Optional)

string(Text)

Text

Liefert Leerzeilen in der Länge des übergeben Texts

strtran(String, Search, Replace, Start, Count)

Text

Sucht und Ersetzt einen Suchstring innerhalb eines übergebenen Texts

strzero(number, length, decimals)

Text

 

stuff(String,Start,Delete,Insert)

Text

 

substr(text,start,count)

Text

Liefert einen Teil der übergebenen Zeichenkette zurück

tan

 

 

time()

Text

Liefert die Systemzeit zurück

upper(Text)

Text

Liefert die übergebene Zeichenkette in Großbuchstaben zurück

val

Numerisch

Konvertiert eine Zeichenkette zu einem numerischen Wert

wochemonat(datum)

Ganzzahl

Liefert die Woche des Monats vom übergebenen Datum zurück

year(datum)

Ganzzahl

Liefert die Jahreszahl des übergebenen Datums zurück

AMS-Formeln

Funktion

Kontext

Rückgabetyp

Beschreibung

Funktion

Kontext

Rückgabetyp

Beschreibung

ams_repeatsparte(formel)

Vertrag

Numerisch

Führt mit Vertragssparten-Kontext die übergebene Formel aus, sofern der Vertrag einen zulässigen Tarif besitzt

ams_repeatsparte(formel, tarif)

Vertrag

Numerisch

Führt mit Vertragssparten-Kontext die übergebene Formel aus, sofern der Vertrag dem übergebenen Tarif entspricht

inkgessteuernr(position)

RW

Baustein

 

inksteuerinfo(x)

 

 

 

inksteuerinfo(x, y)

 

 

 

ams_splitsparte(betrag)

Vertrag

Numerisch

Der übergebene Betrag wird gleichmäßig anteilig für eine Vertragssparte ausgegeben und auf 2 Nachkommastellen gerundet

ams_splitsparte(betrag, anzahlNachkommastellen)

Vertrag

Numerisch

Der übergebene Betrag wird gleichmäßig anteilig für eine Vertragssparte ausgegeben und auf die übergebene Anzahl Nachkommastellen gerundet

ams_checktarif(text)

Vertrag

Wahrheitswert

Prüft, ob der übergebene Tarif im Vertrag vorhanden ist

ams_n2txt(Ganzzahl)

 

Text

Wandelt die übergebene Zahl in den textlichen Wert der enthaltenen Ziffern um

ams_exp(betrag, anzahlNachkomma, tausenderTrennzeichen)

 

Text

Wandelt einen numerischen Wert in eine Zeichenkette um und berücksichtigt, dabei die gewünschte Anzahl Nachkommastellen und ob Tausendertrennzeichen gesetzt werden sollen

z.B.
[ams_exp (4000)] => 4.000,00
[ams_exp (4000,1)] => 4.000,0
[ams_exp (4000, 2, 1)] => 4.000,00
[ams_exp (4000, 2, 0)] => 4000,00
[ams_exp(4000,0)] => 4.000

ams_exp_strict(betrag, anzahlNachkomma, tausenderTrennzeichen

 

Text

Siehe ams_exp.
Tritt bei der Umwandlung ein Fehler auf, wird dieser in das Dokument ausgegeben

dateizeile(dateipfad)

 

Text

Liefert den Inhalt der übergebenen Datei zurück

dateizeile(dateipfad, zeile)