2.3 · États & reporting (éditeur d'états)

Niveau 2 · Intermédiaire : données, requêtes & états

2.3États & reporting (éditeur d'états)

Objectif : créer des états (listes, factures, étiquettes) avec l'éditeur d'états et les imprimer/exporter en PDF.
Temps estimé : 11 min

Les ÉTATS sont les DOCUMENTS IMPRIMÉS (ou exportés) produits par l'application : factures, bons de livraison, listes, statistiques, étiquettes, relevés. C'est un domaine où WinDev est particulièrement fort, avec un ÉDITEUR D'ÉTATS visuel dédié — un vrai atout en gestion, où l'impression reste centrale (documents légaux, pièces comptables, communication client). On dessine l'état visuellement, on le lie à une SOURCE de données (un fichier de l'analyse, une REQUÊTE, une variable), et WinDev gère la pagination, les ruptures et les totaux.

La notion clé est celle des BLOCS. Un état est découpé en zones qui s'impriment à des moments différents : DÉBUT DE DOCUMENT (une seule fois, au début : page de garde, en-tête de facture), HAUT DE PAGE (sur chaque page : logo, titre), CORPS (répété pour CHAQUE ENREGISTREMENT — c'est le cœur), BAS DE PAGE (numéro de page, mentions), FIN DE DOCUMENT (totaux généraux, signature). S'y ajoutent les blocs de RUPTURE : quand on regroupe (par client, par mois, par catégorie), un bloc de début de rupture introduit le groupe et un bloc de fin de rupture affiche ses SOUS-TOTAUX. C'est LE mécanisme du reporting : totaux par groupe et total général. Points pratiques : l'état peut être visualisé à l'écran, imprimé, ou EXPORTÉ (PDF notamment — très demandé), et l'on peut lui passer des PARAMÈTRES (période, client) pour le rendre réutilisable. Bonne pratique : préparer les données via une REQUÊTE plutôt que de multiplier les calculs dans l'état.

Vocabulaire de la section

État
Le document imprimé ou exporté produit par l'application : facture, bon de livraison, liste, statistique, étiquette. Domaine de force de WinDev, avec un éditeur visuel dédié.
Blocs d'un état
Les zones imprimées à des moments différents : DÉBUT DE DOCUMENT (une fois), HAUT DE PAGE (chaque page), CORPS (répété pour CHAQUE enregistrement), BAS DE PAGE, FIN DE DOCUMENT (totaux généraux).
Rupture (regroupement)
Le regroupement par une valeur (client, mois, catégorie) : le bloc de début de rupture introduit le groupe, celui de fin affiche ses SOUS-TOTAUX. LE mécanisme du reporting.
Source de données
Ce sur quoi l'état s'appuie : un fichier de l'analyse, une REQUÊTE (recommandé) ou des variables. La requête permet de préparer les données proprement en amont.
Export PDF
Un état peut être visualisé, imprimé ou EXPORTÉ — le PDF étant le format le plus demandé (envoi par e-mail, archivage, diffusion).
Vérifiez votre compréhension

Comment obtient-on des sous-totaux par groupe dans un ÉTAT ?

Tutoriel 2.3
Tutos « 2.3 » WinDev éditeur états reporting impression (recherche)
Cliquer pour voir les résultats à jour ↗

En pratique — Créer un état avec totaux

  1. Préparez d'abord une REQUÊTE fournissant exactement les données voulues (filtrées, triées) plutôt que de tout calculer dans l'état.
  2. Créez l'état sur cette source et placez les rubriques dans le bloc CORPS (celui qui se répète pour chaque enregistrement).
  3. Ajoutez les blocs de HAUT DE PAGE (logo, titre) et BAS DE PAGE (numéro de page), puis FIN DE DOCUMENT pour le total général.
  4. Définissez une RUPTURE (par client, par mois) pour obtenir des SOUS-TOTAUX par groupe, et prévoyez l'export PDF ainsi que des PARAMÈTRES (période, client).
Vous produisez des documents professionnels (factures, listes, statistiques) avec regroupements, sous-totaux et total général, imprimables ou exportables en PDF.

Points clés à retenir

  • Les ÉTATS produisent les DOCUMENTS de l'application (factures, bons, listes, statistiques, étiquettes). L'éditeur d'états visuel de WinDev est un vrai POINT FORT — l'impression restant centrale en gestion (documents légaux, pièces comptables).
  • Un état est découpé en BLOCS imprimés à des moments différents : DÉBUT DE DOCUMENT (une fois), HAUT DE PAGE (chaque page), CORPS (répété POUR CHAQUE ENREGISTREMENT — le cœur), BAS DE PAGE, FIN DE DOCUMENT (totaux généraux).
  • Les RUPTURES sont LE mécanisme du reporting : en regroupant par client, mois ou catégorie, le bloc de début introduit le groupe et celui de fin affiche les SOUS-TOTAUX — avec le total général en fin de document.
  • Bonne pratique : PRÉPARER LES DONNÉES VIA UNE REQUÊTE (filtrée, triée) plutôt que multiplier les calculs dans l'état. Prévoyez des PARAMÈTRES (période, client) pour la réutilisation et l'EXPORT PDF, très demandé.

Questions fréquentes

Comment obtenir des sous-totaux par groupe dans un état ?

En utilisant les RUPTURES : on définit un regroupement sur une rubrique (le client, le mois, la catégorie), ce qui crée un bloc de début et un bloc de fin de rupture — c'est dans le bloc de FIN que se placent les sous-totaux du groupe. Le mécanisme de la rupture : (1) Une RUPTURE signifie « regrouper les enregistrements par la valeur de telle rubrique ». Chaque fois que cette valeur CHANGE, l'état « rompt » : il ferme le groupe précédent et en ouvre un nouveau. (2) Cela crée deux blocs supplémentaires : un bloc de DÉBUT de rupture (imprimé à l'ouverture du groupe : idéal pour un titre, « Client : DUPONT ») et un bloc de FIN de rupture (imprimé à la fermeture : c'est là qu'on met le SOUS-TOTAL du groupe). (3) Entre les deux, le bloc CORPS se répète pour chaque enregistrement du groupe. (4) En fin de document, on place le TOTAL GÉNÉRAL. Le prérequis absolu : le TRI : (1) Les données doivent être TRIÉES sur la rubrique de rupture. C'est la condition indispensable et l'erreur la plus fréquente. (2) Pourquoi ? Parce que la rupture se déclenche au CHANGEMENT de valeur. Si les données ne sont pas triées, un même client réapparaîtra plus loin dans la liste et créera un nouveau groupe : vous obtiendrez plusieurs blocs « DUPONT » avec des sous-totaux partiels et faux. (3) Assurez donc le tri dans la REQUÊTE source (ORDER BY sur la rubrique de rupture, puis sur ce que vous voulez à l'intérieur du groupe). (4) Symptôme typique du problème : le même groupe apparaît plusieurs fois dans l'état. Les points pratiques : (1) Les CALCULS : WinDev sait totaliser automatiquement une rubrique numérique sur une rupture (somme, moyenne, compteur). On place le champ de calcul dans le bloc de fin de rupture, en précisant la portée (le groupe) ou en fin de document (l'ensemble). (2) Ruptures IMBRIQUÉES : on peut regrouper par région PUIS par client, avec des sous-totaux à chaque niveau et un total général. Le tri doit alors suivre la même hiérarchie (région, puis client). (3) Lisibilité : soignez la présentation des blocs de rupture (mise en évidence du titre de groupe, séparation visuelle, alignement des totaux sous les colonnes correspondantes). Un état de gestion doit se lire d'un coup d'œil. (4) Saut de page par groupe : souvent souhaitable (une page par client), c'est une option du bloc de rupture. (5) Vérifiez toujours vos totaux sur un jeu de données connu : un total faux dans un document comptable est un défaut grave, d'autant plus dangereux qu'il ne provoque aucune erreur visible. La méthode complète : (1) Préparer une REQUÊTE avec les bonnes données, filtrées et TRIÉES selon la hiérarchie de regroupement. (2) Créer l'état sur cette requête. (3) Définir la ou les ruptures. (4) Placer les rubriques dans le CORPS, les titres dans les débuts de rupture, les sous-totaux dans les fins de rupture. (5) Ajouter le total général en fin de document. (6) Tester et CONTRÔLER les chiffres. En résumé : on obtient des sous-totaux par groupe grâce aux RUPTURES — un regroupement défini sur une rubrique (client, mois, catégorie) qui génère un bloc de DÉBUT de rupture (pour le titre du groupe) et un bloc de FIN de rupture, où se placent les SOUS-TOTAUX ; le bloc CORPS se répète entre les deux pour chaque enregistrement, et le total général va en fin de document. La condition IMPÉRATIVE est que les données soient TRIÉES sur la rubrique de rupture (via ORDER BY dans la requête source), car la rupture se déclenche au changement de valeur : sans tri, un même client réapparaît plus loin et produit plusieurs groupes avec des sous-totaux faux — c'est l'erreur la plus fréquente, et son symptôme est un groupe qui apparaît plusieurs fois. WinDev calcule automatiquement sommes, moyennes et compteurs par rupture, gère les ruptures IMBRIQUÉES (région puis client, avec le tri correspondant) et permet un saut de page par groupe. Enfin, contrôlez toujours vos totaux sur un jeu de données connu : un total faux sur un document comptable est un défaut grave qui ne déclenche aucune alerte.

Pourquoi préparer les données avec une requête plutôt que dans l'état lui-même ?

Parce que la requête fait le travail au bon endroit — le moteur de base de données filtre, trie et calcule efficacement — ce qui rend l'état plus SIMPLE, plus RAPIDE et RÉUTILISABLE, alors que tout traiter dans l'état conduit à des états lents, complexes et difficiles à maintenir. Les avantages de la requête en amont : (1) PERFORMANCE : le moteur filtre avec ses INDEX et ne renvoie que les lignes utiles. Un état basé directement sur un fichier entier peut parcourir des centaines de milliers d'enregistrements pour n'en imprimer que quelques dizaines. (2) SIMPLICITÉ de l'état : l'état ne fait plus que METTRE EN FORME des données déjà prêtes. Sa conception devient claire — chaque chose à sa place : la requête sélectionne, l'état présente. (3) Les JOINTURES au bon endroit : afficher le nom du client à côté de sa commande relève de la requête (jointure), pas de calculs ou de lectures manuelles dans l'état. (4) Les CALCULS d'agrégat (totaux, moyennes, comptages) sont bien plus efficaces côté base (GROUP BY) que ligne à ligne. (5) RÉUTILISABILITÉ : la même requête peut alimenter un état, un champ TABLE et un export. Une seule définition, plusieurs usages — et une seule correction si la règle change. (6) TESTABILITÉ : on peut exécuter la requête seule pour vérifier les données AVANT de se préoccuper de la mise en page. C'est un énorme gain de temps en cas de résultat inattendu : on sait tout de suite si le problème vient des données ou de l'état. (7) PARAMÈTRES : une requête paramétrée (période, client, catégorie) rend l'état réutilisable au lieu d'en créer une version par cas. (8) TRI garanti : essentiel pour les ruptures, comme on l'a vu. Les inconvénients de tout faire dans l'état : (1) L'état devient un fourre-tout mêlant sélection, calcul et présentation — difficile à comprendre et à modifier. (2) Les performances se dégradent, parfois très fortement sur de gros volumes. (3) Le diagnostic est pénible : impossible de distinguer un problème de données d'un problème de mise en page. (4) Aucune réutilisation : la logique est enfermée dans un état particulier. (5) La maintenance devient risquée : toucher à l'état, c'est toucher à la fois aux données et à la présentation. Le principe général (séparer les responsabilités) : (1) La REQUÊTE : quelles données, filtrées comment, triées comment, avec quels calculs d'ensemble. (2) L'ÉTAT : comment ces données sont présentées (mise en page, blocs, ruptures, mise en forme). (3) Cette séparation est un principe de conception général, valable bien au-delà de WinDev. (4) Certains calculs restent naturellement dans l'état : les totaux de rupture, la numérotation des pages, les mises en forme conditionnelles — c'est de la présentation. En résumé : préparez les données avec une REQUÊTE parce que chaque outil doit faire ce qu'il fait le mieux — le moteur de base de données filtre (avec ses index), joint, trie et calcule les agrégats bien plus efficacement que du traitement ligne à ligne dans l'état. Les bénéfices sont cumulatifs : PERFORMANCE (seules les lignes utiles circulent, au lieu de parcourir tout un fichier), SIMPLICITÉ (l'état ne fait plus que mettre en forme), RÉUTILISABILITÉ (la même requête alimente un état, une table et un export, avec une seule correction en cas de changement de règle), TESTABILITÉ (exécuter la requête seule permet de vérifier les données avant la mise en page — et de savoir immédiatement d'où vient un problème), paramétrage (une requête paramétrée évite de dupliquer les états) et TRI garanti pour les ruptures. À l'inverse, tout faire dans l'état produit un objet fourre-tout qui mélange sélection, calcul et présentation : lent sur les gros volumes, difficile à diagnostiquer, impossible à réutiliser et risqué à maintenir. C'est l'application d'un principe de conception universel : séparer la préparation des données de leur présentation. Seuls les calculs de présentation (totaux de rupture, numéros de page, mises en forme conditionnelles) restent légitimement dans l'état.

Autres ressources