El motor de informes py3o es un motor de informes para Odoo basado en Libreoffice:
- el informe se crea con Libreoffice (ODT u ODS),
- el informe se almacena en el servidor en formato OpenDocument (archivo .odt o .ods)
- el informe se envía al usuario en formato OpenDocument o en cualquier formato de salida soportado por Libreoffice (PDF, HTML, DOC, DOCX, Docbook, XLS, etc.)
Las principales ventajas de un motor de informes basado en Libreoffice son:
- no es necesario ser un desarrollador para crear o modificar un informe: el informe se crea y modifica con Libreoffice. Por lo tanto, ¡este motor de informes tiene una herramienta de desarrollo de informes totalmente WYSIWYG!
- Para un informe PDF en formato A4/Letter, es más fácil desarrollarlo con una herramienta como Libreoffice, diseñada para crear documentos A4/Letter, que desarrollarlo en HTML/CSS; además, algunas particularidades de impresión (fondos, cajas de márgenes) no están muy bien soportadas por las soluciones basadas en HTML/CSS.
- Si desea que sus usuarios puedan modificar el documento después de su generación por Odoo, simplemente configure el documento con salida ODT (o DOC o DOCX) y el usuario podrá modificar el documento con Libreoffice (o Word) después de su generación por Odoo.
- Desarrollo sencillo de informes de hoja de cálculo en formato ODS (salida XLS posible).
Este módulo report_py3o es el módulo base para el motor de informes Py3o. Si se usa solo, generará un proceso de libreoffice para cada conversión de documento ODT a PDF (o ODT a DOCX, etc.). Esto es lento y puede convertirse en un problema si tiene muchos informes que convertir de ODT a otro formato. En este caso, debería considerar el módulo adicional report_py3o_fusion_server, que está diseñado para funcionar con un demonio de libreoffice. Con report_py3o_fusion_server, el entorno técnico es más complejo de configurar porque debe instalar componentes de software adicionales y ejecutar 2 demonios, pero tiene un rendimiento mucho mejor y puede configurar las opciones de exportación a PDF de libreoffice en Odoo (permite generar formularios PDF, documentos PDF/A, PDF protegidos con contraseña, PDF con marca de agua, etc.).
Este motor de informes es una alternativa a Aeroo: estos dos motores de informes tienen características similares, pero su implementación es completamente diferente. Sin embargo, no puede usar las plantillas de aeroo como reemplazo directo, tendrá que cambiar algunos detalles.
Traducción automática al español (DeepSeek) de la descripción original de OCA, que está en inglés.
auto_awesome Qué hace este módulo
Generado por IA a partir del código · Odoo 19.0Te permite crear informes de Odoo como documentos de LibreOffice (ODT/ODS/ODP) e imprimirlos como PDF, DOC, XLS y otros formatos. Gestionas las plantillas en Odoo y las adjuntas a cualquier acción de informe.
Este módulo añade a Odoo un nuevo tipo de informe llamado py3o. En lugar de diseñar informes en HTML, se crean en LibreOffice y se sube el archivo como plantilla, por lo que el diseño es totalmente WYSIWYG.
Dónde aparece: - Un nuevo menú "Py3o Templates" bajo el menú Reporting, donde se almacenan las plantillas con un nombre, un tipo de archivo (ODF text, spreadsheet, presentation, variantes flat) y el propio archivo de LibreOffice. - En cualquier acción de informe (Settings > Technical > Reports), aparece una nueva pestaña "LibreOffice Template" cuando el tipo de informe es py3o. Ahí se elige el formato de salida, la plantilla, una ruta de archivo de respaldo opcional y si varios registros deben fusionarse en un solo informe. - Un filtro de búsqueda "Py3o Reports" ayuda a encontrar estos informes.
Reglas de negocio y comportamiento automático: - El formato de salida es obligatorio para los informes py3o; de lo contrario, Odoo bloquea el guardado con un error de validación. - Si el formato de salida elegido no es un formato nativo de LibreOffice y el runtime de LibreOffice no se encuentra en el servidor, se muestra una advertencia roja en el informe y se registra en el log. - Al imprimir varios registros a la vez, Odoo normalmente produce un ZIP con un archivo por registro; la opción "Multiple Records in a Single Report" produce un único documento en su lugar. Los PDF se fusionan, los demás formatos se comprimen en un ZIP. - Si el informe está configurado para guardar adjuntos, los archivos generados se almacenan en el registro y se reutilizan.
El módulo toca ir.actions.report, py3o.template y py3o.report, y añade una ruta de descarga utilizada por el cliente web.
Depende de
Lo necesitan otros módulos
Menús que añade
Modelos y campos (3)
- py3o.report · modelo nuevoir_actions_report_id
- py3o.template · modelo nuevoname (Template name), filetype (LibreOffice Template File Type), py3o_template_data (LibreOffice Template)
- ir.actions.report · amplía un modelo existentemodule, lo_bin_path (Path to the libreoffice runtime), report_type, py3o_filetype (Output Format), py3o_template_id, py3o_multi_in_one (Multiple Records in a Single Report), is_py3o_native_format, py3o_template_fallback (Fallback), is_py3o_report_not_available, msg_py3o_report_not_available
Texto generado por IA (DeepSeek) al leer el código de la versión 19.0 en GitHub; puede contener errores, así que verifícalo en el código antes de decidir. Ver el código en GitHub
Disponibilidad por versión
Revisado: 2026-11-03Estado de confirmación: 8 confirmadas, 1 sin información de 9 versiones.
Fuentes · Odoo 17.0
Confirmado el 2026-11-03 en la rama 17.0 de OCA/reporting-engine.
terminal Instalación y uso
Documentación de OCA · Odoo 19.0Instalación
Fuente · Odoo 19.0Instala las librerías de python necesarias:
`` pip install py3o.template pip install py3o.formats `Para permitir la conversión de informes ODT o ODS a otros formatos (PDF,
DOC, DOCX, etc.), instala libreoffice: apt-get --no-install-recommends install libreoffice```
Configuración
Fuente · Odoo 19.0Por ejemplo, para reemplazar el informe de factura nativo por un informe py3o personalizado, añada el siguiente archivo XML en su módulo personalizado:
`` <?xml version="1.0" encoding="utf-8"?> py3o odt my_custom_module_base report/account_invoice.odt `donde *my_custom_module_base* es el nombre del módulo Odoo personalizado. En
este ejemplo, el archivo ODT de la factura se encuentra en
*my_custom_module_base/report/account_invoice.odt*.
También es posible hacer referencia a una plantilla ubicada en una ruta de confianza de
su servidor Odoo. En este caso debe dejar la entrada *module* vacía y
especificar la ruta a la plantilla como *py3o_template_fallback*. <?xml version="1.0" encoding="utf-8"?> <odoo> <record id="account.account_invoices" model="ir.actions.report"> <field name="report_type">py3o</field> <field name="py3o_filetype">odt</field> <field name="py3o_template_fallback">/odoo/templates/py3o/report/account_invoice.odt</field> </record> </odoo>``Además, también debe modificar el archivo de configuración del servidor Odoo para
declarar el directorio raíz permitido para sus plantillas py3o. Solo
las plantillas ubicadas en este directorio pueden ser cargadas por el informe py3o. [options] ... [report_py3o] root_tmpl_path=/odoo/templates/py3o``Si desea una factura en formato PDF en lugar de formato ODT, el archivo XML
debería verse así: <?xml version="1.0" encoding="utf-8"?> <odoo> <record id="account.account_invoices" model="ir.actions.report"> <field name="report_type">py3o</field> <field name="py3o_filetype">pdf</field> <field name="module">my_custom_module_base</field> <field name="py3o_template_fallback">report/account_invoice.odt</field> </record> </odoo>``Si desea añadir un nuevo informe py3o PDF (y no reemplazar un informe
nativo), el archivo XML debería verse así: <?xml version="1.0" encoding="utf-8"?> <odoo> <record id="partner_summary_report" model="ir.actions.report"> <field name="name">Partner Summary</field> <field name="model">res.partner</field> <field name="report_name">res.partner.summary</field> <field name="report_type">py3o</field> <field name="py3o_filetype">pdf</field> <field name="module">my_custom_module_base</field> <field name="py3o_template_fallback">report/partner_summary.odt</field> <field name="binding_type">report</field> <field name="binding_model_id" ref="base.model_res_partner"/> </record> </odoo>```
Parámetros de configuración
py3o.conversion_command El comando que se utilizará para ejecutar la conversión, libreoffice por defecto. Si cambia esto, lo que sea que establezca aquí debe aceptar los parámetros --headless --convert-to \$ext \$file y colocar el archivo resultante en el directorio de \$file con la extensión \$ext. El comando se iniciará en el directorio de \$file.
El lenguaje de plantillas está ampliamente documentado, los registros se exponen en libreoffice como objetos, sobre los que también puedes llamar funciones.
Funciones y objetos disponibles
user Registro Browse del usuario actual
lang El idioma de la compañía del usuario como cadena (código ISO)
b64decode base64.b64decode
format_multiline_value(string) Genera el equivalente ODF de \ y para campos multilínea (ODF es XML internamente, por lo que de lo contrario se omitirían)
html_sanitize(string) Sanea una cadena HTML
time El módulo time de Python
display_address(partner) Devuelve una cadena formateada con la dirección del partner
o_format_lang(value, lang_code=False, digits=None, grouping=True, monetary=False, dp=False, currency_obj=False, no_break_space=True) Devuelve un valor numérico o monetario formateado según el idioma y la zona horaria del contexto
o_format_date(value, lang_code=False, date_format=False) Devuelve un valor de fecha u hora formateado según el idioma y la zona horaria del contexto
Plantillas de informes de ejemplo
Las plantillas de informes py3o de ejemplo para los principales informes nativos de Odoo (factura, pedido de venta, pedido de compra, picking, etc.) están disponibles en el proyecto de Github odoo-py3o-report-templates.
Traducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen.
Las instrucciones de instalación, el paquete de distribución, las dependencias y los pasos de configuración no se muestran porque todavía no se han verificado en la documentación del módulo para ninguna versión.
Datos importados de GitHub: esta ficha refleja la última revisión del catálogo, no una consulta en directo. Verifica siempre en la documentación del módulo y en staging antes de instalar en producción.