Funktionen im Formularwesen
- 1.1 Aufbau von Funktionen
- 1.2 Operatoren
- 2 Verfügbare Funktionen
- 2.1 Allgemeine Funktionen
- 2.2 AMS-Formeln
- 2.3 Beispiele
- 2.3.1 dc -Funktion
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 |
---|---|---|
% | 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 |
---|---|---|
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:
(":"Ja", "1:Nein")
("1:"Ja", "1:Nein") Somit können via amssqlsingle Daten ermittelt und verglichen werden.
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 |
---|---|---|---|
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_strict(betrag, anzahlNachkomma, tausenderTrennzeichen |
| Text | Siehe ams_exp. |
dateizeile(dateipfad) |
| Text | Liefert den Inhalt der übergebenen Datei zurück |
dateizeile(dateipfad, zeile) |
|