---
title: "Mode rapport à bandes"
weight: 35
description: "Concevoir des rapports PDF data-driven avec détail répété, groupes, sous-totaux, totaux généraux, formules et mise en forme conditionnelle, dans l'éditeur de mise en page SmartInterventions."
---

# Mode rapport à bandes

L'éditeur de mise en page PDF de SmartInterventions propose deux façons
de composer un document à partir d'un schéma : le **mode flux** et le
**mode rapport (bandes)**. Cette page décrit le mode rapport à bandes,
inspiré des générateurs de rapports classiques (style Crystal Reports).

## À quoi sert le mode rapport, et quand le choisir

Le **mode flux** empile des sections de haut en bas pour produire un
compte rendu narratif simple. C'est le bon choix quand le document se
lit comme une suite de blocs fixes : en-tête, description, photos,
signatures.

Le **mode rapport à bandes** est fait pour les documents *pilotés par
les données*, où une même zone doit se répéter pour chaque ligne d'une
collection. Choisissez-le dès que vous avez besoin d'au moins une de ces
capacités, qu'aucun mode flux ne sait produire :

- **Détail répété** : un bloc imprimé une fois par enregistrement
  (une ligne par pièce posée, un bloc par contrôle d'équipement, une
  ligne par évènement lié).
- **Groupes** : regrouper les enregistrements par une valeur commune
  (par rôle de pièce, par famille d'équipement, par statut) avec un
  en-tête et un pied par groupe.
- **Sous-totaux et totaux généraux** : additionner ou compter
  automatiquement, au niveau d'un groupe (sous-total) et au niveau du
  document entier (total général).
- **Formules** : composer des valeurs calculées (concaténation,
  condition, multiplication, arrondi) sans rien coder.
- **Mise en forme conditionnelle** : changer l'apparence d'une ligne
  selon ses données (par exemple passer une ligne en rouge quand une
  quantité dépasse un seuil).

Si votre document n'a besoin d'aucune de ces capacités, restez en mode
flux : il est plus simple. Un même schéma peut être rendu en flux ou en
rapport ; le choix du mode n'est pas une nature de document mais une
façon de composer la sortie.

## Ouvrir le mode rapport

Le mode rapport s'ouvre depuis l'éditeur de mise en page, accessible
depuis l'onglet **Type d'intervention** (voir
[Configuration > Éditeur visuel de mise en page PDF](configuration)).

1. Dans l'écran **Choisir un document**, sélectionnez le schéma à
   éditer. Les schémas CERFA partent directement dans l'éditeur à
   positionnement absolu ; pour tout autre schéma, une étape de choix du
   mode s'affiche.
2. Choisissez **Mode rapport (bandes)** (l'autre option étant **Mode
   flux (sections)**). Le mode actuellement actif du schéma est
   présélectionné.
3. L'éditeur s'ouvre sur le schéma choisi avec son gabarit rapport déjà
   enregistré, ou sur un rapport vide si aucun n'a encore été créé.

Les deux modes coexistent sans se détruire : si un gabarit de l'autre
mode existe déjà pour ce schéma, l'éditeur vous en avertit et le
conserve (il reste présent, simplement non actif). Aucun gabarit n'est
supprimé sans action explicite de votre part.

## L'écran de l'éditeur

![Éditeur de rapport à bandes en quatre colonnes : la palette des blocs, le canevas à bandes au centre, l'inspecteur à onglets et l'aperçu PDF à droite](screenshots/rapport-bandes-editeur.webp)

L'éditeur de rapport est organisé en quatre colonnes, de gauche à
droite :

- la **palette** des blocs disponibles ;
- le **canevas à bandes** au centre ;
- l'**inspecteur** à onglets (Section, Bande, Données, Formules) ;
- l'**aperçu** PDF à droite.

La barre du haut rappelle le nom du schéma, le libellé "Mode rapport
(bandes)", un indicateur **(non enregistré)** quand des modifications
sont en attente, le bouton **Charger un preset** et le bouton
**Enregistrer**.

### Partir d'un preset livré

Le bouton **Charger un preset** de la barre du haut ouvre une fenêtre
listant les modèles de rapport à bandes livrés avec le module. Ces
presets servent de point de départ : choisissez-en un dans la liste pour
remplir l'éditeur avec sa composition (bandes, blocs, source de données,
formules et règles de mise en forme), prêt à être adapté.

- Si le rapport en cours d'édition contient déjà du contenu, une
  confirmation vous prévient que le chargement du preset **remplacera**
  ce contenu. Annulez pour conserver votre travail.
- Charger un preset ne l'installe pas et ne modifie rien sur le serveur :
  l'opération est en lecture seule. Le preset est simplement recopié dans
  l'éditeur ; rien n'est enregistré tant que vous ne cliquez pas sur
  **Enregistrer**.
- Si aucun preset n'est livré dans le déploiement, la fenêtre l'indique
  ("Aucun preset disponible.") sans bloquer l'éditeur.

## Le canevas à bandes

Au lieu d'une pile plate de sections, le canevas affiche des
**bandeaux horizontaux empilés**, chacun correspondant à une bande du
rapport. Chaque bande porte un libellé, une couleur selon son type, un
compteur du nombre de blocs qu'elle contient, et un bouton **+ / -**
pour la replier ou la déplier.

Les bandes, dans leur ordre d'impression de haut en bas :

| Bande | Imprimée |
|---|---|
| **En-tête de rapport** | Une seule fois, tout en haut de la première page. |
| **En-tête de page** | En haut de chaque page (répétée). |
| **En-tête de groupe 1 à 3** | À chaque rupture du groupe du niveau correspondant. |
| **Détail (répété par ligne)** | Une fois pour chaque ligne de la source de données. |
| **Pied de groupe 1 à 3** | À la fin de chaque groupe (porte les sous-totaux). |
| **Pied de page** | En bas de chaque page (répété). |
| **Pied de rapport** | Une seule fois, tout en bas de la dernière page (porte les totaux généraux). |

Les bandes de groupe (en-tête et pied de niveau 1, 2 et 3) n'apparaissent
sur le canevas que lorsque le groupe correspondant existe : ajoutez un
groupe dans l'onglet **Données** pour faire apparaître ses bandes.

### Remplir, réordonner, sélectionner

- **Sélectionner une bande** : cliquez sur son bandeau d'en-tête. La
  bande sélectionnée est encadrée, et la palette indique "Ajouter à :
  *nom de la bande*".
- **Ajouter un bloc** : avec une bande sélectionnée, cliquez sur un bloc
  de la palette. Un nouveau bloc de ce type est ajouté à la bande et
  sélectionné. Tant qu'aucune bande n'est sélectionnée, la palette est
  désactivée et vous invite à en choisir une.
- **Réordonner les blocs** : à l'intérieur d'une bande, saisissez la
  poignée à gauche d'un bloc (les deux points `::`) et faites-le glisser.
  Le réordonnancement se fait **à l'intérieur d'une seule bande** : on ne
  déplace pas un bloc d'une bande vers une autre.
- **Sélectionner un bloc** : cliquez sur sa carte. Ses propriétés
  s'ouvrent dans l'onglet **Section** de l'inspecteur.
- **Supprimer un bloc** : utilisez le bouton **Supprimer** de sa carte.

La palette reprend tout le vocabulaire de blocs du mode flux (champs,
encadrés, deux colonnes, galerie photo, signatures...), enrichi de deux
blocs propres au mode bandes : **Ligne (inline)**, une ligne de champs
label / valeur compacte, et **Tableau de données**, un tableau itérant
une source.

## L'inspecteur à onglets

L'inspecteur de droite regroupe quatre onglets. Il bascule
automatiquement sur **Section** quand vous sélectionnez un bloc, et sur
**Bande** quand vous sélectionnez une bande sans bloc ; un clic manuel
sur un onglet reste toujours respecté.

### Onglet Section

Propriétés du bloc sélectionné : titre, champs affichés, mise en forme
du bloc. C'est le même panneau de propriétés que celui du mode flux.

### Onglet Bande

Options de la bande sélectionnée (et non d'un bloc) :

- **Répéter sur chaque page** : disponible pour l'en-tête et le pied de
  page uniquement. Réimprime la bande en haut ou en bas de chaque page.
- **Solidaire de la suite** (`keep_with_next`) : disponible pour les
  en-têtes de groupe. Évite qu'un en-tête de groupe se retrouve isolé
  en bas d'une page, séparé de sa première ligne de détail.
- **Masquer si (expression)** (`suppress_when`) : masque entièrement la
  bande quand l'expression saisie est vraie (par exemple `count == 0`).
  La grammaire est celle des formules (voir plus bas).
- **Mise en forme conditionnelle** : une liste ordonnée de règles
  `condition -> style`. La première règle dont la condition est vraie
  l'emporte. Chaque règle définit une condition (expression booléenne)
  et un style : couleur de fond, couleur du texte, couleur de bordure,
  gras, italique. Les règles se réordonnent (Monter / Descendre) et se
  suppriment. Cette mise en forme est surtout utile sur la bande
  **Détail**, mais reste autorisée sur toutes les bandes.

### Onglet Données

Pilote la source du rapport, son tri et ses groupes :

- **Source du détail** : la collection qui alimente la bande Détail
  (une ligne par enregistrement). Les sources disponibles sont **Pièces
  et fournitures** (`partlines`), **Contrôles équipement**
  (`equipment_checks`), **Lignes de l'intervention** (`fichinter_lines`)
  et **Évènements liés** (`linked_actions`). Le panneau rappelle les
  champs disponibles de la source choisie.
- **Tri** : une liste ordonnée de critères `{ champ, sens }`
  (Croissant / Décroissant), avec ajout, suppression et
  réordonnancement. Le tri est appliqué avant le groupage.
- **Groupes (3 niveaux maximum)** : chaque groupe définit un **champ de
  rupture** et un sens de tri. Un nouveau groupe ajouté fait apparaître
  ses bandes **En-tête de groupe N** et **Pied de groupe N** sur le
  canevas. Les niveaux restent contigus (1 à 3) ; supprimer ou
  réordonner un groupe renumérote automatiquement les autres.

### Onglet Formules

Éditeur des champs calculés et des agrégats. Chaque formule porte :

- un **nom** (utilisé pour référence dans les blocs et les autres
  formules) ;
- une **portée** : **Ligne** (calcul sur la ligne courante du détail),
  **Groupe** (agrégat recalculé à chaque groupe, disponible dans les
  en-têtes et pieds de groupe) ou **Rapport** (agrégat sur tout le jeu
  de données, disponible dans le pied de rapport) ;
- une **expression**.

Les fonctions sont fournies par un petit langage à liste blanche, sans
code arbitraire. Un assistant **Insérer une fonction** propose :

- des fonctions scalaires (texte, logique, numérique, dates), par
  exemple `concat`, `upper`, `lower`, `trim`, `substr`, `default`,
  `if`, `round`, `abs`, `min`, `max`, `format_date`, `format_number`,
  `format_currency` ;
- des agrégats réservés aux portées Groupe / Rapport : `sum`, `count`,
  `count_if`, `avg`, `min_of`, `max_of`.

Un panneau repliable **Champs disponibles** liste les champs de la
source courante, insérables en un clic dans l'expression en cours
d'édition.

#### Validation en direct

Les formules sont validées **par le serveur**, en continu : à chaque
modification, le rapport est envoyé et le verdict est affiché peu après.
Une bannière indique **Aucune erreur** (vert), le nombre d'erreurs
détectées (rouge), ou **Validation indisponible** si le serveur est
injoignable (l'éditeur reste utilisable). Les erreurs liées à une
formule précise s'affichent sous cette formule, avec leur position ;
les erreurs générales (cycle entre formules, condition de bande, source
de données) sont regroupées à part. Une fonction ou un identifiant
inconnu est refusé à la validation.

## Exemple concret : un rapport de pièces groupé par rôle

Le module est livré avec un gabarit type, **parts_aggregated_report_v20**
("Rapport des pièces avec agrégats"), qui illustre toutes les capacités
du mode. Il produit un rapport des pièces de l'intervention regroupées
par rôle, avec un sous-total par groupe, un total général et une mise en
forme conditionnelle.

Sa composition :

- **Source** : `partlines` (les pièces et fournitures de
  l'intervention), triée par `role` puis `product_ref`.
- **Groupe (niveau 1)** : rupture sur le champ `role` (consommable,
  nouvel équipement, pièce de remplacement, dépose seule).
- **Formules** :
  - `line_total = qty * subprice` (portée Ligne) : le total de chaque
    ligne ;
  - `group_total = sum(total_ht)` (portée Groupe) : le sous-total HT du
    rôle ;
  - `group_lines = count()` (portée Groupe) : le nombre de lignes du
    rôle ;
  - `grand_total = sum(total_ht)` (portée Rapport) : le total général
    HT ;
  - `lines_count = count()` (portée Rapport) : le nombre total de
    lignes.
- **Bandes** :
  - **En-tête de rapport** : le titre "Rapport des pièces avec
    agrégats".
  - **En-tête de page** : la référence de l'intervention et le nom du
    client, répétés en haut de chaque page.
  - **En-tête de groupe 1** : le rôle en cours et son nombre de lignes,
    marqué **Solidaire de la suite** pour ne jamais rester seul en bas
    de page.
  - **Détail** : une ligne par pièce (référence, désignation, quantité,
    prix unitaire, total ligne). Une règle de mise en forme
    conditionnelle passe la ligne en rouge (`when: qty > 5`, fond
    `#FDECEA`, texte `#B71C1C`, gras) pour signaler les quantités
    élevées.
  - **Pied de groupe 1** : le nombre de lignes du rôle et le sous-total
    HT du rôle.
  - **Pied de page** : une mention de bas de page, répétée sur chaque
    page.
  - **Pied de rapport** : le nombre total de lignes et le total général
    HT.

Ce gabarit est un bon point de départ : ouvrez-le en mode rapport,
inspectez chaque bande, puis adaptez les groupes, les formules et les
règles de mise en forme à votre besoin.

## Aperçu serveur et enregistrement

La colonne **Aperçu** affiche en continu le vrai PDF du rapport, rendu
par le serveur (et non une simulation côté navigateur), de sorte que ce
que vous voyez correspond exactement au document final.

- Choisissez une **intervention de démo** dans la liste : l'aperçu est
  généré à partir de ses données réelles. Cette liste ne propose que les
  interventions **du même type** que le schéma en cours d'édition (ou
  sans type), pour un aperçu cohérent : on ne prévisualise pas une mise en
  page "extincteur" avec une fiche dont le périmètre est un ascenseur.
  L'aperçu n'apparaît que si une intervention valide est choisie et qu'au
  moins une bande contient un bloc.
- Pendant que vous **composez** le rapport sans avoir encore choisi de
  source de données (onglet Données), l'aperçu ne tombe pas en erreur : il
  rend les bandes fixes (en-têtes et pieds de rapport et de page) avec un
  détail vide. Le détail se remplit dès qu'une source est renseignée.
- L'aperçu se rafraîchit automatiquement peu après chaque modification ;
  le bouton **Rafraîchir** force un nouveau rendu sans attendre.

Pour conserver votre travail, cliquez sur **Enregistrer** dans la barre
du haut. Le gabarit à bandes est stocké dans le schéma, à côté d'un
éventuel gabarit flux qui reste conservé mais inactif. Une fois
enregistré et choisi comme mode actif du schéma, le rapport est produit
pour les fiches d'intervention correspondantes.
