Über Formeln können Bedingungen hinterlegt werden, welche zu einem bestimmten Ergebnis führen.

Es wird empfohlen, Operatoren und Variablen mit jeweils einer Leerstelle voneinander zu trennen.
Bei Sachmerkmalen mit einer in der Definition hinterlegten Mengeneinheit ist zu beachten, dass diese Sachmerkmale automatisch numerisch und nur in dieser Mengeneinheit verwendet werden. Werte aus dem Artikelstamm mit abweichender Mengeneinheit werden umgerechnet.

Definitionen

Sonderzeichen, ggf. variabel einstellbar per Vorlauftabelle VRLU18 (Verwendung Formelkennungen):

Sonderzeichen fürStandardVariabel einstellbar?BeispielBedeutung
Funktionen#Nein.#INT(...)Funktionen beginnen standardmäßig mit "#". Beschreibung der unterstützten Funktionen: siehe unten.
Sachmerkmalsnamen$Nein.$LAENGESachmerkmalsnamen beginnen mit "$".
Feldnamen&Nein.&IDNRFeldnamen (Variablen) beginnen mit "&". Die zulässigen Feldnamen sind in der Tabelle (z. B. FRD623) hinterlegt, welche in der Tabelle FRDFRK (Interpretation als Dateifelder) angegeben ist.
KonstanteCVU1814 + VU1815

ZusatztexteXVU1816 + VU1817

Unterformel!VU1818

Zahlen in FormelNVU1821 + VU18221,5Zahlen werden immer mit dem Komma als Dezimaltrennzeichen angegeben.

Regelwerk

WerteBeschreibungBeispiele
=, >, <, >=, <=, <>Vergleichsoperatoren;
Bei Vergleichen werden Leerzeichen am Ende von Zeichenketten ignoriert.

DEFINEDVergleichsoperator, ob ein Sachmerkmalsname definiert ist oder nicht.
Kann in Bedingungen (IF, WHEN) genutzt werden.
IF DEFINED $Sachmerkmal
()Gruppierung der Anweisungen ist mit Klammerung möglich.
:=

Wertzuweisung (alphanumerisch mit einfachen Hochkommas)
Wertzuweisung (numerisch ohne Hochkommas)

Hinweis: Wertzuweisungen innerhalb von IF- und WHEN-Bedingungen sind nicht zulässig.

&IDNK := 'EINZELTEIL-001'
&PRSM := 10
+, -, *, /Mathematische Operatoren für die Grundrechenarten Addition, Subtraktion, Multiplikation, Division&PRSM := &PRSM + 1
&PRSM := &RMA1 + &RMA2 
+Zur Verkettung von Zeichenketten&AGBZ := 'Stücklistenkomponente '+ &IDNK
  • Verwendete Sachmerkmale müssen zuvor einen Wert erhalten haben, es sei denn, sie werden als Ergebnisfeld verwendet.
  • String-Konstanten müssen in einfachen Hochkommata stehen.
  • Ergebnisse von String-Operationen (auch Konstanten) dürfen höchstens 24 Zeichen lang sein.
  • Bei Entscheidungstabellen entfallen THEN und ELSE mit den zugehörigen Ausdrücken; die Position wird ausgewählt, wenn die IF-Bedingung wahr ist.
  • Typprüfung: Bei Eingabe von Formeln über den Formelexplorer ‚Formeln und Entscheidungstabellen verwalten‘ wird geprüft, ob alle Operationen mit den Typen der Felder möglich sind.

Boolesche Operatoren

OperatorBeschreibungBeispiele
ANDBoolescher UND-OperatorIF ($BREITE = 1000 AND $FARBE = 'GOLD')
ORBoolescher ODER-OperatorIF ($BREITE = 1000 OR $HOEHE = 1000 OR $TIEFE = 1000)
NOTNegierender boolescher OperatorIF NOT #IN($PREIS; 100; 200)

Konstanten

KonstanteBeschreibung
PIDie Konstante π kann dort verwendet werden, wo literale Dezimalzahlen verwendet werden können.
Der Wert der Konstante liegt bei: 3,141592653589793

Bedingungen ohne Blockanweisungen

Bitte die Klammerung beachten.

FallunterscheidungZulässige OperatorenAbbildung als FormelBeispiel
Ein Fall

IF, THEN

IF (Bedingung) THEN (Anweisung, wenn Bedingung = true)IF ($LAENGE > 100) THEN (&FISM := $BREIT)
Zwei FälleIF, THEN, ELSEIF (Bedingung) THEN (Anweisung, wenn Bedingung = true) ELSE (Anweisung, wenn Bedingung = false)IF ($LAENGE > 100) THEN (&FISM := $BREIT) ELSE (&FISM := $BREIT/2)

Bedingungen mit Blockanweisungen

Mit sog. Blockanweisungen ist es möglich, die Ausführung einer folgenden Reihe von Unterpositionen zu bedingen.
Bitte die Klammerung beachten.
Der Operator THEN ist in Blockanweisungen nicht zulässig.

FallunterscheidungZulässige OperatorenAbbildung als FormelBeispiel
Ein Fall

/IF
/ENDIF

/IF (Bedingung)
     Anweisungen, wenn Bedingung = true
/ENDIF

/IF ($FARBE = 'CHROM')
     $PREIS = $PREIS + 100
/ENDIF

Zwei Fälle

/IF
/ELSE
/ENDIF

/IF (Bedingung)
     Anweisungen, wenn Bedingung = true
/ELSE [optional]
     Anweisungen, wenn Bedingung = false
/ENDIF

/IF ($FARBE = 'CHROM')
     $PREIS = $PREIS + 100
/ELSE
     $PREIS = $PREIS + 50
/ENDIF

Mehr als zwei Fälle/SELECT
/WHEN
/OTHER
/ENDSL
/SELECT
/WHEN (Bedingung 1)
     Anweisungen, wenn Bedingung 1 = true
/WHEN (Bedingung 2)
     Anweisungen, wenn Bedingung 2 = true
...
/OTHER [optional]
     Anweisungen, wenn keine der vorherigen Bedingungen zutrifft
/ENDSL
/SELECT
/WHEN ($FARBE = 'CHROM')
     $PREIS = $PREIS + 100
/WHEN ($FARBE = 'GOLD')
     $PREIS = $PREIS + 150
...
/OTHER
     $PREIS = $PREIS + 50
/ENDSL

Metaanweisungen

AnweisungBeschreibung
/EXCFRMLFormelidentifikation: Aufruf Unterformel. Die Unterformel muss von der gleichen Formelkennung sein.
/EXITGesteuerter Abbruch der Formelausführung. In der Fehlermeldung wird der Text der Position ausgegeben.

Anweisungen für die Eingabesteuerung der Sachmerkmalsausprägung

Die folgenden Anweisungen bieten die Möglichkeit die Eingabesteuerung dynamisch zu ändern (siehe auch Tabelle FRD095 (Eingabesteuerung Sach- und Adressmerkmal)):

AnweisungBeschreibung
/HIDEAngabe gefolgt von $Sachmerkmal. Ändert die Eingabesteuerung der Sachmerkmalsausprägung auf "Nicht sichtbar".
/HIDEINITAngabe gefolgt von $Sachmerkmal. Ändert die Eingabesteuerung der Sachmerkmalsausprägung auf "Nicht anzeigen" und setzt die Sachmerkmalsaufprägung auf den Initialwert.
/MANDATORYAngabe gefolgt von $Sachmerkmal. Ändert die Eingabesteuerung der Sachmerkmalsausprägung auf "Muss".
/NONMANDATORYAngabe gefolgt von $Sachmerkmal. Ändert die Eingabesteuerung der Sachmerkmalsausprägung auf "Kann".
/PROTECTAngabe gefolgt von $Sachmerkmal. Ändert die Eingabesteuerung der Sachmerkmalsausprägung auf "Gesperrt".

Mathematische Winkelfunktionen (trigonometrische Funktionen)

Die Genauigkeit der Winkelfunktionen beträgt ca. 0,01 %.

FunktionNameWinkeleinheit
#ACOS(x)ArkuscosinusErgebnis in Bogenmaß
#ASIN(x)ArkussinusErgebnis in Bogenmaß
#ATG(x)ArkustangensErgebnis in Bogenmaß
#COS(x)Cosinusx in Bogenmaß
#SIN(x)Sinusx in Bogenmaß
#TAN(x)Tangensx in Bogenmaß
Bei der Verwendung der Winkelfunktion ist der Default das Bogenmaß (Radiant). Über die Registry, Eintrag FORMULA_ANGLE_DEGREE, kann auf Winkelgrad umgestellt werden.

Sonstige Funktionen

[a = alphanumerische Zeichenfolge, n[1] = Zahl]

FunktionBeschreibungErgebnis
#BTR(Zahl)Betrag (Absolut-Wert) einer Zahl
#EXP(Zahl)Exponentialfunktion, Zahl <= 20
#EXTAB(t; n1; n2)Prüfung, ob für bestimmte Werte in einer Variantengeneratortabelle ein Ergebnis gefunden wird.Das Ergebnis ist true oder false.
#IN(Wert; Wert1; Wert2; ...)Prüfung, ob Wert (der erste Parameter) einen der angegebenen folgenden Werte (Parameter 2 bis maximal 9) hat.
Es können maximal 8 Werte angegeben werden.
Das Ergebnis ist true oder false.
#INT(Zahl)Ganzzahliger Teil (Nachkommastellen abschneiden)
#LN(Zahl)Natürlicher Logarithmus, Zahl > 0
#MID(a; n1; n2)Teilstring aus a ab Position n1 der Länge n2.Teilstring aus a
#QUD(Zahl)Quadrieren
#RND(Zahl1;Zahl2)Zahl 2 wird auf die in Zahl 1 angegebene Anzahl Nachkommastellen kaufmännisch gerundet (ab 5 wird aufgerundet).
#SQT(Zahl)Quadratwurzel
#STR(n)Umwandlung einer Zahl in eine Zeichenkette.Zahl als Zeichenkette
#TLSM(Artikelnummer; 'Sachmerkmalsname')Stellt eine Sachmerkmalsausprägung aus einem Artikelstamm zur Verfügung.
Der Sachmerkmalsname muss immer als Konstante (in einfachen Hochkommata) vorgegeben werden.
Die Feldart des Ergebnisses ist abhängig von der Sachmerkmalsdefinition (numerisch bei angegebener Mengeneinheit oder Kennzeichen numerisch).

#VAL(a)Umwandlung einer Zeichenkette in eine Zahl.
Wenn die Zeichenkette mit einem Alpha-Zeichen beginnt, ist das Ergebnis 0.
Zeichenkette als Zahl
#VGTAB(t; n1; n2; p)Ergebnis einer zweidimensionalen Variantengeneratortabelle.
Siehe US16700.
Tabellen-Parameterdefinition siehe US16800
Parameter:
t = Variantengeneratortabelle
n1 = Eingabeparameter 1
n2 = Eingabeparameter 2
p = Ergebnisparameternummer
Ergebnis einer zweidimensionalen Variantengeneratortabelle.

Weitere Beispiele

FormelBeschreibung

/IF ($A <> 0)
     $C := $B / $A
/ELSE
     /EXIT Zusatztext: $A = 0, Division nicht möglich
/ENDIF

Abfangen einer Division durch 0.

/IF ($A <> ' ')
     /HIDE $B
/ENDIF 
Wenn Sachmerkmal A angegeben ist, soll automatisch Sachmerkmal B ausgeblendet werden.
$A := IF $B > 0 THEN 1Sachmerkmal A wird 1 zugewiesen, wenn Sachmerkmal B > 0 ist.
$A := IF $B > 0 THEN 1 ELSE 2Sachmerkmal A wird 1 zugewiesen, wenn Sachmerkmal B > 0 ist, ansonsten wird 2 zugewiesen.
IF #IN($FARBE; 'CHROM'; 'SILBER'; 'GOLD') THEN ($PREIS := 150) ELSE ($PREIS := 100)Sachmerkmal PREIS wird 150 zugewiesen, wenn Sachmerkmal FARBE einer der angegebenen Werte enthält, ansonsten wird 100 zugewiesen.
$PREIS := IF #IN($FARBE; 'CHROM'; 'SILBER'; 'GOLD') THEN 150 ELSE 100