Format d'impression de rapport
Format d'impression de rapport
Un rapport de requête ou un rapport de script peut être imprimé ou exporté en PDF. Sans format d'impression, Dokos imprime le tableau du rapport avec son modèle par défaut. Un format d'impression de rapport vous permet de choisir la présentation.
Deux types de formats existent :
| Type | Rendu | Ce qu'il permet |
|---|---|---|
| JS | Dans le navigateur. | Le moteur de modèles du navigateur : boucles et conditions simples. Pas de filtres Jinja (` |
| Jinja | Sur le serveur, dans le même bac à sable que les autres formats d'impression. | Tous les filtres et directives Jinja. |
Prérequis
- Avoir le droit de créer des Formats d'impression (rôle Gestionnaire système par défaut).
- Pour imprimer : avoir la permission Imprimer sur le type de document de référence du rapport.
Créer un format d'impression de rapport
- Ouvrez la recherche (Ctrl+K), saisissez Format d'impression et ouvrez la liste.
- Cliquez sur Créer.
- Dans Format d'impression pour, choisissez Report.
- Sélectionnez le Rapport.
- Saisissez le Nom du format.
- Dans « Modèles », choisissez JS (par défaut) ou Jinja. La description du champ rappelle : JS est rendu dans le navigateur, Jinja sur le serveur.
- Cliquez sur Créer. Le formulaire du format s'ouvre avec un modèle HTML minimal.
- Écrivez votre modèle dans le champ HTML, puis enregistrez.
Imprimer ou exporter en PDF
- Ouvrez le rapport et appliquez vos filtres.
- Cliquez sur Menu > Imprimer. La page d'aperçu d'impression s'ouvre.
- Dans Format d'impression, choisissez votre format. Vide, le modèle par défaut du rapport s'applique.
- Choisissez l'En-tête de lettre si besoin. Seuls les en-têtes dont En-tête de lettre pour vaut Report sont proposés.
- Cliquez sur Imprimer ou sur PDF.
La page d'aperçu est décrite dans Imprimer un rapport.
Données disponibles dans un modèle Jinja
| Variable | Contenu |
|---|---|
report.name, report.report_name | Le nom du rapport. |
filters | Les filtres appliqués. |
columns | Les colonnes du rapport (label, fieldname, etc.). |
data | Les lignes affichées. Chaque ligne se lit avec row.get("nom_du_champ"). |
print_settings | Les paramètres d'impression. |
Pour l'aperçu et l'impression, le modèle reçoit les lignes que le navigateur a déjà chargées : l'impression reflète ce que vous voyez à l'écran.
Pour le PDF d'un format Jinja, Dokos exécute le rapport sur le serveur avec les mêmes filtres. Il garde les lignes visibles à l'écran, dans le même ordre. Si vous cochez « Générer le PDF en arrière-plan », Dokos prépare le PDF en arrière-plan et vous envoie un lien par e-mail.
Exemple de modèle Jinja
Exemple fictif : un rapport avec une colonne amount.
<h1>{{ report.report_name }}</h1>
{% set total = namespace(value=0) %}
<table class="table table-bordered">
<thead>
<tr>
{% for column in columns %}
<th>{{ column.label }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in data %}
<tr>
{% for column in columns %}
<td>{{ row.get(column.fieldname, '') }}</td>
{% endfor %}
</tr>
{% set total.value = total.value + (row.get('amount') or 0) %}
{% endfor %}
</tbody>
</table>
<p>Total : {{ total.value | currency }}</p>
Dans cet exemple :
{% set %}avecnamespacecumule le total. Ce n'est pas possible avec un format JS.|currencyformate le montant.- Les boucles sur
columnsetdatasuivent les colonnes présentes dans le rapport.
Passer un format JS en Jinja
- Ouvrez le format d'impression concerné.
- Changez le Type de format d'impression de JS à Jinja.
- Réécrivez le modèle avec la syntaxe Jinja.
- Testez l'aperçu et le PDF.
Les deux types peuvent coexister. Vous n'avez pas besoin de convertir tous vos formats en une fois.
frappe.utils.print_format.render_report_jinja. Elle refuse un format qui n'est pas de type Jinja ou qui n'a pas de HTML.