PDF-Berichte

Mit Studio können Sie vorhandene PDF-Berichte (z. B. Rechnungen, Angebote usw.) bearbeiten oder neue Berichte erstellen.

Standardlayout

Das Standardlayout der Berichte wird außerhalb von Studio verwaltet. Gehen Sie zu Einstellungen zum Abschnitt Unternehmen und klicken Sie auf Dokumentlayout konfigurieren. Die Layouteinstellungen gelten für alle Berichte, aber nur für das aktuelle Unternehmen.

Tipp

Wie sich die verschiedenen Einstellungen auf das Berichtslayout auswirken, können Sie in der Berichtsvorschau auf der rechten Seite sehen. Sie können auch eine Beispielrechnung im PDF-Format herunterladen, indem Sie auf PDF-Vorschau herunterladen klicken.

Verwenden Sie folgende Einstellungen:

  • Layout: Es stehen vier Layouts zur Verfügung:

    Layoutbeispiel eines einfachen Berichts
  • Schriftart: Es sind sieben Schriftarten verfügbar: Lato, Roboto, Open Sans, Montserrat, Oswald, Raleway und Tajawal (die arabische und lateinische Schriftarten unterstützt). Gehen Sie auf die Google-Fonts-Website, um eine Vorschau zu sehen.

  • Farben: Ändern Sie die in den Berichten verwendeten Primär- und Sekundärfarben, um Berichte zu strukturieren. Die Standardfarben werden automatisch auf der Grundlage der Farben des Logos generiert.

  • Layout-Hintegrund: Folgende Hintergründe sind verfügabr:

    • Leer: Nichts wird angezeigt.

    • Geometrisch: Im Hintergrund wird ein Bild mit geometrischen Formen angezeigt.

    • Benutzerdefiniert: Laden Sie ein benutzerdefiniertes Hintergrundbild hoch.

  • Slogan des Unternehmens: Er wird in der Kopfzeile von externen Berichten angezeigt. Sie können mehrere Textzeilen hinzufügen.

  • Angaben zum Unternehmen: Diese werden in der Kopfzeile von externen Berichten angezeigt. Sie können mehrere Textzeilen hinzufügen.

  • Papierformat: um das Standardpapierformat für Berichte festzulegen. Sie können A4 (21 cm x 29,7 cm), US Letter (21,59 cm x 27,54 cm), oder QR-Codeseite wählen. Dies kann auch für einzelne Berichte im Feld Papierformat in Studio definiert werden.

Neue PDF-Berichte erstellen

Um einen neuen Bericht für ein Modell zu erstellen, rufen Sie das Modell auf, klicken auf die Schaltfläche Studio ein/aus und dann auf Berichte. Klicken Sie auf Neu und wählen Sie in dem sich öffnenden Pop-up-Fenster die Art des Berichts aus. Damit bestimmen Sie lediglich, was in der Kopf- und Fußzeile angezeigt wird:

Sobald Sie den Bericht erstellt haben, können Sie mit der Bearbeitung loslegen.

PDF-Berichte bearbeiten

Um auf die für ein Modell verfügbaren Berichte zuzugreifen, rufen Sie das Modell auf (z. B. Verkaufsaufträge), klicken Sie auf die Schaltfläche Studio ein/aus und dann auf Berichte. Wählen Sie einen vorhandenen Bericht aus, um ihn zu öffnen oder erstellen Sie einen neuen Bericht.

Tipp

Alternativ können Sie auch Studio öffnen und auf Berichte klicken und nach einem bestimmten Bericht oder Modell suchen.

Wichtig

Es wird dringend empfohlen, den Standardbericht zu duplizieren und Änderungen in der duplizierten Version vorzunehmen. Um einen Bericht zu duplizieren, bewegen Sie den Mauszeiger auf die obere rechte Ecke des Berichts, klicken auf das vertikale Ellipsen-Symbol () und wählen dann Duplizieren.

Einen PDF-Bericht duplizieren

Optionen

Wenn Sie einen Bericht ausgewählt oder erstellt haben, können Sie die Optionen links im Bildschirm verwenden, um:

  • Den Berichtnamen zu ändern. Der neue Name wird überall übernommen (in Studio, unter der Schaltfläche Drucken und im Namen der PDF-Datei)

  • Ändern Sie das Papierformat. Wenn kein Wert ausgewählt wird, wird das in der Standardlayout definierte Format verwendet.

  • Im Druckmenü anzeigen: um den Bericht in das Menü Drucken des Datensatzes aufzunehmen.

  • Erneut aus Anhang laden: um den Bericht bei der ersten Erstellung als Anhang im Datensatz zu speichern und die ursprüngliche Version des Berichts bei jeder weiteren Erstellung erneut zu laden. Dies ist für Rechnungen gesetzlich vorgeschrieben und wird hauptsächlich in diesem Fall verwendet.

  • Sichtbarkeit auf Gruppen beschränken: um die Verfügbarkeit des PDF-Berichts auf bestimmte Benutzergruppen zu beschränken.

  • Quellen bearbeiten: um den Bericht direkt in der XML-Datei zu ändern.

  • Bericht zurücksetzen: um alle Änderungen an dem Bericht zu verwerfen und ihn auf seine Standardversion zurückzusetzen.

  • Vorschau drucken: um eine Berichtsvorschau zu generieren und herunterzuladen.

Berichtseditor

Der Berichtseditor ermöglicht es Ihnen, die Formatierung und Inhalte des Berichts zu ändern.

Tipp

  • Sie können Änderungen Rückgängig machen oder Wiederholen mit den entsprechenden Schaltflächen oder den Tastenkombinationen CTRL Z und CTRL Y ändern.

  • Änderungen werden automatisch gespeichert, wenn Sie den Bericht verlassen oder manuell über die Speichern-Schaltfläche.

  • Sie können den Bericht auf seine Standardversion zurücksetzen, indem Sie links auf dem Bildschirm auf Bericht zurücksetzen drücken.

Wichtig

Die Bearbeitung der Kopf- und Fußzeiel eines Berichts bestrifft alle Standard- und benutzerdefinierten Berichte.

Bedingte Blöcke

Die gestrichelten Rechtecke stellen Bedingte Blöcke (if/else-Anweisungen) dar. Diese werden verwendet, um Inhalte auf der Grundlage bestimmter Bedingungen anzuzeigen/auszublenden. Klicken Sie auf den Block, um die Bedingungen anzuzeigen.

Anzeige der auf einen Block angewandten Bedingungen.

Wählen Sie eine Wert aus, um eine Vorschau des Endresulats zu sehen und gegebenenfalls zu bearbeiten.

Vorschau des Resultas einer anderen Bedingung.

Bemerkung

Bedingungen können in XML bearbeitet werden.

Anderer Inhalt

Es gibt zwei Arten von Textinhalten in Berichten:

  • Statischer Text, d. h. der Text der nicht in Blau dargestellt wird, der direkt im Editor bearbeitet werden kann.

  • Dynamischer Text, d. h. der Text, der in Blau dargestellt wurd, der durch Feldwerte ersetzt werden kann, wenn der Bericht generiert wird, z. B. die Auftragsnummer oder das Angebotsdatum

Sie können Inhalt (z. B. Felder, Listen, Tabellen, Bilder, Banner usw.) mittels Befehle zum Bericht hinzufügen. Geben Sie / ein, um die Powerbox zu öffnen, geben Sie dann den Namen des Befehls ein oder wählen Sie ihn aus der Liste aus.

Um dem Bericht statischen Text hinzuzufügen, geben Sie den gewünschten Text ein

Für weitere Änderungen können Sie den Bericht direkt in der XML bearbeiten.

Ein Feld hinzufügen

Um ein Feld hinzuzufügen, geben Sie / ein und wählen den Befehl Feld. In der sich öffnenden Liste wählen Sie das Feld aus oder suchen es. Klicken Sie auf den Pfeil nach rechts neben dem Feldnamen, um bei Bedarf die Liste der verwandten Felder aufzurufen. Geben Sie dann den Standardwert an und drücken Sie Enter.

Wählen Sie ein zugehöriges Feld aus.
Eine Datentabelle hinzuzufügen

Datentabellen werden verwendet, um relationale Felder anzuzeigen. Um eine Datentabelle hinzuzufügen, geben Sie / ein, wählen den Befehl Dynamische Tabelle und wählen die Relation, die in der Tabelle angezeigt werden soll.

Bemerkung

Nur Relationen vom Typ one2many oder many2many können als Datentabellen angezeigt werden.

Sobald die Tabelle hinzugefügt wurde, können Sie Spalten mit den Tabellentools hinzufügen. Positionieren Sie den Cursor oben auf der Spalte, klicken Sie auf das lilafarbene Rechteck und wählen Sie die Option

Hinzufügen einer Spalte in eine dynamische Tabelle.

Sie können dann das Feld Ihrer Wahl in die Spalten einfügen. Das Dialogfeld, das sich öffnet, zeigt das Quellobjekt für das Feld (z. B. das Stichwort-Modell) und die Liste der verfügbaren Felder.

Liste der verfügbaren Felder für das Stichwort-Modell.

Bemerkung

  • Die Standardzeile geht automatisch über den Inhalt des Feldes und erzeugt für jeden Feldwert eine Zeile im Bericht (z .B. eine Zeile pro Stcihwort). Sie können mit den Tabellentools statische Inhaltszeilen über oder unter den generierten Zeilen hinzufügen.

  • Sie können Datentabellen auch hinzufügen, indem Sie die XML des Berichts bearbeiten.

Formatierung

Um Text im Bericht zu formatieren, markieren Sie ihn und formatieren ihn dann mit den Optionen im Texteditor.

Textformatierung mithilfe des Texteditors.

XML von Berichten bearbeiten

Warnung

Die direkte Bearbeitung der XML-Datei kann bei Upgrades zu Berichtsproblemen führen. Sollte dies der Fall sein, kopieren Sie einfach Ihre Änderungen aus der alten Datenbank in die aktualisierte Datenbank.

Um die XML des Berichts zu bearbeiten, klicken Sie links auf Quellen bearbeitens.

Beispiele

Manchmal werden Tabellen aufgrund ihrer komplexen Struktur nicht richtig als solche erkannt. In diesen Fällen können Sie sie trotzdem manuell in der XML-Datei des Berichts ändern. Bei einem Verkaufsauftrag zum Beispiel finden Sie im XML die folgende Struktur (zu Dokumentationszwecken vereinfacht):

<!-- table root element -->
<table>
    <!-- thead = table header, the row with column titles -->
    <thead>
        <!-- table row element -->
        <tr>
            <!-- table header element -->
            <th>Name</th>
            <th>Price</th>
        </tr>
    </thead>
    <!-- table body, the main content -->
    <tbody>
        <!-- we create a row for each subrecord with t-foreach -->
        <tr t-foreach="record.some_relation_ids" t-as="line">
            <!-- for each line, we output the name and price as table cells -->
            <td t-out="line.name"/>
            <td t-out="line.price"/>
        </tr>
    </tbody>
</table>

Um eine Tabelle zu ändern, müssen Sie sicherstellen, dass jede Zeile die gleiche Anzahl von Datenzellen hat. Im obigen Fall müssen Sie beispielsweise eine Zelle in der Kopfzeile (z. B. mit dem Spaltentitel) und eine weitere Zelle im Hauptteil mit dem Feldinhalt hinzufügen (normalerweise mit einer t-out- oder t-field-Anweisung).

<table> <!-- table root element -->
    <thead> <!-- thead = table header, the row with column titles -->
        <tr> <!-- table row element -->
            <th>Name</th> <!-- table header element -->
            <th>Price</th>
            <th>Category</th>
        </tr>
    </thead>
    <tbody>  <!-- table body, the main content -->
        <tr t-foreach="record.some_relation_ids" t-as="line">  <!-- we create a row for each subrecord with t-foreach -->
            <td t-out="line.name"/>  <!-- for each line, we output the name and price as table cells -->
            <td t-out="line.price"/>
            <td t-out="line.category_id.display_name"/>
        </tr>
    </tbody>
</table>

Bemerkung

Zellen können mehrere Spalten oder Zeilen spammen. Weitere Informationen finden Sie auf der Website von Mozilla Developer Network.

Sie können zum Beispiel den Angebots-/Auftragsbericht bearbeiten, um eine Spalte hinzuzufügen, um die Produktkategrie in der Haupttabelle anzuzeigen.

<table class="table table-sm o_main_table table-borderless mt-4">
    <!-- In case we want to repeat the header, remove "display: table-row-group" -->
    <thead style="display: table-row-group">
        <tr>
            <th name="th_description" class="text-start">Description</th>
            <th>Product Category</th>
            <th name="th_quantity" class="text-end">Quantity</th>
            <th name="th_priceunit" class="text-end">Unit Price</th>
[...]
            <tr t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''">
                <t t-if="not line.display_type">
                    <td name="td_name"><span t-field="line.name">Bacon Burger</span></td>
                    <td t-out="line.product_id.categ_id.display_name"/>
                    <td name="td_quantity" class="text-end">
                        <span t-field="line.product_uom_qty">3</span>
                        <span t-field="line.product_uom">units</span>
                        <span t-if="line.product_packaging_id">
Hinzufügen einer Produktkategorie in einem Verkaufsauftrag.

Um eine Tabelle in XML hinzuzufügen, müssen Sie die Namen der Felder und Objekte kennen, auf die Sie zugreifen und die Sie anzeigen möchten. Fügen wir zum Beispiel eine Tabelle hinzu, in der die Stichwörter eines Verkaufsauftrags aufgeführt sind:

<!-- table root element -->
<table class="table">
    <!-- thead = table header, the row with column titles -->
    <thead>
        <!-- table row element -->
        <tr>
            <!-- table header element -->
            <th>ID</th>
            <th>Name</th>
        </tr>
    </thead>
    <!-- table body, the main content -->
    <tbody>
        <!-- we create a row for each subrecord with t-foreach -->
        <tr t-foreach="doc.tag_ids" t-as="tag">
            <!-- for each line, we output the name and price as table cells -->
            <td t-out="tag.id"/>
            <td t-out="tag.name"/>
        </tr>
    </tbody>
</table>
Eine Datentabelle in XML hinzuzufügen

Bemerkung

Wenn Sie Tabellen manuell hinzufügen, verwenden Sie die Bootstrap-Klassen, wie die Klasse table im obigen Beispiel.

Wenn Sie Inhalte auf der Grundlage bestimmter Bedingungen ein- oder ausblenden möchten, können Sie manuell „if/else“-Kontrollanweisungen in die Berichts-XML einfügen.

Wenn Sie zum Beispiel eine benutzerdefinierte Datentabelle ausblenden möchten, wenn keine Tags vorhanden sind, können Sie das Attribut t-if verwenden, um die Bedingung zu definieren, die dann als True oder False ausgewertet wird. Die Tabelle wird nicht angezeigt, wenn keine Tags im Zitat vorhanden sind.

<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
    <!-- thead = table header, the row with column titles -->
    <thead>
        <!-- table row element -->
        <tr>
            <!-- table header element -->
            <th>ID</th>
            <th>Name</th>
        </tr>
    </thead>
    <!-- table body, the main content -->
    <tbody>
        <!-- we create a row for each subrecord with t-foreach -->
        <tr t-foreach="doc.tag_ids" t-as="tag">
            <!-- for each line, we output the name and price as table cells -->
            <td t-out="tag.id"/>
            <td t-out="tag.name"/>
        </tr>
    </tbody>
</table>

Wenn Sie einen weiteren Block anzeigen möchten, falls die t-if-Anweisung als False ausgewertet wird, können Sie diesen mit der t-else-Anweisung angeben. Der t-else-Block muss in der Dokumentstruktur direkt auf den t-if-Block folgen. Es ist nicht notwendig, eine Bedingung im Attribut t-else anzugeben. Lassen Sie uns als Beispiel eine kurze Meldung anzeigen, die erklärt, dass es keine Tags im Zitat gibt:

<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
    <!-- thead = table header, the row with column titles -->
    <thead>
        <!-- table row element -->
        <tr>
            <!-- table header element -->
            <th>ID</th>
            <th>Name</th>
        </tr>
    </thead>
    <!-- table body, the main content -->
    <tbody>
        <!-- we create a row for each subrecord with t-foreach -->
        <tr t-foreach="doc.tag_ids" t-as="tag">
            <!-- for each line, we output the name and price as table cells -->
            <td t-out="tag.id"/>
            <td t-out="tag.name"/>
        </tr>
    </tbody>
</table>
<div class="text-muted" t-else="">No tag present on this document.</div>

Durch die Verwendung der Notation t-if/t-else erkennt der Berichtseditor, dass sich diese Abschnitte gegenseitig ausschließen und als bedingte Blöcke angezeigt werden sollten:

Resultatsvorschau, wenn es Tags gibt.

Sie können die Bedingungen mit dem Editor umschalten, um eine Vorschau ihres Resultat zu erhalten:

Resultatsvorschau, wenn es keine Tags gibt.

Wenn Sie mehrere Optionen haben möchten, können Sie auch t-elif-Anweisungen verwenden, um Zwischenbedingungen hinzuzufügen. So ändert sich z. B. der Titel von Verkaufsauftragsberichten in Abhängigkeit von der Bedingung des zugrunde liegenden Dokuments.

<h2 class="mt-4">
    <span t-if="env.context.get('proforma', False) or is_pro_forma">Pro-Forma Invoice # </span>
    <span t-elif="doc.state in ['draft','sent']">Quotation # </span>
    <span t-else="">Order # </span>
    <span t-field="doc.name">SO0000</span>
</h2>

Der Titel Pro-Forma-Rechnung wird abhängig von einigen kontextuellen Bedingungen verwendet. Wenn diese Bedingungen nicht erfüllt sind und der Status des Dokuments entweder Entwurf oder Gesendet ist, wird Angebot verwendet. Wenn keine dieser Bedingungen erfüllt ist, lautet der Titel des Berichts Auftrag.

Die Arbeit mit Bildern in einem Bericht kann eine Herausforderung sein, da die genaue Steuerung von Bildgröße und -verhalten nicht immer offensichtlich ist. Sie können Bildfelder mit dem Berichtseditor einfügen (mit dem Befehl /Feld), aber das Einfügen in XML mit der t-field-Anweisung und den dazugehörigen Attributen t-options bietet eine bessere Kontrolle über Größe und Positionierung.

Der folgende Code gibt zum Beispiel das Feld Bild_128 des Produkts der Zeile als 64px breites Bild aus (mit einer automatischen Höhe, die auf dem Seitenverhältnis des Bildes basiert).

<span t-field="line.product_id.image_128" t-options-widget="image" t-options-width="64px"/>

Die folgenden Optionen sind für Bildwidgets verfügbar:

  • width: Breite des Bildes, normalerweise in Pixeln oder CSS-Längeneinheiten (z. B. rem) (für automatische Breite leer lassen).

  • height: Höhe des Bildes, in der Regel in Pixeln oder CSS-Längeneinheiten (z. B. rem) (für automatische Höhe leer lassen).

  • class: CSS-Klassen, die auf den img-Tag angewendet werden; Bootstrap-Klassen sind verfügbar.

  • alt: alternativer Text des Bilds text of the image

  • style: Stilattribut; ermöglicht Ihnen, Stile einfacher als mit Bootstrap-Klassen zu überschreiben.

Diese Attribute müssen Strings enthalten, d. h. Text, der in Anführungszeichen eingeschlossen ist, z. B. t-options-width="'64px'" (oder alternativ einen gültigen Python-Ausdruck).

Bemerkung

Das Bildwidget kann nicht für ein img-Tag verwendet werden. Setzen Sie stattdessen die t-field-Anweisung auf einen span- (für Inline-Inhalt) oder div-Knoten (für Blockinhalt).

Fügen wir zum Beispiel eine Spalte mit dem Produktbild in die Angebotstabelle ein:

<table class="table table-sm o_main_table table-borderless mt-4">
    <thead style="display: table-row-group">
        <tr>
            <th>Image</th>
            <th name="th_description" class="text-start">Description</th>
            <th>Product Category</th>
            <th name="th_quantity" class="text-end">Quantity</th>
            <th name="th_priceunit" class="text-end">Unit Price</th>
[...]
        <t t-foreach="lines_to_report" t-as="line">
            <t t-set="current_subtotal" t-value="current_subtotal + line.price_subtotal"/>
            <tr t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''">
                <t t-if="not line.display_type">
                   <td>
                       <span t-field="line.product_template_id.image_128"
                             t-options-widget="'image'"
                             t-options-width="'64px'"
                             t-options-class="'rounded-3 shadow img-thumbnail'"
                           />
                   </td>
                    <td name="td_name"><span t-field="line.name">Bacon Burger</span></td>
                    <td t-out="line.product_id.categ_id.display_name"/>

Das Attribut t-options-width schränkt die Bildbreite auf 64 Pixel ein und die in t-options-class verwendeten Bootstrap-Klassen erzeugen einen Rahmen, der Miniaturbildern ähnelt, mit abgerundeten Ecken und einem Schatten.

Fügen wir eine Spalte mit dem Produktbild in die Angebotstabelle ein: