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