Imprimiendo etiquetas con Odoo, zpl y qz

15 de julio de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Para imprimir etiquetas en un entorno industrial (ya sea en un depósito o en una fábrica), uno cuenta con impresoras especializadas para imprimir etiquetas. Y dichas impresoras soportan (la mayoría) un lenguaje llamado ZPL (Zebra Printing Language). La verdad imprimir reportes q-web en un entorno industrial no es recomendable. Solo vean al operario de un deposito descargar un PDF e imprimirlo en una etiqueta, o imprimir multiples etiquetas. No les va a ir muy bien.

Ahora, como hacemos para conectar Odoo (alojado en un server remoto) para imprimir en una impresora de etiquetas la cual es muy probable que se encuentre conectada con un cable USB a la computadora del usuario (es la configuración que use para implementar esta solución en una fábrica)?

Una opción es utilizar qz. QZ es una aplicación que se instala en la computadora del usuario (que se conecta por ejemplo via USD con la impresora). Y uno utiliza una librería de JavaScript para, desde Odoo.

Para eso desarrollamos un módulo llamado qz-tray-odoo. Este módulo implementa la conección con la aplicación de qz en la computadora del usuario, permitiendole imprimir etiquetas en una impresora ZPL. Este módulo es un módulo base. Extendiendolo uno puede imprimir etiquetas desde múltiples modelos en Odoo (por ejemplo, stock.move.line o stock.picking). E imprimir los contenidos que necesite. Instalando solo este módulo no soluciona sus necesidades de impresión de etiquetas. Se necesita extender el módulo para satisfacer los requerimientos de su workflow de trabajo.

Como se usa qz-tray-odoo

El primer paso es instalar en la computadora del usuario qz. Solo deben descargar qz, e instalarlo. Luego instalar el módulo qz-tray-odoo. Y cuenta con un ejemplo, si clickeamos en el menú producto, veremos que tenemos un botón llamado "Imprimir Etiqueta".


Si clickeamos en "Imprimir Etiqueta" se abrirá una nueva pestaña en su navegador con una nueva página donde se le preguntará la cantidad de copias y el nombre de la impresora (por lo general es ZDesigner)


Si uno clickea en "Print" verá un pop-up el cual es lanzado por la aplicación de qz (dicho pop-up puede ser removido si uno compra soporte de qz, lo cual es muy recomendado dada la naturaleza compleja de la operación con etiquetas en un entorno distribuido). Uno clickea en Allow las veces necesarias, y se imprime la etiqueta.


Y se imprime una etiqueta que formatee a las apuradas. Eso a modo de ejemplo

Como extender qz-tray-odoo para imprimir otros modelos

El módulo crea un mixin, qz.tray. Entonces, podemos extender cualquier modelo agregando el mixin. Por ejemplo, a modo de demo en el módulo extendemos el modelo product.template

class ProductTemplate(models.Model):
  _name = 'product.template'
 _inherit = ['product.template','qz.tray']​

    

Y luego definimos a modo de ejemplo un método, llamado print_label (la verdad se pueden imprimir etiquetas en cualquier momento, por ejemplo cuando se valida una transferencia). Y cuando se clickea este boton queremos imprimir una etiqueta que diga "Hola Mundo". Para ello debemos hacer:

def print_label(self):
 self.zpl_code ='^XA^FDHola Mundo^XZ~PS'
 res_id = '?res_id=%s&res_model=product.template'%(self.id)
return {
'type': 'ir.actions.act_url',
'target': 'new',
'url': self.print_url + res_id,
}

En este ejemplo, definimos en la variable zpl_code del objeto el código ZPL que necesitamos imprimir. Acto seguido, del método retornamos una acción que abre un nuevo tab en el que se navega a la url indicada por la variable print_url (definida por el mixin) más una serie de parametros entre los que se encuentra el modelo más el ID del objeto del que queremos imprimir la etiqueta

Conclusiones

Como dijimos anteriormente el módulo qz-tray-odoo es un módulo base que necesita ser extendido para usarlo en un ambiente de producción, pero le brinda una solución a la problemática de imprimir etiquetas en una fábrica o depósito.

Por otra parte, este módulo debe ser utilizado por desarrolladores, no por usuarios finales ya que su extensión requiere de conocimientos de programación. Y se necesita conocer ZPL (para ello recomendamos utilizar los tutoriales de labelary.com). 

También el módulo está en sus estadios iniciales. Debemos hacer que en lugar de abrir una nueva ventana invoque un pop-up, y tambien permita seleccionar la impresora desde un combo. También es necesario mejorar el procesamiento de errores. El módulo funciona con las versiones 15 y 16 de Odoo, para la versión 14 necesita modificaciones debido a que cambia la forma en la que se incluyen las librerías de Javascript.

Por último, recomendamos comprar el soporte de qz. Los entornos de impresión de etiquetas en una fábrica tienden a ser caóticos debido a que las versiones de Windows de los usuarios, y los drivers no son precisamente estandarizados. Y brindar soporte a esto es demandante. Una forma de aliviar este trabajo es mediante el servicio de soporte de qz.


Gustavo Orrillo 15 de julio de 2023
Compartir
Archivar
Identificarse dejar un comentario