2.3États & reporting (éditeur d'états)
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.
🔎 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
- 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.
- Créez l'état sur cette source et placez les rubriques dans le bloc corps (celui qui se répète pour chaque enregistrement).
- 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.
- 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).
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.
- 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.
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.
Comment obtient-on des sous-totaux par groupe dans un état ?