9.3 Bericht als Anhang — PDF-Berichte automatisch speichern

9.3 Bericht als Anhang — PDF-Berichte automatisch speichern

Anleitung für Kundenadministratoren · UDM Admin Client

1

Ü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.

Typische Anwendungsfälle
  • 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.

2

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.

Tipp Sie können die Berichtsvorlage jederzeit im Berichts-Designer testen, bevor Sie die Aktion einrichten. Öffnen Sie die Vorlage und prüfen Sie die Vorschau mit Beispieldaten.

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.
3

Schritt für Schritt

A. Berichtsvorlage konfigurieren

Falls noch keine Berichtsvorlage existiert, erstellen Sie zunächst eine neue Vorlage im Berichts-Designer:

  1. Berichts-Designer öffnen

    Navigieren Sie im Admin-Bereich zu Verwaltung → Berichtsvorlagen. Erstellen Sie eine neue Vorlage oder wählen Sie eine bestehende aus.

  2. 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.

  3. 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.

Zusatz-Datenquellen

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)

  1. Job-Verwaltung öffnen

    Navigieren Sie im Admin-Bereich zu Verwaltung → Jobs. Hier werden alle konfigurierten Aktionen und Hintergrundjobs angezeigt.

  2. Neuen Job anlegen

    Klicken Sie auf „Neu“, um einen neuen Job zu erstellen. Vergeben Sie einen aussagekräftigen Namen (z. B. „Protokoll-PDF erzeugen“).

  3. 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.
  4. 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.

  5. 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.

  6. 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.

  7. Job speichern

    Speichern Sie den Job. Die Aktion ist nun konfiguriert und kann verwendet werden.

Job-Aktion → Bericht als Anhang konfigurieren
Aktion: Bericht erstellen
Berichtsvorlage
Monatlicher Kundenbericht
Trigger
Nach Speichern
Format
PDF
Speichern als Anhang
aktiv
An E-Mail anhängen
aktiv
Vorhandene ersetzen
aus
4

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.
Tipp: Dateiname-Template Verwenden Sie geschweifte Klammern {}, 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
5

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:

  1. Öffnen Sie den gewünschten Dialog im Dialog-Designer.
  2. Navigieren Sie zum Bereich Aktionen / Jobs.
  3. Fügen Sie den soeben erstellten Job hinzu.
  4. 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:

  1. Datenänderungs-Tab öffnen

    Wechseln Sie im Job zum Tab „Datenänderung“.

  2. 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“).

  3. 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).

  4. Speichern

    Bei jeder passenden Datenänderung wird der Bericht automatisch im Hintergrund erzeugt und angehängt.

Beispiel: Nur bei bestimmtem Status auslösen

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.

Hinweis bei automatischer Auslösung Stellen Sie sicher, dass die Berichtsvorlage mit den Daten eines einzelnen Datensatzes funktioniert. Der Filter wird automatisch auf den auslösenden Datensatz eingeschränkt.
6

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“.

Beispiel: Dynamischer Filter

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.

Tipp: Ohne Filter und Parameter Wenn Sie keine Filter oder Parameter konfigurieren, verwendet der Bericht seine Standard-Abfragen. Die erweiterte Konfiguration ist vollständig optional — ein einfacher Bericht funktioniert auch ohne jede Einstellung.
7

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.

E-Mail-Vorschau → Versand mit Bericht als Anhang
Monatsbericht Mai 2026 · Mustermann GmbH
An: kontakt@mustermann.de
Betreff: Ihr Monatsbericht 05/2026
Sehr geehrte Damen und Herren,
im Anhang erhalten Sie den Monatsbericht.
📎 Kundenbericht_Mustermann_2026-05.pdf 182 KB
8

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.

Typischer Anwendungsfall

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

  1. Per-Record-Modus aktivieren

    Setzen Sie im Bereich „Bericht erstellen“ den Haken bei „Pro Datensatz erstellen“.

  2. 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.

  3. 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.

Voraussetzung Die Hauptdatenquelle der Berichtsvorlage muss einer Entity zugeordnet sein. Nur so können die Einzel-PDFs den richtigen Datensätzen zugeordnet werden.
Tipp: Kombination mit Datenquellen-Filter Der konfigurierte Filter bestimmt, welche Datensätze einen Einzelbericht erhalten. Ohne Filter werden alle Datensätze der Hauptdatenquelle verarbeitet. Mit Filter (z. B. SubunternehmerNr = {SubunternehmerNr}) werden nur die relevanten Datensätze berücksichtigt.
9

Tipps

Mehrere Berichte am selben Datensatz Jede Ausführung erzeugt einen neuen Anhang. Über den Attachment-Kontext können Sie verschiedene Berichtstypen unterscheiden (z. B. „Protokoll“ und „Prüfbericht“ als separate Gruppen).
Berichtsvorlage ändern Bereits erzeugte PDF-Anhänge bleiben unverändert. Neue Ausführungen verwenden die aktualisierte Vorlage. So entsteht ein nachvollziehbares Archiv verschiedener Versionen.
Bericht vor Einrichtung testen Öffnen Sie die Berichtsvorlage im Berichts-Designer und prüfen Sie die Vorschau. Stellen Sie sicher, dass alle Felder korrekt befüllt werden, bevor Sie den Job aktivieren.
Performance bei automatischen Triggern Die Berichtserzeugung benötigt Rechenzeit. Bei sehr häufig auslösenden Triggern (z. B. bei jeder Änderung an einem häufig bearbeiteten Datensatz) sollten Sie eine Auslösebedingung setzen, um unnötige Erzeugungen zu vermeiden.
Entity-Zuordnung prüfen Der Job muss derselben Entity zugeordnet sein wie der Dialog, an dem der Anhang erscheinen soll. Bei falscher Entity-Zuordnung kann der Anhang nicht gespeichert werden.
10

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.