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 ou exporter en PDF, avec ruptures et totaux.
Temps estimé : 11 min · lecture autonome · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

L'essentiel en 30 secondes

  • Les états sont les documents imprimés ou exportés produits par l'application (factures, bons de livraison, listes, statistiques, étiquettes) ; WinDev propose un éditeur d'états visuel dédié.
  • Un état se découpe en blocs imprimés à des moments différents : début de document, haut de page, corps (répété pour chaque enregistrement), bas de page, fin de document.
  • Les ruptures sont LE mécanisme du reporting : un regroupement (par client, mois, catégorie) crée un bloc de début et un bloc de fin de rupture où se placent les sous-totaux — à condition que les données soient triées.

Mini-cas filé — Yacine édite la facture du négoce

Yacine, développeur WinDev dans une PME de négoce de matériel électrique à Oran, doit produire les factures clients de l'application de gestion. Il crée un état dans l'éditeur d'états et le lie à une source de données : une requête préparée en amont (commande + lignes + client), filtrée et triée. Il place les rubriques dans le bloc corps (répété pour chaque ligne), l'en-tête de facture dans le bloc début de document, le logo et le titre dans haut de page, puis le total général dans fin de document. Comme les factures listent parfois plusieurs commandes par client, il pose une rupture par client pour obtenir des sous-totaux. Enfin, il prévoit l'export PDF pour l'envoi par e-mail et des paramètres (numéro de commande) pour réutiliser l'état.

Cas autonome de cette section : il revient dans le cours, le schéma, le script et le défi 48h de la section 2.3.

1. Des documents, pas du code

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é. On dessine l'état, 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.

2. Les blocs d'un état

La notion clé est celle des blocs : zones imprimées à des moments différents. Début de document (une seule fois : 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).

3. Ruptures et export

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 — à condition impérative que les données soient triées sur cette rubrique. Points pratiques : l'état peut être visualisé, imprimé ou exporté (PDF notamment, très demandé), et l'on peut lui passer des paramètres (période, client). Bonne pratique : préparer les données via une requête plutôt que de multiplier les calculs dans l'état.

Erreur d'interprétation fréquente : « Un état calcule ses totaux tout seul ; le corps s'imprime une fois ; et on peut regrouper sans trier ». Non, triple erreur. Les sous-totaux par groupe s'obtiennent par les ruptures, pas automatiquement. Le bloc corps se répète pour chaque enregistrement (c'est le cœur de l'état), seul le bloc début de document s'imprime une fois. Et une rupture exige que les données soient triées sur la rubrique de regroupement, sinon un groupe réapparaît plus loin et produit des sous-totaux faux. Yacine prépare donc ses données via une requête triée.
Les blocs d'un état Chaque bloc s'imprime à un moment précis ; les ruptures ajoutent les sous-totaux par groupe. Début de documentUne fois (en-tête de facture)+Haut de pageChaque page (logo, titre)+CorpsRépété par enregistrement+Fin de documentTotaux généraux Rupture = regroupement par client/mois + sous-totaux (données triées obligatoires).
Chaque bloc s'imprime à un moment précis ; les ruptures ajoutent les sous-totaux par groupe.
Version texte du schéma (SEO / lecteurs d'écran / traduction) : 1) Yacine, développeur WinDev dans une PME de négoce de matériel électrique à Oran, apprend que les états sont les documents imprimés ou exportés de l'application (factures, listes, statistiques, étiquettes) et que l'éditeur d'états de WinDev est un vrai point fort. 2) Il retient qu'un état se découpe en blocs : début de document (une fois), haut de page (chaque page), corps (répété pour chaque enregistrement), bas de page et fin de document (totaux généraux), et que les ruptures ajoutent les sous-totaux par groupe si les données sont triées. 3) Pour ses factures, il lie l'état à une requête, place les lignes dans le corps, l'en-tête en début de document, et prévoit l'export PDF ainsi qu'un paramètre numéro de commande. Leçon : préparer les données via une requête plutôt que multiplier les calculs dans l'état.

🔎 Exemple concret — 🔎 Exemple concret — Rupture & export PDF

Obtenir des sous-totaux par client puis diffuser : Yacine combine ruptures, paramètres et export.

// Lancer l'apercu de l'etat facture pour une commande donnee
iApercu("ETAT_Facture", {pNumCommande})

// Structure des blocs
Debut de document -> en-tete (raison sociale, coordonnees)
Haut de page      -> logo + titre
Corps             -> une ligne par article
Rupture client    -> sous-total par client (donnees TRIEES)
Fin de document   -> total general

Lecture   : le corps se repete par enregistrement ; les ruptures font les sous-totaux
Reflexe   : preparer les donnees via une REQUETE triee + prevoir l'export PDF

Lecture : le bloc corps répète chaque ligne, et la rupture par client place les sous-totaux en fin de groupe.

Leçon : les données doivent être triées pour que les ruptures soient justes, et l'état est réutilisable grâce au paramètre {pNumCommande}.

Vocabulaire de la section

État
Le document imprimé ou exporté produit par l'application : facture, bon de livraison, liste, statistique, étiquette.

Exemple simple : Yacine crée l'état « Facture client » du négoce.

Ce que ce n'est pas : une fenêtre de saisie affichée à l'écran.

Réflexe : produire un document → un état.

Blocs d'un état
Les zones imprimées à des moments différents : début de document (une fois), haut de page (chaque page), corps (par enregistrement), bas de page, fin de document.

Exemple simple : Yacine place les lignes de facture dans le corps.

Ce que ce n'est pas : un seul bloc unique imprimé d'un coup.

Réflexe : répéter par enregistrement → le bloc corps.

Rupture (regroupement)
Le regroupement par une valeur (client, mois, catégorie) : le bloc de début introduit le groupe, celui de fin affiche ses sous-totaux.

Exemple simple : Yacine pose une rupture par client pour les sous-totaux.

Ce que ce n'est pas : un simple tri sans sous-total.

Réflexe : des sous-totaux par groupe → une rupture.

Source de données
Ce sur quoi l'état s'appuie : un fichier de l'analyse, une requête (recommandé) ou des variables.

Exemple simple : Yacine lie la facture à une requête commande + lignes + client.

Ce que ce n'est pas : des valeurs saisies à la main dans l'état.

Réflexe : préparer les données proprement → une requête comme source.

Export PDF
Un état peut être visualisé, imprimé ou exporté — le PDF étant le format le plus demandé (envoi par e-mail, archivage, diffusion).

Exemple simple : Yacine envoie la facture en PDF par e-mail au client.

Ce que ce n'est pas : n'imprimer que sur papier, sans fichier diffusable.

Réflexe : diffuser ou archiver un document → l'export PDF.

En pratique — 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, comme Yacine.
  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.

Script pas-à-pas — éditer la facture comme Yacine (5 min)

1) Préparez une requête commande + lignes + client, filtrée et triée par client. 2) Créez un état et liez-le à cette requête. 3) Placez les lignes dans le bloc corps, l'en-tête en début de document et le total général en fin de document. 4) Posez une rupture par client pour les sous-totaux. 5) Ajoutez un paramètre {pNumCommande} et testez l'aperçu (iApercu), puis exportez en PDF.

Sans tri sur la rubrique de regroupement, un groupe peut réapparaître et fausser les sous-totaux : triez la source.

Modèle copier-coller — mon état facture

Source del'etat : REQUETE (commande + lignes + client) filtree et TRIEE
Debut de document : en-tete (raison sociale, coordonnees)
Haut de page      : logo + titre
Corps             : une ligne par article  (repete par enregistrement)
Bas de page       : numero de page
FIN de document   : TOTAL general
Rupture (client)  : sous-total par client -> donnees TRIEES imperativement
Parametre         : {pNumCommande}   Export : PDF

Facture client

Yacine produit la facture avec en-tête, lignes et total général, exportable en PDF.

Liste de réapprovisionnement

Yacine édite la liste des produits sous le seuil de stock, triée par fournisseur.

Statistiques par mois

Yacine regroupe les ventes par mois avec une rupture et des sous-totaux.

Étiquettes produits

Yacine génère des planches d'étiquettes pour les articles du négoce.

✓ Bonnes pratiques

  • Préparer les données via une requête (filtrée, triée) plutôt que tout calculer dans l'état.
  • Placer les lignes dans le bloc corps et le total en fin de document.
  • Prévoir l'export PDF et des paramètres pour la réutilisation.

✗ Pièges fréquents

  • Oublier le tri avant une rupture → sous-totaux faux.
  • Mettre les lignes ailleurs que dans le bloc corps.
  • Multiplier les calculs dans l'état au lieu de préparer une requête.

Points clés à retenir

  • Les états produisent les documents de l'application (factures, listes, statistiques, étiquettes).
  • Un état se découpe en blocs : début de document, haut de page, corps (par enregistrement), bas de page, fin de document.
  • Les ruptures sont le mécanisme du reporting : sous-totaux par groupe, à condition de trier les données.
  • Bonne pratique : préparer les données via une requête, prévoir paramètres et export PDF.

Défi 48h — appliquez demain

Comme Yacine, créez un état lié à une requête triée, placez les lignes dans le bloc corps et le total en fin de document. Ajoutez une rupture par client (ou par mois) pour obtenir des sous-totaux, puis exportez l'état en PDF. Expliquez en une phrase pourquoi les données doivent être triées sur la rubrique de regroupement.

Checklist sortie de section
  • Je crée un état lié à une requête et je place les bonnes rubriques dans le bon bloc.
  • Je sais obtenir des sous-totaux par groupe avec une rupture.
  • Je sais exporter un état en PDF avec des paramètres.
Auto-évaluation 1-5 : est-ce que je comprends le rôle de chaque bloc d'un état ?Auto-évaluation 1-5 : sais-je poser une rupture propre (données triées) et exporter en PDF ?

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. Condition impérative : les données doivent être triées sur cette rubrique, sinon un groupe réapparaît plus loin et les sous-totaux deviennent faux.

Faut-il calculer les totaux dans l'état ou dans la source ?

Préparez les données via une requête (filtrée, triée, éventuellement avec des agrégats) : l'état se contente alors d'afficher et de placer les sous-totaux aux ruptures. Multiplier les calculs dans l'état le rend plus complexe et moins réutilisable ; la bonne pratique est de préparer les données en amont.

Vérifiez votre compréhension

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

Ressources supplémentaires (optionnel, pour aller plus loin)

Examen du niveau 2Questions inédites et durcies pour valider vos acquis