Publicidad

lunes, 6 de enero de 2014

Agregar nuevos campos en formularios OpenERP 7 sin necesidad de crear modulos

AGREGAR CAMPOS EN PEDIDO DE VENTA

     OpenERP tiene la facilidad y flexibilidad de poder agregarle nuevos campos a cualquier formulario de cualquier modulo directamente en el servicio sin necesidad de crear un modulo que realice esto, esto es muy eficiente y de mucha ayuda al momento de implementar OpenERP, ya que en ocasiones los campos que contienen los modulo no satisfagan nuestras necesidades, por ejemplo en pedido de venta necesitamos un nuevo campo denominado detalles de la venta este campo contendra hasta 200 caracteres para realizar esto realizaremos lo siguiente:

Entramos a OpenERP mediante nuestro navegador web y nos dirigirnos a la siguiente ruta:

Configuración --> Personalizacion --> Estructura de la Base de Datos --> Modelos




    Al hacer clic nos despliega una lista como vemos en la imagen anterior ahora tenemos que escribir el modulo o la vista que queramos modificar y presionar Enter en este caso buscaremos pedido de venta, y este filtro solo mostrara contenidos con esta descripción  para poder seleccionar el que deseamos modificar, en este caso seleccionamos Pedido de Venta (Sale Order):

openerp sale order

Presionamos editar para agregar nuestro nuevo campo:

  sale order openerp

Ahora nos direccionamos al final de la pagina para agregar el nuevo campo damos clic en Add item:

  add item openerp

Nos mostrara una nueva ventana para que podamos crear nuestro nuevo campo:

  add field openerp


    Los campos en color azul son obligatorios y la descripcion de algunos campos dependera del tipo de campo que querramos crear y por reglas de openerp nos pide que cualquier campo creado de esta manera le anteceda una x_ y de ahi el nombre de nuestro campo, en este caso nuestro nuevo campo sera llamado x_detalles_venta y este es el que se guardara en nuestra base de datos, es muy importante no insertar caracteres especiales o espacios en blanco:

nombre openerp

Etiqueta del campo es el nombre que aparecera en la vista de OpenERP, en este caso se pueden insertar espacios y demas caracteres:

  etiqueta

Lo siguiente es elegir el tipo de campo a crear en este caso seleccionamos char (para conocer mas sobre los tipos de datos leer http://doc.openerp.com/v6.1/developer/03_modules_2.html ):

  tipos datos openerp

Dependiendo del tipo de campo  se habilitaran los campos necesarios en este caso solo se habilita el campo de seleccion del tamaño de caracteres que contendra como maximo nuestro campo en este caso por defecto son 64 caracteres y lo aumentaremos a 200:

  size char

El lado derecho de nuestra ventana tiene algunas opciones para definir nuestro campo :

   Requerido: Si el campo sera obligatorio para los usuarios.
   Solo Lectura: Si el nuevo campo no podra ser modificado por el usuario.
   Puede ser buscado: Aqui definimos si openerp puede crear filtros de busqueda para nuestro nuevo campo.
   Traducible: Define si el usuario pueda modificar la etiqueta del campo para adaptarlo a otro idioma.
   Grupos: Define reglas para que el nuevo campo sea utilizable solo para algunos grupos si asi lo deseamos.

  booleans


    Ahora guardamos este campo y guardamos la edicion del Modelo, ya una vez guardado los cambios solo queda un ultimo paso para poder hacer visible nuestro campo, editar la vista que deseamos, para esto activamos nuestra vista desarrollador de openerp, damos clic en la parte superior derecha de nuestra pantalla en donde se muestra el usuario logeado y despues clic en About OpenERP:

login

Nos abrira una nueva ventana seleccionamos Active the developer mode:

  activar modo desarrollador

    Ahora para poder insertar nuestro nuevo campo tenemos que conocer despues de que campo insertarlo para ello colocamos el mouse en el campo y nos mostrara un pequeño recuadro con el nombre del campo en este caso se colocara el campo despues del campo referencia del cliente:

detalles

    Como ven en la imagen anterior el recuadro tiene la descripcion del campo ahora anotamos client_order_ref, para poder recordar donde insertar nuestro nuevo campo, bien ahora nos colocamos en la parte superior izquierda de la pantalla y seleccionamos editar vista formulario y nos desplegara u recuadro con el codigo xml de nuestra vista :

xml

 Ahora buscaremos el campo anteriormente guardado client_order_ref y una ves localizado insertamos el siguiente fragmento de codigo: <field name="x_detalles_venta"/>
 En la opcion name se escribiria entonces el nombre del campo que creamos en el modelo de datos, guardamos la edicion y refrescamos nuestra pagina. Ahora podemos observar nuestro nuevo campo justo despues del campo Referencia del cliente:

  FINALEso es todo espero sea de su ayuda y no se olviden comentar ...
     

22 comentarios:

  1. Muchas gracias, me ha servido de mucha utilidad.

    He sido capaz de agregar un campo que necesitábamos al formulario de clientes.

    Un saludo,

    Luis

    ResponderBorrar
  2. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  3. Compañero, pero como podemos hacerlo con openobject, por que cuando se actualice openerp todo esto se pierde.....

    ResponderBorrar
  4. Al reiniciar el servidor se pieden los cambios ejectuados,como ponerlos de manera permanente??? no importanto cuanta veses se reinicie el servidor

    ResponderBorrar
  5. Y si quisiera ligar un campo nuevo a otro campo igual creado por mi pero de otro módulo? por ejemplo un dato que contenga un campo de un producto, y que la info de ese campo me aparezca en una orden de producción?

    ResponderBorrar
    Respuestas
    1. Este tipo de campos se hace por Programacion, con este metodo no le serviria.

      Saludos

      Borrar
  6. Muchas gracias por su articulo me ha servido de mucha utilidad.

    ResponderBorrar
  7. Como podria agregar el campo Cedula de identidad o RUC de la empresa, persona, cliente y proveedor de manera permanente.

    ResponderBorrar
    Respuestas
    1. Estos cambios del tutorial son permanentes, en ocasiones se llegan a quitar de la Vista, pero volviéndolos a añadir funcionan.

      Borrar
  8. Hola German, y gracias por tu blog. Tengo la duda de que como crear un campo en la vista que deseo pero no en la primera ventana, sino en una de las que siguen. Por ejemplo en el caso de tu post...si quisiera crear ese campo no en "Linea del pedido" sino en "otra informacion", pues cuando abro el Edit form view, solo veo los campos de la ventana primera...es decir de "Linea de pedido".......gracias.

    ResponderBorrar
    Respuestas
    1. Lo mas importante es identificar el campo o lugar donde quieres poner los nuevos, lo segundo encontrar la vista que contiene este espacio, puedes consultar las Vistas en Configuracion-->Interfaz de Usuario --> Vistas.

      Borrar
  9. Buenas tardes, gracias por el blog que ya he visitado otras entradas y me está ayudando mucho.
    Una pregunta, si desara añadir un campo relacional "código" en la línea de averías para buscar productos por su código, me bastaría con crear el one2many, indicándole el campo de product.product que me interesa y luego dándole a "puede ser buscado", o tendría que hacerlo dentro de los ficheros .py?

    Espero haberme explicado. La idea es poder buscar productos en dos campos separados, uno por el código [nuevo campo] y otro por el ya exsistente "product_id", y no tengo claro del todo como haverlo.

    Gracias por adelantado,

    Oriol

    ResponderBorrar
    Respuestas
    1. Que tal amigo, creo que tu necesitas poder encontrar productos por otro campo diferente a su nombre o referencia, para esto existen las vistas de busqueda, ahora si quieres limitar las busquedas de cada campo usas dominios en la vista que vayas a crear.

      Esto es un poco avanzado, te recomiendo que leas estas entradas:
      http://poncesoft.blogspot.mx/2014/01/herencia-de-vistas-openerp.html
      http://poncesoft.blogspot.mx/2014/01/como-funciona-la-herencia-en-openerp.html
      http://poncesoft.blogspot.mx/2014/04/introduccion-en-la-declaracion-de.html

      Borrar
    2. Saludos, no es exactamente una vista de búsqueda lo que necesito pues es demasiado complejo.
      Actualmente OpenERP en la linea de avería de un producto se puede usar un campo de autocompletar que busca el nombre o el código de un producto, este campo es product_id.
      Yo quiero otro campo, llámese como sea, que me sirva para buscar únicamente por referencia, dentro de la misma línea. Por eso preguntaba si con crear un nuevo campo one2many relacionado con el "default_code" del producto me serviría y, si era si, cómo tendría que ser la declaración del nuevo campo.
      El hecho es que cuando se entren productos en la línea, se pueda hacer mediante un campo u otro de forma indistinta de manera que el usuario pueda entrar el producto autocompletando el campo del código o bien el del producto.
      Gracias de nuevo, puesto que con tu ayuda he aprendido a crear vistas heredadas.

      Borrar
  10. German, gracias por tú blog. Muy buena ayuda!!
    Quiero añadir el campo "Referencia interna" (default_code) a la vista de tipo arbol de productos en Odoo versión 8. Es curioso. En la versión Openerp estaba pero en la versión 8 no. Para hacer esto lo he añadido en la vista "product.template.product.tree". Sin hacer más me saca el campo pero no puedo ordenar los registros por este campo.
    ¿Como puedo conseguir ordenar los registros por el campo "Referencia interna"?
    Supongo que este cambio lo perderé en cualquier actualización. ¿Es así? ¿Como tendría que hacer para no perderlo?

    Muchas gracias por tus comentarios. Un saludo.

    ResponderBorrar
    Respuestas
    1. Para el orden de los campos tendrias que hacerlo por un modulo externo y definir la propiedad _order = "campox" en la herencia de la clase, ahora para no perder tus cambios en vistas, tendrias que crear una vista independiente y solo referenciar la que estas modificando, esto lo haces en configuracion -> tecnico -> interfaz de usuario -> Vistas -> Aqui creas la tuya para el modelo de product.template.

      Borrar
  11. German,
    Como puedo hacer para imprimir un campo tipo html que contenga campos con de tipo field.
    Ejm.
    Estimado Sr. ${o.partner_id.name}, la presente es para saludarlo.... etc.

    La idea es que este campo de tipo html me sirva como una plantilla y en la impresion salga lso datos como una correspondencia de cartas, memos, contrats, etc.
    Agradezco tu ayuda.

    ResponderBorrar
    Respuestas
    1. Odoo maneja este tipo de datos en los correos, podrias tomarlo como ejemplo o puedes investgarte la libreria python jinja.

      Saludos

      Borrar