Saltar al contenido

Reportes QWEB

🐍 DESARROLLO · ODOO · QWEB

Reportes QWeb en Odoo

QWeb es el motor de plantillas de Odoo: combina HTML, CSS y expresiones Python para generar facturas, cotizaciones, etiquetas y cualquier documento. Genera salida en PDF, HTML o texto plano, y se asocia a un modelo para invocarse desde botones, menús o acciones automáticas.

📄
QWEB-PDF
Listo para imprimir / enviar

🌐
QWEB-HTML
Vista previa en el navegador

📝
QWEB-TEXT
Texto plano para integraciones

🎨
PERSONALIZABLE
HTML + CSS + condicionales

1
¿Qué son los reportes QWeb?

Son el sistema principal para generar documentos en PDF, HTML o texto plano a partir de plantillas QWeb — un motor de renderizado de vistas que usa sintaxis XML.

Características principales

🐍 HTML + Python
Combinan HTML con expresiones dinámicas: t-esc, t-foreach, t-if.

📋 Vistas para impresión
En esencia, son vistas QWeb diseñadas para imprimirse o exportarse.

🔗 Asociadas a un modelo
Se ejecutan desde botones, menús o acciones automáticas del modelo objetivo.

📑 Documentos típicos
Facturas, cotizaciones, órdenes de compra, etiquetas, recibos.

2
Tipos de reportes QWeb

Tipo Salida Caso de uso
qweb-pdf PDF Facturas, cotizaciones, compras — listo para imprimir o enviar por email.
qweb-html HTML Vista previa en el navegador — ideal mientras desarrollas y ajustas el diseño.
qweb-text Texto plano Integraciones o reportes que no necesitan formato gráfico.

3
Crear el archivo de acción del reporte

Vamos a crear un reporte personalizado dentro del modelo de ventas (sale.order). En el módulo personalizado agregamos report/ir_actions_report.xml:

Archivo XML con la definición de la acción del reporte

Campos clave del registro:

Campo Descripción
name Nombre de la acción visible en la UI (“Reporte Ventas”).
model Nombre técnico del modelo (sale.order).
report_type Tipo: qweb-pdf, qweb-html o qweb-text.
report_name Identificador técnico interno del reporte.
report_file Nombre de la plantilla que define la estructura.
print_report_name Nombre dinámico del archivo (acepta condicionales con campos del registro).
binding_model_id Modelo desde el que se invocará el reporte.
💡 NOMBRE DE ARCHIVO DINÁMICO
En este ejemplo, print_report_name usa una condicional: si el estado es Cotización (draft) o Cotización enviada (sent), el archivo se llama “Cotización – [folio]”; en otro caso, “Venta – [folio]”.

4
Crear la plantilla QWeb

La plantilla con id report_sale_order se crea en report/ir_actions_report_template.xml. Estructura básica:

Plantilla básica del reporte con html_container

Al instalar el módulo, el modelo sale.order ya tiene disponible la acción Reporte Ventas:

Acción Reporte Ventas disponible en el modelo de cotizaciones

Al pulsar el botón se descarga el reporte. Con la plantilla básica es solo una página en blanco — pero ya estamos enganchados al flujo:

Descarga del reporte con la plantilla básica (página en blanco)

5
Usar la plantilla external_layout para el encabezado

La plantilla modular html_container contiene la estructura básica. Pero el módulo web aporta más plantillas modulares — entre ellas external_layout para el encabezado:

Plantilla con t-call a external_layout pasando doc, forced_vat y address

Al imprimir el reporte de nuevo, vemos el encabezado automático con el logo de la empresa:

Reporte con encabezado y logo de la empresa

6
Mostrar campos del registro en el reporte

Dentro de la plantilla podemos llamar a campos del registro. Agregamos el folio de la venta:

Plantilla referenciando el campo name (folio) del registro

El reporte ahora muestra el folio de la cotización:

Reporte con el folio de la venta visible
✅ AÑADIR MÁS CAMPOS
Con la misma sintaxis (t-field="doc.partner_id", t-foreach="doc.order_line") puedes mostrar cliente, líneas de producto, totales, fechas — todo el registro está disponible en la variable doc.

7
Cambiar a qweb-html para iterar diseño

Una buena práctica: durante el desarrollo, usar qweb-html para previsualizar en el navegador sin generar PDF cada vez. Cambiamos el report_type:

Cambio de qweb-pdf a qweb-html en la acción del reporte

El reporte ahora se previsualiza directamente en el navegador — mucho más rápido para iterar:

Previsualización del reporte en el navegador (qweb-html)
💡 FLUJO RECOMENDADO
Desarrolla en qweb-html hasta que el diseño te convenza. Luego cambia a qweb-pdf para producción. Esto te ahorra tiempo de espera por cada iteración del diseño.

8
Consejos rápidos

✅ Define correctamente report_type
Elige qweb-pdf, qweb-html o qweb-text según el formato que necesites.

✅ Usa Bootstrap incluido en Odoo
Las clases CSS de Bootstrap están disponibles — formato de tablas y textos sin escribir CSS desde cero.

✅ Testea en HTML antes de PDF
Para detectar problemas de diseño rápido sin esperar la generación del PDF.

✅ Plantillas modulares con t-call
Incluye fragmentos reutilizables — no dupliques código de cabeceras y pies.

✅ Aprovecha las expresiones dinámicas
Recorre listas con t-foreach, condiciona con t-if, formatea con t-field.

✅ Personaliza el nombre del archivo
Con print_report_name y condicionales — los archivos llegan al cliente con un nombre claro.

📌 En resumen

Los reportes QWeb son la pieza estándar de Odoo para generar documentos. Combinando una acción (ir.actions.report) con una plantilla XML (vista QWeb) tienes facturas, cotizaciones, etiquetas y cualquier documento listo para imprimir o enviar.

El flujo recomendado: empieza en qweb-html para iterar diseño, usa external_layout para encabezados y pies oficiales, y aprovecha Bootstrap. En Exdoo desarrollamos reportes QWeb a medida — facturación CFDI, etiquetas con códigos QR, comprobantes de operación — todos integrados al flujo del módulo.

Deja un comentario

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

¿Te gustaría implementar Odoo en tu empresa?

12 años de experiencia · +60 implementaciones exitosas · Partner Gold de Odoo en México

Hablemos por WhatsApp