Zum Inhalt springen

Das Monetary Field in Odoo: Funktion, Einsatzfälle und Praxis-Tipps

Praxisleitfaden: Währungswerte sauber und sicher im Odoo-Datenmodell verwalten
6. März 2026 durch
Das Monetary Field in Odoo: Funktion, Einsatzfälle und Praxis-Tipps
Dasolo
| Noch keine Kommentare

Einleitung


Das Monetary-Feld ist in Odoo ein zentraler Datentyp für jeden Betrag — und zugleich ein Stolperstein, wenn man es falsch einsetzt. Es sieht aus wie eine Zahl, liegt intern als Gleitkommazahl, verhält sich aber in Punkten wie Formatierung, Währung und Rundung völlig anders als ein simples Float-Feld. Wer die Mechanik dahinter kennt, wird nie wieder ein gewöhnliches Float für Geldbeträge verwenden.


Sie begegnen Monetary-Feldern praktisch überall: Verkaufsaufträge, Rechnungen, Produktpreise — viele Felder im Odoo‑Datenmodell repräsentieren Geldbeträge. Dahinter steckt nicht nur die Anzeige des Symbols: diese Felder übernehmen automatisch Formatierung, Rundung und Präzision basierend auf der zugehörigen Währung.

Dieser Leitfaden richtet sich an Entwickler, Berater und technisch versierte Anwender, die verstehen wollen, wie Monetary-Felder wirklich arbeiten. Ob Sie ein Modul programmieren, ein Feld konfigurieren oder unerwartete Rundungsphänomene debuggen — hier finden Sie die praxisrelevanten Regeln und Beispiele.

Was ist das Monetary-Feld in Odoo?


Technisch ist fields.Monetary ein spezialisierter Odoo-Feldtyp zur Speicherung von währungsbezogenen Zahlen: Preise, Summen, Budgets oder jede andere Kennzahl, die Geld ausdrückt.


Der Unterschied zum normalen Float liegt in der zwingenden Verknüpfung mit einer Währung. Ein Monetary-Feld weiß, welche Währung es beschreibt, und nutzt diese Information für Dezimalstellen, Symbolanzeige und Rundungsregeln.


Darstellung in der Oberfläche

In der Benutzeroberfläche formatiert Odoo Monetary-Werte gemäß der verknüpften Währung: ein Euro-Betrag erscheint beispielsweise als € 1.234,50, ein US-Dollar als $ 1,234.50. Anzahl und Darstellung der Nachkommastellen folgen den Einstellungen des jeweiligen Währungsdatensatzes.


Das Feld ist in Formularen editierbar, in Listen sauber darstellbar und lässt sich ohne weitere Anpassung in Pivot‑Berichten oder Finanzdokumenten verwenden. Anwender müssen sich nicht um Formatierungsregeln kümmern — Odoo übernimmt das automatisch.


Speicherung und Datenbasis

Im Datenbank-Backend wird ein Monetary-Feld als Fließkommazahl (double precision) abgelegt. Die Information über die verwendete Währung liegt nicht in derselben Spalte, sondern in einem separaten Many2one‑Feld, das auf res.currency verweist.


Diese Trennung von Betrag und Währung ist bewusst: so bleiben die numerischen Felder schlank, und die Währung lässt sich unabhängig vom Wert ändern oder verwalten.


Wie das Feld funktioniert


Wer die innere Funktionsweise kennt, kann Monetary-Felder korrekt einsetzen und typische Probleme bei Rundung oder Darstellung in kundenspezifischen Entwicklungen vermeiden.


Das Parameter currency_field

Jedes Monetary-Feld muss mit einem Many2one-Feld auf res.currency verknüpft sein. Standardmäßig sucht Odoo nach einem Feld namens currency_id auf demselben Modell. Alternativ geben Sie explizit das Feld per currency_field an.


amount = fields.Monetary(string='Amount', currency_field='currency_id')

Fehlt das Währungsfeld oder ist es auf Datensätzen leer, greift Odoo in vielen Fällen auf die Firmenwährung zurück. Das verhindert Abstürze, kann aber in Multicurrency-Szenarien zu falscher Anzeige führen. Deklarieren Sie das Währungsfeld daher immer explizit.


Rundung und Präzision

Ein zentraler Unterschied zu Float liegt in der Rundungslogik: das Modell res.currency definiert Dezimalstellen und einen Rundungsfaktor pro Währung. Beim Lesen oder Anzeigen eines Monetary-Wertes wendet Odoo diese Regeln automatisch an.

Damit kann ein intern als 1.2349999 gespeicherter Wert im Euro-Kontext als 1,23 angezeigt werden — nicht als 1,235. Diese konsistente Rundung ist entscheidend für Steuerberechnungen, Rechnungsbeträge und Abstimmungen. Mit einem einfachen Float entstehen früher oder später schwer nachverfolgbare Differenzen.


Verhalten im Odoo-ORM

Beim Zugriff über das Odoo-ORM liefert ein Monetary-Feld einen Python-Float zurück. Die Währungsinformationen stammen vom zugeordneten Währungsfeld auf demselben Datensatz. Bei Berechnungen sollten Sie die Rundungsmethode der Währung verwenden, um Präzision zu sichern:


rounded_value = self.currency_id.round(self.amount)

So vermeiden Sie kumulative Fehler durch Gleitkommaarithmetik, die sich bei Summen über mehrere Zeilen oder schrittweisen Berechnungen einschleichen können.


Monetary in QWeb-Reports

In QWeb-Vorlagen gibt es ein spezielles Widget zur korrekten Formatierung von Monetary-Werten für PDF- und Webberichte:


<span t-esc="record.amount"
      t-options='{"widget": "monetary", "display_currency": record.currency_id}'/>

Damit erscheinen Währungssymbol und Dezimalformat in allen generierten Dokumenten passend zur auf dem Datensatz gesetzten Währung.

Praxisbeispiele aus dem Business


Monetary-Felder kommen in praktisch jedem Standardmodul vor. Fünf konkrete Einsatzfälle zeigen, warum sie für Geschäftsprozesse wichtig sind.


1. Verkauf: Produktpreise und Auftragswerte

Felder wie price_unit, price_subtotal oder amount_total bei Verkaufsaufträgen sind Monetary-Felder. Sie respektieren automatisch die auf dem Auftrag gewählte Währung, auch wenn diese von der Firmenwährung abweicht.


Wenn ein Vertriebsmitarbeiter einen Auftrag in USD für eine Firma in EUR anlegt, sorgt das Monetary-Feld dafür, dass Anzeige, Rundung und eventuelle Umrechnungen im Kontext der Auftragswährung korrekt stattfinden.


2. Buchhaltung: Rechnungsbeträge und Steuerzeilen

In der Buchhaltung sind alle Betragsfelder einer Rechnung Monetary-Typen: amount_untaxed, amount_tax, amount_total. Die auf der Rechnung gesetzte Währung steuert die Rundung dieser Werte.


Das ist kein Detail: eine falsche Rundung bei Steuerzeilen führt zu unausgeglichenen Buchungszeilen, die man mühsam korrigieren muss. Die Währungslogik des Monetary-Feldes verhindert solche Probleme von vornherein.


3. CRM: Erwartete Umsätze in Opportunities

Das Feld expected_revenue in einer Opportunity ist ein Monetary-Feld. Vertriebs-Pipelines können so Werte in der Währung des Leads erfassen, während Auswertungen und Forecasts die Daten in die Firmenwährung überführen.


Dieses Verhalten funktioniert zuverlässig, weil Monetary-Felder den Währungsbezug zusammen mit dem Betrag mitführen.


4. Einkauf: Preise und Bestellungen bei Lieferanten

Auch Bestellungen und Lieferantenrechnungen nutzen Monetary-Felder für Einstandspreise und Summen, jeweils in der vereinbarten Lieferantenwährung. Ob Yen oder Euro — Präzision und Anzeige werden automatisch gehandhabt.


5. Eigene Felder: Budgets und Zielgrößen

Bei Anpassungen wie Budgetfeldern, Umsatzzielen oder Kostenobergrenzen ist ein Monetary-Feld meist die richtige Wahl. Es integriert sich nahtlos in Formulare, Listen und Berichte und verhält sich vorhersagbar bei Exporten oder Aggregationen.

Technisch mag ein Float funktionieren, aber in Multiwährungs-Szenarien führt er schnell zu Formatierungs- und Rundungsproblemen.


Anlegen und Anpassen des Feldes


Monetary-Felder können Sie entweder ohne Code per Studio anlegen oder mit einem Modul in Python völlig kontrolliert implementieren.


Anlegen per Odoo Studio

Odoo Studio bietet beim Feld anlegen einen Monetary-Typ an. Studio legt bei Bedarf automatisch ein currency_id-Feld an, wenn dieses auf dem Modell nicht vorhanden ist — ideal für einfache Anpassungen ohne Entwickleraufwand.


Beachten Sie: Studio-Felder bekommen ein x_-Präfix (z. B. x_studio_budget). Nutzt Ihr Modell bereits ein currency_id, verwendet das neue Feld dieses. Andernfalls erstellt Studio ein neues Währungsfeld. Bei mehreren Monetary-Feldern auf einem Modell sollten Sie die Verwendung gemeinsamer oder separater Währungsfelder bewusst prüfen.


Für unkomplizierte Anforderungen ist Studio die schnellste und praktikabelste Lösung für Business-Anwender ohne Zugang zu Entwicklerressourcen.


Technischer Weg: Python-Felder

In einem Custom-Modul definieren Sie das Monetary-Feld zusammen mit dem zugehörigen Many2one auf res.currency. Das ist die gängige Vorgehensweise in Odoo-Modulentwicklung.


from odoo import fields, models

class ProjectTask(models.Model):
    _inherit = 'project.task'

    x_budget = fields.Monetary(
        string='Budget',
        currency_field='x_budget_currency_id',
    )
    x_budget_currency_id = fields.Many2one(
        comodel_name='res.currency',
        string='Budget Currency',
        default=lambda self: self.env.company.currency_id,
    )

Als sinnvolle Default-Strategie setzen viele Implementierer die Firmenwährung als Voreinstellung. So sind neue Datensätze nicht leer und die Anzeige des Währungssymbols ist direkt vorhanden.


Berechnete Monetary-Felder

Monetary-Felder lassen sich gut als computed fields einsetzen, etwa wenn Sie Zeilensummen aggregieren oder eine Formel auf Werte anwenden wollen.


x_total_budget = fields.Monetary(
    string='Total Budget',
    currency_field='currency_id',
    compute='_compute_total_budget',
    store=True,
)

@api.depends('x_line_ids.x_amount')
def _compute_total_budget(self):
    for record in self:
        record.x_total_budget = sum(record.x_line_ids.mapped('x_amount'))

Das Attribut store=True ist wichtig, wenn Sie nach dem Feld filtern, sortieren oder aggregieren möchten. Nicht gespeicherte computed-Felder können nicht in Domains oder SQL-basierten Ansichten verwendet werden.


Monetary-Feld per API anlegen

Wenn Sie Felder programmgesteuert über die XML-RPC-API erzeugen (z. B. für Remote-Konfigurationen), legen Sie das Feld in ir.model.fields als type 'monetary' an.


models.execute_kw(ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_budget',
        'field_description': 'Budget',
        'model_id': model_id,
        'ttype': 'monetary',
        'currency_field': 'currency_id',
        'state': 'manual',
    }]
)

Das ist Teil des umfassenderen Customizing-Werkzeugs, das Odoo über seine API anbietet und sich für automatisierte Rollouts oder Massenkonfigurationen eignet.

Empfohlene Vorgehensweisen


Richtlinien, die helfen, spätere Probleme zu vermeiden


1. Verwenden Sie niemals Float für Geldwerte

Das ist die wichtigste Regel: Wenn ein Feld einen Geldbetrag repräsentiert — Preis, Summe, Budget — nutzen Sie fields.Monetary. Ein Float kennt keine Währung und rundet nicht währungsspezifisch; das führt in internationalen Setups unweigerlich zu Fehlern.


2. Deklarieren Sie das Währungsfeld immer explizit

Verlassen Sie sich nicht auf Odoos Fallback-Verhalten. Legen Sie das currency_field und die zugehörige Many2one‑Beziehung klar an. Das verhindert stille Fallbacks und unerwartete Darstellungsfehler in Multiwährungs‑Szenarien.


3. Setzen Sie eine Standardwährung

Für interne Felder, die meist in der Firmenwährung geführt werden, ist ein Default wie default=lambda self: self.env.company.currency_id empfehlenswert. So vermeiden Sie leere Währungsfelder bei neuen Datensätzen und fehlende Formatierung.


4. store=True bei durchsuchbaren berechneten Feldern

Wenn ein computed Monetary-Feld in Filtern, Sortierungen oder Report-Aggregationen genutzt werden soll, setzen Sie store=True. Andernfalls taucht es nicht in ORM-Domains oder SQL‑Views auf und führt zu Verwirrung.


5. Nutze die Währungs-Round() bei Zwischenschritten

Bei mehrstufigen Berechnungen auf Monetary-Werten runden Sie Zwischenergebnisse mit self.currency_id.round(value). So vermeiden Sie kumulative Gleitkommaabweichungen, die sich zu sichtbaren Differenzen summieren können.


6. Achten Sie bei Multiwährungs-Reports auf Konversion

Summieren Sie nicht unverändert Beträge aus unterschiedlichen Währungen. Konvertieren Sie vorher in eine gemeinsame Vergleichswährung via res.currency.compute() oder spezifizieren Sie die Auswertungssicht auf eine einzelne Währung. Ansonsten entstehen zwar technisch korrekte, aber wirtschaftlich sinnlose Summen.

Häufige Fehlerquellen


Typische Fehler, die immer wieder auftauchen, und wie Sie sie umgehen


Fehler 1: Fehlendes Währungsfeld

Am häufigsten wird beim Hinzufügen eines Monetary-Felds das dazugehörige Many2one auf res.currency vergessen. Gibt es kein Währungsfeld, greift Odoo teils stillschweigend auf die Firmenwährung zurück und wirft in anderen Fällen Fehler. Legen Sie das Währungsfeld immer gleichzeitig an.


Fehler 2: Zwei Monetary-Felder teilen sich eine Währung, sollen aber unterschiedliche Währungen halten

Wenn auf einem Modell zwei Betragsfelder verschiedene Währungen abbilden sollen — z. B. Kundenpreis in EUR und Lieferantenkosten in USD — dürfen sie nicht dasselbe currency_id benutzen. Jeder Betrag braucht seine eigene Währungsreferenz, sonst überschreibt eine Einstellung beide Felder und erzeugt falsche Werte und eine verwirrende Oberfläche.


Fehler 3: Rundungsdifferenzen bei Aggregation über Währungen hinweg

Summiert man Beträge aus unterschiedlichen Währungen ohne Konversion, sieht das Total falsch aus, weil unterschiedliche Einheiten addiert werden. Das ist eine häufige Fehlerquelle in Reports von international tätigen Unternehmen. Normalisieren Sie vor der Aggregation auf eine Währung.


Fehler 4: Exakte Float‑Vergleiche in ORM-Suchen

Exakte Gleichheitsabfragen wie amount = 10.0 können Datensätze übersehen, weil Floats in der DB nicht immer exakt gleich gespeichert werden. Verwenden Sie lieber Vergleichsintervalle (>=, <= mit Toleranz) oder runden Sie Werte vor dem Vergleich.


Fehler 5: Währungsrundung bei Datenimporten ignorieren

Beim Import über CSV oder XML-RPC werden Zahlen so gespeichert, wie sie geliefert werden — ohne automatische Rundung auf die erlaubten Dezimalstellen der Zielwährung. Wenn Ihre Quelldaten mehr Nachkommastellen enthalten, sorgen Sie in den Import‑Skripten für die passende Rundung, sonst entstehen leichte Abweichungen in Summen und Berichten.


Fazit


Das Monetary-Feld ist auf den ersten Blick einfach, doch seine enge Verknüpfung mit dem Währungsdatensatz macht es zu einem zuverlässigen Bestandteil für finanzielle Daten: richtige Rundung, konsistente Formatierung und währungsbewusste Darstellung im gesamten System.


Wenn Sie Monetary-Felder korrekt verwenden — also immer mit einem expliziten Währungsfeld und niemals als reinen Float — vermeiden Sie eine Klasse subtiler Fehler, die in produktiven Umgebungen schwer aufzuspüren sind. Odoo hat dieses Feld genau dafür vorgesehen.


Ob Sie eine bestehende Lösung anpassen, ein Standardmodul erweitern oder ein komplett neues Feature entwickeln: die korrekte Verwendung von Monetary-Feldern ist eine fundamentale Entscheidung, die bestimmt, wie verlässlich Ihr Odoo-System mit Geldwerten umgeht.

Brauchen Sie Unterstützung bei Ihrer Odoo-Implementierung?


Bei Dasolo unterstützen wir Unternehmen jeder Größe bei der Implementierung, Anpassung und Optimierung von Odoo. Ob sauberes Datenmodell, durchdachte Feldstrategie, Multiwährungs-Setup oder komplette Rollouts — unser Team vereint funktionales Verständnis und technische Tiefe.


Haben Sie Fragen zu Monetary-Feldern oder zu anderen Aspekten Ihrer Odoo‑Landschaft? Wir beraten Sie gern. Nehmen Sie Kontakt mit uns auf und erzählen Sie uns, was Sie vorhaben.

Das Monetary Field in Odoo: Funktion, Einsatzfälle und Praxis-Tipps
Dasolo 6. März 2026
Diesen Beitrag teilen
Anmelden , um einen Kommentar zu hinterlassen