Formelplatzhalter

Um Werte auszugeben, die nicht als Datenfeld zur Verfügung stehen, die Sie aber über Formeln aus Variablen (zur Verfügung stehende Daten- oder ermittelte Formelfelder) und/oder Konstanten ermitteln können, verwenden Sie einen Formelplatzhalter.

Abbildung 15.361: Formulareditor Dialog Formel

Entwickeln Sie die Formel schrittweise durch die Auswahl oder Eingabe von Datenfeldern (Operanden) und Operatoren.

Formeleditor

In Formelfelder können Sie mit dem Schalter , über das Kontextmenü oder der Taste [F4] den Formeleditor für Ihre Formeldefinition öffnen. Beim Öffnen des Formeleditors wird eine vorhandene Formel im Formeleingabebereich eingetragen, eingefärbt und die Schreibmarke steht am Ende der Formel.

Folgende Farben werden den Formelbestandteilen zugewiesen:

  • grün → Variablen
  • blau → Funktionen
  • lila → Operatoren
  • dunkelrot → Zahlen (auch pi und e), Zeichenketten (auch newline), logischen Werte (true und false) sowie der Wert null
  • schwarz → Sonstiges (runde Klammern, Semikolon)
  • gelb hinterlegt wird die Formel ab der Position, die vom Programm nicht interpretiert werden kann

Beginnt man im Formeleingabebereich etwas einzutippen, werden in der Tabelle Vorschläge gemacht, die mit Enter akzeptiert werden können. Beispielsweise werden nach Eingabe von { alle Variablen aufgelistet. Die Abarbeitung erfolgt nach den üblichen Vorrangregeln (Potenzen vor Punktrechnung vor Strichrechnung). Wollen Sie eine bestimmte Abarbeitungsreihenfolge festlegen, müssen Sie zusätzlich runde Klammern benutzen. Zur Übersichtlichkeit können Sie zwischen Operatoren, Operanden und Klammern beliebig viele Leerzeichen einfügen.

Unterhalb des Eingabefensters befinden sich bis zu vier Schalter. [F2] listet alle Syntaxelemente (Funktionen und Operatoren) auf, [F3] alle zur Verfügung stehenden Variablen. Es werden hier alle zum jeweiligen Dialog verfügbare Datenfelder hierarchisch in Baumstruktur aufgelistet. Über den Schalter Verweis kann man auch Datenfelder aus anderen Tabellen auswählen. Den markierten, gewünschten Platzhalter übernehmen Sie per Doppelklick oder mit dem Schalter .

Der Schalter bzw. [F4] ist nur aktiv, wenn die Syntaxprüfung in der gesamten Formel oder im markierten Bereich der Formel keinen Fehler findet. Wird im Formeleingabebereich ein Textbereich markiert, wird hier das Ergebnis der Syntaxprüfung für den markierten Bereich angezeigt, ansonsten das Ergebnis der Syntaxprüfung der gesamten Formel. Existiert für das Formelfeld ein Standardwert, kann im Formeleditor über den dann verfügbaren Schalter bzw. der Taste [F5] die Formel auf den Programmstandard zurückgesetzt werden.

Mit bzw. [F10] wird der Dialog geschlossen und die Formel wird übernommen, egal ob sie gültig ist oder nicht. Wenn der Formeleditor aus einem einzeiligen Eingabefeld aufgerufen wurde, werden die Zeilenumbrüche gegen Leerzeichen ausgetauscht.

Mit Abbruch bzw.[ESC] oder Kreuz rechts oben wird der Dialog geschlossen und die Formel nicht übernommen.

Variablenauswahl

Daten- und Formelfelder bzw. Verweise können auch über die Variablenauswahl [F3] direkt in die Formel eingefügt werden.

Test

Prüfen Sie im Anschluss an Ihre Formeldefinition unbedingt die Richtigkeit der Syntax Ihrer Formel mit dem Formeltest. Können beim Druck bestimmte Beziehungen nicht aufgelöst werden oder ist das Funktionsergebnis nicht definiert (cot(0)), wird als Ergebnis ”Null” angezeigt.

Der Abstand vom linken Rand wird in mm angenommen. Zusätzlich besteht die Möglichkeit der Textlängenbegrenzung (Angabe in mm):

  • Zeilenumbruch nach einer Länge von
  • Abschneiden nach einer Länge von
  • Keine Begrenzung der Textlänge

Name

Der Name kann frei eingetragen oder für eine Sonderplatzhalter-Funktion ausgewählt werden. Über diesen Namen steht das Feld unter Formelfelder für die Datenfeldauswahl zur Verfügung.

Aktion

Das Formelfeld enthält bei ausgewählter Aktion:

  • zuweisen → den aktuellen Wert
  • summieren → die aufgelaufene Summe über das Formular
  • Blockweise summieren → die aufgelaufene Summe je Block
  • Um mit einem Formelfeld, das in einem anderen Block angelegt wurde, eine Aktion auszuführen, muss auch im Feld Name eine Qualifikation des Formelfeldes erfolgen (Blockname mit Punkt davor setzen).

Formeln in Formelplatzhaltern

Operanden und Operatoren

Als Operanden sind Variablen (Datenfelder oder Formelfelder) und Konstanten (Zahlen-, Zeichenketten- oder logische Konstanten) möglich. Operatoren sind die verschiedensten Funktionen.

Beschreibung Beispiele
numerisch

Platzhalter vom Typ Integer, SmallInt, Float, Date, AutoInc

{FreieZahl1}
{>LA~Zaehlliste Lager}
{System.Stift X}

logisch

Platzhalter vom Typ Boolean

{FreiesKennzeichen1}

string

Platzhalter vom Typ String

{Lager}
{System.Mandant Name}

  • Variablen
    Variablen in Formeln (variable Operanden, Datenfelder) werden über Auswahlschalter eingefügt und mit geschweiften Klammern gekennzeichnet. Formelausdrücke können Zeichenketten, Zahlen, Wahrheitswerte und eingeschränkt auch Null-Werte (unbestimmt vom Wert und Typ) verarbeiten und als Ergebnis liefern.

Beschreibung Beispiele
numerisch

pi und Zahlen

1
99,753
pi
1,2E7

logisch

true für wahr
false für falsch

true
false

string

einfacher Zeichenketten
sind in ” einzuschliessen

”HP DeskJet 845”
”1”
”pi”
”true”
”” (Zeichenkette ohne Inhalt)

  • Numerische Konstanten - Konstanten können in dezimaler, binärer, oktaler oder hexadezimaler Schreibweise eingegeben werden. Bei der binären Schreibweise ist ein ”b” anzuhängen, bei der oktalen ein ”o” und bei der hexadezimalen ein ”h”. Bei gebrochenen Zahlen ist das in Windows eingestellte Dezimalzeichen zu verwenden. Ausschliesslich bei der (normalen) dezimalen Schreibweise ist auch eine Darstellung in Exponentialdarstellung möglich. Dabei ist zuerst die Mantisse anzugeben, danach ein ”E” und am Ende der Exponent zur Basis 10. Eine vordefinierte Konstante ist pi mit 3.14159....
  • Logische Konstanten - Logikkonstanten sind true und false.
  • Zeichenkettenkonstanten / -funktionen - Zeichenkettenkonstanten sind in Anführungszeichen ” einzuschliessen. Innere Anführungszeichen sind zu doppeln.
    user (liefert das zweistellige Benutzerkürzel)
  • Datumskonstanten - date (liefert das aktuelle Rechnerdatum) -now (liefert das aktuelle Rechnerdatum mit Zeitangabe)
  • Konstante für leere Felder - null - Null-Werte sollten in Formularen nicht an Formelplatzhalter zugewiesen werden. Sie können für die Auswertung von select- und dbf-Anweisungen benutzt werden. Der Vergleich mit anderen Typen liefert stets false.

Hinweis: Die Verarbeitung von Datums- und Zeitwerten erfolgt über Zahlen, wobei der ganzzahlige Anteil das Datum und der gebrochene Anteil den Zeitanteil enthält. So kann man beispielsweise das Datum des nächsten Tages drucken, wenn man zur ”Datumszahl” eine 1 addiert.

Beispiel

[V:0:DATS:::0::{System.Datum/Uhrzeit} 1]
[V:0::::0::asdatestring({System.Datum/Uhrzeit} 1;A.D.")]

Operatoren Funktionen

Für Funktionen gilt generell:

  • Parameter sind in runde Klammern zu setzen
    (Ausnahmen z.B., mod, not,...)
  • mehrere Parameter sind mit Semikolon zu trennen
  • Leerzeichen zwischen Parametern können beliebig gesetzt werden
  • Funktionsbezeichner enthalten keine Grossbuchstaben

Vorrangregeln

Die Abarbeitung erfolgt nach den üblichen Vorrangregeln (Potenzen vor Punktrechnung vor Strichrechnung). Wollen Sie eine bestimmte Abarbeitungsreihenfolge festlegen, müssen Sie runde Klammern benutzen.

Zeichenketten Operanden und Funktionen

Funktion

Beschreibung
Beispiel

Addition (Aneinanderkettung von Zeichenketten)
"Offene Posten in " {Währung}

*

wird eine Zeichenkette mit einer Zahl > 0 multipliziert, erhält man eine Zeichenkette, in der die ursprüngliche Zeichenkette vervielfältigt wurde;
Faktoren < 0 ergeben eine Aneinanderreihung der gedrehten ursprünglichen Zeichenkette;
Beispiele: "0" * (10 - length({Nr})) {Nr} liefert eine Zeichenkette der Länge 10, in der der Wert von {Nr} linksbündig mit Nullen aufgefüllt wird;
"Regal" lower(("Regal"*(-1))) liefert als Ergebnis ”Regallager”

upper

Grossschreibung
upper({Bezeichnung})

lower

Kleinschreibung
lower({Bezeichnung})

substring

Teilzeichenkette
1. Parameter: Ausgangszeichenkette
2. Parameter: Startposition (numerisch)
3. Parameter: Länge (numerisch) - der 3. Parameter kann weggelassen werden
das 2. bis 5. Zeichen der Artikelnummer:
substring({Artikelnummer};2;4)

replace

ersetzt (nicht rekursiv) alle Vorkommen des zweiten Zeichenfolgenausdrucks im ersten Zeichenfolgenausdruck durch einen dritten Ausdruck;
1. Parameter: Ausgangszeichenkette
2. Parameter: Suchzeichenkette
3. Parameter: Ersatzzeichenkette
Der 3. Parameter kann zum Löschen aller Vorkommen der Suchzeichenkette aus der Ausgangszeichenkette weggelassen werden.
Beispiel:
replace("Staumauer";"u";"hl") liefert ”Stahlmahler”

asfilename

für Dateinamen nicht erlaubte Zeichen der Ausgangszeichenkette werden durch ein Ersatzzeichen ersetzt;
1. Parameter: Ausgangszeichenkette
2. Parameter: Ersatzzeichen
Der 2. Parameter kann weggelassen werden, als Ersatzzeichen wird dann ”_” verwendet.
Beispiel:
asfilename("A < > ? "": | \ / * Z";"x") liefert ”A x x x x x x x x x Z”

concat

verbindet zwei Zeichenfolgenausdrücke durch einen Verkettungsausdruck
1. Parameter: eine Zeichenkette
2. Parameter: eine Zeichenkette
3. Parameter: Verkettungszeichenkette
Ist eine der Zeichenketten leer, wird die Zeichenkette, die nicht leer ist, ohne Verkettungsausdruck ausgegeben.
concat("Mustermann";"Max";",") liefert
”Mustermann,Max”

newline

mit dieser Konstante kann ein Zeilenumbruch innerhalb des aktuellen Platzhalters erzwungen werden
concat({Anrede};concat({Name}; {Vorname}; ", "); newline) liefert
”Herr
Mustermann,Max”

length

liefert in einem numerischen Ergebnis die Anzahl der Zeichen in der Zeichenkette
length(”Hollywoodschaukel”) liefert ”17”

trim

entfernt am Anfang und Ende einer Zeichenkette alle Leer- und Steuerzeichen

ltrim

entfernt am Anfang einer Zeichenkette alle Leer- und Steuerzeichen

rtrim

entfernt am Ende einer Zeichenkette alle Leer- und Steuerzeichen

locate

liefert in einem numerischen Ergebnis die erste Position der Suchzeichenkette in einer Ausgangszeichenkette; falls die Suchzeichenkette nicht enthalten ist, ist das Ergebnis 0;
1. Parameter: Suchzeichenkette
2. Parameter: Ausgangszeichenkette
locate("y";"Hollywoodschaukel") liefert 5

lines

liefert die Anzahl der Zeilen eines Langtextes
Parameter: eine Zeichenkette
lines({.Kopftext})

guid36

liefert als Ergebnis eine Zeichenkette (36 Zeichen) ohne die führende und schliessende Klammer
1. Parameter: eine 38-stellige GUID
Beispiel:
guid36({Kennung})

fill

füllt eine Zeichenkette bis zur definierten Länge auf
1. Parameter: Ausgangszeichenkette
2. Parameter: Gesamtlänge (numerisch)
3. Parameter: Füllzeichen(-kette)
4. Parameter: links auffüllen (true); rechts auffüllen (false)
der 4. Parameter kann weggelassen werden (Standard ist true)
Beispiel:
fill(asstring({FreieZahl1});5;"0")
fill({Bezeichnung};80;" ";false)

split

zerteilt eine Zeichenkette in gleichmässige Teile
1. Parameter: Ausgangszeichenkette
2. Parameter: Anzahl der Zeichen nach der jeweils getrennt werden soll (numerisch). Ist der Parameter kleiner Null, erfolgt die Aufsplittung vom Ende beginnend.
3. Parameter: Füllzeichen(-kette)
der 3. Parameter kann weggelassen werden (Standard ist ein Leerzeichen)
Beispiel:
split({IBAN};4)

numerische Operanden und Funktionen

Funktion

Beschreibung
Beispiel

Addition (von Zahlen und Zeichenketten)
2 3 liefert 5

-

negativer Wert oder Subtraktion
5 - 3 liefert 2

*

Multiplikation
2 3 * 4 liefert 14
(2 3) * 4 liefert 20

/

Division
20 / 4 liefert 5

mod

Modulo-Funktion
30 mod 7 liefert 2

div

ganzzahlige Division
4 div 3 ergibt 1

^

Potenz, nach Möglichkeit durch Multiplikationen ersetzen
2 ^ 4 liefert 16

!

Fakultät
! 5 ergibt 1*2*3*4*5=120

ln

natürlicher Logarithmus (Basis e)
ln 2,71828182845905 liefert 1

ld

Logarithmus zur Basis 2
ld (2) liefert 1

lg

dekadischer Logarithmus (Basis 10)
lg(10) liefert 1

abs

Absolutbetrag
abs(-11) liefert 11

int

ganzzahliger Anteil
int(-1,7) liefert -1

sign

Signumfunktion (Ergebnis ist: -1 für Werte <0, 1 für Werte>0, 0 bei 0)
sign(11) liefert 1

frac

gebrochener Anteil
frac(-1,7) liefert –0,7

floor

grösste ganze Zahl, die kleiner oder gleich dem angegebenen numerischen Ausdruck ist (Bsp.: floor(1,7) ergibt 1)

ceiling

kleinste ganze Zahl, die grösser oder gleich dem angegebenen numerischen Ausdruck ist (Bsp.: ceiling(1,7) ergibt 2)

rdm

Zufallszahl kleiner als der Operand erzeugen
rdm(4) liefert 0, 1, 2 oder 3)

rnd

Rundung
rnd(2,792) liefert 3

rn2

Rundung auf 2 Nachkommastellen
rn2(2,792) liefert 2,79

sqrt

Quadratwurzel
sqrt(9) liefert 3

sin

Sinusfunktion

cos

Kosinusfunktion

tan

Tangensfunktion

cot

Kotangensfunktion

Beispiel

Um den Bruttowert (bei gegebenem Nettowert und dem Prozentwert der Steuer) auszurechnen, gilt zunächst die Formel:
{Netto}*(1 {Steuer}/100).
Da das Ergebnis dabei aber Zehntel- und Hundertstelstellen enthalten kann, wird es noch auf zwei Stellen gerundet. Die einzugebende Formel lautet somit:
rn2({Netto}*(1 {Steuer}/100))

Bit-Operationen

Funktion

Beschreibung
Beispiel

not

logische Negation der Binärwerte
not 10 liefert -11

and

logische Und- Verknüpfung der Binärwerte
10 and 6 liefert 2

ior

logische Oder- Verknüpfung der Binärwerte
10 ior 6 liefert 14

xor

log. ExklusivOder- Verknüpfung der Binärwerte
10 xor 6 liefert 12

shl

bitweises Verschieben nach links
1 shl 3 liefert 8

shr

bitweises Verschieben nach rechts
11 shr 1 liefert 5

Logikoperanden

Funktion

Beschreibung
Beispiel

not

logische Negation
not ((3 > 2) and (2 > 1)) liefert false

and

logische Und-Verknüpfung
(3 > 2) and (2 > 1) liefert true

ior

logische Oder-Verknüpfung
(3 > 2) ior (2 > 1) liefert true

xor

logische ExklusivOder-Verknüpfung
(3 > 2) xor (2 > 1) liefert false

if

Fallunterscheidung
1. Parameter: logischer Ausdruck
2. Parameter: Ausdruck beliebigen Formats, welcher das Ergebnis liefert, wenn der 1. Parameter den Wert true besitzt;
3. Parameter: Ausdruck beliebigen Formats, welcher das Ergebnis liefert, wenn der 1. Parameter den Wert false besitzt;
if({Belegtyp}="R";1;if({Belegtyp}="G";-1;0))

Null-Werte

Funktion

Beschreibung
Beispiel

isnull

1. Parameter: ein Ausdruck von beliebigem Format(Zeichenkette, Zahl, Datum, logisch, Null-Wert)
2. Parameter: Ergebnis, wenn der erste Parameter null ist
Ersetzung eventueller Null-Werte durch einen Leerstring:
isnull(select("FreierText1 from kunden where nummer = ’10001’");"")
Ersetzung eventueller Null-Werte durch die Zahl 0:
isnull(select("FreieZahl1 from kunden where nummer = ’10001’");0)

Vergleichsoperatoren

Funktion Beschreibung

=

Gleichheit

<>

Ungleichheit

<

kleiner

>

grösser

<=

kleiner gleich

>=

grösser gleich


(die Operanden müssen vom gleichen Typ sein und liefern ein logisches Ergebnis)

Umwandlungsfunktionen

Funktion

Beschreibung
Beispiel

asfloat

liefert den numerischen Wert einer Zeichenkette
1. Parameter: Ausgangszeichenkette
2. Parameter: numerischer Wert, der das Ergebnis liefert, wenn die Ausgangszeichenkette nicht in eine Zahl umgewandelt werden kann. Der 2.Parameter kann weggelassen werden.
asfloat({FreierText1})
asfloat({Konto}; 0)

asstring

wandelt einen numerischen Wert in eine Zeichenkette um
1. Parameter: Ausgangszahl
2. Parameter: ein Format für die Darstellung wie z.B. "#,##0.00"; der 2. Parameter kann weggelassen werden.
asstring({FreieZahl1})
asstring(1E3) liefert 1000
asstring(1E3; "#,##0.00") liefert 1.000,00

asdatestring

wandelt ein Datum in eine Zeichenkette um
1. Parameter: Ausgangsdatum
2. Parameter: ein Format für die Darstellung wie z.B. "MMM.YYY"; der 2. Parameter kann weggelassen werden
asdatestring({FreiesDatum1})
asdatestring(41380;"D MMM YY") liefert 16 Apr 13
asdatestring(41380 0,25) liefert 16.04.2013 06:00:00

asdatetime

wandelt ein Datum in einen numerischen Wert (internes Datumsformat, mit dem gerechnet werden kann) um
ein Parameter vom Typ Zeichenkette:
Ausgangsdatum im Windowsformat:
asdatetime("01.09.2022") liefert 44805
Addition einer Woche zum 01.09.2022
asdatestring(asdatetime("01.09.2022") 7)

monat

wandelt einen numerischen Wert zwischen 1 und 12 in den Monatsnamen um, Werte > 12 bzw. < 1 geben einen Leerstring aus;
z.B. monat(6) liefert ”Juni”

xmltag

wandelt eine Zeichenkette in das Format UTF8 um und schliesst das Ergebnis in < > ein
Parameter: eine Zeichenkette
xmltag("Text") liefert <Text>

xmlstring

wandelt eine Zeichenkette in UTF8 um, nachdem zuvor <, > und & ersetzt wurden
Parameter: eine Zeichenkette

htmlintext

liefert den Textinhalt eines HTML-Quelltextes Parameter: Ausgangszeichenkette
Beispiel:
htmlintext({HTMLText})

Hilfsfunktionen zum Schreiben von Transact-SQL-Select-Anweisungen

Funktion

Beschreibung
Beispiel

astsqlfloat

1. Parameter: Zahl
astsqlfloat(1,2345) liefert 1.2345

astsqlnchar

1. Parameter: Zeichenkette
astsqlnchar("123") liefert N’123’

astsqldate

1. Parameter: Ausgangsdatum
astsqldate(date) lieferte am 1.1.2014 N’01.01.2014’
astsqldate(41640) liefert N’01.01.2014’

astsqlbit

1. Parameter: logischer Wert
astsqlbit(true) liefert 1

Hinweis: Die Funktionen liefern als Ergebnis eine Zeichenkette mit einem Leerzeichen am Anfang und am Ende und können zur Unterstützung beim Schreiben von Transact-SQL-Select-Anweisungen in Formeln oder eigenen Blöcken verwendet werden.

Datenbankfunktionen

Funktion

Beschreibung
Beispiel

dbf (nur BDE)

liefert den Wert eines Tabellenfeldes
1. Parameter: Tabellenkürzel der Tabelle
2. Parameter: Indexname der Tabelle
3. Parameter: Feldname des gesuchten Feldes folgende Parameter: Schlüsselfelder in der Reihenfolge des eingestellten Indexes;
liefert die dbf-Anweisung keinen Wert zurück, ist das Ergebnis null
Verweis {>LA~Bezeichnung Lager} mit dbf:
dbf("LA";"";"Bezeichnung";{Lager})

select

liefert den Wert eines Tabellenfeldes
als Parameter ist eine SQL-Selectanweisung anzugeben, wobei das führende select weggelassen wird.
Verweis {>LA~Bezeichnung Lager} mit select:
select("Bezeichnung from lager where lager = ’"+{Lager}+"’")

Beispiele

select("bestellnummer from artalter where Artikelnummer = ’" {Artikelnummer} ”’ and id = ’AK’ and Alternativartikel = ’" {AdressNr} "’")
→ liefert die Kundenbestellnummer eines Artikels, die Artikelnummer und Adressnummer des Kunden werden als Variablen (Datenplatzhalter) übergeben

select("Text from Text where Blobkey = ’Q" {.Belegtyp} "°" {.Belegnummer} "’")
select("Text from Text where Blobkey = ’Qv {.Belegtyp} {.Belegnummer} "’")
→ liefern den Kopf- / Fusstext eines Beleges der Belegtyp und die Belegnummer werden als Variablen (Datenplatzhalter) übergeben

select("Text from Text where Blobkey = ’BP" guid36({Kennung}) "’")
→ liefert den Positionstext einer Belegposition, die Kennung vom Datentyp GUID wird ohne geschweifte Klammer als Variable (Datenplatzhalter) übergeben

select("preis from arpreis where Artikelnummer = ’" {Artikelnummer} "’ and Preistyp = ’K’ and Waehrung = ’" {.Waehrungscode} "’ and TypNummer = ’" {.Adressnummer} "’ and (VonDatum <= ’" asdatestring({.Datum}) "’ or vonDatum is null) and (bisDatum >= ’" asdatestring({.Datum}) "’ or bisDatum is null) and menge = 0")

→ liefert den Kundenpreis eines Artikel, die Artikelnummer, der Währungscode, die Kundennummer (Adressnummer) und das Datum werden als Variablen (Datenplatzhalter) übergeben

Abbildung 15.362: Beispiel Formel

Funktionen zum Lesen Schreiben von Variablenwerten

Funktion

Beschreibung
Beispiel

iniput

schreibt einen Eintrag in eine Ini-Datei oder löscht einen Eintrag; liefert als Ergebnis einen logischen Wert, ob der Befehl erfolgreich war:
1. Parameter: Dateiname, Dateinamen ohne Laufwerk beziehen sich auf das Mandantenverzeichnis;
2. Parameter: Sektionsbezeichnung;
3. Parameter: Bezeichnung des Eintrags;
4. Parameter: Zeichenkette, die eingetragen werden soll. Bei Weglassen des 4. Parameters wird ein eventuell vorhandener Eintrag gelöscht.
Eintrag erzeugen:
iniput(”C:\TEST.INI”;”Sektion”;”Wert”;”100”)
Eintrag löschen:
iniput("C:\TEST.INI";"Sektion";"Wert")

iniget

liest eine Zeichenkette aus einer Ini-Datei:
1. Parameter: Dateiname, Dateinamen ohne Laufwerk beziehen sich auf das Mandantenverzeichnis;
2. Parameter: Sektionsbezeichnung;
3. Parameter: Bezeichnung des Eintrags;
4. Parameter: Ergebnis, wenn die Datei nicht existiert oder kein Eintrag in der Ini-Datei gefunden wird. Bei Weglassen des 4. Parameters ist die leere Zeichenkette der Standardwert.
iniget("C:\TEST.INI";"Sektion";"Wert";"0")

put

speichert programmintern einen Wert, solange das Programm läuft:
1. Parameter: eine Zeichenkette für die Identifikation des Wertes (keine Unterscheidung von Gross- und Kleinschreibung)
2. Parameter: ein Ausdruck von beliebigem Format(Zeichenkette, Zahl, Datum, logisch, Null-Wert)
Abspeichern des aktuellen Zeitpunktes:
put("zeit"; now)
Anlegen oder Ändern der programminternen Variable ”variable1” mit dem logischen Wert WAHR
put("variable1"; true)

get

liest programminterne Werte:
1. Parameter: eine Zeichenkette für die Identifikation des Wertes (keine Unterscheidung von Gross- und Kleinschreibung)
2. Parameter: Ergebnis, wenn programminterner Wert nicht vorhanden ist
Lesen der programminternen Variable ”variable1”:
get("variable1"; false)
ein Durchlaufzähler mit Namen ”a”:
put("a"; 1 get("a"; 0))

Datumsfunktionen

Funktion Beschreibung
zinstage

ermittelt die Zinstage entsprechend der 30tägigen Zinsperiode der Bank;
1. Parameter: Beginndatum;
2. Parameter: Enddatum

zinsmonate

ermittelt die Zinsmonate;
1. Parameter: Beginndatum;
2. Parameter: Enddatum

zahlungstermin

ermittelt aus einem Datum und den Angaben der Zahlungsbedingung einen Termin;
1. Parameter: Startdatum
2. Parameter: Typ der Berechnung
3. Parameter: Tagesangabe

kweek

ermittelt die Kalenderwoche; als Parameter ist ein Datum
als Variable z.B. kweek({.Datum})
oder internes Datumsformat anzugeben z.B. kweek(asdatetime("30.12.2015"))

kyear

ermittelt das Kalenderjahr zu dem die Kalenderwoche gehört; als Parameter ist ein Datum
als Variable z.B. kyear({.Datum})
oder internes Datumsformat anzugeben z.B. kyear(asdatetime("30.12.2015"))

Beispiele

  • für das Datum 30.12.2015 liefert kweek eine 52, kyear die 2015 → der 30.12.2015 gehört zur 52.Kalenderwoche 2015
  • für das Datum 31.12.2015 liefert kweek eine 1, kyear die 2016 → der 31.12.2015 gehört schon zur 1.Kalenderwoche 2016
  • asdatestring(zahlungstermin(asdatetime("20.5.2015); 1; 26)) ergibt den 26.05.2015, also den nächsten 26.
  • asdatestring(zahlungstermin(asdatetime("20.5.2015"); 101; 26)) ergibt den 26.06.2015, also den 26. des Folgemonats

Bedeutung des 2. Parameters ”Typ der Berechnung” der Funktion zahlungstermin:

0 → innerhalb von ?? Tagen
1 → zum nächsten ??.
2 → zum nächsten ??. 1 Monat
3 → zum nächsten ??. 2 Monate
4 → zum nächsten ??. 3 Monate
5 → zum nächsten ??. 4 Monate
6 → zum nächsten ??. 5 Monate
7 → zum nächsten ??. 6 Monate
8 → zum nächsten ??. 7 Monate
9 → zum nächsten ??. 8 Monate
10 → zum nächsten ??. 9 Monate
11→ zum nächsten ??. 10 Monate
12 → zum nächsten ??. 11 Monate
13 → zum nächsten ??. 12 Monate
101→ zum ??. des Folgemonats

Spezielle Funktionen

in allen Programmen:

Funktion Beschreibung
shellexecute

zum Absetzen von Kommandos für das Betriebssystem;
1. Parameter (String): Name des Programms, das geöffnet werden soll
2. Parameter (String): er enthält die Kommandozeilenparameter für das Programm.
3. Parameter (Typ Zahl zwischen 0 und 10): Er ist dafür verantwortlich, in welchem Zustand das Fenster des gerufenen Programms geöffnet werden soll.
Als Ergebnis liefert die Funktion eine Zahl, die bei Zahlen kleiner 32 eine Fehlernummer darstellt, der 2. und 3. Parameter kann weggelassen werden

datenpfad

liefert den Datenpfad mit abschliessenden Backslash

mandantenpfad

liefert den Mandantenpfad mit abschliessenden Backslash

nur im Auftrag

Funktion Beschreibung
bestand

liefert den aktuellen Bestand von Artikeln;
als Parameter ist die Artikelnummer als Ausdruck oder Datenbankfeld anzugeben
weitere Parameter für detailliertere Lagerinformationen sind möglich

bestandpm

liefert den aktuellen Bestand von Artikeln in der Preismengeneinheit;
als Parameter ist die Artikelnummer als Ausdruck oder Datenbankfeld anzugeben
weitere Parameter für detailliertere Lagerinformationen sind möglich

bestellt

liefert die aktuell bestellte Menge von Artikeln;
1. Parameter: die Artikelnummer
2. Parameter: der Standort
als Ausdruck oder Datenbankfeld, der 2. Parameter kann weggelassen werden

gepackt

liefert den gepackten Bestand von Artikeln;
als Parameter ist die Artikelnummer als Ausdruck oder Datenbankfeld anzugeben
weitere Parameter für detailliertere Lagerinformationen sind möglich

inproduktion

liefert die Menge von Artikeln, die produziert wird;
1. Parameter: die Artikelnummer
2. Parameter: der Standort
als Ausdruck oder Datenbankfeld, der 2. Parameter kann weggelassen werden

reserviert

liefert die aktuell reservierte Menge von Artikeln;
1. Parameter: die Artikelnummer
2. Parameter: der Standort
als Ausdruck oder Datenbankfeld, der 2. Parameter kann weggelassen werden

listenpreis

liefert den aktuellen Listenpreis von Artikeln;
als Parameter ist die Artikelnummer als Ausdruck oder Datenbankfeld anzugeben

kalkulationspreis

liefert den aktuellen Kalkulationspreis von Artikeln;
als Parameter ist die Artikelnummer als Ausdruck oder Datenbankfeld anzugeben.

belegtyp

liefert die Beschreibung des Belegtyps;
als Parameter ist der Belegtyp anzugeben.

belegadresskuerzel

liefert das Adresskürzel des Belegtyps (z.B. ”KU” bei Kundenbelegen);
als Parameter ist der Belegtyp anzugeben.

belegeafaktor

liefert die Information zur Interpretation von RNetto (z.B. bei Rechnungen 1, bei Gutschriften -1);
als Parameter ist der Belegtyp als Ausdruck oder Datenbankfeld anzugeben

mwst

liefert die Steuerprozente eines Steuerschlüssels zum aktuellen Datum;
als Parameter ist der Steuerschlüssel als Ausdruck oder Datenbankfeld anzugeben

checksumpost

berechnet eine spezielle Prüfziffer;
der Parameter muss eine Zeichenkette mit 11 Ziffern liefern

projektsumme

liefert in Abhängigkeit vom Preistyp des Projektes die Netto- oder Bruttoprojektsumme;
als Parameter ist die Nummer des Projektes anzugeben

Die Formelfunktionen bestand(), bestandpm() und gepackt() haben verschiedene Parameter um detaillierte Lagerinformationen zu erhalten, diese können als Ausdruck oder Datenbankfeld eingefügt werden.

Parameter

  • (artikelnummer)
  • (artikelnummer; standort)
  • (artikelnummer; standort; lager)
  • (artikelnummer; standort; lager; seriecharge)
  • (artikelnummer; standort; lager; serieId)
  • (artikelnummer; standort; lager; seriecharge; lageroption)
  • (artikelnummer; standort; lager; serieId; lageroption)
  • (artikelnummer; lagerplatzid)
  • (artikelnummer; lagerplatzid; seriecharge)
  • (artikelnummer; lagerplatzid; serieId)
  • (artikelnummer; lagerplatzid; seriecharge; lageroption)
  • (artikelnummer; lagerplatzid; serieId; lageroption)

Parameteroptionen

  • die Parameter Artikelnummer, Standort, Lager, SerieCharge dürfen leer sein
  • die Parameter Lagerplatzid, Serieid dürfen 0 sein
  • der Parameter Lager kann einen Lagerplatz bezeichnen (z.B. 500,1)
  • der Parameter Lageroption ist die Summe von Lagern, die ausgeschlossen werden sollen
    1 → Sperrlager
    2 → Wareneingangslager
    4 → Kommissionslager

Hinweis: Die Unterscheidung der Parameter wird anhand des übergebenen Datentyps getroffen!

Beispiele

bestellt ({Artikelnummer};”1”)
liefert die für den Standort ”1” bestellte Menge des vom Datenfeld ”Artikelnummer” ausgegebenen Artikels

bestand("500009";"1";"500,1,1")
liefert den Bestand des Artikels ”500009” auf dem Lagerplatz ”500,1,1” des Flächenlagers ”500” im Standort ”1”

shellexecute("notepad";"c:\test.txt";3)
öffnet die Datei c:\test.txt im maximierten NotePad

Diese speziellen Funktionen sind über Formelplatzhalter in jeder beliebigen Druckvorlage anwendbar.

Spezieller Formelplatzhalter Bild

Über einen Formelplatzhalter mit folgendem Aufbau ist es möglich, Artikelbilder z.B. in Auswertungen zu integrieren:

  • #7 (programminterner Code für das Handling)
  • (verknüpft die einzelnen Elemente der String-Konstanten)
  • Tabellenkürzel (Blobkey) der Tabelle (z.B. ”AR” für die Artikeltabelle)
  • Schlüsselfeld der Tabelle (z.B. {Artikelnummer} → wird als Datenfeld ausgewählt)

Dieser Formelplatzhalter druckt das Bild eines Datensatzes mit der Ordnungszahl 0. Um ein Bild einer bestimmten Ordnung zu drucken kann die Formel erweitert werden. Dafür sind an das bisherige Konstrukt noch #7 und die Ordnungsnummer.

Abbildung 15.363: Formulareditor Dialog Formel

Beispiel

[V:140:BldN:::0::#7+"AR"+{Artikelnummer}+#7+"1"]

HTML über Verweise

Die HTML-Platzhalter stehen nur in den Druckvorlagen des Artikelstamms oder der Belege zur Verfügung. In Druckvorlagen, z.B. aus einem Makro, kann man über einen Verweis die HTML-Texte ausgeben. Dazu ist es notwendig, auf die Tabelle Text mit dem zusammengesetzten Feld Blobkey zu verweisen und dann das Feld HTMLText auszuwählen. Der Formulareditor erkennt an dem Feldtyp HTML dann automatisch die HTML-Fähigkeit des Feldes und schaltet auf die formatierte Ausgabe um.

Zu beachten ist, dass auf die Tabelle Text nicht allein mit der Artikelnummer oder Kennung der Belegposition allein der Verweis erstellt werden kann. Zusätzlich muss das zweistellige Tabellenkürzel mitgegeben werden z.B.:

  • "AR" {Artikelnummer} → Artikellangtext
  • "AT" {Artikelnummer} → Artikeldimensionstext
  • "AS" {Artikelnummer} → Artikelbestelltext
  • "AI" {Artikelnummer} → Artikelinfotext
  • "BP" guid36({Kennung}) → Belegpositionstext.

Eine Umsetzungsmöglichkeit im Formular besteht in der Kombination eines Formelfeldes mit einem Datenfeld:

  1. Die Artikelnummer wird mit dem zweistelligen Kürzel „addiert“ und einem Variablennamen z.B. ”HTML-Verweis” zugewiesen.
    [V:0::HTML-Verweis:2:0::"AR" {Artikelnummer}]
  2. Das neue Formelfeld ”HTML-Verweis” wird als Grundlage für einen Verweis in einem Datenfeldplatzhalter ausgewählt und damit auf die Tabelle Text → Feld ”HTMLText” verwiesen. Dadurch ändert sich der Datenfeld-Platzhalter in den HTML-Platzhalter.
    [H:0:0:>TE~HTMLText HTML-Verweis]
  3. Im Druckformular werden beide Platzhalter im Hauptblock → Positionsbereich positioniert:
    [V:300::HTML-Verweis:2:0::"AR" {Artikelnummer}] [H:25:0:>TE~HTMLText HTML-Verweis]

Abbildung 15.364: HTML-Verweis

Anzahl Ausdrucke über Formular steuern

Über den Formelplatzhalter AnzahlExemplare kann die Anzahl der Ausdrucke nun auch direkt in Formularen und Folgeformularen über beliebige Formeln ermittelt werden. Im Beispiel unten wird die Anzahl der Ausdrucke über das Feld [FreieZahl1] festgelegt. Der Formelplatzhalter überschreibt die ggf. vorher im Druckdialog festgelegte Anzahl der Exemplare. Dies kann über eine Bedingung verhindert werden.

Abbildung 15.365: AnzahlExemplare

Beispiel

// Anzahl Exemplare wird überschrieben mit dem Wert aus "FreieZahl1", wenn lt. Druckdialog = 1 [T:0::Anzahl Exemplare: ] [D:2:{System.DruckKopieAnzahl}:>:1] [V:0::AnzahlExemplare:2:0::isnull({.FreieZahl1};0)]

Formeltest

Zur Überprüfung der korrekten Schreibweise (Klammern, Trennzeichen, Funktionsnamen) können Sie den Kontextmenüpunkt Syntaxprüfung (Tastenkürzel [Umsch] + [F4]) verwenden. Daraufhin wird in einem sich öffnenden Fenster angezeigt, ob es sich um eine gültige Formel handelt, oder ob ein Syntaxfehler gefunden wurde. Im Falle eines Syntaxfehlers wird im Eingabefeld die Eingabemarke auf die Position gestellt, an der der Fehler auftrat.

Der Kontextmenüpunkt Test (rechte Maustaste im Feld) oder (Tastenkürzel [Ctrl] + [Alt] + [F4]) führt ein Testlauf durch, wobei nicht bekannte Variablen abgefragt werden.

Zum Test öffnet sich für alle in der Formel gewählten Platzhalter automatisch die Maske zur Eingabe der Variablen. Geben Sie hier beliebige Werte ein, diese müssen dem jeweiligen Feldtyp (z.B. String/Float) entsprechen. Das Ergebnis oder eventuelle Fehler werden Ihnen anschliessend angezeigt.

Abbildung 15.366: Formeltest

Hinweis: Erscheint das Abfragefenster ”Variablenwert” mit der Typangabe ”Widestring” kann eine Zeichenkette ohne begrenzende Anführungszeichen (”) eingegeben werden. Erscheint das Abfragefenster mit der Typangabe "Unbekannt" erkennt der Testlauf den Typ erst an Ihren Eingaben. Deshalb sind Zeichenketten sicherheitshalber in begrenzende Anführungszeichen (”) zu setzen, um Verwechslungen mit Zahlen oder logischen Werten zu vermeiden. Datumswerte vom Typ ”Unbekannt” sind als Zahlenwert einzugeben z.B. 41380 (für den 16.04.2013).