PDF-Berichte und Vorlagen in Odoo anpassen
Kurz gesagt
Rechnungs- und Angebotslayouts ändern Sie in Odoo 20.0 auf drei Ebenen: Kopf, Fuß und Papierformat im Dialog Dokumentlayout konfigurieren, den Inhalt des einzelnen Berichts im Berichtseditor von Odoo Studio, größere Anpassungen über eine QWeb-Vorlage in einem eigenen Modul. Studio gehört zur Enterprise-Edition; ein eigenes Modul lässt sich nur auf Odoo.sh und auf einer eigenen Installation betreiben, nicht auf Odoo Online.
Das Wichtigste
- Kopf, Fuß, Logo, Farben, Schrift und Vorgabe-Papierformat stehen im Dokumentlayout je Unternehmen.
- Den Inhalt eines Berichts ändert der Berichtseditor von Studio; Studio gehört zur Enterprise-Edition.
- Den Standardbericht duplizieren Sie zuerst, statt die Standardfassung selbst zu ändern.
- Ein Papierformat am einzelnen Bericht schlägt die Vorgabe aus dem Dokumentlayout.
- Eine QWeb-Vorlage erben Sie mit inherit_id und xpath in einem eigenen Modul; auf Odoo Online ist das nicht möglich.
- Ein einmal erzeugter Bericht kann als Anhang gespeichert und danach erneut geladen werden.
Ein geändertes Rechnungs- oder Angebotslayout trifft alle Dokumente des Unternehmens oder nur einen Bericht; in Odoo 20.0 entscheidet das die Ebene, auf der Sie ändern. Version 20 hat Odoo im September 2026 veröffentlicht; der Artikel führt beide Wege durch und nennt nach jedem Schritt den sichtbaren Endzustand.
Was Sie vorab brauchen
- Ein Odoo-20.0-System; die Angaben wurden am 14. Oktober 2026 in der deutschsprachigen Dokumentation 20.0 gelesen.
- Für den Weg ohne Code ein Konto mit Zugriff auf die Einstellungen. Studio gehört zur Enterprise-Edition; was es umfasst, ordnet der Studio-Überblick.
- Für den Weg mit Code ein eigenes Modul (Repository oder Dateisystem) und XML-Kenntnisse.
- Den Entwicklermodus für die App-Liste: Einstellungen ‣ Entwicklertools ‣ Entwicklermodus aktivieren; die App Apps verlangt Rechte der Systemverwaltung.
- Eine Kopie der Datenbank für den Test, siehe Testumgebung.
Drei Ebenen: Dokumentlayout, Bericht, Papierformat
Diese Ebenen sind Funktionen der Datenbank; nationale Gestaltung kommt über Lokalisierungsmodule hinzu, für Deutschland etwa das DIN-5008-Layout (Modul l10n_din5008).
| Ebene | Was sie festlegt | Wo Sie sie ändern |
|---|---|---|
| Dokumentlayout, je Unternehmen | Kopf und Fuß, Logo, Farben, Schrift, Firmenanschrift, Slogan, Vorgabe-Papierformat | Einstellungen ‣ Unternehmen ‣ Dokumentlayout konfigurieren |
| Bericht, je Modell | Inhalt der Vorlage, Papierformat des Berichts, Name, Sichtbarkeit im Druckmenü | Berichtseditor in Studio oder eine QWeb-Vorlage im eigenen Modul |
| Papierformat, Datensatz | Blattgröße, Ausrichtung, Ränder, Auflösung | Feld am Bericht, mit Code als Datensatz report.paperformat |
Ohne Code: Dokumentlayout und Berichtseditor
Schritt 1: Dokumentlayout einstellen
Öffnen Sie Einstellungen ‣ Abschnitt Unternehmen ‣ Dokumentlayout konfigurieren (Configure Document Layout). Die Einstellungen gelten je Unternehmen und für alle Berichte dieses Unternehmens. Zur Auswahl stehen sieben Layouts (Light, Boxed, Bold, Striped, Bubble, Wave, Folder), drei Hintergründe, acht Schriften, Logo, Primär- und Sekundärfarbe, Firmenanschrift im Kopf, Slogan und Fußzeilentext. Papierformat: A4 (21 cm × 29,7 cm) oder US Letter; weitere Formate können aus installierten Apps kommen, etwa Etikettenbögen. Den Dialog bringt das Modul web des öffentlichen Community-Repositorys mit; er hängt nicht an Studio.
Ergebnis: Die Vorschau im Dialog zeigt Kopf, Fuß, Logo, Anschrift und Farben; jeder neu erzeugte Bericht übernimmt diese Vorgaben. Das Vorgabe-Papierformat gilt nur, solange am Bericht kein eigenes Papierformat gesetzt ist (paperformat_id); sonst druckt der Bericht im eigenen Format (Schritt 4 und Schritt 7).
Schritt 2: Bericht in Studio öffnen und duplizieren
Öffnen Sie die App und ein Dokument, etwa ein Angebot im Verkauf, und klicken Sie oben rechts auf Studio umschalten (Toggle Studio); links wählen Sie Berichte. Alternativ öffnen Sie Studio und suchen dort nach Bericht oder Modell. Fahren Sie über die obere rechte Ecke des Standardberichts und wählen Sie über das Symbol mit den drei Punkten Duplizieren (Duplicate); die Dokumentation empfiehlt das ausdrücklich. Über Neu legen Sie einen weiteren Bericht an und wählen Extern, Intern oder Leer; die Art bestimmt, was in Kopf- und Fußzeile erscheint.
Ergebnis: Neben dem Standardbericht steht Ihre Kopie; die Standardfassung bleibt unberührt und ließe sich über Bericht zurücksetzen (Reset report) wiederherstellen.
Schritt 3: Inhalt ändern und Vorschau prüfen
Statischer Text steht nicht in Blau und wird direkt getippt; dynamischer Text ist blau und wird bei der Erzeugung durch Feldwerte ersetzt. Ein Schrägstrich öffnet die Powerbox mit den Befehlen, darunter Feld (setzt ein Feld ein und fragt nach einem Standardwert für leere Datensätze), Tabelle, Dynamische Tabelle (aus einer one2many- oder many2many-Beziehung) und Spaltenbefehle für 2, 3 oder 4 Spalten. Gestrichelte Rechtecke sind bedingte Blöcke, also if/else-Anweisungen; die Bedingung ändern Sie laut Dokumentation nur in den XML-Quellen. Der Editor speichert beim Verlassen oder über Speichern, Vorschau drucken (Print preview) erzeugt ein PDF.
Ergebnis: Das Vorschaupdf zeigt den Text an der Stelle, an die Sie ihn gesetzt haben; bedingte Blöcke blenden Abschnitte abhängig von den Daten aus.
Schritt 4: Bericht bereitstellen
Die Optionen am linken Rand steuern die Veröffentlichung: Berichtname (gilt in Studio, im Menü Drucken unter dem Zahnrad-Symbol und im Dateinamen des PDF), Papierformat (ohne Eintrag gilt das Format aus dem Standardlayout), Im Druckmenü anzeigen, Sichtbarkeit auf Gruppen beschränken, Erneut aus Anhang laden, Quellen bearbeiten (XML) und Bericht zurücksetzen. Änderungen an Kopf oder Fuß im Berichtseditor betreffen laut Dokumentation alle Standard- und eigenen Berichte des Unternehmens.
Ergebnis: Der Bericht erscheint am Datensatz unter dem Zahnrad-Symbol im Menü Drucken. Für den Fensterumschlag kommt die Position der Empfängeranschrift hinzu; diese Werte behandelt der Artikel zum Angebotsdruck in DIN 5008.
Mit Code: eigenes Modul mit QWeb-Vorlage
Die folgenden Schritte brauchen Zugriff auf den Quellcode und eine Entwicklerumgebung. Nach der Dokumentation ist Odoo Online mit eigenen Modulen und mit Modulen aus dem Apps Store unvereinbar; ein Berichtsmodul gehört daher auf Odoo.sh oder in eine eigene Installation.
Schritt 5: Modul anlegen
Auf Odoo.sh erzeugen Sie im Editor einen Entwicklungszweig und darin die Modulstruktur mit odoo-bin scaffold my_module ~/src/user/; lokal läuft derselbe Aufruf über ./odoo-bin. Für einen Bericht legen Sie einen Ordner report an; die Entwicklerdokumentation stellt die Vorlage (…_templates.xml) und die Berichtsaktion (…_reports.xml) als zwei getrennte Dateien dorthin. Tragen Sie beide im __manifest__.py in der Liste data ein; Odoo lädt diese Dateien in der angegebenen Reihenfolge.
Ergebnis: Das Modulverzeichnis enthält den Ordner report mit beiden Dateien; der Manifest nennt sie.
Schritt 6: Vorlage erben und ergänzen
QWeb-Berichte sind HTML-Vorlagen. Eine bestehende Vorlage erweitern Sie, ohne sie zu kopieren: Die erbende Vorlage nennt im Attribut inherit_id die Vorlage, die sie ergänzt, und wählt mit xpath die Stelle darin — dieselben xpath-Elemente wie bei der Ansichtsvererbung. Aufbau (die Fundstelle in expr ersetzen Sie durch den Knoten Ihrer Vorlage):
<template id="report_saleorder_note" inherit_id="sale.report_saleorder_document">
<xpath expr="…" position="after">
<p>Zusätzlicher Absatz im Angebotsbericht</p>
</xpath>
</template>
Globales CSS hängen Sie laut Dokumentation über die Vorlage des Hauptlayouts ein (inherit_id="report.style"). Werte außerhalb des Datensatzes ergänzt ein Modell report.<modul>.<bericht> über _get_report_values.
Ergebnis: Mit aktualisiertem Modul zeigt das PDF die Ergänzung; die Standardvorlage bleibt unverändert, weil Sie eine erbende Vorlage einsetzen.
Schritt 7: Papierformat als Datensatz anlegen
Ein Papierformat ist ein Datensatz des Modells report.paperformat mit den Feldern name (Pflicht), format (A4, Letter oder custom), orientation, margin_top, margin_bottom, margin_left, margin_right (Millimeter), dpi (Standard 90), header_line und header_spacing. Eigene Blattmaße tragen Sie als custom mit page_height und page_width ein; ein vorgegebenes Format neben eigenen Maßen lässt die Dokumentation nicht zu. Beispiel eines eigenen Formats auf A4:
<record id="paperformat_angebot" model="report.paperformat">
<field name="name">Angebot A4</field>
<field name="format">A4</field>
<field name="orientation">Portrait</field>
<field name="margin_top">20</field>
</record>
Der Bericht verweist über das Feld paperformat_id auf dieses Format; ohne Angabe gilt das Papierformat des Unternehmens aus dem Dokumentlayout.
Ergebnis: Der Bericht druckt im gewählten Format und mit den gesetzten Rändern.
Schritt 8: Modul installieren und aktualisieren
Öffnen Sie die App Apps und suchen Sie das Modul; die Liste zeigt standardmäßig nur Apps, deshalb wechseln Sie auf den Filter Extra. Klicken Sie auf der Modulkarte auf Aktivieren. Fehlt es in der Liste, schalten Sie den Entwicklermodus ein und wählen Apps ‣ App-Liste aktualisieren, danach Aktivieren. Nach einer Änderung am Modulcode wählen Sie in Apps beim Modul über die drei Punkte Upgrade.
Ergebnis: Das Modul steht als installiert in der App-Liste, und das PDF zeigt die Fassung aus Ihrem letzten Upgrade.
So prüfen Sie das Ergebnis
- Erzeugen Sie ein neues PDF und öffnen Sie es selbst; einen als Anhang gespeicherten Bericht (Option Erneut aus Anhang laden) zeigt Odoo weiter im alten Stand.
- Prüfen Sie zwei Datensätze: einen mit gefülltem Feld, einen ohne; im zweiten muss der Standardwert aus dem Feldbefehl stehen.
- Sehen Sie nach einer Kopf- oder Fußänderung mindestens einen zweiten Bericht an; die Änderung wirkt unternehmensweit.
- Prüfen Sie die Blattgröße am Ausdruck, wenn am Bericht ein eigenes Papierformat steht: dann gilt nicht der Wert aus dem Dokumentlayout.
- Mit mehreren Gesellschaften prüfen Sie das Dokumentlayout über den Firmenwechsler, siehe mehrere Gesellschaften.
- Berichte sind Webseiten: Die Dokumentation nennt die Adressen
/report/html/<bericht>/<id>und/report/pdf/<bericht>/<id>; die Rechteprüfung der Datenbank gilt dabei weiter.
Wenn etwas nicht klappt
| Symptom | Ursache | Abhilfe |
|---|---|---|
| Das PDF zeigt weiter den alten Stand | Der Bericht wurde als Anhang gespeichert und von dort geladen | Frisches PDF erzeugen; Option Erneut aus Anhang laden prüfen |
| Der Bericht fehlt im Menü Drucken | Im Druckmenü anzeigen ist nicht aktiv | Option am Bericht einschalten |
| Studio lässt sich nicht öffnen | Studio gehört zur Enterprise-Edition | Enterprise nutzen oder die Anpassung an eine Entwicklung geben |
| Das Modul fehlt in der App-Liste | App-Liste nach den neuen Dateien nicht aktualisiert | Entwicklermodus, Apps ‣ App-Liste aktualisieren, dann Aktivieren |
| Nach einem Upgrade ist die Änderung weg | Direkte XML-Änderungen können laut Dokumentation beim Upgrade stören | Änderungen aus der alten Datenbank übertragen oder Bericht zurücksetzen |
| Die geerbte Vorlage wirkt nicht | Modul nicht aktualisiert oder xpath trifft keinen Knoten | Upgrade ausführen und die Fundstelle in expr prüfen |
Wann Sie Hilfe holen sollten
Für den Weg mit Code holen Sie eine Entwicklung oder Ihren Odoo-Partner dazu, wenn die Vorlage eigene Logik braucht, ein neues Modell beteiligt ist oder mehrere Gesellschaften und Sprachen betroffen sind. Geänderte Berichte gehören vor jedem Versionswechsel in die Kopie der Datenbank. Ob ein Rechnungsbericht über die Gestaltung hinaus Anforderungen erfüllen muss, klären Sie mit Ihrer Steuerberatung; dieser Artikel beschreibt Layout und Technik, nicht das Rechnungsrecht.