Pular para o conteúdo

Campo Dependente da Empresa no Odoo: Como Funciona e Quando Usar

Guia prático sobre uma das funcionalidades mais poderosas — e mais mal compreendidas — do modelo de dados do Odoo
6 de março de 2026 por
Campo Dependente da Empresa no Odoo: Como Funciona e Quando Usar
Dasolo
| Nenhum comentário ainda

Introdução


Poucos recursos explicam em detalhe um pequeno recurso do modelo de dados do Odoo que faz muita diferença em cenários com várias empresas: o campo dependente da empresa. Apesar de discreto ao nível da interface, é uma funcionalidade essencial quando várias entidades legais partilham registos, mas precisam de valores distintos por empresa.


Normalmente, um campo num registo tem um único valor visível para todos. O problema surge quando, por exemplo, duas empresas usam o mesmo produto, mas cada uma precisa do seu próprio código interno, ou quando cada entidade exige uma conta contabilística padrão diferente para o mesmo artigo partilhado.


É precisamente para este tipo de situações que serve o atributo company_dependent. Quer esteja a desenvolver módulos Odoo, a personalizar uma instalação ou apenas a estudar a framework, dominar este tipo de campo facilita muito os projetos multi-empresa.

O que é um campo dependente da empresa no Odoo


Um campo dependente da empresa armazena valores separados por empresa no mesmo registo. Assim, um utilizador da Empresa A vê o valor da Empresa A; um utilizador da Empresa B vê outro valor para o mesmo campo e registo.


Ao nível do utilizador, o campo parece-se com qualquer outro — a diferença está na lógica de armazenamento e recuperação feita internamente pelo ORM do Odoo.


Aparência na interface

Na interface do Odoo não existe um sinal visual que indique «este campo varia por empresa». Isso é intencional: a variação é transparente para o utilizador final e a experiência mantém-se simples e directa.


Para o programador, o company_dependent pode ser aplicado a vários tipos de campo — Char, Boolean, Integer, Float, Many2one, entre outros. Basta declarar company_dependent=True na definição do campo para ativar o comportamento no ORM.


No Odoo Studio alguns campos dependentes da empresa já vêm expostos em modelos padrão, como campos contabilísticos associados a produtos. É possível criar campos personalizados dependentes da empresa via Studio, mas o suporte e a visibilidade dessa opção variam entre versões — para controlo total, o desenvolvimento técnico é mais fiável.

Como funciona o campo


Embora pareça simples, o mecanismo de funcionamento difere bastante dos campos normais. Compreender onde e como os valores são guardados evita surpresas ao desenvolver ou depurar personalizações.


Armazenamento em ir.property

Nas versões até Odoo 16, os valores por empresa não ficam na tabela do modelo; são guardados numa tabela do sistema chamada ir.property.

Cada registo em ir.property relaciona:

  • um registo específico (por exemplo, product com id 42),
  • um campo específico (por exemplo property_account_income_id),
  • uma empresa concreta,
  • e o valor associado a essa tripla.

Por isso a operação é invisível ao utilizador: o ORM trata automaticamente de ler e escrever em ir.property consoante a empresa activa no contexto.


Alterações no Odoo 17+

A partir do Odoo 17 o armazenamento foi reformulado: os valores dependentes de empresa passaram a ser guardados na própria tabela do modelo numa coluna jsonb, com um dicionário que mapeia empresa→valor. Esta mudança melhorou performance e simplificou consultas em ambientes com grande volume de dados.


A interface de utilização e a API para desenvolvedores mantêm-se semelhantes, mas as consultas sobre campos dependentes são agora muito mais rápidas em escala.


Valores por defeito

Os campos dependentes por empresa aceitam valores por defeito específicos por empresa. Se uma empresa não definiu um valor para determinado registo, o campo recorre ao default declarado; esse default pode ser configurado por empresa via ir.property (até Odoo 16) ou diretamente no modelo (Odoo 17+).


Interação com o ORM

No ORM do Odoo, o acesso a um campo dependente respeita sempre a empresa activa em self.env.company. Na prática isso significa:

  • leitura devolve o valor para a empresa activa,
  • escrita atualiza apenas o valor da empresa activa,
  • e usar record.with_company(company) permite ler ou escrever para uma empresa específica sem alterar permanentemente o contexto.

Casos de utilização na prática


O campo dependente da empresa resolve problemas práticos em ambientes multi-empresa. Abaixo estão cinco cenários concretos em que este recurso é especialmente útil.


1. Contabilidade: contas de receitas e despesas por empresa

Um exemplo clássico: os campos property_account_income_id e property_account_expense_id em produtos são dependentes da empresa.


Na prática, duas empresas podem vender o mesmo produto mas usar planos de contas diferentes. Em vez de duplicar o produto, cada empresa configura as suas próprias contas — o produto fica partilhado, a contabilidade é específica por empresa.


2. Vendas e CRM: listas de preços por empresa

Num grupo empresarial com várias unidades comerciais, cada empresa pode aplicar estratégias de preço distintas. Um campo de pricelist dependente por empresa permite que o mesmo cliente partilhado tenha listas de preço diferentes conforme a entidade que processa a venda.


Isto mantém o CRM centralizado, permitindo que cada empresa aplique as suas regras comerciais.


3. Inventário: método de valorização por empresa

Em grupos com armazéns em diferentes jurisdições, um produto pode exigir FIFO numa entidade e custo médio noutra. Definir o método de valorização por empresa evita duplicar todo o catálogo de produtos.


4. Produção: fornecedor padrão por empresa

Quando o fornecedor preferencial de um mesmo produto varia conforme a empresa, um campo Many2one dependente por empresa (apontando para res.partner) permite guardar o fornecedor preferido por cada entidade sem conflitos.


5. Campos regulatórios específicos por empresa

Empresas que operam em vários países frequentemente precisam de referências de conformidade distintas (códigos HS, classificações fiscais, etc.). Um campo Char dependente por empresa é uma solução simples e eficaz para guardar essas diferenças sem multiplicar modelos.

Criar ou personalizar o campo


Existem duas formas principais de criar campos dependentes por empresa: via Odoo Studio ou por código Python num módulo personalizado.


Usar Odoo Studio

Odoo Studio facilita a criação de campos sem código, mas nem sempre expõe a opção company_dependent em todas as versões e tipos de campo. Em Odoo 16 e 17 a opção aparece para alguns campos em modelos padrão, mas a sua disponibilidade é inconsistente.


Para cenários complexos e controlo total sobre o comportamento, o desenvolvimento técnico continua a ser a via mais segura.


Abordagem técnica: campos em Python

Num módulo customizado, declarar um campo dependente por empresa é simples e segue um padrão claro na definição do modelo.

Exemplo típico em Python (padrão de desenvolvimento):

Basta adicionar company_dependent=True à declaração do campo; o ORM encarrega-se do resto automaticamente.


Definir valores por defeito por empresa

No Odoo 16 e anteriores pode definir um default por empresa através do modelo ir.property — útil para garantir um valor sensato em todos os registos de uma empresa sem ter de atualizar registo a registo.

Exemplo de como definir o default via API técnica:

No Odoo 17+ os defaults podem ser guardados directamente no registo do modelo e expostos na definição do campo.


Campos do Studio e limitações

Ao criar campos personalizados no Studio lembre-se que o prefixo x_ é obrigatório para campos custom. A opção company_dependent pode não estar visível no interface do Studio, mas normalmente pode ser configurada no menu técnico (modo desenvolvedor) nas Definições.

Boas práticas


Trabalhar com campos dependentes por empresa torna-se rotineiro quando se conhecem os padrões corretos. Seguem-se práticas que evitam dores de cabeça.


1. Use apenas quando for mesmo necessário

Adicionar company_dependent aumenta a complexidade do modelo. Se o valor é igual para todas as empresas, mantenha um campo normal. Reserve este comportamento para campos cuja variação por entidade seja real e frequente.


2. Teste sempre em contexto multi-empresa

Desenvolva e teste com, no mínimo, duas empresas activas. Bugs que não aparecem em um cenário single-company costumam surgir imediatamente num ambiente com várias empresas.


3. Use with_company() para operações entre empresas

Se o seu código precisa de aceder ou alterar valores de outra empresa, use record.with_company(target_company). Evite mudar o company do ambiente manualmente sem restaurá-lo depois.


4. Atenção ao exportar e importar dados

Ao exportar registos, os valores reflectem a empresa do utilizador que faz a exportação. Importar o mesmo ficheiro noutra empresa gravará os valores para essa empresa — comportamento adequado na maioria dos casos, mas que deve ser considerado em migrações e cargas de dados.


5. Documente quais campos são dependentes por empresa

Os utilizadores normalmente não sabem quais campos variam por empresa. Uma nota na documentação interna ou nos materiais de onboarding evita confusões quando mudam de empresa e encontram valores diferentes no mesmo registo.


6. Prefira Many2one a Char para dados estruturados

Quando o valor por empresa é uma referência a outro registo (conta, pricelist, partner), use Many2one em vez de guardar o nome em texto. Mantém o modelo limpo e melhora a qualidade dos relatórios.


Erros frequentes


Mesmo programadores experientes se apanham em armadilhas com campos dependentes por empresa. Identificar as armadilhas comuns poupa muito tempo em depuração.


Armadiilha 1: esquecer o contexto da empresa em ações automatizadas

Ações agendadas e server actions podem correr com a empresa padrão (a primeira da base de dados). Se essas ações leem ou escrevem campos dependentes, verifique explicitamente o contexto de empresa e use with_company() quando necessário.


Armadiilha 2: confundir com campos calculados

Campos dependentes por empresa não são campos computed — a distinção vem do armazenamento, não do cálculo. Tentar combinar compute= com company_dependent=True normalmente não funciona e pode causar erros no framework.


Armadiilha 3: pesquisar entre empresas

Pesquisas ORM padrão só devolvem resultados para a empresa activa. Se precisar de pesquisar valores entre todas as empresas, terá de consultar ir.property diretamente (Odoo 16 e anteriores) ou lidar com a coluna jsonb de forma adequada (Odoo 17+). Esta é uma fonte frequente de confusão em relatórios e extração de dados.


Armadiilha 4: não definir defaults para todas as empresas

Ao introduzir um campo dependente numa instância já em produção, registos existentes podem devolver False/None para empresas que não tenham valor definido. Se a lógica de negócio espera um default, aplique-o via migração de dados para todas as empresas relevantes.


Armadiilha 5: confundir com regras de acesso

Este tipo de campo controla qual valor é mostrado por empresa, não se trata de controlo de visibilidade. Se precisa de esconder um campo para certas empresas ou utilizadores, utilize regras de acesso ou record rules — não company_dependent.

Conclusão


O campo dependente da empresa é uma dessas funcionalidades que passa despercebida até ser necessária, e depois torna-se impossível prescindir dela. Sempre que um registo partilhado precisa de valores diferentes por entidade legal — contabilidade, preços, referências regulatórias ou outras propriedades comerciais — é a ferramenta adequada.


Saber como funciona no nível do ORM, em que versão mudou o armazenamento e quais cuidados ter evita muito trabalho em projetos multi-empresa. Encontrá-lo numa documentação ou enquanto depura um sistema em produção é sintoma de maturidade técnica em Odoo.


Se precisa de gerir dados por empresa de forma limpa na sua instância Odoo, company_dependent=True é a solução indicada.

Precisa de ajuda com a sua implementação Odoo?


Na Dasolo apoiamos empresas na implementação, personalização e optimização do Odoo, incluindo cenários multi-empresa complexos. Quer precise de desenhar um modelo de dados, definir uma estratégia para campos personalizados ou conduzir um rollout completo, a nossa equipa combina conhecimento funcional e técnico para entregar soluções eficazes.


Se tiver dúvidas sobre campos dependentes por empresa ou qualquer outro aspeto da sua implementação Odoo, teremos todo o gosto em ajudar. Contacte-nos e fale connosco sobre o seu projecto.

Campo Dependente da Empresa no Odoo: Como Funciona e Quando Usar
Dasolo 6 de março de 2026
Compartilhar esta publicação
Iniciar sessão para deixar um comentário