Reportes en PDF¶
Studio le permite editar reportes en PDF existentes (como facturas, cotizaciones, etc.) y crear nuevos.
Diseño predeterminado¶
El diseño predeterminado de los reportes no se gestiona desde Studio. Vaya a Empresas de la página principal, haga clic en Configurar diseño del documento. Los ajustes del diseño son específicos de la empresa, pero se aplican a todos los reportes.
y, en la secciónTruco
Puede visualizar cómo los diferentes ajustes afectan el diseño del reporte en la previsualización del reporte del lado derecho de la ventana Configure el diseño de sus documentos. Cuando cree o edite un reporte, puede ver una previsualización del reporte si hace clic en Vista previa de impresión en el lado derecho de la pantalla.
Use los siguientes ajustes:
Diseño: Hay siete diseños disponibles:
Fondo: Los fondos disponibles son:
Vacío: No se muestra nada.
Logo de demostración: Para que se muestre un logo de demostración.
Personalizado: Para subir una imagen de fondo personalizada.
Texto: Hay ocho fuentes disponibles: Lato, Roboto, Open Sans, Montserrat, Oswald, Raleway, Tajawal (que es compatible con caracteres árabes y latinos) y Fira Mono. Vaya al sitio web de Google Fonts para previsualizarlas.
Logotipo de la empresa: haga clic en el botón Editar para subir o modificar el logo. Esta acción agrega el logotipo al registro de la empresa en el modelo de la empresa. Puede acceder si va a , se dirige a la sección Empresas y luego hace clic en Actualizar información.
Colores: cambie los colores primarios y secundarios que se utilizan para estructurar los reportes. Los colores predeterminados se generan de forma automática con los colores del logotipo.
Dirección: El nombre y la dirección de la empresa se muestran en el encabezado de los reportes externos. Puede agregar varias líneas de texto.
Lema: aparece en el encabezado de los reportes externos que usen los diseños Claro, Rayado, Burbuja, Ola y Carpeta y en el pie de página de los reportes externos que usen los diseños Con caja y Negrita. Puede agregar varias líneas de texto.
Formato del papel: Para definir el tamaño predeterminado del papel de los reportes. Puede seleccionar A4 (21 cm x 29.7 cm) y Carta EE. UU. (21.59 cm x 27.54 cm). También puede definir esto en reportes individuales en el campo Formato de papel en Studio.
Nota
También puede tener disponibles otros formatos de papeles según las aplicaciones y módulos que haya instalado, por ejemplo, hojas de etiquetas para la aplicación Inventario o gafetes de eventos para la aplicación Eventos
Crear nuevos reportes PDF¶
Para crear un nuevo reporte para un modelo, (por ejemplo, órdenes de venta) acceda al modelo, haga clic en el botón (Activar Studio) y luego haga clic en Reportes. Haga clic en Nuevo y, en la ventana emergente que se abre, seleccione el tipo de reporte. Las opciones a continuación solo se usan para determinar lo que aparecerá en el encabezado y en el pie de página:
Después de que creó el reporte podrá comenzar a editarlo.
Editar reportes PDF¶
Para acceder a los reportes disponibles para un modelo, vaya al modelo, haga clic en el botón (Activar Studio) y después haga clic en Reportes. Seleccione un reporte existente para abrirlo.
También puede abrir Studio, hacer clic en Reportes y buscar un reporte o modelo en particular.
Importante
Le recomendamos que duplique el reporte estándar y haga los cambios en la versión duplicada. Para duplicar un reporte, coloque el cursor sobre la esquina superior derecha del mismo, haga clic en el icono con los tres puntos verticales (tres puntos verticales) y luego seleccione Duplicar.

Opciones¶
Una vez que haya seleccionado o creado un reporte, puede usar las opciones ubicadas en la parte izquierda de la pantalla para:
Cambiar el nombre del reporte: El nuevo nombre se aplicará en todos lados (en Studio, en el menú Imprimir abajo del icono (engranaje) en la vista de formulario y en el nombre del archivo PDF).
Modificar el formato de papel: Si no hay ningún valor seleccionado, entonces se usa el formato definido en el diseño predeterminado.
Mostrar en el menú de impresión: Para agregar el reporte al menú Imprimir en la vista de formulario.
Volver a cargar desde archivo adjunto: para guardar el reporte como un archivo adjunto en el registro la primera vez que se genera y volver a cargar la versión original del reporte después. Esto es necesario de forma legal para las facturas y por lo general se utiliza en este caso.
Limitar visibilidad a grupos: para limitar la disponibilidad del reporte en PDF a grupos de usuarios específicos.
Editar fuentes: para modificar el reporte directo desde el archivo XML.
Restablecer reporte: para descartar todos los cambios realizados en el reporte y restablecerlo a su versión estándar.
Vista previa de impresión: para generar y descargar una vista previa del reporte.
Editor de reportes¶
El editor de reportes le permite modificar el contenido y el formato del mismo.
Truco
Puede deshacer o rehacer los cambios con sus respectivos botones o con los comandos
Ctrl+Z
yCtrl+Y
.Los cambios se guardan en automático cuando sale del reporte, también puede guardarlos de forma manual con el botón Guardar.
Puede restablecer el reporte a su versión estándar si hace clic en el botón Restablecer reporte que está ubicado en la parte izquierda de la pantalla.
Importante
Editar el encabezado y el pie de página de un reporte afectara a los reportes estándar y a los personalizados.
Bloques condicionales¶
Los rectángulos punteados representan bloques condicionales (sentencias if-else). Estos se utilizan para mostrar u ocultar contenido según condiciones específicas. Haga clic en el bloque para ver las condiciones.

Seleccione un valor para previsualizar el resultado correspondiente y edítelo si es necesario.

Nota
Las condiciones solo se pueden editar en el XML.
Otro contenido¶
Hay dos tipos de contenido de texto en los reportes:
Texto estático, es decir, el texto que no está resaltado en azul y que se puede modificar desde el editor.
Texto dinámico, es decir, el texto resaltado en azul, que se reemplaza con los valores de los doc:
campos </applications/studio/fields>
cuando se genera el reporte. Por ejemplo, el número de orden de venta o la fecha de la cotización.
Puede agregar contenido (por ejemplo, campos, listas, tablas, imágenes, mensajes, entre otros elementos) a sus reportes con comandos. Escriba /
para abrir el cuadro de texto y después escriba el nombre del comando o selecciónelo de la lista.
Para agregar texto estático solo deberá escribirlo en donde sea necesario.
En caso de que necesite realizar cambios más avanzados, puede editar el reporte directo en el XML.
Agregar un campo¶
Para agregar un campo, escriba /
y seleccione el comando Campo. Aparecerá una lista, allí seleccione o busque el campo, haga clic en la flecha derecha ubicada junto al nombre del campo para acceder a la lista de campos relacionados si es necesario. Después, especifique el valor predeterminado que se mostrará si el campo no se completa en el registro y presione Enter
.

Agregar o editar una tabla¶
Hay dos tipos de tablas en los reportes:
Las tablas estáticas se usan para mostrar texto o campos estáticos. Para este tipo de tablas, tendrá que definir el número de columnas y filas al insertarlas.
Las tablas dinámicas se usan para mostrar datos de campos de relación. Para este tipo de tabla solo debe definir el número de columnas al insertarla. El número de filas en la tabla generada dependerá del número de registros en el modelo relacionado que están vinculados al modelo actual.
Example
En un reporte de ventas se usa una tabla dinámica para mostrar las líneas relacionadas a la orden de ventas. Si la orden de ventas contiene 10 líneas, la tabla generada en el reporte será de 10 filas; si la orden de ventas contiene 2 líneas, la tabla tendrá 2 filas.
Agregar o editar una tabla estática¶
Para agregar una tabla estática escriba /
y seleccione el comando Tabla. Determine el número de columnas y filas para la tabla. Una vez que la inserte, puede empezar a editarla.
Puede insertar, mover o eliminar columnas y filas con las herramientas de la tabla. Coloque el cursor en la parte superior de una columna o a la izquierda de una fila, luego haga clic en el rectángulo morado y seleccione una de las opciones.

Para cambiar el tamaño de una columna, arrastre el borde a la posición deseada. Para regresar todas las columnas a su tamaño estándar, seleccione Restablecer tamaño en las herramientas de la tabla.
Agregue el campo que quiera a una de las celdas o empiece a escribir para agregar texto estático.
Truco
Para agregar texto estructurado sin usar una tabla, puede usar columnas. Para agregar columnas comience a escribir /
y seleccione el comando apropiado: 2 columnas, 3 columnas o 4 columnas.
Agregar o editar una tabla dinámica¶
Nota
Solo las relaciones del tipo
one2many
omany2many
pueden aparecer como tablas dinámicas.Una tabla dinámica existente en un reporte estándar tiene una estructura más compleja que una tabla dinámica que agregue por su cuenta. En estas tablas puede insertar o eliminar columnas, pero no puede mover columnas o insertar, mover o eliminar filas.
Para agregar una tabla dinámica, escriba /
y seleccione el comando Tabla dinámica. En la lista que se abre, seleccione o busque la relación en la que se basará la tabla y presione la tecla Enter
. Después de agregar la tabla, puede comenzar a editarla.
Puede insertar, mover y eliminar columnas con las herramientas de la tabla, igual que en una tabla estática. También puede insertar filas estáticas que aparezcan arriba o abajo de las filas generadas.
Para agregar un campo a una celda, borre el texto que aparezca como marcador de posición y después agregue el campo que quiera. La caja de diálogo que se abre muestra el objeto fuente para el campo (por ejemplo, el modelo Líneas de la orden) y una lista de los campos disponibles.

Cambie el Nombre de la columna por el nombre que quiera.
Nota
La fila predeterminada recorre el contenido del campo de forma automática y genera una fila en el reporte por cada valor del campo (por ejemplo, una fila por cada línea de la orden).
Formato¶
Para darle formato al texto en el reporte, selecciónelo y use las opciones en el editor de texto.
Editar el XML de un reporte¶
Advertencia
Modificar el XML podría ocasionar errores en los reportes durante la actualización. Si esto ocurre, solo copie los cambios de la base de datos anterior en su base de datos actualizada.
Haga clic en Editar fuentes en el panel izquierdo para editar el XML del reporte.
Ejemplos¶
Para cambiar cómo se presentan los datos en su reporte, puede modificar el widget predeterminado del campo de forma manual. En el ejemplo a continuación, la fecha de la orden muestra la fecha y la hora por defecto, mientras que el precio unitario se redondeará a dos espacios decimales de forma predeterminada.
<div class="oe_structure"> <span t-field="doc.date_order"/> <span t-field="doc.price_unit"/> </div>
Al usar t-options
, en este caso la opción widget
, puede modificar estos campos para que muestren solo la fecha y hagan el redondeo a cuatro espacios decimales respectivamente:
<div class="oe_structure"> <span t-field="doc.date_order" t-options="{'widget': 'date'}"/> <span t-field="doc.price_unit" t-options="{'widget': 'float', 'precision': 4}"/> </div>
Si desea mostrar u ocultar contenido según condiciones específicas puede agregar declaraciones de control if/else
de forma manual al XML del reporte.
Por ejemplo, si desea ocultar una tabla de datos personalizada en caso de que no haya etiquetas, puede utilizar el atributo t-if
para definir la condición. Esta se evaluará como True
o False
y la tabla no aparecerá si no hay etiquetas en la cotización.
<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
<!-- thead = table header, the row with column titles -->
<thead>
<!-- table row element -->
<tr>
<!-- table header element -->
<th>ID</th>
<th>Name</th>
</tr>
</thead>
<!-- table body, the main content -->
<tbody>
<!-- we create a row for each subrecord with t-foreach -->
<tr t-foreach="doc.tag_ids" t-as="tag">
<!-- for each line, we output the name and price as table cells -->
<td t-out="tag.id"/>
<td t-out="tag.name"/>
</tr>
</tbody>
</table>
Si desea mostrar otro bloque en caso de que la declaración t-if
se evalúe como False
, puede especificarlo con la declaración t-else
. El bloque t-else
debe estar inmediatamente después del bloque t-if
en la estructura del documento. No es necesario que especifique alguna condición en el atributo t-else
. Como ejemplo, veamos cómo mostrar un mensaje rápido que explique que la cotización no tiene etiquetas:
<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
<!-- thead = table header, the row with column titles -->
<thead>
<!-- table row element -->
<tr>
<!-- table header element -->
<th>ID</th>
<th>Name</th>
</tr>
</thead>
<!-- table body, the main content -->
<tbody>
<!-- we create a row for each subrecord with t-foreach -->
<tr t-foreach="doc.tag_ids" t-as="tag">
<!-- for each line, we output the name and price as table cells -->
<td t-out="tag.id"/>
<td t-out="tag.name"/>
</tr>
</tbody>
</table>
<div class="text-muted" t-else="">No tag present on this document.</div>
Al utilizar la notación t-if/t-else
, el editor de reportes reconoce que estas secciones se excluyen entre sí y deben aparecer como bloques condicionales:

Puede alternar entre condiciones con el editor para previsualizar los resultados:

En caso de que desee tener varias opciones también puede utilizar las directivas t-elif
para agregar condiciones intermedias. Por ejemplo, aquí el título de los reportes de las órdenes de venta cambia según la condición del documento correspondiente.
<h2 class="mt-4">
<span t-if="env.context.get('proforma', False) or is_pro_forma">Pro-Forma Invoice # </span>
<span t-elif="doc.state in ['draft','sent']">Quotation # </span>
<span t-else="">Order # </span>
<span t-field="doc.name">SO0000</span>
</h2>
El título Factura proforma se utiliza en función de algunas condiciones contextuales. Si estas condiciones no se cumplen y el estado del documento es draft
o sent
, entonces se utiliza Cotización. Si ninguna de esas condiciones se cumple, el título del reporte es Orden.
Trabajar con imágenes en un reporte puede ser complicado, ya que es difícil controlar su tamaño de forma precisa y su comportamiento no siempre es obvio. Puede insertar campos de imagen con el editor de reportes (con el comando Campo). Sin embargo, si se insertan en XML con la directiva t-field
y los atributos t-options
que la acompañan, será más fácil controlar el tamaño y la posición.
Por ejemplo, el siguiente código muestra el campo image_128
del producto de la línea como una imagen de 64 píxeles de ancho (con una altura automática según la relación de aspecto de la imagen).
<span t-field="line.product_id.image_128" t-options-widget="image" t-options-width="64px"/>
Las siguientes opciones están disponibles para los widgets de imagen:
width
: ancho de la imagen. Por lo general se usan píxeles o unidades de longitud CSS (por ejemplo,rem
) (no lo use si desea que el ancho se establezca de forma automática).height
: altura de la imagen. Por lo general se usan píxeles o unidades de longitud CSS (por ejemplo,rem
) (no lo use si desea que la altura se establezca de forma automática).class
: las clases CSS aplicadas en la etiquetaimg
. También están disponibles las clases de Bootstrap.alt
: texto alternativo de la imagen.style
: atributo de estilo. Le permite anular estilos con mayor libertad que con las clases de Bootstrap.
Estos atributos deben contener cadenas, es decir, texto entrecomillado dentro de otras comillas, por ejemplo, t-options-width="'64px'"
(o una expresión Python válida como alternativa).
Nota
No puede utilizar el widget de imagen en una etiqueta img
. Use t-field
en un nodo span
(para contenido en línea) o div
(para contenido en bloque).
Por ejemplo, es necesario agregar una columna con la imagen del producto a la tabla de la cotización:
<table class="table table-sm o_main_table table-borderless mt-4">
<thead style="display: table-row-group">
<tr>
<th>Image</th>
<th name="th_description" class="text-start">Description</th>
<th>Product Category</th>
<th name="th_quantity" class="text-end">Quantity</th>
<th name="th_priceunit" class="text-end">Unit Price</th>
[...]
<t t-foreach="lines_to_report" t-as="line">
<t t-set="current_subtotal" t-value="current_subtotal + line.price_subtotal"/>
<tr t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''">
<t t-if="not line.display_type">
<td>
<span t-field="line.product_template_id.image_128"
t-options-widget="'image'"
t-options-width="'64px'"
t-options-class="'rounded-3 shadow img-thumbnail'"
/>
</td>
<td name="td_name"><span t-field="line.name">Bacon Burger</span></td>
<td t-out="line.product_id.categ_id.display_name"/>
El atributo t-options-width
restringe el ancho de la imagen a 64 píxeles y las clases de Bootstrap que se utilizan en t-options-class
crean un borde similar a una miniatura con las esquinas redondeadas y una sombra.
