Einleitung
Eine Funktion, über die oft nur am Rande gesprochen wird, ist das firmenabhängige Feld in Odoo. Es ist ein kleines Attribut, das in Multi-Company-Umgebungen große Auswirkungen haben kann — vor allem sobald dieselben Datensätze von mehreren rechtlichen Einheiten genutzt werden.
Normalerweise hat ein Feld in Odoo für einen Datensatz einen einzigen Wert, den alle Nutzer sehen. Probleme tauchen auf, wenn beispielsweise zwei Gesellschaften dasselbe Produkt benutzen, aber jede ihre eigenen internen Artikelnummern oder Standardkonten benötigt. Ohne firmenabhängige Felder müsste man Daten duplizieren oder komplizierte Workarounds bauen.
Genau hier setzt das Attribut company_dependent an. Ob Sie Odoo entwickeln, konfigurieren oder sich einfach mit dem Framework vertraut machen: Das Verständnis dieses Mechanismus eröffnet clevere, saubere Lösungen für Multi-Company-Szenarien.
Was ist ein firmenabhängiges Feld in Odoo?
Ein firmenabhängiges Feld speichert pro Unternehmen einen eigenen Wert auf demselben Datensatz. Ein Benutzer aus Unternehmen A sieht beim Lesen des Felds den Wert von Unternehmen A; ein Benutzer aus Unternehmen B sieht auf demselben Datensatz den Wert von Unternehmen B.
Für Anwender verhält sich das Feld wie jedes andere: Eingaben, Formulare und Ansichten sind gleich — die Besonderheit passiert transparent im Hintergrund innerhalb des Odoo-ORM.
Darstellung in der Benutzeroberfläche
In der Oberfläche unterscheidet sich ein firmenabhängiges Feld nicht von einem gewöhnlichen Feld. Es gibt keine sichtbare Markierung, die dem Anwender anzeigt, dass der Wert unternehmensspezifisch ist. Diese Unsichtbarkeit ist gewollt, damit die Bedienung intuitiv bleibt.
Aus Entwicklersicht lässt sich company_dependent auf viele Feldtypen anwenden: Char, Boolean, Integer, Float, Many2one usw. Das Setzen von company_dependent=True aktiviert dieses Verhalten im ORM.
In Odoo Studio sind einige firmenabhängige Felder auf Standardmodellen bereits vorhanden (z. B. produktbezogene Buchungskonten). Eigene firmenabhängige Felder lassen sich ebenfalls anlegen, aber die Studio-Unterstützung für dieses Attribut variiert je nach Odoo-Version.
Wie das Feld funktioniert
Technisch gesehen arbeitet das Feature anders als normale Felder. Wer den Mechanismus kennt, kann beim Entwickeln, Testen und Debuggen böse Überraschungen vermeiden.
Speicherung in ir.property
In Odoo 16 und früher werden Werte firmenabhängiger Felder nicht in der Tabelle des Modells selbst abgelegt, sondern in einer zentralen Systemtabelle namens ir.property gespeichert.
Jeder Eintrag in ir.property verknüpft konkret:
- einen bestimmten Datensatz (z. B. Produkt mit ID 42),
- ein bestimmtes Feld (z. B. property_account_income_id),
- eine bestimmte Firma,
- und den tatsächlichen Wert für diese Kombination.
Deshalb wirkt das Verhalten für Anwender transparent: das ORM liest und schreibt automatisch in ir.property, je nach der aktuellen Firmenkontext-Einstellung.
Änderungen ab Odoo 17
Ab Odoo 17 wurde die Speicherung überarbeitet: Firmenabhängige Felder werden nun direkt in der Model-Tabelle in einem jsonb-Feld abgelegt. Die Werte pro Firma liegen als JSON-Dictionary vor. Das beschleunigt Abfragen deutlich und vereinfacht die Datenhaltung.
Die Oberfläche und das Entwickler-API bleiben im Wesentlichen gleich, doch Abfragen großer Datenmengen sind jetzt spürbar performanter.
Standardwerte
Firmenabhängige Felder unterstützen firmenbezogene Standardwerte. Fehlt für eine Firma ein expliziter Eintrag, fällt das Feld auf den Standard zurück. In Odoo 16 und älter kommen diese Defaults über ir.property, in Odoo 17+ werden sie direkt am Modell bzw. Feld verwaltet.
Interaktion mit dem ORM
Das ORM respektiert beim Zugriff stets die aktuelle Firma im Environment (self.env.company). Das bedeutet konkret:
- Lesen liefert den Wert für die aktive Firma.
- Schreiben ändert nur den Wert für die aktive Firma.
- Mit record.with_company(company) können Sie gezielt Werte für eine bestimmte Firma lesen oder schreiben.
Geschäftliche Einsatzszenarien
Das firmenabhängige Feld ist kein theoretisches Spielzeug, sondern löst konkrete Probleme im Alltag von Multi-Company-Setups. Nachfolgend typische Einsatzfälle, in denen es sich besonders lohnt.
1. Buchhaltung: Firmenindividuelle Ertrags- und Aufwandskonten
Das klassischste Beispiel: Auf Produkten werden Konten wie property_account_income_id und property_account_expense_id firmenabhängig gepflegt.
So kann dasselbe Produkt in Unternehmen A und Unternehmen B verwendet werden, obwohl beide Unternehmen unterschiedliche Kontenpläne haben — ohne das Produkt zu duplizieren. Das Produkt bleibt zentral, die Buchungslogik ist je Firma unterschiedlich.
2. Vertrieb & CRM: Firmenabhängige Preislisten
In Konzernen mit mehreren Verkaufseinheiten kann jede Gesellschaft eigene Preisstrategien fahren. Ein firmenabhängiges Preislistenfeld ermöglicht es, dass ein gemeinsamer Kunde je nach verarbeitender Firma unterschiedliche Standardpreislisten verwendet.
Auf diese Weise bleibt die CRM-Datenbasis zentral, während jede Einheit ihre kommerziellen Regeln autonom durchsetzt.
3. Lager: Valuationsmethode pro Firma
Unternehmen in verschiedenen Ländern oder mit unterschiedlichen rechtlichen Anforderungen benötigen mitunter unterschiedliche Bewertungsmethoden (FIFO vs. Durchschnitt). Firmenabhängige Felder auf Produkt- oder Kategorieniveau vermeiden das Kopieren ganzer Kataloge.
4. Fertigung: Firmenabhängiger Standardlieferant
Wenn verschiedene Gesellschaften dasselbe Produkt von unterschiedlichen Lieferanten bevorzugen, hält ein firmenabhängiges Many2one-Feld auf res.partner die firmenspezifische Bezugsquelle sauber getrennt.
5. Gesetzliche und regulatorische Felder
Bei grenzüberschreitenden Geschäften müssen oft landesspezifische Kennzeichnungen auf Produkten gespeichert werden (HS-Codes, Steuerklassifikationen etc.). Ein firmenabhängiges Char-Feld ist hier eine schlanke Lösung, um Unterschiede je juristischer Einheit abzubilden.
Anlegen und Anpassen des Feldes
Felder anlegen: Studio oder Python-Code
Es gibt zwei gängige Wege, firmenabhängige Felder zu erstellen: per Odoo Studio oder direkt per Python in einem Modul.
Odoo Studio
Studio ermöglicht die Felderstellung ohne Entwicklungsaufwand, zeigt aber nicht immer einen klaren Schalter für company_dependent an — das Verhalten ist versionsabhängig. Für einfache Anforderungen ist Studio ein schneller Einstieg, für komplexe Anpassungen empfiehlt sich die technische Lösung.
Technischer Weg: Python-Felder
In einem Custom-Modul ist das Anlegen firmenabhängiger Felder unkompliziert. Das ist der übliche Entwicklungsansatz in Odoo-Projekten.
Beispiel (typisches Muster):
from odoo import fields, models
class ProductTemplate(models.Model):
_inherit = 'product.template'
x_internal_ref = fields.Char(
string='Interne Referenz (pro Firma)',
company_dependent=True,
)
x_preferred_carrier_id = fields.Many2one(
comodel_name='res.partner',
string='Bevorzugter Lieferant',
company_dependent=True,
)
Das Hinzufügen von company_dependent=True in der Felddeklaration genügt — das ORM kümmert sich um Speicherung und Zugriff.
Firmenbezogene Standardwerte setzen
In Odoo 16 und älter können Sie firmenweite Defaults über ir.property anlegen. Das ist praktisch, wenn alle Datensätze einer Firma einen sinnvollen Ausgangswert erhalten sollen, ohne jeden Eintrag manuell zu ändern.
Beispiel zur Programmiersetzung eines Defaults:
self.env['ir.property']._set_default(
'x_internal_ref',
'product.template',
'DEFAULT-VALUE',
company_id=self.env.company.id,
)
In Odoo 17+ werden Defaults direkt auf dem Modell gehalten und sind über die Felddefinition zugänglich.
Studio-Felder und ihre Grenzen
Achten Sie bei Custom-Feldern aus Studio auf das erforderliche x_-Prefix. Das firmenabhängige Verhalten ist in Studio nicht immer sichtbar, lässt sich aber im technischen Menü (Entwicklermodus) konfigurieren, sofern die Version es unterstützt.
Bewährte Vorgehensweisen
Praktische Empfehlungen
1. Nur verwenden, wenn Werte wirklich firmenabhängig sind
Firmenabhängige Felder erhöhen die Komplexität. Wenn der Wert über alle Firmen hinweg identisch ist, bleiben Sie bei normalen Feldern. company_dependent=True ist für Fälle reserviert, in denen Werte pro juristischer Einheit variieren müssen.
2. Immer im Multi-Company-Kontext testen
Testen Sie Funktionen mit mindestens zwei aktiven Firmen. In einer Single-Company-Testumgebung fallen viele Probleme nicht auf, die später in der Produktion auftreten.
3. Verwenden Sie with_company() für Firmenübergreifende Operationen
Wenn Code Werte für eine andere Firma lesen oder schreiben muss, nutzen Sie record.with_company(target_company). Vermeiden Sie das manuelle Umschalten des Environment-Unternehmens ohne korrektes Zurücksetzen.
4. Vorsicht bei Exporten und Importen
Beim Export spiegeln firmenspezifische Felder immer die Firma des exportierenden Nutzers wider. Importiert man dieselben Daten unter einer anderen Firma, werden die Werte für diese Firma gesetzt. Planen Sie diesen Effekt bewusst bei Migrationen und Datenübernahmen ein.
5. Dokumentieren Sie, welche Felder firmenabhängig sind
Endanwender wissen selten, welche Felder pro Firma unterschiedlich sein können. Ein Eintrag in der internen Odoo-Dokumentation oder dem Onboarding hilft Verwirrung zu vermeiden, wenn Nutzer beim Firmenwechsel andere Werte sehen.
6. Many2one statt Char für referenzielle Daten
Wenn der pro Firma unterschiedliche Wert auf eine andere Entität verweist (Konto, Preislisten, Partner), verwenden Sie ein Many2one-Feld statt eines Freitextfelds. Das hält das Datenmodell ordentlich und erleichtert Auswertungen.
Häufige Fallstricke
Häufige Probleme und wie man sie vermeidet
Fallstrick 1: Firmenkontext in automatisierten Aktionen vergessen
Geplante Aktionen oder Server-Aktionen laufen oft im Kontext der ersten Firma in der Datenbank, nicht notwendigerweise in der Firma, die Sie erwarten. Prüfen Sie den Firmenkontext explizit und nutzen Sie with_company(), wenn automatisierte Prozesse firmenabhängige Felder berühren.
Fallstrick 2: Nicht mit berechneten Feldern verwechseln
Firmenabhängige Felder sind keine computed-Felder und haben keine compute-Methode. Die Variation entsteht durch die Speicherung, nicht durch Berechnung. compute= neben company_dependent=True zu verwenden funktioniert nicht zuverlässig und kann Fehler erzeugen.
Fallstrick 3: Suchen über Firmen hinweg
ORM-Suchen auf firmenabhängigen Feldern liefern standardmäßig nur Treffer für die aktuelle Firma. Wenn Sie über alle Firmen suchen müssen, müssen Sie in Odoo 16 und älter direkt ir.property abfragen oder in Odoo 17+ das jsonb-Feld gezielt auswerten — ein häufiger Stolperstein bei Reports und Datenexporten.
Fallstrick 4: Keine Defaults für alle Firmen setzen
Neu eingeführte firmenabhängige Felder liefern für Firmen ohne expliziten Wert oft False/None. Wenn Ihre Geschäftslogik einen Default erwartet, setzen Sie diesen per Migrationsskript für alle relevanten Firmen nach.
Fallstrick 5: Mit Zugriffsrechten verwechseln
Firmenabhängige Felder regeln, welcher Wert angezeigt wird — nicht, ob das Feld sichtbar sein darf. Wenn Felder komplett für bestimmte Firmen oder Benutzer ausgeblendet werden sollen, nutzen Sie Record Rules oder feldspezifische Zugriffsrechte, nicht company_dependent.
Fazit
Das firmenabhängige Feld ist eines dieser Odoo-Features, das unauffällig bleibt, bis man es benötigt — und dann unverzichtbar wird. Es ist die richtige Lösung, wenn derselbe Datensatz unterschiedliche Werte für verschiedene juristische Einheiten tragen muss: Buchungskonten, Preislogik, regulatorische Angaben oder andere firmenspezifische Attribute.
Wer den Mechanismus auf ORM-Ebene, die Versionsunterschiede in der Speicherung und die typischen Fallstricke kennt, spart viel Zeit in Multi-Company-Projekten. Ob Sie es im Entwickler-Guide lesen oder bei der Fehlersuche in einem Live-System begegnen: Kenntnisse zu diesem Feldtyp sind ein klares Qualitätsmerkmal in Odoo-Projekten.
Wenn Sie auf dem Odoo-Framework aufbauen und per Firma unterschiedliche Daten sauber handhaben wollen, dann ist company_dependent=True meist die richtige Wahl.
Brauchen Sie Unterstützung bei Ihrer Odoo-Implementierung?
Bei Dasolo unterstützen wir Unternehmen bei Implementierung, Anpassung und Optimierung von Odoo — auch in komplexen Multi-Company-Landschaften. Egal ob Datenmodell, Strategie für Custom Fields oder komplette Rollouts: Unser Team bringt die funktionale und technische Erfahrung mit.
Bei Fragen zu firmenabhängigen Feldern oder anderen Themen rund um Ihre Odoo-Implementierung helfen wir Ihnen gerne weiter. Kontaktieren Sie uns und erzählen Sie uns, welches Projekt Sie vorhaben.