Mehr zu: publixx

PFL - Publixx Formula Language

PFL – Publixx Formula Language

Excel-ähnliche Formelsprache für berechnete Felder

Eigenschaft Wert
Version 1.1.0
Modul pfl-engine.js
Funktionen 23
Stand Januar 2026

Übersicht

PFL (Publixx Formula Language) ist eine Excel-ähnliche Formelsprache für berechnete Felder in Publixx. Sie ermöglicht dynamische Berechnungen, Text-Transformationen und intelligente Datenverarbeitung direkt im Template – ohne Programmierung.


Einsatzzweck

PFL wird verwendet für:

Bereich Anwendung
Berechnete Felder Preise mit MwSt., Summen, Durchschnitte
Text-Kombination Vor- und Nachname zusammenfügen
Bedingte Ausgabe "Auf Lager" oder "Ausverkauft" basierend auf Bestand
Smart Labels Intelligente Verkettung mit automatischer Leerfeld-Behandlung
Datenformatierung Datum, Zahlen, Text-Transformation
Fallback-Werte Ersatzwerte für leere Felder

Grundsyntax

=Formelausdruck

Jede PFL-Formel beginnt mit einem Gleichheitszeichen (=).

Grundelemente

Element Syntax Beispiel
Feldname Feldname =Preis
Feldname mit Leerzeichen [Feld Name] =[Produkt Name]
String-Literal "text" oder 'text' ="Stück"
Zahl 123 oder 123.45 =100
Berechnung + - * / =Preis * 1.19
Verkettung & =Vorname & " " & Nachname

Operatoren

Operator Beschreibung Beispiel
+ Addition =Preis + Versand
- Subtraktion =Brutto - Rabatt
* Multiplikation =Preis * 1.19
/ Division =Summe / Anzahl
& Text-Verkettung =Vorname & " " & Nachname
= Gleich (in Bedingungen) =WENN(Status = "aktiv"; ...)
<> Ungleich =WENN(Status <> "aktiv"; ...)
< > <= >= Vergleiche =WENN(Preis > 100; ...)
( ) Gruppierung =(Preis + Versand) * 1.19

Funktionen (23)

Funktionsübersicht

Kategorie Funktionen
Text (6) VERKETTEN, LINKS, RECHTS, LÄNGE, GROSS, KLEIN
Mathematik (6) SUMME, MITTELWERT, MIN, MAX, RUNDEN, ABS
Logik (4) WENN, UND, ODER, ISTLEER
Smart ⭐ (3) VERBINDE, ERSTERVON, WENNLEER
Datum (4) HEUTE, JAHR, MONAT, TAG

Textfunktionen (6)

VERKETTEN / CONCAT

Verbindet mehrere Texte zu einem.

Syntax: =VERKETTEN(text1; text2; ...)

=VERKETTEN(Vorname; " "; Nachname)
→ "Max Mustermann"

=VERKETTEN(PLZ; " "; Ort)
→ "12345 Berlin"

LINKS / LEFT

Gibt die ersten n Zeichen zurück.

Syntax: =LINKS(text; anzahl)

=LINKS(PLZ; 2)
→ "12" (bei PLZ "12345")

RECHTS / RIGHT

Gibt die letzten n Zeichen zurück.

Syntax: =RECHTS(text; anzahl)

=RECHTS(Telefon; 4)
→ "5678" (bei "+49 123 45678")

LÄNGE / LEN

Gibt die Textlänge zurück.

Syntax: =LÄNGE(text)

=LÄNGE(Beschreibung)
→ 45

GROSS / UPPER

Wandelt Text in Großbuchstaben um.

Syntax: =GROSS(text)

=GROSS(Kategorie)
→ "ELEKTRONIK"

KLEIN / LOWER

Wandelt Text in Kleinbuchstaben um.

Syntax: =KLEIN(text)

=KLEIN(Email)
→ "max@example.com"

Mathematische Funktionen (6)

SUMME / SUM

Addiert alle Werte.

Syntax: =SUMME(zahl1; zahl2; ...)

=SUMME(Preis; Versand; Steuer)
→ 119.00

MITTELWERT / AVERAGE

Berechnet den Durchschnitt.

Syntax: =MITTELWERT(zahl1; zahl2; ...)

=MITTELWERT(Note1; Note2; Note3)
→ 2.3

MIN

Gibt den kleinsten Wert zurück.

Syntax: =MIN(zahl1; zahl2; ...)

=MIN(Angebot1; Angebot2; Angebot3)
→ 99.00

MAX

Gibt den größten Wert zurück.

Syntax: =MAX(zahl1; zahl2; ...)

=MAX(Preis1; Preis2)
→ 299.00

RUNDEN / ROUND

Rundet auf Dezimalstellen.

Syntax: =RUNDEN(zahl; stellen)

=RUNDEN(Preis * 1.19; 2)
→ 118.99

ABS

Gibt den Absolutwert (Betrag) zurück.

Syntax: =ABS(zahl)

=ABS(Differenz)
→ 25 (bei Differenz = -25)

Logikfunktionen (4)

WENN / IF

Bedingte Ausgabe basierend auf einer Prüfung.

Syntax: =WENN(bedingung; dann_wert; sonst_wert)

=WENN(Bestand > 0; "Auf Lager"; "Ausverkauft")
→ "Auf Lager" oder "Ausverkauft"

=WENN(Status = "aktiv"; "✓"; "✗")
→ "✓" oder "✗"

// Verschachtelt:
=WENN(Bestand > 10; "Viele"; WENN(Bestand > 0; "Wenige"; "Keine"))

UND / AND

Prüft ob alle Bedingungen wahr sind.

Syntax: =UND(bedingung1; bedingung2; ...)

=WENN(UND(Preis > 0; Bestand > 0); "Verfügbar"; "Nicht verfügbar")

ODER / OR

Prüft ob mindestens eine Bedingung wahr ist.

Syntax: =ODER(bedingung1; bedingung2; ...)

=WENN(ODER(Status = "A"; Status = "B"); "Gültig"; "Ungültig")

ISTLEER / ISEMPTY

Prüft ob ein Wert leer ist.

Syntax: =ISTLEER(wert)

=WENN(ISTLEER(Email); "Fehlt"; Email)

Smart-Funktionen ⭐ (3)

Diese Funktionen sind speziell für intelligente Datenverarbeitung entwickelt.

VERBINDE / JOIN / TEXTJOIN

Intelligente Verkettung mit Trennzeichen – ignoriert automatisch leere Werte.

Syntax: =VERBINDE(trennzeichen; wert1; wert2; ...)

=VERBINDE(", "; Nachname; Vorname)
→ "Mustermann, Max"

// Bei leerem Vorname:
=VERBINDE(", "; Nachname; Vorname)
→ "Mustermann" (NICHT "Mustermann, ")

=VERBINDE(" | "; Marke; Modell; Variante)
→ "BMW | 320d | M Sport" oder "BMW | 320d" (wenn Variante leer)

Vergleich mit VERKETTEN:

// VERKETTEN zeigt leere Werte:
=VERKETTEN(Nachname; ", "; Vorname)
→ "Mustermann, " (wenn Vorname leer)

// VERBINDE ignoriert leere Werte:
=VERBINDE(", "; Nachname; Vorname)
→ "Mustermann" (wenn Vorname leer)

ERSTERVON / FIRSTOF / COALESCE

Gibt den ersten nicht-leeren Wert zurück.

Syntax: =ERSTERVON(wert1; wert2; ...)

=ERSTERVON(Mobil; Telefon; "—")
→ Mobil (wenn vorhanden), sonst Telefon, sonst "—"

=ERSTERVON(Aktionspreis; Normalpreis)
→ Aktionspreis wenn vorhanden, sonst Normalpreis

WENNLEER / IFEMPTY

Gibt Ersatzwert zurück wenn Feld leer ist.

Syntax: =WENNLEER(wert; ersatz)

=WENNLEER(Email; "Nicht angegeben")

=WENNLEER(Beschreibung; "Keine Beschreibung verfügbar")

Datumsfunktionen (4)

HEUTE / TODAY

Gibt das aktuelle Datum zurück.

Syntax: =HEUTE()

=HEUTE()
→ "06.01.2026"

JAHR / YEAR

Extrahiert das Jahr aus einem Datum.

Syntax: =JAHR(datum)

=JAHR(Geburtsdatum)
→ 1990

MONAT / MONTH

Extrahiert den Monat aus einem Datum.

Syntax: =MONAT(datum)

=MONAT(Bestelldatum)
→ 1 (für Januar)

TAG / DAY

Extrahiert den Tag aus einem Datum.

Syntax: =TAG(datum)

=TAG(Lieferdatum)
→ 6

Englische Aliase

PFL unterstützt sowohl deutsche als auch englische Funktionsnamen:

Deutsch English
VERKETTEN CONCAT
LINKS LEFT
RECHTS RIGHT
LÄNGE LEN
GROSS UPPER
KLEIN LOWER
SUMME SUM
MITTELWERT AVERAGE
RUNDEN ROUND
WENN IF
UND AND
ODER OR
ISTLEER ISEMPTY, ISBLANK
VERBINDE JOIN, TEXTJOIN, CONCAT_WS
ERSTERVON FIRSTOF, COALESCE, NVL
WENNLEER IFEMPTY, IFBLANK, IFERROR
HEUTE TODAY
JAHR YEAR
MONAT MONTH
TAG DAY

Praxisbeispiele

Preisberechnung

// Brutto-Preis mit 19% MwSt.
=RUNDEN(Netto * 1.19; 2)
→ 118.99

// Rabattierter Preis
=RUNDEN(Preis * (1 - Rabatt / 100); 2)
→ 85.50

// Gesamtpreis
=SUMME(Produktpreis; Versand; Verpackung)

Adressformatierung

// Vollständiger Name
=VERBINDE(" "; Anrede; Titel; Vorname; Nachname)
→ "Herr Dr. Max Mustermann"

// Adresszeile
=VERBINDE(", "; Strasse; PLZ & " " & Ort; Land)
→ "Hauptstraße 1, 12345 Berlin, Deutschland"

Bestandsanzeige

// Einfache Verfügbarkeit
=WENN(Bestand > 0; "✓ Auf Lager"; "✗ Ausverkauft")

// Detaillierte Anzeige
=WENN(Bestand > 10; "Sofort lieferbar"; 
  WENN(Bestand > 0; "Nur noch " & Bestand & " Stück"; 
    "Derzeit nicht verfügbar"))

Kontaktdaten

// Telefon mit Fallback
=ERSTERVON(Mobil; TelefonGeschaeft; TelefonPrivat; "—")

// Email oder Hinweis
=WENNLEER(Email; "Email nicht hinterlegt")

// Vollständige Kontaktzeile
=VERBINDE(" | "; Email; Telefon; Website)

Fehlerbehandlung

Fehlerwerte

Fehler Bedeutung Ursache
#FELD? Feld nicht gefunden Feldname existiert nicht im Datensatz
#SYNTAX! Syntaxfehler Ungültige Formelstruktur
#DATUM! Datumsfehler Ungültiges Datumsformat
#DIV/0! Division durch Null Divisor ist 0
(leer) Leeres Ergebnis Formel ergibt keinen Wert

API-Referenz

PflEngine.evaluate(formula, record)

Wertet eine Formel aus.

const result = PflEngine.evaluate("=Preis * 1.19", { Preis: 100 });
// → 119

PflEngine.validate(formula)

Prüft eine Formel auf Syntax-Fehler.

const validation = PflEngine.validate("=WENN(Preis > 100; 'teuer'; 'günstig')");
// → { valid: true, fields: ['Preis'], functions: ['WENN'] }

PflEngine.isFormula(string)

Prüft ob ein String eine Formel ist.

PflEngine.isFormula("=Preis * 1.19")  // → true
PflEngine.isFormula("Normaler Text")  // → false

PflEngine.listFunctions()

Gibt alle verfügbaren Funktionen zurück.

PflEngine.listFunctions()
// → { text: [...], math: [...], logic: [...], smart: [...], date: [...] }

© incoxx GmbH – Publixx Documentation