Zum Inhalt springen

Unternehmensabhängiges Feld in Odoo: Funktionsweise und Anwendung

Ein praktischer Leitfaden zu einem der nützlichsten, aber oft missverstandenen Funktionen im Odoo-Datenmodell
6. März 2026 durch
Unternehmensabhängiges Feld in Odoo: Funktionsweise und Anwendung
Dasolo
| Noch keine Kommentare

Einführung


Eine der weniger besprochenen Funktionen im Odoo-Datenmodell ist das unternehmensabhängige Feld. Es ist ein kleines Attribut, das einen großen Unterschied macht, sobald Sie mit Multi-Company-Konfigurationen arbeiten.


In den meisten Odoo-Setups hält ein Feld in einem Datensatz einen einzelnen Wert, den jeder Benutzer in der Datenbank sehen kann. Aber was passiert, wenn zwei Unternehmen dasselbe Produktkatalog teilen und jedes Unternehmen seinen eigenen internen Referenzcode benötigt? Oder wenn verschiedene Unternehmen unterschiedliche Standardkonten für dasselbe Produkt benötigen?


Genau das ist das Problem, das das company_dependent Attribut löst. Egal, ob Sie Odoo-Entwicklung, Odoo-Anpassung durchführen oder einfach nur das Odoo-Framework erkunden, das Verständnis dieses Feldtyps gibt Ihnen einen echten Vorteil bei Multi-Company-Projekten.

Was ist ein unternehmensabhängiges Feld in Odoo


Ein unternehmensabhängiges Feld ist ein Feld, das einen separaten Wert pro Unternehmen im selben Datensatz speichert. Wenn ein Benutzer, der zu Unternehmen A gehört, das Feld liest, sieht er den Wert seines Unternehmens. Wenn ein Benutzer von Unternehmen B denselben Datensatz liest, sieht er einen anderen Wert.


Von außen sieht es aus und verhält sich wie ein normales Feld. Benutzer interagieren im Odoo-Interface auf die gleiche Weise damit. Die Magie geschieht im Hintergrund im Odoo ORM.


Wie es im Interface erscheint

Im Odoo UI sieht ein unternehmensabhängiges Feld identisch aus wie ein reguläres Feld. Es gibt keinen sichtbaren Hinweis, der dem Benutzer sagt, dass der Wert, den er sieht, unternehmensspezifisch ist. Das ist beabsichtigt: Das Verhalten ist für Endbenutzer transparent.


Aus der Perspektive eines Entwicklers ist dies einer der Odoo-Feldtypen, die auf viele Basistypen angewendet werden können: Char, Boolean, Integer, Float, Many2one und andere. Das Attribut company_dependent=True aktiviert dieses Verhalten im Odoo ORM.


In Odoo Studio sind einige unternehmensabhängige Felder bereits in Standardmodellen (wie produktbezogene Felder für Konten) verfügbar. Es können auch benutzerdefinierte unternehmensabhängige Felder erstellt werden, obwohl die Studio-Unterstützung für dieses spezifische Attribut in einigen Odoo-Versionen eingeschränkt ist.

Wie das Feld funktioniert


Unter der Haube funktionieren unternehmensabhängige Felder sehr anders als reguläre Felder. Das Verständnis des Mechanismus hilft, Überraschungen beim Erstellen oder Debuggen von Odoo-Anpassungen zu vermeiden.


Speicherung in ir.property

In Odoo 16 und früher werden die Werte unternehmensabhängiger Felder nicht in der eigenen Datenbanktabelle des Modells gespeichert. Stattdessen werden sie in einer separaten Systemtabelle namens ir.property gespeichert.

Jeder Eintrag in ir.property verknüpft:

  • Einen bestimmten Datensatz (z. B. Produkt mit ID 42)
  • Ein bestimmtes Feld (z. B. property_account_income_id)
  • Ein bestimmtes Unternehmen
  • Der tatsächliche Wert für diese Kombination

Das ist der Grund, warum die Werte für die Benutzer transparent erscheinen: Das ORM ruft automatisch auf ir.property zu, um basierend auf dem aktuellen Unternehmenskontext zu lesen und zu schreiben.


Änderungen in Odoo 17+

Mit Odoo 17 wurde der Speichermechanismus überarbeitet. Unternehmensabhängige Felder werden jetzt direkt in der Tabelle des Modells mithilfe einer jsonb-Spalte gespeichert, wobei Unternehmenswerte als JSON-Dictionary gespeichert werden. Dies verbessert die Leistung erheblich und vereinfacht Abfragen.


Die Benutzeroberfläche und die API für Entwickler bleiben gleich, aber Abfragen zu unternehmensabhängigen Feldern sind jetzt im großen Maßstab viel schneller.


Standardwerte

Unternehmensabhängige Felder unterstützen unternehmensspezifische Standardwerte. Wenn für ein bestimmtes Unternehmen kein Wert explizit festgelegt wurde, fällt das Feld auf den Standardwert zurück, der im Feld selbst definiert ist. Dieser Standard kann auch pro Unternehmen über das Modell ir.property (Odoo 16 und früher) oder direkt im Modell (Odoo 17+) festgelegt werden.


Interaktion mit dem ORM

Im Kontext des Odoo ORM respektiert der Zugriff auf ein unternehmensabhängiges Feld immer das aktuelle Unternehmen in der Umgebung (self.env.company). Das bedeutet:

  • Das Lesen des Feldes gibt den Wert für das aktive Unternehmen zurück
  • Das Schreiben in das Feld aktualisiert nur den Wert für das aktive Unternehmen
  • Das Wechseln des Unternehmenskontexts (record.with_company(company)) ermöglicht es Ihnen, Werte für ein bestimmtes Unternehmen zu lesen oder zu schreiben.

Geschäftsanwendungsfälle


Das unternehmensabhängige Feld ist nicht nur eine technische Kuriosität. Es löst echte, alltägliche Probleme in Multi-Company-Odoo-Setups. Hier sind fünf häufige Szenarien, in denen es seinen Platz wirklich verdient.


1. Buchhaltung: Unternehmensabhängige Einnahmen- und Ausgabenkonten

Dies ist das häufigste Beispiel in Odoo standardmäßig. Die Felder property_account_income_id und property_account_expense_id auf Produkten sind unternehmensabhängig.


In der Praxis: Unternehmen A verkauft dasselbe Produkt wie Unternehmen B, aber jedes Unternehmen hat ein anderes Kontenrahmen. Anstatt den Produktdatensatz zu duplizieren, konfiguriert jedes Unternehmen einfach seine eigenen Buchhaltungszeilen. Das Produkt wird geteilt; die Buchhaltungslogik nicht.


2. Vertrieb und CRM: Unternehmensabhängige Preislisten

In einer Gruppe, die mehrere Vertriebseinheiten betreibt, kann jedes Unternehmen unterschiedliche Preisstrategien verwenden. Mit einem unternehmensabhängigen Preislistefeld kann ein gemeinsamer Kundenstamm unterschiedliche Standardpreislisten führen, je nachdem, welches Unternehmen den Verkauf abwickelt.


Dies hält die CRM-Daten zentralisiert, während es jedem Unternehmen ermöglicht, seine eigenen kommerziellen Regeln anzuwenden.


3. Lagerbestand: Unternehmensabhängige Bewertungsmethode für Bestände

Einige Gruppen betreiben Lagerhäuser über mehrere rechtliche Einheiten hinweg mit unterschiedlichen lokalen Vorschriften. Ein Produkt kann in einem Land FIFO-Kosten und in einem anderen Durchschnittskosten erfordern. Die Verwendung unternehmensabhängiger Felder auf dem Produkt oder der Kategorie vermeidet die Duplizierung des gesamten Produktkatalogs.


4. Fertigung: Unternehmensabhängiger Standardlieferant

Wenn ein gemeinsames Produkt je nach Unternehmen von verschiedenen Lieferanten gekauft wird, kann ein unternehmensabhängiges Many2one-Feld, das auf res.partner verweist, den bevorzugten Lieferanten pro Einheit halten. Jedes Unternehmen sieht seinen eigenen bevorzugten Lieferanten ohne Konflikte.


5. Benutzerdefinierte Felder für regulatorische Daten

Gruppen, die in mehreren Ländern tätig sind, müssen oft länderspezifische Compliance-Referenzen in gemeinsamen Datensätzen speichern. Zum Beispiel könnte ein Produkt je nach Rechtsordnung einen anderen HS-Code oder eine andere Steuerklassifizierung benötigen. Ein unternehmensabhängiges Char-Feld ist eine saubere, ressourcenschonende Möglichkeit, dies zu handhaben, ohne Modellvarianten zu erstellen.

Erstellen oder Anpassen des Feldes


Es gibt zwei Hauptmethoden, um unternehmensabhängige Felder in Odoo zu erstellen: die Verwendung von Odoo Studio oder das direkte Schreiben von Python-Code.


Verwendung von Odoo Studio

Odoo Studio ermöglicht es Ihnen, Felder ohne jeglichen Code zu erstellen. Allerdings bietet Studio in allen Versionen keinen speziellen Schalter für company_dependent an. In Odoo 16 und 17 ist die Option bei einigen Feldtypen verfügbar, wenn neue Felder in Standardmodellen erstellt werden.


Wenn Sie vollständige Kontrolle über dieses Attribut benötigen, ist die technische Entwicklung der zuverlässigere Ansatz. Studio ist ein guter Ausgangspunkt für einfachere Fälle, hat jedoch Grenzen, wenn es um fortgeschrittene Odoo-Anpassungsszenarien geht.


Technischer Ansatz: Python-Felder

In einem benutzerdefinierten Odoo-Modul ist die Deklaration eines unternehmensabhängigen Feldes unkompliziert. Dies ist das Standardmuster, das in der Entwicklung von Odoo-Python-Feldern verwendet wird:

from odoo import fields, models

class ProductTemplate(models.Model):
    _inherit = 'product.template'

    x_internal_ref = fields.Char(
        string='Interne Referenz (pro Unternehmen)',
        company_dependent=True,
    )

    x_preferred_carrier_id = fields.Many2one(
        comodel_name='res.partner',
        string='Bevorzugter Anbieter',
        company_dependent=True,
    )

Das Hinzufügen von company_dependent=True zu jeder Felddeklaration ist alles, was erforderlich ist. Das ORM kümmert sich automatisch um den Rest.


Standardwerte pro Unternehmen festlegen

In Odoo 16 und früher können Sie einen unternehmensspezifischen Standard über das ir.property-Modell festlegen. Dies ist nützlich, wenn Sie einen sinnvollen Standard für alle Datensätze in einem Unternehmen festlegen möchten, ohne ihn Datensatz für Datensatz einzustellen:

self.env['ir.property']._set_default(
    'x_internal_ref',
    'product.template',
    'DEFAULT-VALUE',
    company_id=self.env.company.id,
)

In Odoo 17+ wird der Standardwert direkt im Modell-Datensatz gespeichert und ist auch über die Felddefinition zugänglich.


Odoo Studio Felder und Einschränkungen

Bei der Arbeit mit Odoo Studio-Feldern beachten Sie, dass das x_-Präfix für benutzerdefinierte Felder erforderlich ist. Das unternehmensabhängige Verhalten ist möglicherweise nicht in der Studio-Benutzeroberfläche sichtbar, kann jedoch weiterhin über das technische Menü unter Einstellungen konfiguriert werden, wenn der Entwicklermodus aktiv ist.

Best Practices


Die Arbeit mit unternehmensabhängigen Feldern ist unkompliziert, sobald Sie die Muster kennen. Hier sind die Praktiken, die Ihnen Zeit sparen und Kopfschmerzen ersparen werden.


1. Verwenden Sie es nur, wenn die Werte tatsächlich pro Unternehmen unterschiedlich sind

Unternehmensabhängige Felder fügen Komplexität hinzu. Wenn der Wert in allen Unternehmen gleich ist, verwenden Sie ein reguläres Feld. Reservieren Sie company_dependent=True für Felder, bei denen verschiedene Unternehmen tatsächlich unterschiedliche Werte in gemeinsamen Datensätzen benötigen.


2. Immer im Multi-Company-Kontext testen

Beim Erstellen oder Testen von Funktionen, die unternehmensabhängige Felder betreffen, testen Sie immer mit mindestens zwei aktiven Unternehmen. Es ist leicht, Probleme in einer Ein-Unternehmen-Konfiguration zu übersehen, die sofort in der Produktion sichtbar werden.


3. Verwenden Sie with_company() für unternehmensübergreifende Operationen

Wenn Ihr Code Werte unternehmensabhängiger Felder für ein anderes Unternehmen als das aktuelle lesen oder schreiben muss, verwenden Sie record.with_company(target_company). Vermeiden Sie es, das Unternehmensumfeld manuell zu wechseln, ohne es wiederherzustellen.


4. Seien Sie vorsichtig mit Exporten und Importen

Beim Export von Datensätzen, die unternehmensabhängige Felder enthalten, spiegeln die exportierten Werte das Unternehmen des Benutzers wider, der den Export durchführt. Das Importieren derselben Datei unter einem anderen Unternehmenskontext setzt die Werte für dieses Unternehmen. Dies ist oft das richtige Verhalten, aber seien Sie in Migrations- und Datenimport-Workflows explizit darüber.


5. Dokumentieren Sie, welche Felder unternehmensabhängig sind

Endbenutzer wissen selten, welche Felder unternehmensabhängig sind. Eine kurze Notiz in Ihrer internen Odoo-Dokumentation oder in den Schulungsmaterialien ist sehr hilfreich. Sie verhindert Verwirrung, wenn ein Benutzer zwischen Unternehmen wechselt und unterschiedliche Werte im selben Datensatz sieht.


6. Bevorzugen Sie Many2one gegenüber Char für strukturierte Daten

Wenn der unternehmensspezifische Wert ein Verweis auf einen anderen Datensatz (Konto, Preisliste, Partner) ist, verwenden Sie ein Many2one unternehmensabhängiges Feld, anstatt einen Namen als Text zu speichern. Dies hält das Datenmodell sauber und macht Berichterstattung zuverlässiger.


Häufige Fallstricke


Selbst erfahrene Odoo-Entwickler stoßen auf Probleme mit unternehmensabhängigen Feldern. Zu wissen, worauf man achten muss, verhindert verschwendete Debugging-Zeit.


Falle 1: Den Unternehmenskontext in automatisierten Aktionen vergessen

Geplante Aktionen und Serveraktionen laufen oft in einem Kontext, in dem das Unternehmen das erste Unternehmen in der Datenbank ist, nicht unbedingt das, das Sie erwarten. Wenn Ihre automatisierte Aktion ein unternehmensabhängiges Feld liest oder schreibt, überprüfen Sie den Unternehmenskontext explizit. Verwenden Sie with_company(), um auf der sicheren Seite zu sein.


Falle 2: Annehmen, dass das Feld sich wie ein berechnetes Feld verhält

Unternehmensabhängige Felder sind keine berechneten Felder. Sie haben keine compute-Methode. Die unternehmensspezifische Variation stammt aus der Speicherung, nicht aus der Berechnung. Der Versuch, compute= zusammen mit company_dependent=True hinzuzufügen, wird nicht wie erwartet funktionieren und kann Fehler im Odoo-Framework verursachen.


Falle 3: Über Unternehmen hinweg suchen

Standard-ORM-Suchen in unternehmensabhängigen Feldern geben nur Ergebnisse zurück, die dem aktuellen Unternehmenskontext entsprechen. Wenn Sie über alle Unternehmen hinweg suchen müssen, müssen Sie ir.property direkt abfragen (Odoo 16 und früher) oder die jsonb-Spalte sorgfältig behandeln (Odoo 17+). Dies ist eine häufige Quelle der Verwirrung bei Berichterstattung und Datenextraktionsarbeiten.


Falle 4: Keine Standardwerte für alle Unternehmen festlegen

Wenn Sie ein unternehmensabhängiges Feld in einem Live-System einführen, geben bestehende Datensätze False oder None für jedes Unternehmen zurück, das keinen Wert explizit festgelegt hat. Wenn Ihre Geschäftslogik einen Standardwert erwartet, legen Sie ihn proaktiv für alle relevanten Unternehmen mit einem Datenmigrationsskript fest.


Falle 5: Verwechslung mit Zugriffsrechten

Unternehmensabhängige Felder steuern, welcher Wert angezeigt wird, nicht ob der Benutzer das Feld überhaupt sehen kann. Wenn Sie ein Feld vollständig vor bestimmten Unternehmen oder Benutzern verbergen müssen, ist das eine Aufgabe für Aufzeichnungsregeln oder Zugriffsrechte auf Feldebene, nicht für company_dependent.

Fazit


Das unternehmensabhängige Feld ist eines dieser Funktionen in Odoo, die unsichtbar erscheint, bis man sie benötigt, und dann unverzichtbar wird. Es ist das richtige Werkzeug für jede Situation, in der derselbe Datensatz unterschiedliche Werte über Unternehmen hinweg tragen muss: Buchhaltungs-Konfigurationen, Preisregeln, regulatorische Referenzen oder jede geschäftsspezifische Eigenschaft, die je nach juristischer Person variiert.


Zu verstehen, wie es auf der ORM-Ebene funktioniert, welche Version von Odoo das Speicherformat geändert hat und welche Fallstricke zu vermeiden sind, wird Ihnen erheblich Zeit bei Multi-Company-Projekten sparen. Ob Sie es in einem Standard-Odoo-Entwicklerhandbuch begegnen oder es beim Debuggen eines Live-Systems entdecken, dieses Feldtyp zu kennen, ist ein Zeichen echter Odoo-Expertise.


Wenn Sie auf dem Odoo-Framework aufbauen und unternehmensspezifische Daten sauber verwalten müssen, ist company_dependent=True die Antwort, nach der Sie gesucht haben.

Brauchen Sie Hilfe bei Ihrer Odoo-Implementierung?


Bei Dasolo helfen wir Unternehmen, Odoo in allen Größen und Konfigurationen zu implementieren, anzupassen und zu optimieren, einschließlich komplexer Multi-Company-Setups. Egal, ob Sie ein maßgeschneidertes Datenmodell, eine benutzerdefinierte Feldstrategie oder einen vollständigen Odoo-Rollout benötigen, unser Team hat die technische und funktionale Tiefe, um es richtig zu machen.


Wenn Sie Fragen zu unternehmensabhängigen Feldern oder einem anderen Aspekt Ihrer Odoo-Implementierung haben, helfen wir Ihnen gerne weiter. Kontaktieren Sie uns und lassen Sie uns darüber sprechen, was Sie aufbauen.

Unternehmensabhängiges Feld in Odoo: Funktionsweise und Anwendung
Dasolo 6. März 2026
Diesen Beitrag teilen
Anmelden , um einen Kommentar zu hinterlassen