> ## Documentation Index
> Fetch the complete documentation index at: https://a3erpapi.appcloud.es/llms.txt
> Use this file to discover all available pages before exploring further.

# FastReport: genera informes PDF personalizados en A3ERP

> Genera informes PDF personalizados con FastReport pasando sentencias SQL como datasets. El informe devuelve el PDF en Base64 para su descarga o envío.

Los endpoints de FastReport te permiten renderizar plantillas de informe `.fr3` personalizadas almacenadas en el servidor, inyectando datos de forma dinámica mediante sentencias SQL. El resultado es el PDF generado devuelto como una cadena en Base64, listo para mostrarlo en el navegador, guardarlo en disco o adjuntarlo a un correo electrónico.

<Note>
  Los archivos de informe `.fr3` deben estar ubicados en la carpeta configurada como **`CarpetaInformesExternos`** en **CfgAPI.exe**. Informes ubicados en otras rutas no serán accesibles.
</Note>

***

## POST — Generar informe FastReport

Renderiza el informe FastReport indicado inyectando los datasets SQL proporcionados y devuelve el PDF resultante codificado en Base64.

```http theme={null}
POST https://servidor:<puerto>/api/rptdescarga/{formato}
```

**Ejemplo de URL:**

```
https://servidor:5555/api/rptdescarga/descargaprueba.fr3
```

### Parámetros

<ParamField path="formato" type="string" required>
  El nombre del archivo de informe FastReport, incluyendo la extensión `.fr3`. Por ejemplo: `descargaprueba.fr3`.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Token de autenticación en formato `Bearer <JWT_token>`.
</ParamField>

<ParamField body="json" type="object" required>
  Objeto JSON que contiene la clave `SQL` con un array de datasets a inyectar en el informe.

  <Expandable title="Propiedades de SQL[]">
    <ParamField body="nombre" type="string" required>
      El nombre del dataset tal como está definido en el archivo `.fr3`. Debe coincidir exactamente con el nombre del componente `TfrxDBDataSet` en el informe.
    </ParamField>

    <ParamField body="sentencia" type="string" required>
      La sentencia SQL que proveerá los datos al dataset. Se ejecuta en la base de datos de A3ERP.
    </ParamField>
  </Expandable>
</ParamField>

### Respuesta

```json theme={null}
{
  "documento": "<contenido del PDF en Base64>"
}
```

<ResponseField name="documento" type="string">
  El PDF generado codificado en Base64.
</ResponseField>

<Tip>
  Para decodificar la respuesta Base64 y obtener el archivo PDF:

  * **JavaScript (navegador):** `atob(response.documento)`
  * **Bash / terminal:** `echo "<base64>" | base64 -d > informe.pdf`
</Tip>

***

## Ejemplo con un único dataset

```json theme={null}
{
  "json": {
    "SQL": [
      {
        "nombre": "frxClientes",
        "sentencia": "select codcli, nomcli, nifcli from clientes order by codcli"
      }
    ]
  }
}
```

## Ejemplo con múltiples datasets

Puedes pasar tantos datasets como necesite el informe. Cada elemento del array `SQL` se corresponde con un dataset diferente definido en el `.fr3`.

```json theme={null}
{
  "json": {
    "SQL": [
      {
        "nombre": "frxClientes",
        "sentencia": "select codcli, nomcli, nifcli from clientes order by codcli"
      },
      {
        "nombre": "frxFacturas",
        "sentencia": "select tipocont, serie, numdoc, fecha, codcli, nomcli, totdoc from cabefacv where month(fecha) = 1"
      }
    ]
  }
}
```

***

## Ejemplo completo de petición HTTP

```http theme={null}
POST https://servidor:5555/api/rptdescarga/descargaprueba.fr3
Authorization: Bearer <JWT_token>
Content-Type: application/json

{
  "json": {
    "SQL": [
      {
        "nombre": "frxClientes",
        "sentencia": "select codcli, nomcli, nifcli from clientes order by codcli"
      },
      {
        "nombre": "frxFacturas",
        "sentencia": "select tipocont, serie, numdoc, fecha, codcli, nomcli, totdoc from cabefacv where month(fecha) = 1"
      }
    ]
  }
}
```
