Version de développement
Cette documentation décrit la version « next » (develop), non encore publiée. Pour la version stable, basculez sur « v5 » dans l'en-tête.
Impression

Format d'impression de rapport

Créer et utiliser des formats d'impression Jinja ou JS pour imprimer ou exporter en PDF les résultats d'un 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 :

TypeRenduCe qu'il permet
JSDans le navigateur.Le moteur de modèles du navigateur : boucles et conditions simples. Pas de filtres Jinja (`
JinjaSur 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

  1. Ouvrez la recherche (Ctrl+K), saisissez Format d'impression et ouvrez la liste.
  2. Cliquez sur Créer.
  3. Dans Format d'impression pour, choisissez Report.
  4. Sélectionnez le Rapport.
  5. Saisissez le Nom du format.
  6. 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.
  7. Cliquez sur Créer. Le formulaire du format s'ouvre avec un modèle HTML minimal.
  8. Écrivez votre modèle dans le champ HTML, puis enregistrez.

Imprimer ou exporter en PDF

  1. Ouvrez le rapport et appliquez vos filtres.
  2. Cliquez sur Menu > Imprimer. La page d'aperçu d'impression s'ouvre.
  3. Dans Format d'impression, choisissez votre format. Vide, le modèle par défaut du rapport s'applique.
  4. 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.
  5. 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

VariableContenu
report.name, report.report_nameLe nom du rapport.
filtersLes filtres appliqués.
columnsLes colonnes du rapport (label, fieldname, etc.).
dataLes lignes affichées. Chaque ligne se lit avec row.get("nom_du_champ").
print_settingsLes 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 %} avec namespace cumule le total. Ce n'est pas possible avec un format JS.
  • |currency formate le montant.
  • Les boucles sur columns et data suivent les colonnes présentes dans le rapport.

Passer un format JS en Jinja

  1. Ouvrez le format d'impression concerné.
  2. Changez le Type de format d'impression de JS à Jinja.
  3. Réécrivez le modèle avec la syntaxe Jinja.
  4. 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.

Pour les développeurs : le rendu Jinja passe par la méthode 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.