---
title: DOCX-Template-Funktionen
description: Alle Hilfsfunktionen, die Sie direkt in einem Word-Template verwenden können
---

Beim Generieren eines Word-Reports stellt flexiDok eine Reihe von **Hilfsfunktionen** zur Verfügung, die Sie direkt in Ihrem Word-Template aufrufen können - zum Beispiel, um Bilder einzufügen, Listen zu erzeugen oder Datumswerte zu formatieren.

---

## So rufen Sie Funktionen im Template auf

Die Funktionen werden über die normale Template-Syntax verwendet:

| Syntax | Bedeutung |
|---|---|
| `+++INS funktion(arg)+++` | Funktion aufrufen und Ergebnis als Text einfügen |
| `+++FOR eintrag IN funktion(arg)+++` … `+++END-FOR eintrag+++` | Über Listen-Ergebnis iterieren |
| `+++IMAGE funktion(arg)+++` | Bild einfügen, das eine Funktion zurückgibt |
| `+++EXEC funktion(arg)+++` | Funktion ausführen, ohne ein Ergebnis anzuzeigen |

:::tip[Schleifenvariable mit `$`]
Innerhalb einer `FOR`-Schleife wird die Schleifenvariable mit `$` präfixiert angesprochen - also `+++IMAGE $page+++`, nicht `+++IMAGE page+++`.
:::

---

## Übersicht [#ubersicht]

| Funktion | Wofür |
|---|---|
| [`createPDFPages`](#createpdfpages) | PDF-Seiten als Bilder ins Dokument einfügen |
| [`createImage`](#createimage) | Einzelnes Bild aus einer Bildsammlung einfügen |
| [`createImageFromPDF`](#createimagefrompdf) | Bereits geladenes PDF-Seitenbild wiederverwenden |
| [`getValidator`](#getvalidator) | Namen des Ersteller-/Prüferuser für Unterschriftenzeile |
| [`getFilename`](#getfilename) | Dateinamen nach konfigurierter Regel erzeugen |
| [`formatDate`](#formatdate) | Datumswert formatieren |
| [`timespanToMinutes`](#timespantominutes) | Zeitwert in Minuten:Sekunden umwandeln |
| [`fromDatabase`](#fromdatabase) | Wert aus einer hinterlegten Lookup-Tabelle holen |
| [`getComponentListByChapterSectionComponentName`](#getcomponentlistbychaptersectioncomponentname) | Alle Vorkommen einer bestimmten Komponente sammeln |
| [`getComponentListByChapterSectionName`](#getcomponentlistbychaptersectionname) | Alle Komponenten eines Abschnitts sammeln |
| [`getComponentListForAllSectionsByChapterName`](#getcomponentlistforallsectionsbychaptername) | Pro Abschnitt ein flaches Objekt erzeugen (z.B. für Tabellen) |
| [`getListFromChapterAndChapterType`](#getlistfromchapterandchaptertype) | MultiChapter nach Typ filtern |


---

## Bild- und PDF-Funktionen [#bild-und-pdf-funktionen]

### createPDFPages

Rendert ein im Dokument hinterlegtes PDF seitenweise als Bilder, die dann mit `+++IMAGE ...+++` ins Word-Template eingebettet werden.

**Parameter**

| Name | Beschreibung |
|---|---|
| `pdfInput` | PDF-Feld aus dem Dokument (z.B. aus einem Zertifikats- oder Anhang-Feld) |
| `pages` | Seitenbereich - z.B. `` `1-3` ``, `` `1,3,5` `` oder `` `` `` für alle Seiten |
| `width` | Breite in cm (Standard: `14`) |
| `height` | Höhe in cm (Standard: `20`) |
| `rotationInDegree` | Rotation in Grad, z.B. `` `90` `` (Standard: keine Rotation) |

**Beispiel**

```
+++FOR page IN createPDFPages(anhang.pdf)+++
+++IMAGE $page+++
+++END-FOR page+++
```

:::tip
Kann ein PDF nicht geladen werden, wird automatisch ein Platzhalter-PDF verwendet, damit der Report trotzdem generiert werden kann.
:::

---

### createImage

Fügt ein einzelnes Bild aus einer Bildsammlung ins Template ein. Eventuell auf dem Bild hinterlegte Markierungen/Beschriftungen (Annotationen) werden dabei automatisch mit eingebrannt.

**Parameter**

| Name | Beschreibung |
|---|---|
| `image` | Bild-Eintrag aus einer Bildsammlung |
| `width` | Breite in cm (Standard: `6`) |
| `height` | Höhe in cm (Standard: `6`) |
| `ppiOverride` | Bildauflösung (PPI) für genau dieses Bild; übersteuert die Template-Einstellung *Bildauflösung im PDF*. `0` = kein Herunterskalieren (Originalauflösung). Leer lassen bzw. `null` ⇒ Template-Einstellung verwenden |
| `showAlt` | `true` ⇒ Titel des Bildes als Alt-Text übernehmen |
| `showCaption` | `true` ⇒ Kommentar des Bildes als Bildunterschrift übernehmen |
| `rotationInDegree` | Rotation in Grad (Standard: keine Rotation) |

:::warning[Reihenfolge der Parameter]
`ppiOverride` steht **vor** `showAlt` und `showCaption`. Wer `showAlt`/`showCaption` setzt, muss `ppiOverride` davor angeben – mit `null` für die Template-Einstellung oder `0` für die Originalauflösung. Beispiel: `createImage($pic, 10, 7, null, true, true)`.
:::

**Beispiel**

```
+++FOR pic IN allgemein.fotos.bilder+++
+++IMAGE createImage($pic, 10, 7, null, true, true)+++
+++END-FOR pic+++
```

Einzelnes Bild mit fester Auflösung von 300 PPI:

```
+++IMAGE createImage($pic, 7.5, 5, 300)+++
```

---

### createImageFromPDF

Übernimmt ein bereits geladenes PDF-Seiten-Bild (z.B. aus `createPDFPages`) in die Form, die `+++IMAGE+++` erwartet. Sinnvoll, wenn Sie zwei Template-Durchläufe auf dasselbe Bild machen möchten, ohne die PDF-Seite erneut zu rendern.

**Beispiel**

```
+++IMAGE createImageFromPDF(seite)+++
```

---

## Text- und Datums-Funktionen [#text-und-datums-funktionen]

### getValidator

Liefert den Namen des Benutzers, der das Dokument erstellt hat - gedacht für Unterschriftenblöcke.

**Parameter**

| Name | Beschreibung |
|---|---|
| `firstNameFirst` | `true` ⇒ *"Vorname Nachname"* · `false` (Standard) ⇒ *"Nachname Vorname"* |

**Beispiel**

```
Geprüft durch: +++INS getValidator(true)+++
```

---

### getFilename

Erzeugt den Dateinamen des Reports anhand der Regel, die im Dokument unter *Dynamischer Dateiname* konfiguriert ist. Die dort angelegten Bausteine (Feldwerte, Trennzeichen, Freitext, Revisionsnummer) werden in der eingestellten Reihenfolge zusammengesetzt.

**Beispiel**

```
Dateiname: +++INS getFilename()+++
```

---

### formatDate

Formatiert einen Datumswert. Die Sprache entspricht der in flexiDok eingestellten Oberflächensprache.

**Parameter**

| Name | Beschreibung |
|---|---|
| `datestr` | Datumswert (z.B. aus einem Eingabefeld) |
| `format` | Formatvorlage, z.B. `` `dd.MM.yyyy` ``, `` `MMMM yyyy` ``, `` `MMyy` `` |

Ist der Eingabewert kein gültiges Datum, wird ein Hinweistext in der aktuellen Sprache ausgegeben.

**Beispiel**

```
Erstellt am +++INS formatDate(allgemein.dokumentation.datum.value, `dd.MM.yyyy`)+++
```

---

### timespanToMinutes

Wandelt einen Zeitwert in Sekunden in das Format `m:ss` um.

**Beispiel** - `725` wird zu `"12:05"`:

```
Dauer: +++INS timespanToMinutes(messung.ablauf.dauer_sekunden.value)+++ min
```

Bei einem ungültigen Wert wird ein leerer Text zurückgegeben.

---

### fromDatabase

Schlägt einen Eintrag in einer der in flexiDok hinterlegten **Lookup-Tabellen** (z.B. Kundenstammdaten, Artikellisten) nach.

**Parameter**

| Name | Beschreibung |
|---|---|
| `database` | Name der Datenbank |
| `document` | Name der Tabelle/des Dokuments innerhalb der Datenbank |
| `searchKey` | ID, nach der gesucht wird |

Wird der Eintrag gefunden, erhalten Sie das komplette Objekt und können auf alle Felder zugreifen.

**Beispiel**

```
+++INS fromDatabase(`kunden`, `stammdaten`, allgemein.kunde.id.value).name+++
```

---

## Listen-Funktionen

Diese Funktionen helfen dabei, Daten aus mehreren Kapitel-Wiederholungen oder Abschnitten gesammelt im Template zu verwenden - typischerweise für Tabellen oder Aufzählungen.

### getComponentListByChapterSectionComponentName

Sammelt **alle Vorkommen einer bestimmten Komponente** über alle Wiederholungen eines Kapitels hinweg.

**Parameter**

| Name | Beschreibung |
|---|---|
| `chaptername` | Name des Kapitels |
| `sectionname` | Name des Abschnitts darin |
| `componentname` | Name der Komponente, deren Werte gesammelt werden sollen |

**Anwendungsfall** - Wenn in jeder Wiederholung eines Kapitels dasselbe Feld existiert (z.B. ein Messwert) und Sie alle Werte gebündelt auflisten möchten.

**Beispiel**

```
+++FOR m IN getComponentListByChapterSectionComponentName(`kapitelname`, `abschnittname`, `komponentenname`)+++
Nr. +++INS $m.ChapterCount+++: +++INS $m.value+++
+++END-FOR m+++
```

---

### getComponentListByChapterSectionName

Wie oben, liefert aber **alle Komponenten** eines Abschnitts - nicht nur eine bestimmte.

**Parameter**

| Name | Beschreibung |
|---|---|
| `chaptername` | Name des Kapitels |
| `sectionname` | Name des Abschnitts |

**Beispiel**

```
+++FOR c IN getComponentListByChapterSectionName(`kapitelname`, `abschnittname`)+++
+++INS $c.name+++: +++INS $c.value+++
+++END-FOR c+++
```

---

### getComponentListForAllSectionsByChapterName

Liefert **pro Abschnitt ein flaches Objekt** mit allen Komponenten dieses Abschnitts - ideal, wenn jeder Abschnitt eine Zeile einer Tabelle ergibt.

Jeder Eintrag enthält zusätzlich `Name` und `Title` des Abschnitts.

**Beispiel**

```
+++FOR s IN getComponentListForAllSectionsByChapterName(`kapitelname`)+++
+++INS $s.Title+++: +++INS $s.wert.value+++ +++INS $s.einheit.value+++
+++END-FOR s+++
```

Bei wiederholten Kapiteln erhalten Sie eine Liste von Listen (eine pro Wiederholung).

---

### getListFromChapterAndChapterType

Filtert ein wiederholtes Kapitel auf die Einträge eines bestimmten Kapitel-Typs.

**Parameter**

| Name | Beschreibung |
|---|---|
| `chaptername` | Name des Kapitels |
| `multichaptertype` | Kapitel-Typ, nach dem gefiltert werden soll |

**Beispiel**

```
+++FOR e IN getListFromChapterAndChapterType(`kapitelname`, `TypA`)+++
+++INS $e.Title+++
+++END-FOR e+++
```

---


