Przejdź do zawartości

Pole zależne od firmy w Odoo — jak działa i kiedy go używać

Praktyczny przewodnik po jednej z najważniejszych, a jednocześnie najczęściej źle rozumianych funkcji w modelu danych Odoo
6 marca 2026 przez
Pole zależne od firmy w Odoo — jak działa i kiedy go używać
Dasolo
| Brak komentarzy na ten moment

Wprowadzenie


Jedna z funkcji modelu danych Odoo rzadziej pojawia się w rozmowach, choć potrafi rozwiązać konkretne problemy w strukturach z wieloma spółkami — to właśnie pole zależne od firmy. Na pierwszy rzut oka niewielka właściwość, ale kluczowa, gdy ten sam rekord ma żyć różnie w różnych jednostkach organizacyjnych.


W standardowym ustawieniu pola rekordów przechowują jedną wartość widoczną dla wszystkich użytkowników. Gorzej, gdy ta sama karta produktu musi służyć dwóm podmiotom: jeden potrzebuje własnego kodu wewnętrznego, drugi korzysta z innego konta księgowego. Trzeba podzielić dane nie tworząc duplikatów rekordów — i tu wchodzi rozwiązanie.


To zadanie realizuje właśnie atrybut company_dependent. Dla osób zajmujących się rozwojem Odoo, customizacją lub administracją systemu zrozumienie tej opcji ułatwia pracę w środowiskach multi-company i upraszcza implementację reguł biznesowych.

Czym jest pole zależne od firmy w Odoo


Pole zależne od firmy przechowuje oddzielną wartość dla każdej firmy na tym samym rekordzie. Użytkownik pracujący w kontekście firmy A zobaczy wartość przypisaną do firmy A, a użytkownik z firmy B zobaczy inną wartość dla tego samego pola i tego samego rekordu.


Dla użytkownika końcowego zachowanie jest identyczne jak dla zwykłego pola — wygląda i działa tak samo w interfejsie. Różnica leży w mechanice zapisu i odczytu, którą obsługuje warstwa ORM Odoo.


Jak to wygląda w interfejsie

W GUI Odoo pole zależne od firmy nie ma specjalnego oznaczenia — celowo. Dla pracowników ma być to przezroczyste: w zależności od aktywnej firmy pokaże się odpowiednia wartość, bez dodatkowych wskaźników czy przełączników.


Dewelopersko można zastosować to zachowanie do wielu typów pól: Char, Boolean, Integer, Float, Many2one i innych. To osiąga się przez ustawienie company_dependent=True w deklaracji pola — resztę załatwia ORM.


W Odoo Studio znajdziesz już niektóre pola zależne od firmy na standardowych modelach (np. pola księgowe powiązane z produktem). Możliwość tworzenia własnych pól zależnych istnieje, lecz funkcjonalność Studio bywa ograniczona zależnie od wersji Odoo.

Jak to pole działa


Mechanika działania różni się znacząco od zwykłych pól — zrozumienie, gdzie i jak są przechowywane wartości, pomaga uniknąć niespodzianek podczas tworzenia rozszerzeń i debugowania.


Gdzie są zapisywane wartości — ir.property

W Odoo 16 i starszych wartość pola zależnego od firmy nie jest trzymana w tabeli modelu. Zamiast tego zapis trafia do specjalnej tabeli systemowej ir.property, która służy za magazyn wartości per-firma.

Każdy wpis w ir.property wiąże ze sobą elementy:

  • konkretny rekord (np. produkt o ID 42),
  • konkretne pole (np. property_account_income_id),
  • konkretną firmę,
  • oraz przypisaną wartość dla tej kombinacji.

Dzięki temu zachowanie jest przezroczyste — ORM samodzielnie pobiera i zapisuje odpowiednią wartość z ir.property zgodnie z bieżącym kontekstem firmy.


Zmiany w Odoo 17 i nowszych

Od Odoo 17 mechanizm przechowywania został przeprojektowany: wartości per-firma trzymane są bezpośrednio w tabeli modelu w kolumnie typu jsonb, gdzie kluczami są identyfikatory firm, a wartości — przypisane wartości. To przyspiesza dostęp i upraszcza zapytania przy dużych zbiorach danych.


Z punktu widzenia interfejsu i API nic się nie zmieniło, ale operacje na polach company_dependent są teraz bardziej wydajne przy skali danych.


Wartości domyślne

Pola zależne od firmy obsługują wartości domyślne per-firma. Gdy dla danej firmy nie ustawiono jeszcze wartości, pole korzysta z domyślnej wartości zdefiniowanej przy polu. W Odoo 16+ domyślną można także ustawić per-firma przez ir.property, a w Odoo 17+ domyślne wartości mogą być zapisane bezpośrednio na modelu.


Interakcja z ORM

W kontekście ORM dostęp do pola zależnego od firmy zawsze respektuje aktywną firmę w środowisku (self.env.company). Oznacza to, że:

  • odczyt pola zwróci wartość dla aktywnej firmy;
  • zapis zmieni wartość tylko dla aktywnej firmy;
  • użycie record.with_company(company) pozwala czytać lub zapisywać wartość dla konkretnej firmy bez zmiany globalnego kontekstu.

Praktyczne zastosowania w biznesie


Pole zależne od firmy nie jest jedynie ciekawostką techniczną — rozwiązuje klasyczne problemy w środowiskach z wieloma spółkami. Poniżej pięć typowych scenariuszy, gdzie naprawdę się przydaje.


1. Księgowość: konta przychodów i kosztów per spółka

To najbardziej oczywisty przykład — pola property_account_income_id i property_account_expense_id na produkcie są skonfigurowane jako zależne od firmy.


W praktyce: ten sam produkt sprzedają dwie spółki, każda ma własny plan kont. Zamiast duplikować produkt, każda firma przypisuje własne konta. Rekord pozostaje współdzielony, konfiguracja księgowa — oddzielna.


2. Sprzedaż i CRM: cenniki per spółka

W grupie sprzedażowej różne podmioty mogą stosować odrębne strategie cenowe. Pole cennika zależne od firmy pozwala na to, by ten sam kontrahent miał inne domyślne cenniki zależnie od spółki obsługującej zamówienie.


To utrzymuje centralny CRM, a jednocześnie daje każdej firmie możliwość stosowania własnych reguł handlowych.


3. Magazyn: metoda wyceny zapasów per spółka

Gdy firma grupy prowadzi magazyny w różnych jurysdykcjach, konieczne mogą być różne metody wyceny (FIFO, średnia). Pole zależne od firmy na produkcie lub kategorii pozwala stosować lokalne zasady bez tworzenia oddzielnych katalogów produktów.


4. Produkcja: domyślny dostawca per spółka

Jeżeli ten sam produkt jest zamawiany od różnych dostawców w zależności od spółki, company_dependent Many2one do res.partner pozwala zapisać preferowanego dostawcę dla każdej jednostki. Każda spółka widzi swojego preferowanego partnera bez konfliktu danych.


5. Dane regulacyjne i compliance per jurysdykcja

Firmy działające w kilku krajach często potrzebują przechowywać różne oznaczenia regulacyjne (np. kody HS, klasyfikacje podatkowe) na jednym produkcie. Company_dependent pola typu Char lub inne to lekkie i eleganckie rozwiązanie takiego problemu bez mnożenia rekordów.

Tworzenie i modyfikacja pola


Są dwie główne ścieżki tworzenia pól zależnych od firmy: przez Odoo Studio lub bezpośrednio w kodzie Python.


Tworzenie z użyciem Odoo Studio

Studio pozwala dodać pole bez kodowania, jednak nie we wszystkich wersjach ujawnia przełącznik company_dependent. W Odoo 16 i 17 opcja może być dostępna dla niektórych typów pól na standardowych modelach, ale to zależy od wersji i konfiguracji.


Jeśli potrzebujesz pełnej kontroli, lepszym wyborem jest rozwój techniczny. Studio dobrze się sprawdza w prostszych przypadkach, lecz ma ograniczenia przy zaawansowanych customizacjach.


Podejście techniczne: pola w Pythonie

W module niestandardowym zadeklarowanie pola zależnego od firmy jest proste i stanowi standardowy wzorzec w developmentcie Odoo.

Przykład deklaracji w module pokazuje, że wystarczy dodać company_dependent=True do definicji pola Char lub Many2one, aby ORM obsłużył per-firma zachowanie automatycznie.

Dodanie company_dependent=True w deklaracji pola to wszystko, co trzeba zrobić — ORM wykona resztę pracy przy zapisie i odczycie wartości.


Ustawianie wartości domyślnych per spółka

W Odoo 16 i starszych można ustawić domyślny parametr per spółka poprzez model ir.property — to wygodne rozwiązanie, gdy chcesz, by domyślna wartość obowiązywała dla wszystkich rekordów danej firmy bez masowego aktualizowania każdego rekordu.

Przykładowo można użyć ir.property._set_default(..., company_id=self.env.company.id) aby zapisać domyślną wartość dla aktualnej firmy.

W Odoo 17+ wartości domyślne są trzymane bezpośrednio na modelu i dostępne z definicji pola, co upraszcza ich zarządzanie.


Ograniczenia Odoo Studio

Pamiętaj, że pola niestandardowe wymagają prefiksu x_. Zachowanie zależne od firmy może nie być widoczne w UI Studio, ale często można je ustawić z poziomu zaawansowanych ustawień (tryb deweloperski) i menu technicznego.

Dobre praktyki


Praktyka pracy z polami zależnymi od firmy jest prosta, jeśli przestrzegasz kilku zasad. Poniżej praktyczne wskazówki, które oszczędzą czas i frustrację.


1. Stosuj tylko, gdy wartości rzeczywiście różnią się między firmami

Użycie company_dependent zwiększa złożoność systemu. Jeśli wartość jest identyczna dla wszystkich spółek, pozostań przy zwykłym polu. Atrybut stosuj jedynie tam, gdzie różnice per-firma są faktyczne i uzasadnione.


2. Testuj zawsze w kontekście wielu firm

Podczas developmentu i testów uruchamiaj scenariusze przynajmniej z dwoma aktywnymi firmami — łatwo przeoczyć błędy pracując tylko w jednym kontekście, które ujawnią się później w produkcji.


3. Używaj with_company() do operacji międzyfirmowych

Jeśli kod ma czytać lub pisać wartość dla innej firmy, stosuj record.with_company(target_company). Unikaj ręcznego przełączania self.env.company bez przywracania stanu — to źródło trudnych do znalezienia błędów.


4. Uważaj przy eksportach i importach

Eksport danych z polami zależnymi od firmy zwróci wartości zgodne z firmą eksportującego. Import wykonany w kontekście innej firmy zapisze wartości dla tej firmy — zaplanuj migracje i importy tak, by nie nadpisać niezamierzonych wartości.


5. Dokumentuj, które pola są zależne od firmy

Użytkownicy rzadko wiedzą, które pola zachowują się per-firma. Krótka informacja w dokumentacji wewnętrznej lub materiałach szkoleniowych znacząco zmniejsza zamieszanie, gdy ktoś zmieni firmę i zobaczy inną wartość tego samego rekordu.


6. Dla danych powiązanych wybieraj Many2one zamiast tekstu

Gdy per-firma wartość jest referencją do innego rekordu (konto, cennik, partner), użyj Many2one company_dependent zamiast pola tekstowego — utrzymasz spójność modelu i łatwiej zrobisz raporty.


Typowe pułapki


Nawet doświadczeni deweloperzy Odoo napotykają pułapki związane z polami zależnymi od firmy. Znajomość typowych problemów skróci czas debugowania.


Pułapka 1: brak jawnego kontekstu firmy w akcjach automatycznych

Zadania automatyczne często wykonują się w kontekście domyślnej pierwszej firmy w bazie, niekoniecznie tej, której się spodziewasz. Przy odczycie/zapisie pola company_dependent upewnij się, jaki kontekst firmy jest używany i w razie potrzeby użyj with_company().


Pułapka 2: mylenie z polami obliczanymi

Pola zależne od firmy nie są polami compute. Różnica per-firma wynika z miejsca przechowywania, a nie z metody compute. Próby łączenia compute= z company_dependent=True często kończą się błędami lub nieoczekiwanym zachowaniem.


Pułapka 3: wyszukiwanie przez firmy

Standardowe wyszukiwania ORM zwracają wyniki zgodne z aktualnym kontekstem firmy. Aby przeszukiwać wartości we wszystkich firmach trzeba odwołać się bezpośrednio do ir.property (Odoo 16 i wcześniej) lub obsłużyć kolumnę jsonb w Odoo 17+, co często komplikuje raportowanie i ekstrakcję danych.


Pułapka 4: brak domyślnych wartości dla wszystkich firm

Po wprowadzeniu pola zależnego w działającej bazie istniejące rekordy dla firm, które nie ustawiły wartości, zwrócą False/None. Jeśli logika biznesowa oczekuje wartości domyślnej, zrób migrację i ustaw domyślne wartości dla wszystkich istotnych firm.


Pułapka 5: mylenie z uprawnieniami dostępu

Pole zależne od firmy kontroluje, jaką wartość widzi użytkownik, a nie czy pole jest w ogóle widoczne. Gdy celem jest ukrycie pola dla konkretnych firm/użytkowników, użyj reguł rekordów lub kontroli widoczności, a nie company_dependent.

Podsumowanie


Pole zależne od firmy to funkcja, która działa niemal niezauważalnie, a gdy potrzeba — staje się niezbędne. To właściwe narzędzie tam, gdzie ten sam rekord musi mieć różne wartości w różnych spółkach: konfiguracje księgowe, reguły cenowe, dane regulacyjne czy dowolne atrybuty zależne od podmiotu prawnego.


Zrozumienie działania na poziomie ORM, świadomość zmian w przechowywaniu między wersjami Odoo oraz znajomość typowych problemów oszczędzi wiele godzin pracy przy projektach multi-company. Niezależnie czy natkniesz się na to pole w standardzie czy podczas debugowania — opanowanie tej konstrukcji świadczy o praktycznej znajomości Odoo.


Jeżeli budujesz rozwiązania w oparciu o framework Odoo i potrzebujesz przechowywać dane per-spółka w uporządkowany sposób — company_dependent=True to rozwiązanie, które warto zastosować.

Potrzebujesz wsparcia we wdrożeniu Odoo?


W Dasolo wspieramy firmy we wdrożeniach, customizacji i optymalizacji Odoo, także w złożonych środowiskach multi-company. Oferujemy projektowanie modelu danych, strategię pól niestandardowych i pełne wdrożenia dopasowane do struktury organizacyjnej klienta.


Masz pytania dotyczące pól zależnych od firmy albo innych aspektów wdrożenia Odoo? Chętnie pomożemy. Skontaktuj się z nami porozmawiajmy o Twoim projekcie.

Pole zależne od firmy w Odoo — jak działa i kiedy go używać
Dasolo 6 marca 2026
Udostępnij ten artykuł
Zaloguj się by zostawić komentarz