Vous êtes sur la page 1sur 46

IV Jornadas OpenERP Lugo - Cmara de Comercio 26-05-2011

Configuracin multi-compaa con OpenERP 6


Alberto Luengo Cabanillas
alberto@pexego.es

S o lu c io n e s a v a n z a d a s p a r a In t e r n e t

ndice General
Introduccin Pasos iniciales de configuracin Problemtica actual Novedades en la versin 6 Mdulos multi-compaa Propuestas de mejora Bugs confirmados actualmente Dudas y preguntas

Introduccin (I)
Un punto crtico en el mantenimiento y operativa de las empresas que tienen implantada una versin 5 -o anterior- de OpenERP es la gestin eficaz de un entorno multi-compaa, ya que en muchos escenarios les impide trabajar con los niveles de visibilidad que desean o necesitan.
...aparte de que la adaptacin de mdulos para que soportasen un entorno multi-compaa (campo 'company_id', reglas de registro, etc.) se converta en una tarea costosa de implementar y mantener...

Introduccin (y II)
As, uno de los aspectos fundamentales del paso de versiones anteriores a la versin 6 de OpenERP ha sido la gestin nativa de un entorno multi-compaa con la extensin de prcticamente todos los objetos que introducen los distintos mdulos. Adems tambin se ha convertido en un buen argumento comercial de cara a los posibles clientes...

ndice General
Introduccin Pasos iniciales de configuracin Problemtica actual Novedades en la versin 6 Mdulos multi-compaa Propuestas de mejora Bugs confirmados actualmente Dudas y preguntas

Pasos iniciales de configuracin (I)


Crear las compaas que vayamos a necesitar y determinar su jerarqua desde el men 'Administracin->Compaas'. Ejecutar el asistente de 'Configuracin financiera de nueva compaa' bajo el men 'Contabilidad Configuracin Contabilidad Financiera' para cada compaa con el fin de definir sus rboles contables, aos fiscales y perodos. Instalar el mdulo 'nan_account_invoice_sequence' (disponible en la rama de Launchpad lp:openobject-addons/extra-6.0 extra-addons) y configurar los diarios contables para cada compaa, definiendo correctamente sus secuencias de diario nicas (por ejemplo VENTAS/2011/011) y sus secuencias de asientos compartida (1, 2, 3, etc.).
Asimismo configurar los diarios analticos asociados a los anteriores diarios contables...

Pasos iniciales de configuracin (II)


Por cada mdulo que instalemos, tenemos que asegurarnos de aadir los grupos correspondientes que cargue dicho mdulo al usuario administrador (por lo menos).
Esto se debe a que muchos de ellos ahora incorporan la siguiente instruccin: context={'noadmin':True}
P.ej. Mdulo 'account', fichero 'account_security.xml':

<recordid="group_account_user"model="res.groups" context="{'noadmin':True}"> <fieldname="name">Accounting/Accountant</field> </record>

Pasos iniciales de configuracin (III)


Aadir el grupo 'Useability / Multi Companies' a los usuarios que necesiten trabajar con ms de una compaa, para que puedan cambiar entre ellas de forma sencilla desde sus Preferencias.

Pasos iniciales de configuracin (y IV)


Determinar la jerarqua de departamentos de las compaas. Definir la relacin 'usuario<->empleado'.
La relacin 'compaa<->empresa' ya se define automticamente al crear la primera.

Configurar los productos hora de cada uno de los empleados dentro de la pestaa 'Horarios' de su ficha.
Nos ahorrar problemas futuros (por ejemplo, en el momento que un miembro de un proyecto quiera imputar sus horas).

No utilizar el usuario Administrador ms que lo necesario! (ya que no le afectan las reglas de multicompaa).

ndice General
Introduccin Pasos iniciales de configuracin Problemtica actual Novedades en la versin 6 Mdulos multi-compaa Propuestas de mejora Bugs confirmados actualmente Dudas y preguntas

Problemtica actual: Grupos (I)


La clave del xito en la configuracin de un entorno multicompaa depender de lo precisos que seamos creando y combinando las reglas de registro y grupos. Sin embargo, aunque el sistema de grupos permite una gran flexibilidad, muchos de ellos siguen siendo demasiado verticales (o transversales) para muchas reas de negocio, lo cual es un problema que en un entorno multi-compaa se acenta.
P.ej. El caso del grupo 'Useability/Extended View' que aade acceso sobre mens de Administracin y Ventas.

Problemtica actual: Grupos (II)


Otro problema que nos encontramos es que muchos filtros grupales se encuentran todava hardcodeados en las vistas, lo cual dificulta en gran medida una gestin de permisos eficiente.
P.ej. Un caso problemtico es la pestaa de la informacin contable de los proyectos en la que tenemos definido lo siguiente:
<pagestring="Billing"groups="account.group_account_invoice"> <fieldcolspan="4"name="partner_id" on_change="onchange_partner_id(partner_id)"select="1"string="Customer"/> <fielddomain="[('partner_id','=',partner_id)]"name="contact_id" string="InvoiceAddress"/> <fieldname="warn_customer"/> <fieldname="currency_id"select="1"groups="base.group_multi_company" required="1"/> <newline/> (...) <groupcol="3"colspan="4"groups="base.group_extended"> (...) </group> </page>

Problemtica actual: Grupos (III)


Es decir, hasta 3 grupos distintos dentro de una misma pgina, los cuales asignados a un usuario puede habilitarle ms permisos de los necesarios... Esto desde luego tiene lgica en las distintas transiciones de estado por las que puede pasar un objeto (por ejemplo, una factura), pero quizs no en la visibilidad de parte de la informacin que se supone corresponde a un jefe de Proyecto (grupo 'Project /Manager').

Problemtica actual: Grupos (y IV)


Otro problema a mayores de esta verticalidad de grupos es la imposibilidad de realizar acciones o finalizar flujos de trabajo que a priori no parecen relacionados.
Un caso de uso puede ser el de la creacin de productos. Si un usuario por ejemplo es jefe de almacn (grupo 'Warehouse/Manager') y da de alta un producto no va a tener problema; sin embargo necesitar pertenecer al grupo 'Accounting/Manager' (o que otro empleado de este grupo) para completarlo y poderlo vender, cobrar, facturar, etc. Otro caso es el jefe de ventas (grupo 'Sales/Manager') que quiere emitir una factura a partir de su pedido confirmado y necesita pertenecer a los grupos 'Accounting/Invoice', 'Warehouse/User' o 'Sales/User'.

Problemtica actual: Reglas de registro


Las reglas de registro han mejorado con respecto a las versiones anteriores, permitiendo filtros de aplicacin a nivel de grupo u operacin CRUD.
Se ha eliminado el modelo 'ir.rule.group' bidireccionalidad entre grupos y reglas. en favor de la

Soportan agrupacin y permiten establecer basados en campos relacionales, jerarquas, etc.

dominios

Por tanto, y debido a sus caractersticas, constituyen una herramienta muy til en la gestin de entornos multicompaa. Sin embargo, la notacin prefija que utilizan no sea la ms apropiada o intuitiva para el usuario...

Problemtica actual: Visibilidad (I)


Otro problema para los usuarios multi-compaa es que en muchas vistas (sobre todo las de tipo lista) falta el campo 'company_id' lo cual dificulta la gestin de objetos.
Esto es especialmente preocupante en la parte de contabilidad ya que, por ejemplo, si un usuario que puede trabajar con varias compaas quiere revisar el listado de IVAs tiene que entrar en cada uno de ellos para saber a qu compaa estn asociados, al igual que con los periodos, diarios, etc. Se dio tambin en su momento en el listado de productos (vase https://bugs.launchpad.net/openobject-addons/+bug/764855).

Problemtica actual: Visibilidad (II)


Dos IVAs al 18%? qu extrao...

Problemtica actual: Visibilidad (y III)

Ah! Aqu est... Pero ya he tenido que hacer 2 clicks! ufff....

ndice General
Introduccin Pasos iniciales de configuracin Problemtica actual Novedades en la versin 6 Mdulos multi-compaa Propuestas de mejora Bugs confirmados actualmente Dudas y preguntas

Novedades en la versin 6 (I)


Se ha introducido el grupo 'Useability/Multi Companies' creado especficamente para que un usuario pueda gestionar un entorno multi-compaa.
Proporciona acceso a distintos mens de configuracin filtrados por la compaa activa en la que trabaja el usuario. Por lo tanto es indispensable para los usuarios que trabajen con varias compaas (caso tpico de departamento de contabilidad), aunque su asignacin debe realizarse con precaucin y siempre acompaada por las reglas de registro y los controles de acceso pertinentes...

Novedades en la versin 6 (II)


Algunos campos relacionales muchos a uno (many2one) se han transformado en propiedades para poder hacer su valor variable en funcin de la compaa del usuario.
Aunque la mayora ya han venido heredadas de la versin 5 (contabilidad, stock, etc.) hay mdulos como 'product_multi_company' (presente en los addons) que sustituyen ciertos campos por propiedades.
Ej.: property_reserve_and_surplus_account relativa a la cuenta de prdidas y ganancias de las compaas

Novedades en la versin 6 (y III)


Se ha introducido el parmetro 'user_preference' en el contexto que limita de forma sencilla el acceso a un objeto relacionado en funcin de la compaa a la que pertenezca actualmente el usuario.
Por ejemplo, podramos sobreescribir el campo 'context_department_id' y tener filtrados los posibles departamentos a los que puede pertenecer un usuario, mostrando nicamente los que estn asociados a su compaa activa:
classres_users(osv.osv): _inherit='res.users' _columns={ 'context_department_id':fields.many2one('hr.department', 'Departments',context={'user_preference':True}), } res_users()

ndice General
Introduccin Pasos iniciales de configuracin Problemtica actual Novedades en la versin 6 Mdulos multi-compaa Propuestas de mejora Bugs confirmados actualmente Dudas y preguntas

Mdulos multi-compaa (I): Introduccin


Existe una serie de mdulos desarrollados por OpenERP S.A., SYLEAM, Axelor, Zikzakmedia y Pexego (entre otros) que mejoran de alguna u otra manera el comportamiento de ciertos objetos en un entorno multi-compaa. Dichos mdulos estn repartidos entre varias ramas:
lp:openobject-addons/extra-6.0 (multi_company, multi_company_account, multi_company_currency, multi_company_hr_timesheet_sheet, multi_company_price, multi_company_product, multi_company_project, multi_company_sequence, multi_company_share, multi_company_stock, nan_account_extension, product_multi_company...) lp:~pexego/openobject-addons/extra-6.0 (multi_departments) ...o se pueden descargar directamente desde http://apps.openerp.com

Sin embargo, la mayor parte de ellos han quedado obsoletos debido a que la funcionalidad que incorporan ya viene extendida de forma nativa en los mdulos correspondientes de la versin 6. A continuacin veremos unos cuantos categorizados por reas funcionales.

Mdulos multi-compaa (II): Gestin de partners (I)


En un entorno con varias compaas puede ser interesante compartir partners o direcciones entre ellas sin tener que duplicarlos constantemente. Sin embargo, tenemos la problemtica de que las properties contables s o s van a tener que asociarse a una compaa. Para solventar (o agilizar) este problema tenemos los siguientes mdulos:

Mdulos multi-compaa (III): Gestin de partners (II)


Mdulo multi_company_share
bzr branch lp:openobject-addons/extra-6.0 Desarrollado por ZikZakMedia SL. Dependencias: 'product'. Extiende las compaas con dos checkbox de tal forma que -si estn marcados- los partners, direcciones y productos que cree un usuario de dicha compaa no estarn asociados a ninguna.

Mdulos multi-compaa (IV): Gestin de partners (III)


Mdulo multi_partner_accounts
Ya desarrollado y puesto en produccin, pero todava no liberado. Desarrollado por Pexego Sistemas Informticos, S.L. Dependencias: 'account' Aade un asistente para configurar las cuentas debe y haber por defecto de los partners para cada compaa (4300000 y 4100000, por ejemplo) y extiende la compaa con esas dos cuentas para que puedan ser configuradas a posteriori. Crea automticamente la cuenta 430000x y/o 410000x que le corresponda a cada partner en el rbol contable de su compaa, con la particularidad de que se propagarn por el resto del rbol de compaas si es que a dicho partner no se le asocia ninguna compaa. Para ello, tambin aade dos secuencias especficas para clientes y proveedores. El objetivo es tener un nico partner disponible para todas las compaas y tener varias cuentas contables del mismo repartidas entre los rboles de todas ellas.

Mdulos multi-compaa (V): Gestin de partners (y IV)


Mdulo nan_account_extension
bzr branch lp:openobject-addons/extra-6.0 Desarrollado por Nan-Tic Dependencias: 'account' Entre sus otras funcionalidades (principalmente centradas en la gestin contable y la facturacin), incluye la creacin, borrado y actualizacin automtica de las cuentas contables de un partner (configurable por compaa).

Mdulos multi-compaa (VI): Gestin contable (I)


Mdulo nan_account_invoice_sequence
bzr branch lp:openobject-addons/extra-6.0 Desarrollado por Nan-Tic Dependencias: 'account' Separa las secuencias de los diarios contables de la secuencia nica de numeracin que deben seguir los movimientos contables La diferencia con el mdulo 'account_sequence' radica en que en vez de crear un nuevo nmero interno en los movimientos (lo cual requerira cambiar un montn de informes), simplemente convierte el campo relacionado nmero de factura en un campo carcter normal.

Mdulos multi-compaa (VII): Gestin contable (II)


Mdulo analytic_multicurrency
bzr branch lp:openobject-addons/extra-6.0 Desarrollado por CamptoCamp Dependencias: 'account', 'analytic', 'account_analytic_analysis' Permite compartir cuentas analticas entre compaas (incluso si tienen divisas distintas) El propietario de la linea de la cuenta analtica pasa a ser la compaa a la que pertenece su cuenta contable asociada Aade multi-divisa a las lineas analticas (de forma similar a la contabilidad financiera)

Mdulos multi-compaa (VIII): Gestin contable (y III)


Existen ms mdulos como multi_company_account, multi_currency, currency_update_rate que explotaban las posibilidades de la multidivisa en versiones anteriores, pero que, en el caso de los dos primeros, han quedado obsoletos...
Nota: El mdulo 'currency_update_rate' desarrollado por CamptoCamp s ha sido migrado a la versin 6 y actualiza las tasas de conversin entre divisas mediante un cron conectndose a varias APIs pblicas de Internet. Asimismo, soporta multi-compaa.

Mdulos multi-compaa (IX): Gestin de productos


Mdulo product_multi_company
bzr branch lp:openobject-addons/extra-6.0 Desarrollado por OpenERP SA Dependencias: 'product' Sustituye los campos de precio al pblico, precio estndar y precio de venta de los productos por propiedades dependientes de las compaas.

Mdulos multi-compaa (X): Gestin Recursos Humanos


Mdulo multi_departments
bzr branch lp:~pexego/openobject-addons/extra-6.0 Desarrollado por Pexego Sistemas Informticos, S.L. Dependencias: 'hr' Aade un campo many2many de departamentos a los usuarios Aade los campos 'cdigo' y 'usuarios' a los departamentos para mantener la bidireccionalidad Aade una regla de registro para limitar los departamentos del usuario en funcin de su compaa

Mdulos multi-compaa (y XI): Resto de reas y mdulos de la comunidad espaola


El resto de reas funcionales principales (compras, ventas, proyectos, produccin y logstica) ya traen soporte nativo para multi-compaa en sus mdulos principales ('delivery', 'stock', 'sale', etc.).

Por otro lado, prcticamente todos (si no todos) los mdulos de la comunidad espaola (l10n_es_*) han sido adaptados para soportar la gestin multi-compaa.

ndice General
Introduccin Pasos iniciales de configuracin Problemtica actual Novedades en la versin 6 Mdulos multi-compaa Propuestas de mejora Bugs confirmados actualmente Dudas y preguntas

Propuestas de mejora (I)


Refactorizacin del sistema de permisos basado en grupos:
Bien mediante la implementacin de un nivel superior de jerarqua que agrupase a los distintos grupos para facilitar su gestin...
Esto permitira cambios de permisos en bloque basados en los perfiles funcionales que manejase la empresa

...o bien mediante la creacin de grupos a ms bajo nivel para evitar la transversalidad de los mismos. Otra posible solucin temporal es la duplicacin de grupos, eliminando el acceso a los distintos mens que les proporciona el grupo original pero manteniendo los permisos sobre los objetos (o viceversa).
Esto puede resultar til sobre todo en los grupos de Contabilidad (por ejemplo, podramos tener un grupo 'Accounting/Invoice' y un 'Accounting/Invoice No Menus').

Propuestas de mejora (II)


En la clase orm del ncleo del framework de OpenERP no se tiene en cuenta en ninguna operacin CRUD la compaa...
Esto revierte en un incremento del tiempo de ejecucin de ciertas ejecuciones.
Un caso de uso que se ha analizado es la creacin en cascada de cuentas contables para un partner sobre 9 rboles contables de 9 compaas distintas, la cual, con la siguiente modificacin, hemos conseguido reducir de 9-11 mns. aprox. a 2-3 mns.

Propuestas de mejora (III)


classorm(orm_template): @@3635,8+3637,12@@ (...) +company_id=context.get('company_id')andcontext['company_id'].idorvals.get('company_id')and vals['company_id'] (...) cr.execute('selectparent_rightfrom'+self._table+'where'+self._parent_name+'=%sorderby'+ (self._parent_orderorself._order),(parent,)) +ifcompany_id: +cr.execute('selectparent_rightfrom'+self._table+'where'+self._parent_name+'=%sand company_id='+str(company_id)+'orderby'+(self._parent_orderorself._order),(parent,)) +else: +cr.execute('selectparent_rightfrom'+self._table+'where'+self._parent_name+'=%sorderby'+ (self._parent_orderorself._order),(parent,)) (...) cr.execute('selectparent_leftfrom'+self._table+'whereid=%s',(parent,)) +ifcompany_id: +cr.execute('selectparent_leftfrom'+self._table+'whereid=%sandcompany_id='+str(company_id), (parent,)) +else: +cr.execute('selectparent_leftfrom'+self._table+'whereid=%s',(parent,)) (...) cr.execute('update'+self._table+'setparent_left=parent_left+2whereparent_left>%s',(pleft,)) cr.execute('update'+self._table+'setparent_right=parent_right+2whereparent_right>%s',(pleft,)) cr.execute('update'+self._table+'setparent_left=%s,parent_right=%swhereid=%s',(pleft+1,pleft+2, id_new)) +ifcompany_id: +cr.execute('update'+self._table+'setparent_left=parent_left+2whereparent_left>%sand company_id='+str(company_id),(pleft,)) +cr.execute('update'+self._table+'setparent_right=parent_right+2whereparent_right>%sand company_id='+str(company_id),(pleft,)) +cr.execute('update'+self._table+'setparent_left=%s,parent_right=%swhereid=%sand company_id='+str(company_id),(pleft+1,pleft+2,id_new)) +else: +cr.execute('update'+self._table+'setparent_left=parent_left+2whereparent_left>%s',(pleft,)) +cr.execute('update'+self._table+'setparent_right=parent_right+2whereparent_right>%s',(pleft,)) +cr.execute('update'+self._table+'setparent_left=%s,parent_right=%swhereid=%s',(pleft+1,pleft+2, id_new)) (...)

Propuestas de mejora (y IV)


Hacer oficial la gestin multidepartamental para todos los objetos relacionados con los departamentos: proyectos, usuarios, etc.
Como ya hemos visto, por ejemplo -y haciendo referencia a los usuarios- podramos sobreescribir su campo 'context_department_id' y tener filtrados los posibles departamentos a los que puede pertenecer un usuario, mostrando nicamente los que estn asociados a su compaa activa:

classres_users(osv.osv): _inherit='res.users' _columns={ 'context_department_id':fields.many2one('hr.department','Departments', context={'user_preference':True}), } res_users()

Una mejor solucin podra ser la de crear una regla de registro de tal forma que el comportamiento anterior se extendiese a todos los objetos (introducido en el mdulo multi_departments).

ndice General
Introduccin Pasos iniciales de configuracin Problemtica actual Novedades en la versin 6 Mdulos multi-compaa Propuestas de mejora Bugs confirmados actualmente Dudas y preguntas

Bugs confirmados actualmente (I)


https://bugs.launchpad.net/openobject-client-web/+bug/780587 Reportado por Juanjo A. el 10/05/2011 Expone que en el cliente web el cambio de compaa del usuario desde su men de Preferencias no se realiza 'al vuelo' y queda enganchado a la sesin (cosa que no ocurre en el cliente GTK). https://bugs.launchpad.net/openobject-server/6.0/+bug/772419
Reportado por Christophe Chauvet el 28/04/2011 Expone que ciertos campos propiedad del partner no tienen en cuenta la compaa cuando son ledos. Este bug aunque actualmente se encuentra confirmado, en realidad parece que ha quedado obsoleto, ya que las pruebas hechas con dos usuarios (no admin) sobre el campo 'posicin fiscal' de un mismo partner han arrojado resultados satisfactorios...

https://bugs.launchpad.net/openobject-server/+bug/772367
Reportado por Eric Caudal el 28/04/2011 Expone que en los informes de compra de los usuarios asociados a una compaa hija no se imprime el logo de dicha compaa porque el motor RML intenta acceder al logo de la compaa padre.
Ej: Se puede comprobar con la jerarqua de compaas por defecto OpenERP SA Shop1.

Bugs confirmados actualmente (II)


https://bugs.launchpad.net/openobject-server/+bug/768175
Reportado por Ferdinand el 21/04/2011 Expone una posible violacin de la integridad de datos utilizando el cliente web si un mismo usuario inicia varias sesiones simultneas sobre la misma BD, poniendo como ejemplo el caso de que un usuario quiera registrar una llamada de una iniciativa que tenga abierta de la compaa B mientras est trabajando con la compaa A. Propone que la compaa quede enganchada a un identificador de sesin y un usuario en vez de como se maneja actualmente: enganchada al usuario. Ha sido catalogado dentro de la 'Wishlist'.

https://bugs.launchpad.net/openerp-spain/+bug/766573
Reportado por Ana Juaristi el 19/04/2011 Expone que se ejecuta un nmero innecesario de veces los asistentes de configuracin contable general y el propio de la localizacin espaola en el escenario en el que tengamos varias compaas con planes contables distintos.

https://bugs.launchpad.net/openobject-addons/+bug/741518
Reportado por Eric Caudal el 24/03/2011 Expone que aparte del filtrado por compaa que establecen las propiedades presentes en los objetos 'Empresa' o 'Producto' (como cuentas contables, posiciones fiscales, etc) se deberan establecer filtros en funcin de la compaa asociada al producto. Ej: Si un usuario tiene acceso a las compaas A y B y tiene definido un producto de la compaa B, el usuario slo debera poder ver y asociar la cuenta 700xxxx del rbol de la compaa B.

Bugs confirmados actualmente (y III)


https://bugs.launchpad.net/openobject-addons/+bug/735766
Reportado por mvhman el 15/03/2011 Expone que ciertos campos de las categoras de los productos, an siendo propiedades (cuenta de ingresos, cuenta de gastos, etc.) no tienen reglas multicompaa como las plantillas de productos.

https://bugs.launchpad.net/openobject-server/+bug/714471
Reportado por Ferdinand el 07/02/2011 Expone que: suponiendo que tenemos un entorno multi-compaa del estilo OpenERP SA {padre de} Shop1, cuando un usuario (por ejemplo, el administrador) perteneciente a la compaa OpenERP SA crea un nuevo usuario, la compaa que se le asigna por defecto a este nuevo usuario es OpenERP SA. Si ahora le intentamos asignar la compaa Shop1 y guardar, saltar el siguiente error:
Ha ocurrido un error mientras se validaban los campo(s) company_id,company_ids: La compaa seleccionada no est en las compaas permitidasparaesteusuario

ndice General
Introduccin Pasos iniciales de configuracin Problemtica actual Novedades en la versin 6 Mdulos multi-compaa Propuestas de mejora Bugs confirmados actualmente Dudas y preguntas

Dudas y preguntas

Fin
Gracias por su atencin!
alberto@pexego.es info@pexego.es http://www.pexego.es @albertoluengo / @pexego

Vous aimerez peut-être aussi