Benutzerdefinierte Berichte

Odoo comes with a powerful and easy-to-use reporting framework. The engine allows you to create new reports, such as tax reports, balance sheets, and income statements with specific groupings and layouts.

Wichtig

Activate the developer mode to access the accounting report configuration.

To create a new report, go to Accounting ‣ Configuration ‣ Accounting Reports. From here, create either a root report or a variant.

Tipp

  • Consider saving modified reports as report variants to keep their root reports intact.

  • To access an existing report’s management interface from the report itself, click on the (gears) icon.

Stammberichte

Stammberichte können als allgemeine, neutrale Buchhaltungsberichte betrachtet werden. Sie dienen als Vorlage, auf der lokale Buchhaltungsversionen aufgebaut werden. Wenn ein Bericht keinen Stammbericht hat, wird er selbst als Stammbericht betrachtet.

Example

Steuerberichte für Belgien und die USA würden beide dieselbe generische Version als Grundlage verwenden und sie an ihre nationalen Vorschriften anpassen.

Creating a menu item is required to access a new root report. To do so, open the report’s configuration, click Action, Create Menu Item, and refresh the page. The report is now available under Accounting ‣ Reporting.

Bemerkung

Fälle, die die Erstellung eines neuen Stammberichts erfordern, sind selten, z. B. wenn die Steuerbehörden eines Landes eine neue und spezielle Art von Bericht verlangen.

Varianten

Varianten sind länderspezifische Versionen von Stammberichten und beziehen sich daher immer auf einen Stammbericht. Um eine Variante zu erstellen, wählen Sie bei der Erstellung eines neuen Berichts im Feld Stammbericht einen generischen (Stamm-)Bericht aus.

When a root report is opened from the Accounting app’s Reporting menu, all of its variants are displayed in the report variant selector in the top right corner of the view.

Example

VAT Report (BE) is a variant of the root Generic Tax report.

Auswahl von Berichtsvarianten.

Zeilen

After creating a report (either root or variant), the next step is to fill it with lines. To create a new line, click on Add a line. To modify an existing line, click on the line itself and edit the popup. All lines require a Name and can have an optional Code which allows using the line’s value in formulas.

Optionen für Maschinenzeilen.

Ausdrücke

Each line can contain one or multiple expressions. Expressions can be seen as sub-variables needed by a report line. To create an expression, click on Add a line within a line’s popup.

When creating an expression, you must enter a Label used to refer to that expression. The label must be unique among the expressions of each report line. Both the Computation Engine and the Formula fields must also be completed. The computation engine defines how the formula(s) and subformula(s) are interpreted. It is possible to mix expressions using different computation engines under the same line if needed.

Bemerkung

Je nach Maschine können auch Unterformeln erforderlich sein.

Odoo Domain computation engine

When using the Odoo Domain computation engine, a formula is interpreted as an Odoo domain targeting account.move.line objects.

Mit der Unterformel können Sie festlegen, wie die Buchungszeilen, die dem Bereich entsprechen, zur Berechnung des Wertes des Ausdrucks verwendet werden:

sum

Das Ergebnis ist die Summe aller Salden der übereinstimmenden Buchungszeilen.

sum_if_pos

Das Ergebnis ist die Summe aller Salden der übereinstimmenden Buchungszeilen, wenn dieser Betrag positiv ist. Andernfalls ist es 0.

sum_if_neg

Das Ergebnis ist die Summe aller Salden der übereinstimmenden Buchungszeilen, wenn dieser Betrag negativ ist. Andernfalls ist es 0.

count_rows

The result is the number of sub-lines of this expression. If the parent line has a group-by value, this will correspond to the number of distinct grouping keys in the matched move lines. Otherwise, it will be the number of matched move lines.

Tipp

To reverse the sign of the result, put a - sign at the beginning of the subformula.

Ausdruckszeile in einem Zeilenbericht

Tax Tags computation engine

When using the Tax Tags computation engine, the contents of the Formula field are matched to tax tags. If such tags do not exist when creating the expression, they will be created.

Bei der Auswertung des Ausdrucks kann die Ausdrucksberechnung grob wie folgt ausgedrückt werden: (Anzahl der Buchungszeilen mit + Stichwort) - (Anzahl der Buchungszeilen mit - Stichwort).

Example

If the Formula is set to tag_name, the engine matches tax tags +tag_name and -tag_name, creating them if necessary. To exemplify further: two tags are matched by the formula. If the formula is A, it will require (and create, if needed) tags +A and -A.

Aggregate Other Formulas computation engine

The Aggregate Other Formulas computation engine performs arithmetic operations on the amounts obtained from other expressions. Formulas here are composed of references to expressions separated by one of the four basic arithmetic operators (addition +, subtraction -, division /, and multiplication *). To refer to an expression, type in its parent line’s code followed by a period . and the expression’s label (ex. code.label).

Unterformeln können folgende sein:

if_above(CUR(amount))

Der Wert des arithmetischen Ausdrucks wird nur zurückgegeben, wenn er größer als die angegebene Grenze ist. Andernfalls ist das Ergebnis 0.

if_below(CUR(amount))

Der Wert des arithmetischen Ausdrucks wird nur zurückgegeben, wenn er kleiner als die angegebene Grenze ist. Andernfalls ist das Ergebnis 0.

if_between(CUR1(amount1), CUR2(amount2))

Der Wert des arithmetischen Ausdrucks wird nur zurückgegeben, wenn er genau zwischen den angegebenen Grenzen liegt. Andernfalls wird der Wert auf die nächstgelegene Grenze zurückgesetzt.

if_other_expr_above(LINE_CODE.EXPRESSION_LABEL, CUR(amount))

Der Wert des arithmetischen Ausdrucks wird nur dann zurückgegeben, wenn der Wert des durch den angegebenen Zeilencode bezeichneten Ausdrucks und die Bezeichnung des Ausdrucks größer ist als die angegebene Grenze. Andernfalls ist das Ergebnis 0.

if_other_expr_below(LINE_CODE.EXPRESSION_LABEL, CUR(amount))

Der Wert des arithmetischen Ausdrucks wird nur dann zurückgegeben, wenn der Wert des durch den angegebenen Zeilencode bezeichneten Ausdrucks und die Bezeichnung des Ausdrucks kleiner ist als die angegebene Grenze. Andernfalls ist das Ergebnis 0.

CUR ist der Währungscode in Großbuchstaben, und Betrag ist der in dieser Währung ausgedrückte Betrag der Grenze.

Sie können auch die Unterformel cross_report verwenden, um einen Ausdruck in einem anderen Bericht zu finden.

Prefix of Account Codes computation engine

The Prefix of Account Codes computation engine is used to match amounts made on accounts using the prefixes of these accounts‘ codes as variables in an arithmetic expression.

Example

21
Arithmetische Ausdrücke können auch aus einem einzelnen Präfix bestehen, wie hier.

Example

21 + 10 - 5
Diese Formel addiert die Salden der Buchungszeilen auf Konten, deren Codes mit 21 und 10 beginnen, und subtrahiert den Saldo derjenigen auf Konten mit dem Präfix 5.

Es ist auch möglich, eine Auswahl von Unterpräfixen zu ignorieren.

Example

21 + 10\(101, 102) - 5\(57)
Diese Formel funktioniert genauso wie das vorherige Beispiel, ignoriert aber die Präfixe 101, 102 und 57.

Sie können mit den Suffixen C und D eine „Unterfilterung“ auf Gutschriften und Lastschriften anwenden. In diesem Fall wird ein Konto nur dann berücksichtigt, wenn sein Präfix übereinstimmt und wenn der Gesamtsaldo der Buchungszeilen auf diesem Konto Haben/Soll ist.

Example

Das Konto 210001 hat einen Saldo von -42 und das Konto 210002 hat einen Saldo von 25. Die Formel 21D passt nur auf das Konto 210002 und liefert daher 25. Das Konto 210001 wird nicht abgeglichen, da sein Saldo im Haben ist.

Präfix-Ausschlüsse können mit den Suffixen C und D gemischt werden.

Example

21D + 10\(101, 102)C - 5\(57)
Diese Formel addiert die Salden der Buchungszeilen auf Konten, deren Code mit 21 beginnt, wenn es sich um ein Soll (D) handelt, und 10, wenn es sich um ein Haben (C) handelt, ignoriert aber die Präfixe 101, 102 und subtrahiert den Saldo derjenigen auf Konten mit dem Präfix 5, wobei das Präfix 57 ignoriert wird.

Um den Buchstaben C oder D in einem Präfix zu finden und ihn nicht als Suffix zu verwenden, verwenden Sie einen leeren Ausschluss ().

Example

21D\()
Diese Formel stimmt mit Konten überein, deren Code mit 21D beginnt, unabhängig vom Vorzeichen des Saldos.

Sie können nicht nur Code-Präfixe verwenden, um Konten einzuschließen, sondern diese auch mit Konto-Stichwörtern abgleichen. Dies ist zum Beispiel besonders nützlich, wenn es in Ihrem Land keinen standardisierten Kontenplan gibt und dasselbe Präfix in verschiedenen Unternehmen für unterschiedliche Zwecke verwendet werden könnte.

Example

tag(25)
This formula matches accounts whose associated tags contain the one with ID 25.

If the tag you reference is defined in a data file, an XMLID can be used instead of the ID.

Example

tag(my_module.my_tag)
Diese Formel gleicht Konten ab, deren zugehörige Stichwörter das Stichwort **my_module.my_tag* enthalten.

Sie können auch arithmetische Ausdrücke mit Stichwörtern verwenden und diese möglicherweise mit Präfixen kombinieren.

Example

tag(my_module.my_tag) + tag(42) + 10
Die Salden der Konten mit dem Stichwort my_module.my_tag werden mit den Salden der Konten summiert, die mit dem Stichwort mit der ID 42 und den Konten mit dem Code-Präfix 10 verbunden sind.

Die Suffixe C und D können genauso mit Stichwörtern verwendet werden.

Example

tag(my_module.my_tag)C
Diese Formel gleicht Konten mit dem Stichwort my_module.my_tag und einem Haben-Saldo ab.

Präfix-Ausschluss funktioniert auch mit Stichwörtern.

Example

tag(my_module.my_tag)\(10)
Diese Formel gleicht Konten mit dem Stichwort my_module.my_tag und einem Code der mit 10 beginnt.

External Value computation engine

The External Value computation engine is used to refer to manual and carryover values. Those values are not stored using account.move.line, but with account.report.external.value. Each of these objects directly points to the expression it impacts, so very little needs to be done about their selection here.

Formeln können folgende sein:

sum

Wenn das Ergebnis die Summe aller externen Werte in der Periode sein muss.

most_recent

Wenn das Ergebnis der Wert des letzten externen Wertes in der Periode sein muss.

Darüber hinaus können Unterformeln auf zwei Arten verwendet werden:

rounding=X

Wenn Sie X durch eine Zahl ersetzen, wird der Betrag auf X Dezimalstellen gerundet.

editable

Zeigt an, dass dieser Ausdruck manuell bearbeitet werden kann, wodurch ein Symbol im Bericht angezeigt wird, das dem Benutzer die Durchführung dieser Aktion ermöglicht.

Bemerkung

Manuelle Werte werden zum aktuell im Bericht ausgewählten date_to erstellt.

Beide Unterformeln können gemischt werden, indem Sie sie mit einem ; trennen.

Example

editable;rounding=2
This subformula shows the correct way to mix both behaviors.

Custom Python Function computation engine

The Custom Python Function computation engine is a means for developers to introduce custom computation of expressions on a case-by-case basis. The Formula is the name of a python function to call, and the Subformula is a key to fetch in the dictionary returned by this function. Use this computation engine only if making a custom module.

Spalten

Berichte können eine unbegrenzte Anzahl von Spalten enthalten. Jede Spalte erhält ihre Werte aus den Ausdrücken, die in den Zeilen angegeben sind. Das Feld expression_label der Spalte gibt die Bezeichnung der Ausdrücke an, deren Wert angezeigt wird. Wenn eine Zeile keinen Ausdruck in diesem Feld hat, wird für sie in dieser Spalte nichts angezeigt. Wenn mehrere Spalten erforderlich sind, müssen Sie verschiedene Ausdrucksbezeichnungen verwenden.

Spalten eines Berichts.

Wenn Sie die Funktion Periodenvergleich im Reiter Optionen eines Buchhaltungsberichts verwenden, werden alle Spalten in jeder und für jede Periode wiederholt.

Line grouping

Non-standard grouping is possible by adding or using existing fields on the Journal Item model, provided that the fields are related and non-stored.

Bemerkung

Grouping lines requires the report to have explicit report lines that can be edited. The deferred reports, for example, do not support grouping lines as they use dynamic lines that are generated.

Create a new field on journal item

To create a non-stored, related field in the Journal Item model, first go to Accounting ‣ Journal Items, and click the (bug) icon, then click Fields. Click New to create a new field, and complete the following fields:

  • Field Name: a technical name for the field

  • Field Label: the label to be displayed for the field

  • Field Type: the type of field that this related field should point to

  • Stored: Leave this field unchecked as only non-stored fields can be used to group lines.

  • Related Model: If the field type is one2many, many2many, or many2one, select the model of the original field to group by.

  • Related Field Definition: the technical path to the field you want to group by

    Example

    To group by the sales team of the commercial partner, set the related field definition to move_id.team_id.

Group lines

To group lines, go to the Lines tab of the desired report, click on the line you want to group, and edit the Group by field. Enter the technical name (Field Name) of the field to use as the grouping key.

Tipp

To find a list of all the model’s fields and their technical names, go to Accounting ‣ Journal Items, and click the (bug) icon, then click Fields. The technical name of each field is listed in the Field Name column.