Multiempresa en OpenERP V6

Este artículo lo he publicado en el blog de OpenERPSpain:

Una de las mejoras esperadas en la versión 6 de OpenERP era el soporte multiempresa o multicompañía incluido en el módulo base. En este artículo vamos a ver como configurar la multicompañía y como restringir el acceso de los usuarios.

Lo primero que necesitamos para trabajar con OpenERP en multicompañía es añadir a nuestro usuario el grupo “Useability / Multi companies”, de esta forma podremos ver los campos referentes a la multicompañía.

Si nuestro usuario tiene asignado este grupo podremos ver el menú /Administración/Compañías, en la ventana de Compañías podremos dar de alta las compañías.

Las diferentes compañías se pueden crear en OpenERP en una estructura de jerárquica. Así, si queremos crear un grupo de empresas llamado A formado por las empresas B y C primero crearemos la compañía A y luego al crear las compañías B y C completaremos el campo compañía padre con la compañía A.

En el menú compañía árbol de compañías podemos ver esta estructura.

Una vez creadas las compañías tenemos que configurar el acceso a los diferentes documentos, pero antes tenemos que tener claro como funciona el control de acceso a cada compañía. Cada usuario tendrá una lista de compañías a las que se le permite el acceso, y entre esas compañías una será la compañía actual.

Si vamos al menú de usuarios podemos ver la compañía actual del usuario:

y la lista de compañías a las que tiene acceso:

De esta forma cuando un usuario se conecte a OpenERP lo hará con una compañía, y no tendrá acceso a los datos de otras compañías aunque esté en su lista de compañías autorizadas.
Importante: Hay que tener cuidado de no trabajar con el usuario admin en multicompañía, ya que este usuario se salta los controles de acceso multicompañía. Así que lo mejor es cuando se cree una compañía crear un usuario administrador de esa compañía con el que hacer toda la configuración.

Ahora que tenemos claro como funciona el control de acceso podemos ver las “reglas de registro”. Las reglas de registro se encuentran en el menú “Administración/Seguridad” y nos sirven para definir quien va a tener acceso a cada documento. Por ejemplo con reglas de registro podríamos hacer que los comerciales solo puedan ver los pedidos que han creado ellos mismos.

Esto nos va a servir en un entorno multicompañía para definir que documentos podemos ver, por ejemplo:

  • Un pedido de venta lo podrémos ver si no está asociado a ninguna compañía o si esta asociado a nuestra compañía o alguna compañía que esté por debajo en el árbol de compañías:

['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]

  • Una empresa la podremos ver si no está asociada a ninguna compañía o está asociada a nuestra compañía o alguna compañía por encima o por debajo en el arbol de compañías:

['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]

Hasta aquí hemos visto como crear las compañías y dar acceso a usuarios y documentos, todavía quedan problemas por resolver para hacer totalmente funcional el sistema multicompañía.

El primer problema que nos encontramos es que la instalación de muchos módulos no está pensada para la multicompañía, así que los objetos creados automáticamente en la instalación de un módulo, como pueden ser las secuencias de pedidos en la instalación del módulo de ventas, sólo se crean para la primera compañía que se ha creado. Lo ideal sería que la creación de esos objetos se crease mediante un wizard, y poder lanzarlo en cada compañía, pero de momento nos toca crear esos datos a mano para cada compañía.

Aunque podemos definir una estructura de árbol en las compañías, la consolidación de la contabilidad no está contemplada en este sistema, aunque tenemos cuentas contables virtuales, pero no una forma automática de crear todas las correspondencias.

Otro problema que se está planteando en el canal irc de openobjects es como podemos restringir diferentes accesos de un usuario para cada compañía, por ejemplo un usuario que tenga acceso a compras y ventas en una compañía pero solo a ventas en otra compañía. De momento tampoco podemos contemplar esto y la solución sería crear dos usuarios distintos.

12 comentarios sobre “Multiempresa en OpenERP V6

  1. alexis

    hola,

    quisiera saber si puedes ayudarme a crear un módulo simple como el del siguiente link:
    http://openerpargentina.com.ar/TutorialDesarrollo

    y filtrar el acceso por director y cada director sólo vea sus jugadores de su equipo y no pueda ver los jugadores de otros equipos.

    Cabe señalar que estoy empezando a desarrollar para open erp.

    saludos

    juano

  2. rmar

    Me podriaas ayudar conuna consulta estoy configurando multicompania pero Me dice que en usuarios configure la compania pero en el forlulario no me aparece la pestana de companias, para poder indicar a que compania pertenece cada usuario , por favor si me das una mano con esto, sera que me falta instalar algun modulo. Muchas gracias

  3. Angel Moya Autor del artículo

    Revisa los permisos del usuario admin.

  4. Ricardo

    Segun lo que expones, no se puede hacer una consolidacion de balances de manera automatica en una compañia Padre?. Tampoco existe la posibilidad de reportes multicompañias?

    En alguna version se solventan estas necesidades?

    Gracias

  5. Dayne

    Hola estoy intentando configurar multicompañia y cree 3 compañias y una de ellas es padre, ademas cree un usuario administrador para cada compañia hija, para desde ese usuario hacer las configuraciones de cada compañia, le di todos los permisos en Control de acceso, pero no puedo hacer las configuraciones de cada modulo desde Configuracion, me sale el siguiente error

    Acceso denegado

    No se ha podido completar la operación por restricciones de seguridad. Contacte por favor con su administrador de sistema.

    (Tipo de documento: ir.values, Operación: create)

    Debo hacer algo mas antes de comenzar a trabajar con esos nuevos usuarios y su compañia???

    Gracias.

  6. José Luis

    Hola Angel:

    Mi consulta es muy básica pero quizás es muy común para muchos de los que nos iniciamos. Por favor, ¿podrías explicarme la lógica en la nomenclatura de la regla? Es decir, por ejemplo en:
    [‘|’,(‘section_id’,’=’,user.context_section_id.id),(‘section_id’,’=’,False)]

    – ¿Cada una de las partes dentro del paréntesis [ ] es una sub-regla?
    – ¿Se unen con un OR o un AND cada una de las declaraciones?
    – ¿Qué es ‘|’? ¿Porqué (‘section_id’,’=’,False)?

    En el ejemplo anterior de tu página mostrabas:
    [‘|’,’|’,(‘company_id.child_ids’,’child_of’,[user.company_id.id]),(‘company_id’,’child_of’,[user.company_id.id]),(‘company_id’,’=’,False)]

    ¿Porqué escribes dos veces ‘|’?

    Te agradeceré mucho la orientación y si sabes de algún lugar en donde pudiera investigar más por mi propia cuenta. Muchas gracias.

  7. José Luis

    Disculpa olvidé lo último…

    En algún sitio leí que aplicando a crm.lead la siguiente regla
    [(‘section_id’,’!=’,user.context_section_id.id)]

    Con ella indico que las oportunidades que no pertenezcan al grupo de ventas de ventas solo pueda leerlas. ¿Es efectivo esto? ¿Porqué?
    Muchísimas gracias.

  8. cornelio

    Hola:
    Sabes como dar acceso a los usuarios solo a ciertas companias?

    Estoy utilizando odoo 8.

    Voy por mis primeros pasos.

  9. Angel Moya Autor del artículo

    Cada ‘|’ es un ‘or’ para dos elementos, como hay mas de dos elementos pongo varios para que se apliquen a cada pareja

  10. Angel Moya Autor del artículo

    Habría que ver la regla completa

  11. Angel Moya Autor del artículo

    En la ficha del empleado tienes el listado

  12. Tomas

    Hola, quiero saber las ventajas y desventajas de usar el openERP como multicompañia, podras ayudarme? Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *