Ir al contenido

Campo Dependiente de Empresa en Odoo: Funcionamiento y Uso

Una guía práctica sobre una de las características más útiles pero mal entendidas en el modelo de datos de Odoo
6 de marzo de 2026 por
Campo Dependiente de Empresa en Odoo: Funcionamiento y Uso
Dasolo
| Sin comentarios aún

Introducción


Una de las características menos comentadas en el modelo de datos de Odoo es el campo dependiente de la empresa. Es un pequeño atributo que marca una gran diferencia una vez que comienzas a trabajar con configuraciones de múltiples empresas.


En la mayoría de las configuraciones de Odoo, un campo en un registro contiene un solo valor que todos los usuarios de la base de datos pueden ver. Pero, ¿qué sucede cuando dos empresas comparten el mismo catálogo de productos y cada empresa necesita su propio código de referencia interno? ¿O cuando diferentes empresas necesitan diferentes cuentas predeterminadas en el mismo producto?


Ese es exactamente el problema que resuelve el atributo company_dependent. Ya sea que estés desarrollando en Odoo, personalizando Odoo, o simplemente explorando el marco de Odoo, entender este tipo de campo te dará una ventaja real en proyectos de múltiples empresas.

¿Qué es un campo dependiente de la empresa en Odoo?


Un campo dependiente de la empresa es un campo que almacena un valor separado por empresa, en el mismo registro. Cuando un usuario perteneciente a la Empresa A lee el campo, ve el valor de su empresa. Cuando un usuario de la Empresa B lee el mismo registro, ve un valor diferente.


Desde fuera, parece y se comporta como un campo normal. Los usuarios interactúan con él de la misma manera en la interfaz de Odoo. La magia ocurre tras bambalinas en el ORM de Odoo.


Cómo Aparece en la Interfaz

En la interfaz de Odoo, un campo dependiente de la empresa se ve idéntico a un campo regular. No hay un indicador visible que le diga a un usuario que el valor que ve es específico de la empresa. Esto es intencional: el comportamiento es transparente para los usuarios finales.


Desde la perspectiva de un desarrollador, este es uno de los tipos de campo de Odoo que se puede aplicar a muchos tipos base: Char, Boolean, Integer, Float, Many2one, y otros. El atributo company_dependent=True es lo que activa este comportamiento en el ORM de Odoo.


En Odoo Studio, algunos campos dependientes de la empresa ya están expuestos en modelos estándar (como campos relacionados con productos para cuentas). También se pueden crear campos dependientes de la empresa personalizados, aunque el soporte de Studio para este atributo específico es limitado en algunas versiones de Odoo.

Cómo funciona el campo


Bajo el capó, los campos dependientes de la empresa funcionan de manera muy diferente a los campos regulares. Comprender el mecanismo ayuda a evitar sorpresas al construir o depurar personalizaciones de Odoo.


Almacenamiento en ir.property

En Odoo 16 y versiones anteriores, los valores de los campos dependientes de la empresa no se almacenan en la tabla de base de datos del modelo. En cambio, se almacenan en una tabla del sistema separada llamada ir.property.

Cada entrada en ir.property vincula:

  • Un registro específico (por ejemplo, producto con ID 42)
  • Un campo específico (por ejemplo, property_account_income_id)
  • Una empresa específica
  • El valor real para esa combinación

Por eso los valores parecen transparentes para los usuarios: el ORM recupera y escribe en ir.property automáticamente según el contexto de la empresa actual.


Cambios en Odoo 17+

A partir de Odoo 17, el mecanismo de almacenamiento fue refactorizado. Los campos dependientes de la empresa ahora se almacenan directamente en la tabla del modelo utilizando una columna jsonb, con los valores de la empresa almacenados como un diccionario JSON. Esto mejora significativamente el rendimiento y simplifica las consultas.


La interfaz y la API para desarrolladores permanecen iguales, pero las consultas sobre campos dependientes de la empresa ahora son mucho más rápidas a gran escala.


Valores predeterminados

Los campos dependientes de la empresa admiten valores predeterminados específicos de la empresa. Cuando no se ha establecido explícitamente un valor para una empresa dada, el campo vuelve al valor predeterminado definido en el propio campo. Este valor predeterminado también se puede establecer por empresa a través del modelo ir.property (Odoo 16 y anteriores) o directamente en el modelo (Odoo 17+).


Interacción con el ORM

En el contexto del ORM de Odoo, acceder a un campo dependiente de la empresa siempre respeta la empresa actual en el entorno (self.env.company). Esto significa:

  • Leer el campo devuelve el valor para la empresa activa
  • Escribir en el campo solo actualiza el valor para la empresa activa
  • Cambiar el contexto de la empresa (record.with_company(company)) te permite leer o escribir valores para una empresa específica

Casos de uso empresarial


El campo dependiente de la empresa no es solo una curiosidad técnica. Resuelve problemas reales y cotidianos en configuraciones de Odoo con múltiples empresas. Aquí hay cinco escenarios comunes donde realmente se gana su lugar.


1. Contabilidad: Cuentas de Ingresos y Gastos por Empresa

Este es el ejemplo más común en Odoo tal como viene. Los campos property_account_income_id y property_account_expense_id en los productos son dependientes de la empresa.


En la práctica: La Empresa A vende el mismo producto que la Empresa B, pero cada empresa tiene un plan de cuentas diferente. En lugar de duplicar el registro del producto, cada empresa solo configura sus propias líneas contables. El producto es compartido; la lógica contable no lo es.


2. Ventas y CRM: Listas de Precios por Empresa

En un grupo que opera múltiples entidades de ventas, cada empresa puede utilizar diferentes estrategias de precios. Con un campo de lista de precios dependiente de la empresa, un registro de cliente compartido puede llevar diferentes listas de precios predeterminadas dependiendo de qué empresa esté procesando la venta.


Esto mantiene los datos del CRM centralizados mientras permite que cada empresa aplique sus propias reglas comerciales.


3. Inventario: Método de Valoración de Stock por Empresa

Algunos grupos operan almacenes a través de múltiples entidades legales con diferentes regulaciones locales. Un producto puede requerir un costo FIFO en un país y un costo promedio en otro. Usar campos dependientes de la empresa en el producto o categoría evita duplicar todo el catálogo de productos.


4. Fabricación: Proveedor Predeterminado por Empresa

Cuando un producto compartido se compra a diferentes proveedores dependiendo de la empresa, un campo many2one dependiente de la empresa que apunta a res.partner puede contener el proveedor preferido por entidad. Cada empresa ve su propio proveedor preferido sin ningún conflicto.


5. Campos Personalizados para Datos Regulatorios

Los grupos que operan en múltiples países a menudo necesitan almacenar referencias de cumplimiento específicas de cada país en registros compartidos. Por ejemplo, un producto podría necesitar un código HS o una clasificación fiscal diferente por jurisdicción. Un campo dependiente de la empresa es una forma limpia y de bajo costo para manejar esto sin crear variantes de modelo.

Creación o personalización del campo


Hay dos formas principales de crear campos dependientes de la empresa en Odoo: utilizando Odoo Studio o escribiendo código Python directamente.


Uso de Odoo Studio

Odoo Studio te permite crear campos sin necesidad de código. Sin embargo, Studio no expone un interruptor dedicado para company_dependent en todas las versiones. En Odoo 16 y 17, la opción está disponible en algunos tipos de campo al crear nuevos campos en modelos estándar.


Si necesitas control total sobre este atributo, el desarrollo técnico es el enfoque más confiable. Studio es un buen punto de partida para casos más simples, pero tiene límites cuando se trata de escenarios avanzados de personalización de Odoo.


Enfoque Técnico: Campos de Python

En un módulo personalizado de Odoo, declarar un campo dependiente de la empresa es sencillo. Este es el patrón estándar utilizado en el desarrollo de campos de Python en Odoo:

from odoo import fields, models

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

    x_internal_ref = fields.Char(
        string='Referencia Interna (por empresa)',
        company_dependent=True,
    )

    x_preferred_carrier_id = fields.Many2one(
        comodel_name='res.partner',
        string='Transportista Preferido',
        company_dependent=True,
    )

Agregar company_dependent=True a cualquier declaración de campo es todo lo que se necesita. El ORM maneja el resto automáticamente.


Estableciendo Valores Predeterminados por Empresa

En Odoo 16 y versiones anteriores, puedes establecer un valor predeterminado a nivel de empresa a través del modelo ir.property. Esto es útil cuando deseas un valor predeterminado razonable para todos los registros en una empresa, sin establecerlo registro por registro:

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

En Odoo 17+, el valor predeterminado se almacena directamente en el registro del modelo y también es accesible a través de la definición del campo.


Campos y Limitaciones de Odoo Studio

Al trabajar con campos de Odoo Studio, ten en cuenta que el prefijo x_ es obligatorio para los campos personalizados. El comportamiento dependiente de la empresa puede no ser visible en la interfaz de usuario de Studio, pero aún se puede configurar desde el menú técnico en Configuración si el modo desarrollador está activo.

Mejores prácticas


Trabajar con campos dependientes de la empresa es sencillo una vez que conoces los patrones. Aquí están las prácticas que te ahorrarán tiempo y evitarán dolores de cabeza.


1. Úsalo Solo Cuando los Valores Realmente Difieran por Empresa

Los campos dependientes de la empresa añaden complejidad. Si el valor es el mismo en todas las empresas, utiliza un campo regular. Reserva company_dependent=True para campos donde diferentes empresas realmente necesitan diferentes valores en registros compartidos.


2. Siempre Prueba en un Contexto de Múltiples Empresas

Al construir o probar características que involucran campos dependientes de la empresa, siempre prueba con al menos dos empresas activas. Es fácil pasar por alto problemas en una configuración de una sola empresa que surgirán inmediatamente en producción.


3. Usa with_company() para Operaciones entre Empresas

Si tu código necesita leer o escribir valores de campos dependientes de la empresa para una empresa diferente a la actual, utiliza record.with_company(target_company). Evita cambiar manualmente la empresa del entorno sin restaurarla.


4. Ten Cuidado con las Exportaciones e Importaciones

Al exportar registros que contienen campos dependientes de la empresa, los valores exportados reflejan la empresa del usuario que realiza la exportación. Importar el mismo archivo bajo un contexto de empresa diferente establecerá los valores para esa empresa. Este comportamiento es a menudo el correcto, pero sé explícito al respecto en los flujos de trabajo de migración e importación de datos.


5. Documenta Qué Campos Son Dependientes de la Empresa

Los usuarios finales rara vez saben qué campos son dependientes de la empresa. Una breve nota en tu documentación interna de Odoo o en los materiales de incorporación puede ser de gran ayuda. Previene la confusión cuando un usuario cambia de empresa y ve diferentes valores en el mismo registro.


6. Prefiere Many2one Sobre Char para Datos Estructurados

Cuando el valor por empresa es una referencia a otro registro (cuenta, lista de precios, socio), utiliza un campo dependiente de la empresa Many2one en lugar de almacenar un nombre como texto. Esto mantiene limpio el modelo de datos y hace que los informes sean más fiables.


Errores comunes


Incluso los desarrolladores experimentados de Odoo se encuentran con problemas relacionados con campos dependientes de la empresa. Saber qué observar evitará perder tiempo en depuración.


Trampa 1: Olvidar el Contexto de la Empresa en Acciones Automatizadas

Las acciones programadas y las acciones del servidor a menudo se ejecutan en un contexto donde la empresa es la primera empresa en la base de datos, no necesariamente la que esperas. Si tu acción automatizada lee o escribe un campo dependiente de la empresa, verifica el contexto de la empresa de manera explícita. Usa with_company() para estar seguro.


Trampa 2: Suponer que el Campo Se Comporta Como un Campo Computado

Los campos dependientes de la empresa no son campos computados. No tienen un método compute. La variación por empresa proviene del almacenamiento, no del cálculo. Intentar agregar compute= junto a company_dependent=True no funcionará como se espera y puede causar errores en el marco de Odoo.


Trampa 3: Buscar Entre Empresas

Las búsquedas estándar de ORM en campos dependientes de la empresa solo devuelven resultados que coinciden con el contexto de la empresa actual. Si necesitas buscar entre todas las empresas, debes consultar ir.property directamente (Odoo 16 y versiones anteriores) o manejar la columna jsonb con cuidado (Odoo 17+). Esta es una fuente común de confusión en el trabajo de informes y extracción de datos.


Trampa 4: No establecer valores predeterminados para todas las empresas

Cuando introduces un campo dependiente de la empresa en un sistema en vivo, los registros existentes devolverán False o None para cualquier empresa que no haya establecido explícitamente un valor. Si tu lógica empresarial espera un valor predeterminado, configúralo proactivamente para todas las empresas relevantes utilizando un script de migración de datos.


Trampa 5: Confundirlo con derechos de acceso

Los campos dependientes de la empresa controlan qué valor se muestra, no si el usuario puede ver el campo en absoluto. Si necesitas ocultar un campo completamente de ciertas empresas o usuarios, eso es un trabajo para las reglas de registro o los derechos de acceso a nivel de campo, no para company_dependent.

Conclusión


El campo dependiente de la empresa es una de esas características en Odoo que se siente invisible hasta que la necesitas, y luego se vuelve indispensable. Es la herramienta adecuada para cualquier situación en la que el mismo registro necesite llevar diferentes valores entre empresas: configuraciones contables, reglas de precios, referencias regulatorias o cualquier atributo específico del negocio que varíe según la entidad legal.


Entender cómo funciona a nivel de ORM, qué versión de Odoo cambió el modelo de almacenamiento y qué trampas evitar te ahorrará un tiempo significativo en proyectos multi-empresa. Ya sea que lo encuentres en una guía de desarrollador estándar de Odoo o lo descubras mientras depuras un sistema en vivo, conocer este tipo de campo es una marca de verdadera experiencia en Odoo.


Si estás construyendo sobre el marco de Odoo y necesitas manejar datos por empresa de manera limpia, company_dependent=True es la respuesta que estabas buscando.

¿Necesita ayuda con su implementación de Odoo?


En Dasolo, ayudamos a las empresas a implementar, personalizar y optimizar Odoo en todas las escalas y configuraciones, incluyendo configuraciones complejas de múltiples empresas. Ya sea que necesites un modelo de datos a medida, una estrategia de campos personalizada o un despliegue completo de Odoo, nuestro equipo tiene la profundidad técnica y funcional para hacerlo bien.


Si tienes preguntas sobre campos dependientes de la empresa o cualquier otro aspecto de tu implementación de Odoo, estamos felices de ayudar. Contáctanos y hablemos sobre lo que estás construyendo.

Campo Dependiente de Empresa en Odoo: Funcionamiento y Uso
Dasolo 6 de marzo de 2026
Compartir esta publicación
Iniciar sesión para dejar un comentario