---
title: "Plantillas de exportación personalizadas"
description: "Diseña los PDF imprimibles que generas a partir de un alquiler, como el contrato de alquiler, el contrato, el acta de entrega, el acta de devolución o la hoja de preparación."
canonical_url: "https://requiply.com/docs/es/guides/automations/export-templates"
---
# Plantillas de exportación personalizadas

> Diseña los PDF imprimibles que generas a partir de un alquiler, como el contrato de alquiler, el contrato, el acta de entrega, el acta de devolución o la hoja de preparación.

En la página **Custom export templates** (plantillas de exportación personalizadas) los administradores diseñan los documentos PDF imprimibles que Requiply genera a partir de una reserva: contratos de alquiler, actas de entrega y de devolución, listas de comprobación de recogida, hojas internas de preparación o cualquier otro documento que tu negocio entregue a un cliente o archive internamente.

**De aquí sale el contrato de alquiler.** Escribe el texto una vez aquí y cualquier reserva se podrá imprimir o enviar por email como un contrato terminado, con el nombre del cliente, las fechas, los artículos y los precios ya rellenados. Para imprimir uno de una reserva concreta, abre la reserva y expórtala: consulta [Documentos de la reserva](https://requiply.com/docs/es/guides/bookings/payments-and-documents/documents).

Esta página está en **Settings → Bookings → Custom export templates**.

<warning>

**Solo para administradores.** El resto del personal se redirige a la pantalla de acceso denegado.

</warning>

<figure>

![La página Custom export templates con una tarjeta de plantilla que muestra la etiqueta PDF document y la vista previa del documento, junto al botón Create template](https://requiply.com/docs/assets/settings/bookings/export-templates/list.png)<figcaption>

Cada plantilla aparece como una tarjeta con la etiqueta **PDF document** y una vista previa en texto plano de su contenido.

</figcaption>
</figure>

## Por qué importa esta página

Requiply ya genera una factura a partir de cada reserva. Las plantillas de exportación cubren todo lo demás. En cuanto existe una plantilla, aparece en el diálogo **Export** (exportar) de cualquier reserva, y el personal puede generar con una sola pulsación un PDF rellenado y listo para imprimir de esa reserva concreta, sin copiar los datos de la reserva en un archivo de Word.

Documentos que suelen crear las organizaciones aquí:

- Un **contrato de alquiler** con las partes, las fechas de la reserva, la tabla de equipos, los cargos, la fianza y las líneas de firma.
- Un **acta de entrega y devolución** con notas sobre el estado y las confirmaciones de ambas partes.
- Una **hoja de recogida o de preparación** para el equipo del almacén.
- Un **informe de daños o incidencias** con los datos de la reserva y del cliente ya rellenados.

## Quién puede usar esta página

- **Solo para administradores.** Los usuarios sin el rol de administrador se redirigen a la pantalla de acceso denegado.
- Las plantillas no tienen límite por plan ni dependen de ninguna función activable: cada organización puede crear todas las que necesite.
- **Usar** una plantilla terminada no está restringido a los administradores. Cualquiera que pueda abrir el diálogo **Export** de una reserva puede generar el documento.

## Qué verás

La página carga las plantillas de la organización actual y las muestra como una cuadrícula de tarjetas que se ajusta al ancho disponible. Mientras carga, aparecen tres marcadores de posición con la misma disposición.

Cada tarjeta de plantilla muestra:

- El **nombre** de la plantilla (recortado, con una descripción emergente al pasar el ratón).
- Una etiqueta **PDF document**.
- Un recuadro **Document preview** (vista previa del documento) con las primeras líneas del contenido del documento en texto plano.
- Un botón de **editar** (lápiz) que abre la página [Añadir o editar una plantilla de exportación](https://requiply.com/docs/es/guides/automations/export-templates/add-or-edit).

Después de las tarjetas, un botón redondeado **Create template** (crear plantilla) con un icono de suma abre la página para añadir.

## Cuando todavía no hay plantillas

Requiply **no incluye plantillas de exportación predefinidas**. Una organización nueva empieza sin ninguna, y el diálogo **Export** de la reserva solo ofrece **PDF Invoice** hasta que se crea la primera plantilla.

Cuando la lista está vacía, la página muestra en el centro un icono de PDF, el título **"No custom export templates yet"** (todavía no hay plantillas de exportación personalizadas), el subtítulo *"Create printable documents like rental agreements or handover acts, filled with booking data on export"* (crea documentos imprimibles, como contratos de alquiler o actas de entrega, que se rellenan con los datos de la reserva al exportar) y la acción **Create template**.

## Acciones principales

### Añadir una plantilla

**Create template**, tanto desde el botón de suma como desde la pantalla vacía, abre la página [Añadir o editar una plantilla de exportación](https://requiply.com/docs/es/guides/automations/export-templates/add-or-edit). Al guardar, vuelves a la lista y un aviso confirma `Document template "<name>" created`.

### Editar una plantilla

El icono del lápiz de una tarjeta abre la misma página en modo de edición, con las acciones **Save** y **Delete**.

### Eliminar una plantilla

La eliminación se hace desde la página de edición, tras un sencillo diálogo de confirmación. A diferencia de las plantillas de email, las plantillas de exportación no se usan en las automatizaciones de los flujos de trabajo, así que no hay comprobación de referencias: la plantilla se elimina en cuanto confirmas.

<warning>

**Atención:** al eliminar una plantilla, desaparece al instante del diálogo **Export** para todo el mundo. Los documentos ya descargados no se ven afectados, pero la plantilla no se puede recuperar.

</warning>

## Variables disponibles

El contenido del documento es HTML sencillo con variables `{{variable}}`. Al exportar, Requiply sustituye cada variable por los datos de la reserva para la que se genera el documento.

### Variables de reserva, cliente y organización

<table>
<thead>
  <tr>
    <th>
      Variable
    </th>
    
    <th>
      Se sustituye por
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        {{documentDate}}
      </code>
    </td>
    
    <td>
      La fecha en que se genera el documento (hoy, en la zona horaria de la organización).
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{clientName}}
      </code>
    </td>
    
    <td>
      El nombre completo del cliente.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{clientFirstName}}
      </code>
    </td>
    
    <td>
      El nombre de pila del cliente.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{clientLastName}}
      </code>
    </td>
    
    <td>
      Los apellidos del cliente.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{clientEmail}}
      </code>
    </td>
    
    <td>
      La dirección de email del cliente.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{clientPhone}}
      </code>
    </td>
    
    <td>
      El número de teléfono del cliente.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingId}}
      </code>
    </td>
    
    <td>
      El número de la reserva tal como aparece en Requiply.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingStartDate}}
      </code>
    </td>
    
    <td>
      La fecha de inicio de la reserva.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingStartDateTime}}
      </code>
    </td>
    
    <td>
      La fecha y la hora de inicio de la reserva.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingEndDate}}
      </code>
    </td>
    
    <td>
      La fecha de fin de la reserva.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingEndDateTime}}
      </code>
    </td>
    
    <td>
      La fecha y la hora de fin de la reserva.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingDays}}
      </code>
    </td>
    
    <td>
      Los días de alquiler que se cobran: el periodo de la reserva contado en periodos de 24 horas empezados, igual que se cobran los precios por día, con el <a href="https://requiply.com/docs/es/guides/bookings/changing/cost-adjustment">
        ajuste del coste
      </a>
      
       en periodos ya aplicado. Una recogida el viernes a las 10:00 y una devolución el lunes a las 10:00 imprimen <em>
        3
      </em>
      
      , o <em>
        2
      </em>
      
       con un ajuste de <em>
        −1 period
      </em>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingStatus}}
      </code>
    </td>
    
    <td>
      El nombre del estado actual de la reserva.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingTotal}}
      </code>
    </td>
    
    <td>
      El total de la reserva, con el formato de la moneda de la organización.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingDeposit}}
      </code>
    </td>
    
    <td>
      El importe de la fianza (vacío cuando no hay fianza).
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingTotalCharged}}
      </code>
    </td>
    
    <td>
      El total del alquiler más la fianza.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingBundleDiscount}}
      </code>
    </td>
    
    <td>
      Lo que ahorran en total los <a href="https://requiply.com/docs/es/guides/inventory/bundles">
        packs
      </a>
      
       reservados, por ejemplo <em>
        19,20 €
      </em>
      
      , ya incluido en <code>
        {{bookingTotal}}
      </code>
      
      . Vacío cuando la reserva no tiene ningún pack.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingAdjustment}}
      </code>
    </td>
    
    <td>
      El <a href="https://requiply.com/docs/es/guides/bookings/changing/cost-adjustment">
        ajuste del coste
      </a>
      
       de la reserva: <em>
        −1 period
      </em>
      
       o <em>
        +2 periods
      </em>
      
       para los periodos cobrados, <em>
        −10%
      </em>
      
       para un porcentaje y el número sin más, como <em>
        −25
      </em>
      
      , para un importe fijo. Vacío si no hay ajuste. No está en el selector de variables, escríbela a mano.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingAdjustmentReason}}
      </code>
    </td>
    
    <td>
      El motivo indicado para el ajuste. No está en el selector de variables.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingAdjustmentAmount}}
      </code>
    </td>
    
    <td>
      El efecto en dinero de un ajuste porcentual o de importe fijo, por ejemplo <em>
        −9,00 €
      </em>
      
      . Vacío para los periodos cobrados. No está en el selector de variables.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingItems}}
      </code>
    </td>
    
    <td>
      Una tabla HTML completa con los artículos reservados. Por defecto imprime SKU, nombre, cantidad, precio y total; consulta <a href="#elegir-las-columnas-de-la-tabla">
        Elegir las columnas de la tabla
      </a>
      
      . Los packs reservados añaden una fila de descuento al final, consulta <a href="#packs-en-la-tabla-de-art%C3%ADculos">
        Packs en la tabla de artículos
      </a>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingItemsQuantity}}
      </code>
    </td>
    
    <td>
      Cuántas unidades se han reservado en total, por ejemplo <em>
        7
      </em>
      
       para 4 sillas y 3 mesas. Las unidades que aún no están asignadas también cuentan. Vacío cuando la reserva no tiene artículos.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingItemsTotal}}
      </code>
    </td>
    
    <td>
      El alquiler de los artículos reservados durante el periodo de la reserva, después de los descuentos de los packs. No incluye los servicios ni los productos vendidos. Es el mismo importe que la celda <code>
        total
      </code>
      
       de la <a href="#fila-de-totales">
        fila de totales
      </a>
      
       de la tabla de artículos. Vacío cuando la reserva no tiene artículos.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingItemsFullPriceTotal}}
      </code>
    </td>
    
    <td>
      La suma de los precios completos de todas las unidades reservadas, es decir, lo que te costaron los equipos alquilados, por ejemplo para una cláusula de responsabilidad o de valor asegurado. Vacío cuando ningún producto reservado tiene precio completo.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingServices}}
      </code>
    </td>
    
    <td>
      Una tabla HTML completa con los servicios de la reserva. Por defecto imprime nombre, precio y total; consulta <a href="#elegir-las-columnas-de-la-tabla">
        Elegir las columnas de la tabla
      </a>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingSaleItems}}
      </code>
    </td>
    
    <td>
      Una tabla con los productos vendidos en la reserva (<a href="https://requiply.com/docs/es/guides/sales">
        Ventas
      </a>
      
      ), descontadas las devoluciones. Por defecto imprime nombre, cantidad, precio y total; consulta <a href="#columnas-de-la-tabla-de-productos-vendidos">
        Columnas de la tabla de productos vendidos
      </a>
      
      . Vacío cuando no se ha vendido nada.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingSaleTotal}}
      </code>
    </td>
    
    <td>
      <strong>
        Total of sold items
      </strong>
      
       (total de los productos vendidos): el total neto de los productos vendidos en la reserva, ya incluido en <code>
        {{bookingTotal}}
      </code>
      
      . Vacío cuando no se ha vendido nada.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingRentTotal}}
      </code>
    </td>
    
    <td>
      <strong>
        Booking total without sold items
      </strong>
      
       (total de la reserva sin los productos vendidos): <code>
        {{bookingTotal}}
      </code>
      
       menos los productos vendidos, es decir, el alquiler, los servicios, los descuentos y los ajustes. En una reserva sin productos vendidos es igual a <code>
        {{bookingTotal}}
      </code>
      
      . Úsala con <code>
        {{bookingSaleTotal}}
      </code>
      
       para mostrar el alquiler y los productos en líneas separadas encima del importe a pagar, consulta <a href="#separar-el-alquiler-y-los-productos-vendidos-en-el-resumen">
        Separar el alquiler y los productos vendidos en el resumen
      </a>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{organizationName}}
      </code>
    </td>
    
    <td>
      El nombre de la organización.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{organizationEmail}}
      </code>
    </td>
    
    <td>
      El email de contacto de la organización.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{organizationPhone}}
      </code>
    </td>
    
    <td>
      El teléfono de contacto de la organización.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{organizationLogoUrl}}
      </code>
    </td>
    
    <td>
      La dirección web del <strong>
        logo para el modo claro
      </strong>
      
       de <a href="https://requiply.com/docs/es/guides/settings/organization/info#logotipos">
        Información de la organización
      </a>
      
      , para usarla dentro de una etiqueta de imagen: <code>
        <img src="{{organizationLogoUrl}}">
      </code>
      
      . Vacío cuando no se ha subido ningún logo. Consulta <a href="#poner-tu-logo-en-un-documento">
        Poner tu logo en un documento
      </a>
      
      .
    </td>
  </tr>
</tbody>
</table>

<note>

`{{bookingItems}}` y `{{bookingServices}}` insertan una tabla completa, no un valor. Ponlas en su propia línea y no dentro de una frase. Los encabezados de sus columnas se muestran en el idioma de la organización, y los precios usan la moneda de la organización.

</note>

### Elegir las columnas de la tabla

Escrita sin más, `{{bookingItems}}` imprime sus columnas por defecto. Añade una **lista de columnas entre corchetes** y la tabla imprime exactamente las columnas que indiques, en el orden en que las indiques:

```text
{{bookingItems[index, name, serial, qty, price, total]}}
```

Las entradas se separan con comas y van sin comillas. Las entradas desconocidas se ignoran. Sin corchetes se usan las columnas por defecto: SKU, nombre, cantidad, precio y total para los artículos, y nombre, precio y total para los servicios.

#### Tus propios encabezados de columna

Cada columna imprime un encabezado estándar en el idioma de la organización, como *Name* o *Qty*. Para usar tu propio texto, escríbelo después del nombre de la columna con dos puntos:

```text
{{bookingItems[index, name:Equipment, qty:Units, total:Amount]}}
```

El encabezado es texto libre en cualquier idioma, así que un contrato en ucraniano puede imprimir `{{bookingItems[name:Найменування, qty:Кількість]}}`. Funciona con todas las columnas de las tres tablas, incluidas las columnas de campos personalizados: `groupField_weight_kg:Weight (kg)`.

<warning>

**Un encabezado no puede contener una coma ni un corchete de cierre.** La coma empieza la siguiente columna y `]` cierra la lista, así que `qty:Qty, pcs` imprime una columna con el encabezado *Qty* y descarta la entrada desconocida `pcs`. Escribe `qty:Qty (pcs)` en su lugar, y no uses comillas.

</warning>

#### Columnas de la tabla de artículos

<table>
<thead>
  <tr>
    <th>
      Columna
    </th>
    
    <th>
      Imprime
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        index
      </code>
    </td>
    
    <td>
      El número de fila.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        image
      </code>
    </td>
    
    <td>
      La foto del producto como una pequeña miniatura cuadrada: la foto marcada como predeterminada en el producto o, si no hay ninguna, su primera foto. No tiene encabezado salvo que le pongas uno, por ejemplo <code>
        image:Photo
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        sku
      </code>
    </td>
    
    <td>
      El SKU, el identificador de la organización.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        serial
      </code>
    </td>
    
    <td>
      El número de serie del fabricante de la unidad.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        name
      </code>
    </td>
    
    <td>
      El nombre del producto.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        category
      </code>
    </td>
    
    <td>
      La categoría.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        qty
      </code>
    </td>
    
    <td>
      La cantidad.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        price
      </code>
    </td>
    
    <td>
      El precio por unidad.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        priceType
      </code>
    </td>
    
    <td>
      La tarifa: por día, por hora, por mes o fija.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        deposit
      </code>
    </td>
    
    <td>
      La fianza por unidad.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        full_price
      </code>
    </td>
    
    <td>
      El precio completo, lo que te costó el equipo.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        full_price_total
      </code>
    </td>
    
    <td>
      El precio completo multiplicado por la cantidad, por ejemplo <em>
        2400,00 €
      </em>
      
       por dos cámaras que costaron <em>
        1200,00 €
      </em>
      
       cada una.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        total
      </code>
    </td>
    
    <td>
      El total de la línea.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        itemField_<field key>
      </code>
    </td>
    
    <td>
      Un campo personalizado definido a nivel de <strong>
        unidad
      </strong>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        groupField_<field key>
      </code>
    </td>
    
    <td>
      Un campo personalizado definido a nivel de <strong>
        producto
      </strong>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        blank:Label
      </code>
    </td>
    
    <td>
      Una columna vacía con <em>
        Label
      </em>
      
       como encabezado, para celdas que se rellenan a mano.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        totals
      </code>
    </td>
    
    <td>
      No es una columna: añade una fila de resumen al final de la tabla, consulta <a href="#fila-de-totales">
        Fila de totales
      </a>
      
      .
    </td>
  </tr>
</tbody>
</table>

Las filas de artículos siguen el orden en que se añadieron los productos a la reserva, y todas las exportaciones de la misma reserva las imprimen en el mismo orden. Los productos guardados a la vez, como todo lo que se eligió al crear la reserva, se ordenan por nombre, comparando los números como números (*Light 2* antes que *Light 10*). Los productos añadidos a la reserva más tarde van después, en el orden en que se añadieron. Las unidades de un mismo producto se ordenan por SKU.

#### Fila de totales

Añade `totals` en cualquier punto de la lista de columnas y la tabla termina con una fila de resumen. La columna del nombre muestra *Total:* (en una tabla sin `name`, la primera columna que no tiene suma propia), y cada columna que se puede sumar muestra su suma:

```text
{{bookingItems[index, name, qty, deposit, full_price_total, total, totals]}}
```

<table>
<thead>
  <tr>
    <th>
      Columna
    </th>
    
    <th>
      Suma en la fila de totales
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        qty
      </code>
    </td>
    
    <td>
      Todas las unidades reservadas.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        deposit
      </code>
    </td>
    
    <td>
      La fianza por unidad multiplicada por la cantidad, sumada en todas las filas.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        full_price_total
      </code>
    </td>
    
    <td>
      El precio completo de todo lo reservado, el mismo importe que <code>
        {{bookingItemsFullPriceTotal}}
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        total
      </code>
    </td>
    
    <td>
      El alquiler de todos los artículos después de los descuentos de los packs, así que coincide con las filas de arriba, incluida cualquier fila de pack, y es igual a <code>
        {{bookingItemsTotal}}
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        itemField_…
      </code>
      
       y <code>
        groupField_…
      </code>
      
       en un campo <strong>
        Number
      </strong>
      
       (numérico)
    </td>
    
    <td>
      El valor del campo multiplicado por la cantidad de cada fila, todo sumado. Un producto que pesa <em>
        2,5
      </em>
      
       kg reservado 4 veces cuenta como <em>
        10
      </em>
      
      .
    </td>
  </tr>
</tbody>
</table>

Las demás columnas, como `price`, `full_price` o los campos de texto, quedan vacías en la fila de totales. `totals` sola, `{{bookingItems[totals]}}`, imprime las columnas por defecto con una fila de resumen. La etiqueta sigue el idioma de la organización: *Total:* en los documentos en inglés, *Всього:* en los documentos en ucraniano.

`totals` también funciona en las otras dos tablas: `{{bookingServices[name, total, totals]}}` suma los totales de los servicios, y `{{bookingSaleItems[name, qty, total, totals]}}` suma la cantidad y el total de los productos vendidos.

#### Packs en la tabla de artículos

Una reserva con un [pack](https://requiply.com/docs/es/guides/inventory/bundles) recibe una fila extra por cada pack al final de cada tabla `{{bookingItems}}`, sean cuales sean las columnas que hayas elegido:

- La columna del nombre (o la primera columna, si la tabla no tiene `name`) muestra *Podcast duo kit: bundle discount 10%*, con *Includes: …* debajo en letra pequeña gris.
- La columna `total` contiene el importe en negativo, por ejemplo *-19,20 €*. Una tabla sin columna `total` pone el importe en la etiqueta: *Podcast duo kit: bundle discount 10% (-$19.20)*.
- Las demás celdas quedan vacías, y la fila no tiene número de fila.

Las filas de artículos mantienen sus precios completos, así que la tabla suma `{{bookingTotal}}` cuando se cuenta la fila del pack. Las plantillas creadas antes de que existieran los packs no necesitan ningún cambio.

#### Columnas de la tabla de servicios

`index`, `name`, `price`, `priceType`, `total` y `blank:Label`, además de `totals` para una fila de resumen con la suma de `total`.

#### Columnas de la tabla de productos vendidos

`index`, `sku`, `name`, `qty`, `price`, `total` y `blank:Label`, además de `totals` para una fila de resumen con las sumas de `qty` y `total`. Sin corchetes imprime `name`, `qty`, `price` y `total`, por ejemplo `{{bookingSaleItems[index, sku, name, qty, price, total]}}`.

<note>

**Las columnas por unidad dividen las filas.** `serial` y cualquier columna `itemField_*` describen una unidad física, así que al incluir cualquiera de ellas se imprime **una fila por unidad** en lugar de una fila por línea de producto. Una línea de 3 trípodes se convierte en tres filas, cada una con su propio número de serie.

</note>

<note>

**Las columnas vacías desaparecen.** `image`, `sku`, `serial`, `full_price` y `full_price_total` se quitan de la tabla impresa cuando ninguna fila tiene valor, para que el documento no lleve una columna en blanco. Una reserva en la que ningún producto tiene foto no imprime la columna `image`, y los SKU y los números de serie aparecen cuando se asignan las unidades. `blank:Label` es la excepción: está pensada para quedar vacía y siempre se imprime.

</note>

<tip>

**Consejo:** con `blank:Condition` y `blank:Signature`, una tabla de artículos se convierte en un acta de entrega que el personal y el cliente rellenan con bolígrafo en el mostrador.

</tip>

### Variables de campos personalizados

Cada campo personalizado configurado a nivel **Client** (cliente), **Booking** (reserva) u **Organization** (organización) también está disponible como variable. Requiply crea la variable a partir de la clave del campo con un prefijo según el nivel:

<table>
<thead>
  <tr>
    <th>
      Nivel de entidad
    </th>
    
    <th>
      Patrón de la variable
    </th>
    
    <th>
      Ejemplo
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      Cliente
    </td>
    
    <td>
      <code>
        {{clientField_<field key>}}
      </code>
    </td>
    
    <td>
      <code>
        {{clientField_passport_number}}
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Reserva
    </td>
    
    <td>
      <code>
        {{bookingField_<field key>}}
      </code>
    </td>
    
    <td>
      <code>
        {{bookingField_delivery_notes}}
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Organización
    </td>
    
    <td>
      <code>
        {{organizationField_<field key>}}
      </code>
    </td>
    
    <td>
      <code>
        {{organizationField_vat_number}}
      </code>
    </td>
  </tr>
</tbody>
</table>

Aparecen en el desplegable **Insert variable** (insertar variable) junto a las predefinidas, con el nombre del campo y su nivel, por ejemplo `Passport number (Client)`. Los campos de casilla de verificación se muestran como **Yes**/**No** en el idioma del documento, y los campos de selección múltiple, como una lista separada por comas.

Los campos de fecha y de número se imprimen en el idioma del documento, igual que las columnas de tabla `itemField_` y `groupField_`:

<table>
<thead>
  <tr>
    <th>
      Tipo de campo
    </th>
    
    <th>
      Documento en inglés
    </th>
    
    <th>
      Documento en ucraniano
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Date
      </strong>
      
       (fecha)
    </td>
    
    <td>
      <em>
        10/13/2026
      </em>
      
       (primero el mes)
    </td>
    
    <td>
      <em>
        13.10.2026
      </em>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Date
      </strong>
      
       con hora
    </td>
    
    <td>
      <em>
        10/13/2026 14:30
      </em>
      
      , en formato de 24 h y en la zona horaria de la organización
    </td>
    
    <td>
      <em>
        13.10.2026 14:30
      </em>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Number
      </strong>
    </td>
    
    <td>
      <em>
        2.5
      </em>
      
      , con punto decimal
    </td>
    
    <td>
      <em>
        2,5
      </em>
      
      , con coma decimal
    </td>
  </tr>
</tbody>
</table>

Los números se imprimen con dos decimales como máximo y sin separador de miles: *12500* sigue siendo *12500*.

Consulta [Campos de entidad](https://requiply.com/docs/es/guides/settings/fields/entity-fields) para crear un campo y [Configuraciones de nivel](https://requiply.com/docs/es/guides/settings/fields/level-configurations) para vincularlo al nivel de cliente, de reserva o de organización.

### Totales de campos de producto y de unidad

Un campo personalizado numérico a nivel de **producto** o de **unidad** se puede sumar para todo lo que hay en la reserva, por ejemplo el peso total para planificar el transporte o el consumo eléctrico total de la iluminación:

<table>
<thead>
  <tr>
    <th>
      Variable
    </th>
    
    <th>
      Suma
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        {{groupFieldTotal_<field key>}}
      </code>
    </td>
    
    <td>
      Un campo a nivel de <strong>
        producto
      </strong>
      
      , contado una vez por cada unidad reservada. Un producto que pesa <em>
        2,5
      </em>
      
       kg reservado 4 veces suma <em>
        10
      </em>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{itemFieldTotal_<field key>}}
      </code>
    </td>
    
    <td>
      Un campo a nivel de <strong>
        unidad
      </strong>
      
      , cada unidad reservada con su propio valor. Una unidad que aún no está asignada a la reserva cuenta con el valor por defecto del campo.
    </td>
  </tr>
</tbody>
</table>

```html
<p>Total weight: {{groupFieldTotal_weight_kg}} kg</p>
```

El resultado es un número sin más, con el formato del documento, por ejemplo *1,234.5* en inglés y *1 234,5* en ucraniano. No imprime nada cuando ninguna unidad reservada tiene valor en ese campo, así que envuélvela en `{{#if groupFieldTotal_weight_kg}}…{{/if}}` cuando también deba desaparecer la frase que la rodea.

Usa un campo **Number**: los valores que no se leen como número se omiten. Estas variables no están en el desplegable **Insert variable**, escríbelas a mano. Para mostrar la suma debajo de una columna de la tabla, añade la columna `groupField_` o `itemField_` y `totals` a una tabla de artículos, consulta [Fila de totales](#fila-de-totales).

### Bloques condicionales

Las plantillas de exportación admiten una sola pieza de lógica: un bloque opcional que solo se imprime cuando una variable tiene valor.

```html
{{#if bookingDeposit}}
  <p>Security deposit held: {{bookingDeposit}}</p>
{{/if}}
```

El contenido del bloque se mantiene cuando la variable tiene un valor no vacío y se elimina por completo cuando no lo tiene. Los bloques se pueden anidar. No hay ramas `else`, bucles ni comparaciones: cualquier otra cosa se queda en el documento como texto literal.

<note>

Los bloques condicionales son una función de las **plantillas de exportación**. Las plantillas de email no los admiten.

</note>

## Cómo se generan los documentos

Cuando alguien exporta un documento desde una reserva:

1. Requiply carga la plantilla y la reserva.
2. Se resuelven los bloques condicionales y después cada variable se sustituye por los datos de la reserva. Los valores de texto se escapan como HTML para que el nombre de un cliente o una nota no puedan romper el diseño; las tablas de artículos y de servicios se insertan como HTML.
3. El resultado se genera como un **PDF en A4** con márgenes de 15 mm.
4. El archivo se descarga como `<template name>-<booking number>.pdf`.

Las fechas y las horas se formatean en la zona horaria de la organización definida en [Ajustes de fecha y hora](https://requiply.com/docs/es/guides/settings/organization/date-and-time), y los importes usan la moneda de la organización. Los encabezados de las tablas, la etiqueta *Total:* de una fila de totales, los valores Yes/No y el formato de los campos personalizados de fecha y de número siguen el idioma de la organización.

## Dónde se usan las plantillas

<figure>

![El diálogo Choose export type en la tabla de reservas con el selector abierto, que muestra PDF Invoice y una plantilla de documento personalizada](https://requiply.com/docs/assets/settings/bookings/export-templates/export-dialog.png)<figcaption>

El diálogo **Choose export type** muestra primero la factura en PDF y después cada plantilla de exportación por su nombre.

</figcaption>
</figure>

Las plantillas aparecen en el diálogo **Export**, al que el personal llega desde:

- El botón dividido **Export** de cada fila en [Gestionar reservas](https://requiply.com/docs/es/guides/bookings/manage).
- La acción de exportar en la página de detalle de una reserva.

El diálogo se titula **Choose export type** (elige el tipo de exportación) y muestra primero **PDF Invoice** y después cada plantilla de exportación por su nombre. Al elegir una plantilla y confirmar, se genera y se descarga ese documento para la reserva.

## Casos habituales

### Crear un contrato de alquiler

1. Abre **Create template** y ponle el nombre `Rental agreement`.
2. Deja el editor del contenido en modo **HTML** y organiza las secciones: partes, periodo de la reserva, equipos, cargos, responsabilidades y firmas.
3. Inserta `{{organizationName}}`, `{{clientName}}`, `{{bookingStartDateTime}}`, `{{bookingEndDateTime}}` y `{{bookingItems}}` desde el desplegable **Insert variable**.
4. Envuelve el párrafo de la fianza en `{{#if bookingDeposit}}…{{/if}}` para que desaparezca en las reservas sin fianza.
5. Revisa la vista previa en directo y guarda.

### Poner tu logo en un documento

Sube un logo para el modo claro en [Información de la organización](https://requiply.com/docs/es/guides/settings/organization/info#logotipos) y añádelo al principio de la plantilla dentro de una etiqueta de imagen:

```html
{{#if organizationLogoUrl}}
  <img src="{{organizationLogoUrl}}" alt="{{organizationName}}" style="max-height:60px;">
{{/if}}
```

El bloque `{{#if …}}` mantiene la plantilla limpia en una organización sin logo. La vista previa en directo no tiene logo, así que el bloque queda oculto ahí: exporta una reserva real para verlo.

### Imprimir una lista de preparación con fotos y peso total

1. Crea un campo **Number** como *Peso (kg)* con la clave `weight_kg` a nivel de **producto** y rellénalo en tus productos (consulta [Campos de entidad](https://requiply.com/docs/es/guides/settings/fields/entity-fields)).
2. Crea una plantilla llamada `Packing list` y añade la tabla de artículos con fotos, tus propios encabezados y una fila de totales:```text
{{bookingItems[index, image:Photo, name:Item, qty:Qty, groupField_weight_kg:Weight (kg), blank:Packed, totals]}}
```
3. Debajo de la tabla, añade `{{#if groupFieldTotal_weight_kg}}<p>Total weight: {{groupFieldTotal_weight_kg}} kg</p>{{/if}}` y `<p>Units to pack: {{bookingItemsQuantity}}</p>`.

Las filas salen en el orden en que se añadieron los productos a la reserva, y la fila de totales bajo la columna del peso muestra el peso de todo lo que hay en la reserva.

### Indicar el periodo de alquiler y el valor asegurado en un contrato

Escribe el periodo y el valor de los equipos con palabras que el cliente firma:

```html
<p>Rental period: {{bookingDays}} days, from {{bookingStartDateTime}} to {{bookingEndDateTime}}.</p>
<p>Rent for the equipment: {{bookingItemsTotal}}.</p>
{{#if bookingItemsFullPriceTotal}}
  <p>Total value of the equipment handed over: {{bookingItemsFullPriceTotal}}.</p>
{{/if}}
```

### Separar el alquiler y los productos vendidos en el resumen

Cuando una reserva incluye productos vendidos con [Ventas](https://requiply.com/docs/es/guides/sales), como tarjetas de memoria o baterías, muchos clientes quieren el alquiler y la compra en líneas separadas. Los dos totales están en el desplegable **Insert variable** como **Booking total without sold items** y **Total of sold items**:

```html
<table>
  <tr><td>Rent and services</td><td>{{bookingRentTotal}}</td></tr>
  {{#if bookingSaleTotal}}
    <tr><td>Goods sold</td><td>{{bookingSaleTotal}}</td></tr>
  {{/if}}
  <tr><td><strong>Total to pay</strong></td><td><strong>{{bookingTotal}}</strong></td></tr>
</table>
```

Las dos líneas siempre suman `{{bookingTotal}}`. El bloque `{{#if …}}` oculta la línea de los productos en las reservas sin productos vendidos, así que una sola plantilla sirve para todas las reservas.

### Dejar que el asistente lo redacte

Pulsa **Create with Requiply Assistant** junto al editor del contenido y describe el documento que necesitas. El asistente devuelve un borrador completo, listo para imprimir, con las variables correctas ya colocadas, que aplicas al editor con una sola pulsación. Consulta [Requiply Assistant](https://requiply.com/docs/es/ai/requiply-assistant).

### Recoger datos propios de tu negocio

Si tu contrato necesita un número de pasaporte, un número de IVA o una dirección de envío que Requiply no guarda por defecto, créalo primero como campo personalizado a nivel de cliente, de reserva o de organización. Después aparecerá en el desplegable **Insert variable** de todas las plantillas.

## Consejos y precauciones

<tip>

**Consejo:** crea los documentos en modo **HTML**. Los contratos y las actas necesitan tablas, encabezados y una estructura de página que el editor de texto enriquecido simplificaría.

</tip>

<tip>

**Consejo:** usa `{{#if …}}` para todo lo opcional: fianzas, notas de envío, campos personalizados que solo se rellenan a veces. Así una sola plantilla sirve para todas las reservas y no tienes que mantener varias casi idénticas.

</tip>

<tip>

**Consejo:** añade `totals` a una tabla en lugar de escribir las sumas en el texto que la rodea. La fila de resumen siempre coincide con las filas de arriba, incluidos los descuentos de los packs.

</tip>

<warning>

**Atención:** la vista previa en directo usa datos de ejemplo, no una reserva real. Exporta una reserva real una vez después de crear una plantilla para confirmar que las tablas y los importes quedan donde esperas.

</warning>


## Sitemap

See the full [sitemap](https://requiply.com/docs/sitemap.md) for all pages.
