Passa al contenuto

Campo Company-Dependent in Odoo: come funziona e quando usarlo

Guida pratica a una delle funzionalità del modello dati Odoo più potenti — e spesso male interpretate
6 marzo 2026 di
Campo Company-Dependent in Odoo: come funziona e quando usarlo
Dasolo
| Ancora nessun commento

Introduzione


Una funzione poco visibile ma potente nel modello dati di Odoo è il campo dipendente dalla società. Non è qualcosa che salta all'occhio nella configurazione quotidiana, ma diventa fondamentale quando gestisci più entità legali nella stessa installazione.


Nel funzionamento standard di Odoo, un campo di un record contiene un unico valore condiviso da tutti gli utenti. Il problema sorge quando più società usano lo stesso prodotto ma devono mantenere referenze interne diverse, o quando le stesse anagrafiche necessitano di conti predefiniti differenti a seconda dell'entità che effettua l'operazione.


Proprio a questo serve l'attributo company_dependent. Che tu stia sviluppando, personalizzando o studiando il framework Odoo, sapere come e quando usarlo ti dà un vantaggio concreto nei progetti multi-company.

Cos'è un campo dipendente dalla società in Odoo


Un campo dipendente dalla società è progettato per conservare un valore separato per ogni società, pur rimanendo sullo stesso record. Un utente di Società A vedrà il valore impostato per A; un utente di Società B vedrà invece il valore relativo a B.


In superficie l'interazione è identica a quella di un campo normale: l'utente compila o legge lo stesso campo nella UI. La differenza è gestita internamente dall'ORM di Odoo.


Come si presenta nell'interfaccia

Nell'interfaccia Odoo il campo dipendente dalla società non ha segni distintivi visibili: appare esattamente come un campo standard. Questa scelta mantiene l'esperienza utente semplice e senza frizioni.


Dal punto di vista dello sviluppatore, l'attributo può essere applicato a molti tipi di campo: Char, Boolean, Integer, Float, Many2one e altri. È la flag company_dependent=True che abilita il comportamento speciale nell'ORM.


In Odoo Studio alcune proprietà company-dependent sui modelli standard sono già esposte (per esempio campi legati ai conti su prodotti). È possibile creare campi personalizzati con questa caratteristica, ma il supporto di Studio può variare tra le versioni: per controlli avanzati spesso è preferibile lo sviluppo tecnico.

Come funziona il campo


Dietro le quinte, il funzionamento dei campi company-dependent è diverso da quello dei campi tradizionali. Capirne il meccanismo evita sorprese durante debug, migrazioni e personalizzazioni.


Archiviazione su ir.property

Nelle versioni fino a Odoo 16 i valori dei campi dipendenti dalla società non sono salvati nella tabella del modello, ma in una tabella di sistema separata chiamata ir.property.

Ogni record nella tabella ir.property collega:

  • Un record specifico (es. prodotto con ID 42)
  • Un campo specifico (es. property_account_income_id)
  • Una società specifica
  • Il valore effettivo associato a quella combinazione

Per questo l'utente non nota nulla: l'ORM si occupa automaticamente di leggere e scrivere su ir.property in base al contesto della società corrente.


Cambiamenti in Odoo 17+

Con Odoo 17 il meccanismo è stato rivisto: i valori company-dependent vengono ora salvati direttamente nella tabella del modello tramite una colonna jsonb, che memorizza le diverse versioni per società in un dizionario JSON. Il risultato è un notevole miglioramento delle performance e query più semplici.


L'interfaccia e l'API per gli sviluppatori rimangono in gran parte invariate, ma le operazioni su larga scala risultano decisamente più veloci rispetto al passato.


Valori predefiniti

I campi company-dependent supportano default specifici per ciascuna società. Se per una società non è stato impostato un valore, il campo ricade sul default definito nella dichiarazione del campo oppure su un default impostato per società tramite ir.property (fino a Odoo 16) o direttamente sul modello (Odoo 17+).


Interazione con l'ORM

Nel contesto dell'ORM di Odoo, l'accesso a un campo company-dependent rispetta sempre la società attiva in self.env.company. Questo comporta che:

  • La lettura restituisce il valore relativo alla società attiva
  • La scrittura aggiorna il valore solo per la società corrente
  • Cambiare il contesto aziendale con record.with_company(company) consente di leggere o scrivere il valore per una società specifica

Casi d'uso aziendali


Il campo company-dependent non è una curiosità tecnica: risolve problemi pratici quotidiani in ambienti multi-entity. Ecco cinque scenari in cui dà il suo meglio.


1. Contabilità: conti ricavi e costi per società

Questo è l'esempio più diffuso in Odoo: i campi property_account_income_id e property_account_expense_id sui prodotti sono company-dependent.


Nella pratica: lo stesso prodotto venduto da due società diverse può dover essere contabilizzato su piani dei conti distinti. Invece di duplicare i prodotti, ogni società imposta i propri conti sullo stesso record prodotto.


2. Vendite e CRM: listini prezzi per società

In un gruppo con più entità commerciali, ciascuna società può adottare strategie di prezzo proprie. Un campo listino company-dependent permette a uno stesso cliente di avere listini di default diversi a seconda della società che crea l'offerta.


Questo mantiene centrale l'anagrafica cliente, lasciando libertà commerciale a ogni entità.


3. Magazzino: metodo di valutazione scorte per società

Gruppi con magazzini in più giurisdizioni possono necessitare metodi di valutazione differenti (FIFO, prezzo medio, ecc.). Applicando la scelta di valutazione come campo company-dependent su prodotto o categoria si evita la duplicazione del catalogo.


4. Produzione: fornitore predefinito per società

Se un prodotto viene rifornito da fornitori diversi a seconda della società, un campo company-dependent di tipo many2one verso res.partner memorizza il fornitore preferito per ciascuna entità senza conflitti.


5. Campi personalizzati per requisiti normativi

Gruppi internazionali spesso devono mantenere riferimenti regolatori diversi per paese (codici HS, classificazioni IVA, ecc.). Un campo Char company-dependent è una soluzione leggera per tracciare queste differenze senza creare varianti del modello.

Creare o personalizzare il campo


Esistono due approcci principali per creare campi company-dependent in Odoo: tramite Odoo Studio o con codice Python in un modulo personalizzato.


Usare Odoo Studio

Odoo Studio permette di aggiungere campi senza programmare, ma non sempre espone una casella di controllo specifica per company_dependent in tutte le versioni. In Odoo 16 e 17 l'opzione è disponibile per alcuni tipi di campo sui modelli standard.


Per controllo completo e scenari avanzati la via tecnica è più affidabile. Studio resta utile per prototipi o casi semplici, ma ha limiti quando servono personalizzazioni profonde.


Approccio tecnico: campi Python

In un modulo personalizzato dichiarare un campo company-dependent è semplice e segue il pattern standard dello sviluppo Odoo in Python:

from odoo import fields, models

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

    x_internal_ref = fields.Char(
        string='Riferimento interno (per società)',
        company_dependent=True,
    )

    x_preferred_carrier_id = fields.Many2one(
        comodel_name='res.partner',
        string='Vettore preferito',
        company_dependent=True,
    )

Aggiungere company_dependent=True alla definizione del campo è sufficiente: l'ORM provvederà al resto.


Impostare valori predefiniti per società

Fino a Odoo 16 si possono definire default a livello di società tramite il modello ir.property, utile per avere un valore sensato per tutti i record di una società senza doverli aggiornare uno per uno:

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

In Odoo 17+ il default può essere memorizzato direttamente sul record del modello ed è accessibile anche dalla definizione del campo.


Campi creati con Odoo Studio e limitazioni

Ricorda che i campi personalizzati creati con Studio richiedono il prefisso x_. Il comportamento company-dependent potrebbe non essere esplorabile direttamente dalla UI di Studio, ma è comunque configurabile tramite il menu tecnico se la modalità sviluppatore è attiva.

Buone pratiche


Gestire i campi company-dependent diventa naturale seguendo alcuni schemi consolidati. Queste pratiche ti faranno risparmiare tempo e problemi.


1. Usalo solo quando il valore deve davvero differire per società

I campi company-dependent aggiungono complessità: se il valore è identico per tutte le società, resta su un campo normale. Riserva company_dependent=True ai casi in cui le entità legali richiedano varianti reali.


2. Testa sempre in un contesto multi-company

Durante sviluppo e test, usa almeno due società attive: problemi che restano nascosti in un'installazione mono-company emergono immediatamente in produzione.


3. Usa with_company() per operazioni cross-company

Se il tuo codice deve leggere o scrivere valori per una società diversa da quella corrente, utilizza record.with_company(target_company). Evita di cambiare manualmente self.env.company senza ripristinare il contesto.


4. Attenzione a esportazioni e importazioni

Le esportazioni riflettono i valori della società dell'utente che le esegue; importando lo stesso file sotto un'altra società imposterai i valori per quella società. Questo comportamento è corretto ma va considerato nelle migrazioni e nei workflow di import.


5. Documenta quali campi sono company-dependent

Gli utenti finali spesso non sanno quali campi variano per società. Una breve nota nella documentazione interna o nei materiali di onboarding evita confusione quando si cambia società e il valore visualizzato cambia.


6. Preferisci Many2one a Char per dati strutturati

Se il valore per società è un riferimento a un altro record (conto, listino, partner), usa un campo Many2one company-dependent invece di salvare solo il nome testuale. Mantieni così il modello dati pulito e faciliti le analisi e i report.


Errori comuni


Anche sviluppatori esperti incontrano difficoltà con i campi company-dependent. Conoscere gli errori tipici evita ore di debug inutili.


Errore 1: dimenticare il contesto aziendale nelle azioni automatiche

Action server e azioni programmate spesso girano con il contesto della prima società del database, non necessariamente quella attesa. Se un'azione legge o scrive su un campo company-dependent, verifica esplicitamente la società con with_company().


Errore 2: confondere il campo con un campo computato

I campi company-dependent non sono campi computati: non si basano su un compute. La variazione per società deriva dallo storage, non da un calcolo. Mescolare compute= con company_dependent=True può creare comportamenti non previsti e errori.


Errore 3: cercare su più società senza criterio

Le ricerche ORM su campi company-dependent restituiscono risultati relativi alla società attiva. Per cercare su tutte le società bisogna interrogare direttamente ir.property (Odoo 16 e precedenti) o gestire opportunamente la colonna jsonb (Odoo 17+). Questo causa spesso incomprensioni in report e estrazioni dati.


Errore 4: non impostare default per tutte le società

Se introduci un campo company-dependent su un sistema in esercizio, i record esistenti saranno False o None per le società che non hanno un valore esplicito. Se la logica aziendale si aspetta un default, applicalo subito via script di migrazione.


Errore 5: confonderlo con i permessi di accesso

I campi company-dependent determinano quale valore viene mostrato, non se il campo è visibile. Se devi nascondere un campo a certe società o utenti, usa regole di record o diritti a livello di campo, non company_dependent.

Conclusione


Il campo dipendente dalla società è una di quelle funzionalità Odoo che sembra invisibile fino al momento in cui serve, poi diventa essenziale. È lo strumento giusto quando lo stesso record deve portare valori diversi per società: contabilità, listini, requisiti normativi o qualsiasi attributo aziendale variabile.


Capire il funzionamento a livello di ORM, sapere quale versione di Odoo ha cambiato il modello di storage e conoscere le insidie comuni ti farà risparmiare tempo nei progetti multi-company. Che lo trovi in una guida per sviluppatori o lo scopra mentre risolvi un problema in produzione, padroneggiare questo tipo di campo è segno di competenza su Odoo.


Se lavori sul framework Odoo e ti serve gestire dati per società in modo elegante, company_dependent=True è probabilmente la soluzione che cercavi.

Serve aiuto per la tua implementazione Odoo?


Noi di Dasolo affianchiamo le aziende nell'implementazione, personalizzazione e ottimizzazione di Odoo su progetti di ogni dimensione, inclusi scenari multi-company complessi. Che tu abbia bisogno di un modello dati su misura, di una strategia per i campi o di un rollout completo, il nostro team unisce competenze funzionali e tecniche per ottenere risultati.


Se hai dubbi sui campi company-dependent o su qualsiasi altra parte della tua implementazione Odoo, siamo a disposizione per aiutarti. Contattaci e parliamo del progetto che vuoi realizzare.

Campo Company-Dependent in Odoo: come funziona e quando usarlo
Dasolo 6 marzo 2026
Condividi articolo
Accedi per lasciare un commento