IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Impression multipage d'un état


Sujet :

WinDev

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    septembre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : septembre 2023
    Messages : 4
    Points : 0
    Points
    0
    Par défaut Impression multipage d'un état
    Bonsoir chers tous.
    Je suis nouveau dans le développement logiciel.
    Depuis une semaine j'ai un souci.
    En effet, je suis entrain de programmé un logiciel personnel de gestion scolaire et je rencontre des difficultés pour l'impression des bulletins.
    J'ai réalisé une table qui contient les notes des élèves par discipline. Donc dans cette table on a des champs comme: Matricule_Eleve, Nom_Eleve, Prenom_Eleve, Discipline, Note_Obtenue, Coefficient, Note_Ponderee.
    J'ai ensuite réalisé un état basé sur cette table.
    Pour l'impression de cet état, j'aimerais que toutes les notes d'un même élève s'affiche sur une page et que tous les bulletins soient imprimés dans le même fichier.
    Merci de m'aider à gérer cette situation.

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    juin 2003
    Messages
    4 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2003
    Messages : 4 893
    Points : 8 522
    Points
    8 522
    Par défaut
    Bonjour,

    Il "suffit" que ton état soit basé sur la table NOTES en faisant une rupture (avec saut de page) sur matricule élève (qui logiquement est unique pour un élève).
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    septembre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : septembre 2023
    Messages : 4
    Points : 0
    Points
    0
    Par défaut [WD23] Impression multipage d'un état
    Bonsoir.
    Mon problème se situe au niveau du code qui me permet de faire une rupture sur la colonne matricule de la Table_Notes.
    En substance voici le code que j'ai rédigé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    iAperçu()
    POUR TOUTE LIGNE DE TABLE_REQ_MOYENNE_PAR_DISCIPLINE
    	sMatricule est une chaîne = TABLE_REQ_MOYENNE_PAR_DISCIPLINE.COL_Matricule_Eleve_NS
    	TableActiveFiltre(TABLE_REQ_MOYENNE_PAR_DISCIPLINE.COL_Matricule_Eleve_NS,filtreEgal,sMatricule)
    	iEnchaînementAjoute(ETAT_BULLETIN_DE_NOTES_TRIMESTRIEL)
    	iSautePage()
            TableDésactiveFiltre(TABLE_REQ_MOYENNE_PAR_DISCIPLINE)
    FIN	
    	iEnchaînementImprime()

    Ce code ne fonctionne pas bien. Il imprime autant de pages vide que de Matricule et à la fin, il imprime seulement le bulletin du 1er Matricule de la Table au même nombre que de Matricule.
    Comme je le disais, je suis novice, aidez-moi.

  4. #4
    Expert confirmé Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    2 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 2 656
    Points : 4 916
    Points
    4 916
    Par défaut
    Bonjour,
    A priori, vu le nom, ton champ table est basé sur une requête. Pourquoi ne pas tout simplement baser ton état sur cette requête.
    C'est devenu une manie depuis quelque temps de baser un état sur un champ et non sur la source, et ça ne simplifie pas la création d'états, loin de là.
    De plus, lorsque l'on veut filtrer les données d'un état, le code se place dans l'état, en passant le filtre en paramètre ou plus simplement en utilisant une requête paramétrée pour la création de l'état.

    Pour revenir à ton code, tu exécutes une série d'instruction pour toute ligne de ton champ table, s'il y a 100 lignes, cette série sera exécutée 100 fois, et, pour le même matricule, tu auras autant d'états que de lignes dans lequel il apparaît. Le parcours doit se faire sur ta table Élève et non sur le champ table TABLE_REQ_MOYENNE_PAR_DISCIPLINE.
    e.g.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    POUR TOUT Elève
         Traitement sur Elève.Matricule
    FIN
    Par ailleurs :
    Citation Envoyé par Damson_WATT Voir le message
    je suis novice
    Un passage par la phase d'auto-formation te ferait le plus grand bien.

    Enfin fuis les fonctions XXXFiltre comme la peste. Pour des cas triviaux cela fonctionne, mais quand ça se complique, on voit vite les limites de ces fonctions.
    Il y a peut être plus simple, mais ça tourne

  5. #5
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    juin 2003
    Messages
    4 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2003
    Messages : 4 893
    Points : 8 522
    Points
    8 522
    Par défaut
    Bonjour,

    Je plussoie voroltinquo. Pourquoi t'embêter à tout faire à l'os alors que l'éditeur d'état te permet de gérer tout ça ? C'est une énorme perte d'énergie et de temps (que tu pourrais consacrer à l'autoformation ).
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  6. #6
    Expert confirmé Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    2 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 2 656
    Points : 4 916
    Points
    4 916
    Par défaut
    Remarques sur iEnchaînementAjoute
    Citation Envoyé par Damson_WATT Voir le message
    Il imprime autant de pages vide que de Matricule
    iEnchainementAjouteXXX insère un saut de page entre 2 documents. iSautePage est donc inutile
    Citation Envoyé par Damson_WATT Voir le message
    il imprime seulement le bulletin du 1er Matricule de la Table au même nombre que de Matricule.
    En relisant la doc, on voit :
    Initialisation des sources de données des états enchaînés
    Les états ne sont pas exécutés au moment de l'exécution de la fonction iEnchaînementAjoute : seul leur nom et leurs paramètres sont mémorisés.
    Ces états sont réellement exécutés lors de l'appel de la fonction iEnchaînementImprime.
    C'est donc logique que seul la première ligne soit prise en compte, tu dois passer par un état paramétré
    Il y a peut être plus simple, mais ça tourne

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    septembre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : septembre 2023
    Messages : 4
    Points : 0
    Points
    0
    Par défaut Impression multipage d'un état
    Salut chers tous.
    Merci encore à tous pour vos interventions qui m'enseigne davantage sur Windev.
    Mention spéciale aux initiateurs de ce forum.

    Voroltinquo
    "... Pourquoi ne pas tout simplement baser ton état sur cette requête. ..."
    La Table Moyenne contient aussi les rangs de chaque élève selon sa moyenne. Pour obtenir les rangs, j'ai dû effectuer des calculs à la suite du code d'initilisation de la requête. Et comme j'ai besoin du rang sur les bulletins, je suis maintenant obligé de basé mon état sur la Table.

    "... Un passage par la phase d'auto-formation te ferait le plus grand bien. ..."
    J'ai suivi des formations en ligne. ce qui m'a permis d'avancer jusqu'à ce niveau. Mais je suis toujours prêt à apprendre encore et encore...

    frenchsting
    "... Pourquoi t'embêter à tout faire à l'os alors que l'éditeur d'état te permet de gérer tout ça ? C'est une énorme perte d'énergie et de temps ..."
    J'ai pris des cours sur l'éditeur d'état mais ce que j'ai compris, c'est qu'il ne permet pas de parametrer directement un état basé sur une table (ce qui est mon cas). Mais je suis ouvert à l'enseignement.

    Voroltinquo
    "Initialisation des sources de données des états enchaînés
    Les états ne sont pas exécutés au moment de l'exécution de la fonction iEnchaînementAjoute : seul leur nom et leurs paramètres sont mémorisés.
    Ces états sont réellement exécutés lors de l'appel de la fonction iEnchaînementImprime. ..."
    Merci pour la clairvoyance. C'est exactement ça mon problème:comment parvenir à réinitialiser l'état à chaque tour de boucle?
    Ou tout simplement sans faire de boucle, comme tu l'as suggéré, quelle code dois-je utilisé pour que l'impression soit fonction de la colonne Matricule (en imprimant les lignes concernant un élève sur une page).

  8. #8
    Expert confirmé Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    2 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 2 656
    Points : 4 916
    Points
    4 916
    Par défaut
    Dans la suite de ce post, nous utiliserons un État "Fiche" (ETAT_Bulletin) trié (dans cet ordre,) sur la moyenne et le matricule, avec une rupture et un saut de page sur le matricule dans lequel on aura ajouté un libellé LIB_Classement (numérique.)
    Cet état sera basé sur une requête REQ_Bulletin.

    Dans un premier temps je ne comprend pas la phrase
    j'ai dû effectuer des calculs à la suite du code d'initialisation de la requête
    Une requête peut être comparée à une procédure. Si, dans une procédure, on pourrait appeler "code d'initialisation" la déclaration et l'affectation initiale, ces notions n'existent pas dans une requête. Nous sommes face à une colonne calculée donc facilement accessible une fois la requête exécutée. A priori ce n'est pas le cas.

    Le calcul du classement peut se faire lors de l'impression dans l'événement "Lecture des données"
    Ouverture de l'état :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PROCÉDURE ETAT_Bulletin()
    gnClassementPrécédent est un entier
    grMoyennePrécédente est réel
    gnCompteur est entier	//Nombre de bulletin édité
    Lecture des données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    gnCompteur++
    SI gnCompteur<>1 ALORS
    	//On se limite à 2 décimales
    	SI Arrondi(REQ_Bulletin.Moyenne,2)<>grMoyennePrécédente ALORS //Il n'y a pas d'ex æquo
    		LIB_Classement=gnCompteur //le classement correspond à l'ordre d'édition (de tri)
    	SINON
    		LIB_Classement=gnClassementPrécédent //Le classement est le même que celui de l'élève précédent)
    	FIN
    SINON
    	LIB_Classement=1
    FIN
    //On récupère les données en cours pour les utiliser dans le prochain bulletin.
    gnClassementPrécédent=LIB_Classement
    grMoyennePrécédente=Arrondi(REQ_Bulletin.Moyenne,2)
    Cerise sur le gâteau
    Fermeture de l'état
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Renvoie l'état de l'impression en cours.
    //	1 : Il n'y a pas de données à imprimer
    //	0 : Impression en cours
    //	-1 : Aucune impression en cours
    //	-2 : Abandon
    RENVOYER iStatusImpressionEtat()
    Le code d'impression devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    FONCTION ImprimerBulletin() : Entier
    iDestination(iVisualisateur)
    HExécuteRequête(REQ_Bulletin)
    RENVOYER iImprimeEtat(ETAT_Bulletin)
    Remarque
    Avant toute polémique Réel vs Numérique
    1-On n'est pas ici pour lancer Ariane mais pour afficher des moyennes scolaires (en général, 2 décimales suffisent et si un départage fin est nécessaire (concours,) on utilise le total des points)
    2-AVG a une précision de 5 décimales en SQL 92, un réel une précision de 6 donc le problème des arrondis serait susceptible de venir de AVG et non pas de la déclaration d'une variable en "réel"
    Il y a peut être plus simple, mais ça tourne

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    septembre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : septembre 2023
    Messages : 4
    Points : 0
    Points
    0
    Par défaut Impression multipage d'un état
    Voroltinquo, merci infiniment pour ta réponse.

    j'ai dû effectuer des calculs à la suite du code d'initialisation de la requête
    Tu as raison. C'est une faute de ma part. Merci pour l'enseignement.


    Quant à la solution que tu propose, je vais essayer de faire comme ça et te revenir.

    A bientôt !!!

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/09/2008, 09h43
  2. Impression multipage en java
    Par akrom dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 30/08/2008, 10h25
  3. Impression unique d'un état
    Par Doudou doux dans le forum IHM
    Réponses: 6
    Dernier message: 17/11/2007, 11h05
  4. Pb impression graphique dans un état
    Par 306xshdi dans le forum Access
    Réponses: 2
    Dernier message: 11/09/2006, 07h30
  5. Calcul pour impression multipage
    Par Fiquet dans le forum MFC
    Réponses: 2
    Dernier message: 30/09/2005, 09h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo