Überblick
Mit der Job-Aktion „Bericht erstellen“ (CreateReport)
können PDF-Berichte automatisch erzeugt und als Anhänge an Datensätze gespeichert werden.
Die Aktion nutzt eine vorhandene Berichtsvorlage, befüllt sie mit den Daten des
jeweiligen Datensatzes und legt das Ergebnis als PDF-Datei im Anhänge-Panel ab.
- Protokoll-PDF automatisch an einen Vorgang anhängen
- Prüfbericht nach Statusänderung erzeugen und archivieren
- Rechnungs- oder Lieferschein-PDF am Auftrag speichern
- Bestandsbericht per Knopfdruck als Anhang ablegen
- Zertifikate oder Bestätigungen automatisch bei Abschluss generieren
Die Aktion kann manuell per Button-Klick durch den Anwender oder automatisch über einen DataChange-Trigger bei Datenänderungen ausgelöst werden.
Voraussetzungen
2. Berichtsvorlage
Es muss bereits eine Berichtsvorlage im Berichts-Designer erstellt sein, die Daten aus der gewünschten Datenquelle anzeigt. Die Vorlage wird zur Laufzeit mit den Feldern des aktuellen Datensatzes befüllt und als PDF exportiert.
3. Datenobjekt mit Anhängen
Der Dialog, an dem der Bericht als Anhang gespeichert werden soll, muss Anhänge unterstützen. Das Attachment-Panel muss im Dialog aktiviert sein. Ohne aktivierte Anhänge kann die Aktion den Bericht nicht speichern.
4. Weitere Voraussetzungen
- Admin-Berechtigung — Sie benötigen Zugriff auf die Job-Verwaltung im Admin-Bereich.
- Entity-Zuordnung — Die Entity des Jobs muss mit der Entity des Ziel-Dialogs übereinstimmen.
Schritt für Schritt
A. Berichtsvorlage konfigurieren
Falls noch keine Berichtsvorlage existiert, erstellen Sie zunächst eine neue Vorlage im Berichts-Designer:
-
Berichts-Designer öffnen
Navigieren Sie im Admin-Bereich zu Verwaltung → Berichtsvorlagen. Erstellen Sie eine neue Vorlage oder wählen Sie eine bestehende aus.
-
Datenquelle zuweisen
Wählen Sie die Hauptdatenquelle, die die Felder für den Bericht liefert. Die Datenquelle muss zur Entity passen, an deren Datensätze der Bericht später angehängt wird.
-
Layout gestalten und testen
Gestalten Sie das Berichtslayout mit den gewünschten Feldern, Tabellen und Formatierungen. Testen Sie die Vorschau mit realen Daten, um sicherzustellen, dass der Bericht korrekt ausgegeben wird.
Wenn Ihr Bericht Daten aus mehreren Quellen benötigt (z. B. Kopfdaten und
Positionsdaten), können Sie in der Berichtsvorlage Zusatz-Datenquellen
(AdditionalData) konfigurieren. Jede Zusatz-Datenquelle kann später
eigene Filter und Parameter erhalten.
B. Aktion einrichten (Job anlegen)
-
Job-Verwaltung öffnen
Navigieren Sie im Admin-Bereich zu Verwaltung → Jobs. Hier werden alle konfigurierten Aktionen und Hintergrundjobs angezeigt.
-
Neuen Job anlegen
Klicken Sie auf „Neu“, um einen neuen Job zu erstellen. Vergeben Sie einen aussagekräftigen Namen (z. B. „Protokoll-PDF erzeugen“).
-
Entity zuweisen
Wählen Sie im Feld Entity die Datenquelle aus, an deren Datensätze der Bericht angehängt werden soll (z. B. „Vorgang“, „Auftrag“).
Tipp Die Entity bestimmt, an welchem Datensatz-Typ der PDF-Anhang später erscheint. Wählen Sie die Entity, auf deren Detailseite der Anwender den Anhang sehen soll. -
Aktion auf „Bericht erstellen“ setzen
Wechseln Sie zum Tab „Aktion“ und wählen Sie im Dropdown Aktion den Wert:
Bericht erstellen (CreateReport)
Es erscheint der Konfigurationsbereich mit den folgenden Feldern.
-
Berichtsvorlage wählen Pflichtfeld
Wählen Sie im Lookup „Berichtsvorlage“ die gewünschte Vorlage aus. Diese Vorlage wird zur Laufzeit mit den Daten des aktuellen Datensatzes befüllt und als PDF exportiert.
-
Attachment-Kontext festlegen Optional
Geben Sie im Feld „Attachment-Kontext“ einen Gruppierungsnamen für den Anhang ein (z. B.
Protokoll,Rechnung,Prüfbericht). Standard:GeneratedReport.Über diesen Kontext können verschiedene Anhang-Typen am selben Datensatz unterschieden werden. Mehrere Jobs können denselben oder unterschiedliche Kontexte verwenden.
-
Job speichern
Speichern Sie den Job. Die Aktion ist nun konfiguriert und kann verwendet werden.
Speicherort und Dateiname konfigurieren
Der erzeugte Bericht wird als Entity-Attachment am Datensatz gespeichert und erscheint im Anhänge-Panel des Dialogs. Der Dateiname kann über zwei Mechanismen gesteuert werden:
| Feld | Beschreibung |
|---|---|
| Dateiname-Template Neu |
Dynamischer Dateiname mit Platzhaltern aus dem Datensatz.
Syntax: {Feldname} oder {Feldname:Format}.
Beispiel: Protokoll_{Vorgangsnummer}_{Status}
Mit Datumsformat: Bericht_{Erstelldatum:yyyy-MM-dd}
Ergebnis: Protokoll_V-2026-042_Abgeschlossen_2026-03-13_143022.pdf
Ein Zeitstempel wird automatisch angehängt. Wenn kein Template gesetzt ist, wird der Dateiname-Präfix verwendet. |
| Dateiname-Präfix |
Fallback: Bestimmt den Anfang des Dateinamens, wenn kein Template gesetzt ist.
Standard: Name der Berichtsvorlage.
Beispiel-Ergebnis: Protokoll_2026-03-13_143022.pdf
|
| Attachment-Kontext |
Gruppierungsname für den Anhang. Ermöglicht die Unterscheidung
verschiedener Anhang-Typen am selben Datensatz.
Standard: GeneratedReport.
|
{}, um auf Felder des Datensatzes zuzugreifen.
Feldnamen sind nicht case-sensitiv. Nicht vorhandene Felder werden durch einen
leeren String ersetzt. Ungültige Dateinamen-Zeichen werden automatisch entfernt.
Priorität der Dateiname-Ermittlung
| Priorität | Quelle | Ergebnis-Format |
|---|---|---|
| 1 (höchste) | Dateiname-Template | {aufgelöstes Template}_{Zeitstempel}.pdf |
| 2 | Dateiname-Präfix | {Präfix}_{Zeitstempel}.pdf |
| 3 (Standard) | Name der Berichtsvorlage | {Vorlagenname}_{Zeitstempel}.pdf |
Automatisierung via Hintergrund-Job
Manuelle Auslösung (Button-Klick)
Damit die Aktion im Anwenderdialog als Button erscheint, muss der Job dem entsprechenden Dialog zugewiesen werden:
- Öffnen Sie den gewünschten Dialog im Dialog-Designer.
- Navigieren Sie zum Bereich Aktionen / Jobs.
- Fügen Sie den soeben erstellten Job hinzu.
- Der Anwender sieht nun einen Aktions-Button in der Toolbar des Dialogs.
Bei Klick auf den Button wird der Bericht erzeugt und als PDF-Anhang am aktuellen Datensatz gespeichert. Nach der Ausführung erscheint eine Bestätigungsmeldung.
Automatische Auslösung (DataChange-Trigger)
Optional kann der Job auch automatisch bei Datenänderungen ausgelöst werden. So richten Sie einen DataChange-Trigger ein:
-
Datenänderungs-Tab öffnen
Wechseln Sie im Job zum Tab „Datenänderung“.
-
DataChange-Trigger hinzufügen
Fügen Sie einen neuen DataChange-Trigger hinzu. Definieren Sie die Trigger-Entity und den Auslöser (z. B. „bei Änderung“, „bei Feldänderung von
Status“). -
Auslösebedingung definieren (optional) Neu
Optional können Sie eine Auslösebedingung definieren. Der Job wird dann nur ausgelöst, wenn der geänderte Datensatz die Filterbedingung erfüllt.
Unterhalb der Feldüberwachung erscheint der Bereich „Auslösebedingung (optional)“ mit dem FilterControl. Definieren Sie die gewünschte Bedingung (z. B.
Status = Abgeschlossen). -
Speichern
Bei jeder passenden Datenänderung wird der Bericht automatisch im Hintergrund erzeugt und angehängt.
Anstatt bei jeder Änderung am Feld „Status“ den Bericht zu erzeugen,
setzen Sie die Bedingung: Status = Abgeschlossen.
Der Bericht wird dann nur erzeugt, wenn der Datensatz nach der Änderung den
Status „Abgeschlossen“ hat. Ohne Bedingung wird der Job bei jeder
passenden Änderung ausgelöst.
Erweiterte Konfiguration: Filter und Parameter
Sobald eine Berichtsvorlage ausgewählt ist, erscheint im Job der Bereich „Report-Konfiguration“. Hier können Sie Filter und Parameter für die Berichtserzeugung konfigurieren.
Report-Parameter
Wenn die Berichtsvorlage Parameter definiert (z. B. Stichtag, Mandant), erscheinen diese automatisch in der Konfiguration. Pro Parameter legen Sie die Wertquelle fest:
| Wertquelle | Beschreibung | Beispiel |
|---|---|---|
| Fester Wert | Ein konstanter Wert, der bei jeder Ausführung gleich ist. | Stichtag = 2026-01-01 |
| DataItem-Feld | Der Wert wird zur Laufzeit aus einem Feld des auslösenden Datensatzes gelesen. | Mandant-ID = {mandant_id} (aus dem Datensatz) |
Datenquellen-Filter
Für die Hauptdatenquelle und jede Zusatz-Datenquelle des Berichts kann ein eigener Filter konfiguriert werden. Auch Filter-Bedingungen unterstützen die Wertquellen „Fester Wert“ und „DataItem-Feld“.
Statt eines festen Filterwertes können Sie eine dynamische Bedingung setzen:
KundenNr = {KundenNr} (Wertquelle: DataItem-Feld)
Zur Laufzeit wird der Wert aus dem auslösenden Datensatz gelesen und in den
Filter eingesetzt. So erhält der Bericht genau die Daten, die zum aktuellen
Datensatz gehören.
Datenquellen-Parameter
Wenn eine Datenquelle eigene Parameter definiert (z. B.
bereich_id), erscheinen diese ebenfalls in der Konfiguration.
Die Wertquelle (Fester Wert / DataItem-Feld) kann pro Parameter individuell
gewählt werden.
Praxisbeispiele
Beispiel 1: Protokoll-PDF bei Abschluss
| Job-Name | Protokoll-PDF erzeugen |
| Entity | Vorgang |
| Berichtsvorlage | Vorgangsprotokoll |
| Attachment-Kontext | Protokoll |
| Dateiname-Template | Protokoll_{Vorgangsnummer}_{Status} |
| Trigger | DataChange — Feldänderung Status |
| Auslösebedingung | Status = Abgeschlossen |
Ergebnis: Sobald ein Vorgang auf „Abgeschlossen“ gesetzt wird,
wird automatisch ein Protokoll-PDF erzeugt und als Anhang am Vorgang gespeichert.
Dateiname: Protokoll_V-2026-042_Abgeschlossen_2026-03-13_143022.pdf
Beispiel 2: Prüfbericht per Knopfdruck
| Job-Name | Prüfbericht erstellen |
| Entity | Anlage |
| Berichtsvorlage | Anlagen-Prüfbericht |
| Attachment-Kontext | Prüfbericht |
| Dateiname-Präfix | Pruefbericht |
| Trigger | Manuell (Button im Dialog) |
Ergebnis: Der Anwender öffnet eine Anlage, klickt auf den
Aktions-Button „Prüfbericht erstellen“ und erhält das PDF
sofort als Anhang. Dateiname: Pruefbericht_2026-03-13_143022.pdf
Beispiel 3: Bericht mit dynamischem Filter
| Job-Name | Kundenübersicht erzeugen |
| Entity | Kunde |
| Berichtsvorlage | Kunden-Detailbericht (mit Zusatz-DS „Aufträge“) |
| Hauptdatenquelle-Filter | KundenNr = {KundenNr} (DataItem-Feld) |
| Zusatz-DS „Aufträge“ Filter | KundenId = {KundenId} (DataItem-Feld) |
| Report-Parameter „Stichtag“ | Fester Wert: 2026-01-01 |
Ergebnis: Der Bericht wird mit den Daten des aktuellen Kunden und dessen Aufträgen befüllt. Der Stichtag-Parameter wird mit dem konfigurierten festen Wert übergeben.
im Anhang erhalten Sie den Monatsbericht.
Per-Record-Modus: Einzelberichte pro Datensatz Neu
Standardmäßig erzeugt die Aktion ein PDF mit allen Datensätzen der Hauptdatenquelle und hängt es an den auslösenden Datensatz an. Mit dem Per-Record-Modus wird stattdessen für jeden Datensatz ein eigenes PDF erzeugt und direkt am jeweiligen Datensatz gespeichert.
Ein Subunternehmer hat 50 Fahrer. Im Standardmodus entsteht ein 50-seitiges PDF am Subunternehmer-Datensatz. Im Per-Record-Modus erhält jeder Fahrer sein eigenes 1-seitiges PDF als Anhang.
Einrichtung
-
Per-Record-Modus aktivieren
Setzen Sie im Bereich „Bericht erstellen“ den Haken bei „Pro Datensatz erstellen“.
-
ZIP-Gesamtpaket (optional)
Aktivieren Sie „ZIP-Gesamtpaket erstellen“, um alle Einzel-PDFs zusätzlich als ZIP-Archiv am Eltern-Datensatz zu speichern. Das ZIP kann heruntergeladen und z. B. per E-Mail verschickt werden.
-
Dateiname-Template anpassen
Im Per-Record-Modus wird das Dateiname-Template pro Datensatz aufgelöst. Verwenden Sie Platzhalter wie
{Nachname}_{Vorname}, um aussagekräftige Dateinamen zu erhalten.
Beispiel: Fahrer-Zertifikate pro Datensatz
| Job-Name | Fahrer-Zertifikat erzeugen |
| Entity | Subunternehmer (Eltern-Entity) |
| Berichtsvorlage | Fahrer-Zertifikat (Hauptdatenquelle: Fahrer) |
| Pro Datensatz erstellen | ✔ aktiviert |
| ZIP-Gesamtpaket | ✔ aktiviert |
| Dateiname-Template | Zertifikat_{Nachname}_{Vorname} |
| Hauptdatenquelle-Filter | SubunternehmerNr = {SubunternehmerNr} (DataItem-Feld) |
Ergebnis: Jeder Fahrer-Datensatz erhält sein eigenes PDF-Attachment
(z. B. Zertifikat_Mueller_Hans_2026-04-13_143022.pdf).
Zusätzlich wird ein ZIP-Archiv mit allen 50 PDFs am Subunternehmer-Datensatz gespeichert.
SubunternehmerNr = {SubunternehmerNr}) werden nur die
relevanten Datensätze berücksichtigt.
Tipps
Häufig gestellte Fragen (FAQ)
In welchem Format wird der Bericht gespeichert?
Immer als PDF-Datei. Die Berichtsvorlage im DevExpress-Format wird intern zur Erzeugung verwendet. Der Anhang selbst ist ein Standard-PDF, das in jedem PDF-Viewer geöffnet werden kann.
Kann ich den Bericht auch ohne Trigger manuell auslösen?
Ja. Weisen Sie den Job einem Dialog zu. Der Anwender sieht dann einen Aktions-Button in der Toolbar und kann den Bericht per Klick erzeugen.
Was passiert, wenn die Berichtsvorlage geändert wird?
Bereits erzeugte PDF-Anhänge bleiben unverändert. Neue Ausführungen verwenden die aktualisierte Vorlage. So entsteht ein nachvollziehbares Archiv.
Kann ich mehrere Berichte an denselben Datensatz anhängen?
Ja. Jede Ausführung erzeugt einen neuen Anhang. Über den Attachment-Kontext können Sie verschiedene Berichtstypen gruppieren.
Wie funktionieren die Platzhalter im Dateiname-Template?
Verwenden Sie {Feldname}, um den Wert eines Felds einzusetzen.
Mit {Feldname:Format} können Sie zusätzlich ein Format angeben,
z. B. {Datum:yyyy-MM-dd} für Datumsformatierung.
Feldnamen sind nicht case-sensitiv. Nicht vorhandene Felder werden leer ersetzt.
Wann wird der DataChange-Trigger NICHT ausgelöst?
Der Trigger wird nicht ausgelöst, wenn:
- Die geänderte Entity nicht der konfigurierten Trigger-Entity entspricht
- Der Auslöser-Typ nicht passt (z. B. „bei Feldänderung“, aber ein anderes Feld wurde geändert)
- Eine Auslösebedingung konfiguriert ist und der Datensatz die Bedingung nach der Änderung nicht erfüllt
Was ist der Unterschied zwischen Hauptdatenquelle und Zusatz-Datenquelle?
Die Hauptdatenquelle ist die primäre Datenquelle der Berichtsvorlage.
Zusatz-Datenquellen (AdditionalData) liefern ergänzende
Daten (z. B. Positionen zu einem Auftrag). Beide können eigene Filter und
Parameter erhalten.
Was bedeutet „Wertquelle: DataItem-Feld“?
Wenn Sie als Wertquelle „DataItem-Feld“ wählen, wird der Wert zur Laufzeit dynamisch aus dem auslösenden Datensatz gelesen. So kann z. B. die Kundennummer des aktuellen Vorgangs automatisch als Filterwert verwendet werden, ohne dass ein fester Wert hinterlegt werden muss.
Brauche ich die erweiterte Filter-/Parameter-Konfiguration?
Nein. Für einfache Berichte, die nur den aktuellen Datensatz darstellen, reichen Berichtsvorlage und Attachment-Kontext. Die erweiterte Konfiguration ist nur nötig, wenn der Bericht zusätzliche Filterung oder Parameter-Werte benötigt.
Was ist der Unterschied zwischen Standardmodus und Per-Record-Modus?
Im Standardmodus entsteht ein PDF mit allen Datensätzen, das am auslösenden Datensatz gespeichert wird. Im Per-Record-Modus wird für jeden Datensatz der Hauptdatenquelle ein eigenes PDF erzeugt und am jeweiligen Datensatz als Anhang gespeichert.
Wie funktioniert das ZIP-Gesamtpaket?
Wenn „ZIP-Gesamtpaket“ aktiviert ist, werden alle erzeugten Einzel-PDFs zusätzlich in ein ZIP-Archiv gepackt und am Eltern-Datensatz (dem auslösenden Datensatz) als Anhang gespeichert. Das ZIP kann heruntergeladen und z. B. per E-Mail verschickt werden.