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

QuickReport Discussion :

comment afficher un détail qui regroupe plusieurs lignes dans la bande rbdetail sous delphi (quickreport v3.0)


Sujet :

QuickReport

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2019
    Messages : 7
    Points : 2
    Points
    2
    Par défaut comment afficher un détail qui regroupe plusieurs lignes dans la bande rbdetail sous delphi (quickreport v3.0)
    bonjour, jai un état quickreport v 3.0 sous delphi7 qui affiche un détail regroupant plusieurs lignes dans la bande rbdetail, voici le canevas a éditer.

    le SGBD c'est MYSQL, c'est une table faculté, les colonnes libellé_département, nombre_d'étudiant,nombre_profs)

    j'arrive pas a afficher le nom de la faculté 1 seul fois, quand je met (QRdbtext faculté) dans le détail il s'affiche plusieurs fois, selon le nombre de lignes(département)

    je veux que le nom de la faculté s'écrit 1 seul fois.

    le nombre de départements dans chaque faculté n'est pas forcément le même.

    Nom : tab.jpg
Affichages : 1120
Taille : 48,7 Ko

    merçi d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Voilà enfin le sujet correctement exposé ou presque, cela mérite un petit
    Il y a toujours le petit bémol du nom de la bande (avec quickreport ce n'est pas rvBand mais QRBand) mais bon on fera comme si, et votre cahier des charges change entre vos différentes demandes (au départ libellé faculté était à droite )

    J'émets des réserves sur cette structure de base de données, il devrait y avoir deux tables une table faculté(id_faculté, nom_faculté ...) et une table départements (id_dept,id_faculté, nom_dept,nombre_étudiants,nombre_profs) encore que :
    • Les profs peuvent enseigner dans plusieurs départements (même s'ils sont assignés à un département particulier);
    • De même les élèves peuvent suivre les cours de plusieurs départements.


    Déjà la structure de votre état :
    Nom : Capturer.PNG
Affichages : 1090
Taille : 27,6 Ko
    Il vous faut (outre entête, titre, pied de page) une bande GroupHeader, une bande détail, une bande GroupFooter
    Nom : Capturer1.PNG
Affichages : 1078
Taille : 56,6 Ko

    voilà le schéma complet
    Nom : Capturer2.PNG
Affichages : 1068
Taille : 14,1 Ko

    Le reste c'est un peu de SQL et de code.
    Le SQL va beaucoup dépendre de la version de MYSQL, l'objectif est d'obtenir le nombre de départements par facultés
    soit vous utilisez un SQL indépendant
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT NOM_FACULTE,COUNT(1) FROM FACULTE GROUP BY NOM_FACULTE
    Soit, bien mieux, vous utilisez les fonctions de fenêtrage de MYSQL et descriptions
    Là, je vous laisse chercher comment exprimer le SQL, ce qu'il vous faut, en plus des colonnes nécessaires c'est le numéro de ligne ROW_NUMBER() OVER (PARTITION BY NOM_FACULTE ORDER BY NOM_FACULTE,LIBELLE DEPARTEMENT) AS Rang
    et le nombre de départements, attention à l'ordre de la requête également
    ORDER BY NOM_FACULTE,LIBELLE_DEPARTMENT

    Le code seul cet événement peut suffire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TQuickReport1.QRDBText1Print(sender: TObject; var Value: String);
    begin
    if Query.FieldbyName('rang').asinteger<>trunc(Query.FieldbyName('nbdept').asinteger/2)  // 
      then Value:=''; // cache le nom faculté
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2019
    Messages : 7
    Points : 2
    Points
    2
    Par défaut comment afficher un détail qui regroupe plusieurs lignes dans la bande rbdetail sous delphi (quickreport v3.0)
    bonjour et merçi ;

    1- j"ai trouver le nombre de département par faculté (requête).

    2-ce que j"ai pas compris c la deuxième étape (ROW NUMBER),

    est ce que pour chaque département je dois trouvé son numéro de lignes ?

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2019
    Messages : 7
    Points : 2
    Points
    2
    Par défaut comment afficher un détail qui regroupe plusieurs lignes dans la bande QRdetail sous delphi (quickreport v3.0
    RE_bonjour

    j essayé la fonction ROW NUMBRE if m'affiche erreur de syntaxe, peut être parce que moi j'utilise MySQL 5.7.23

    et cette fonction ne marche pas avec.


    merçi pour votre attention.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Le SQL va beaucoup dépendre de la version de MYSQL
    Tout est dans cette phrase, n'étant pas un spécialiste MySQL je ne saurais indiquer avec certitude que les fonctions de fenêtrage sont proposées avec votre version.

    Sans utiliser les fonctions de fenêtrage, et malgré votre structure de table (AMHA mal pensée) il est toujours possible de rédiger un SQL qui va fournir le nécessaire

    je pense quand même que les CTE était déjà fournies avec votre version

    Voilà donc le SQL que j'avais déjà proposé
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WITH CTE AS (SELECT NOM_FACULTE,COUNT(1) AS nbrdept FROM FACULTE GROUP BY NOM_FACULTE)
    SELECT f.nom_faculté,f.libellé_département, f.nombre_étudiant,f.nombre_profs,cte.nbrdept 
     from FACULTE F JOIN CTE ON f.nom_faculté=CTE.nom_FACULTE
    ORDER BY f.nom_faculté,f.libellé_département

    est ce que pour chaque département je dois trouvé son numéro de lignes ?
    Oui, sans ça comment voulez-vous détecter le besoin d'imprimer le nom de la faculté ?
    il faudra juste ajouter un peu de code pour gérer le manque de numéro de ligne

    tout d'abord deux variables globales :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     L : Integer; Libelle_imprime : Boolean;
    et quelques évènements supplémentaires

    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
    16
    17
    18
    procedure TForm1.QRGroupHeaderBand1BeforePrint(Sender : TQRCustomBand; var PrintBand : Boolean);
    begin
    // Initialisations;
    l:=0;
    Libelle_Imprime:=False;
    end; 
     
    procedure TForm1.QRBandDetailBeforePrint(Sender : TQRCustomBand; var PrintBand : Boolean);
    begin
    Inc(l);
    end;
     
    procedure TForm1.QRDBText1Print(sender: TObject; var Value: String);
    begin
    if l<trunc(Query.FieldbyName('nbdept').asinteger/2) OR Libelle_Imprime 
      then Value:='' // cache le nom faculté
      else Libelle_Imprime:=True; 
    end;
    à vérifier : le cas où il n'y a qu'un seul département, il faudrait peut-être incrémenté la variable l dans l'évènement AfterPrint de la bande détail

    au fait, méa culpa à propos de rbDetail, je lisais rvDetail et ne pensais pas que vous parliez de la propriété BandType
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2019
    Messages : 7
    Points : 2
    Points
    2
    Par défaut comment afficher un détail qui regroupe plusieurs lignes dans QRband sous delphi (quickreport v3.0)
    RE salut

    alors j exécuté toutes les étapes que vous m'avez conseillé et voila ma table faculté + quickreport édité

    ça marche très bien, rien juste un problème c comment fusionner les cases de la même faculté. (le principe de fusion dans les tableaux en Microsoft Word)

    encore une fois aidé moi.

    Nom : donnee.jpg
Affichages : 1020
Taille : 95,0 KoNom : etat.jpg
Affichages : 1030
Taille : 88,1 Ko

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bon, je passe sur les fautes d'orthographe des libellés mathamatique au lieu de mathématiques et certainement des problèmes de doublon chémie chemie (au fait il s'agit de chimie)

    Je reviens plutôt sur des erreurs de calculs grossières

    Vos totaux pour la seconde faculté sont faux, tout simplement parce que vous avez oublié de remettre le total à zéro après impression, il y a une propriété pour ça dans QRExpression (ResetAfterPrint) qu'il faut mettre à True.

    Encore une fois aid é ez moi.
    Non, désolé, j'ai déjà fait plus que le plus gros du travail et démontré que le rendu de l'état était possible vous avez toutes les données (le design de l'état) en main ce n'est qu'une gestion de composants. Pour ce qui est des cadres franchement c'est du "cosmétique", vous devriez être capable de le gérer vous même, vous avez les évènements pour le faire et des composants comme QRShapes
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2019
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    RE SALUT

    j'ai essayé , mais le problème c la nbr de caractères dans les noms facultés s"il est grand il y"a un saut de ligne

    comment essayé avec QRshape coté faculté ou cotés les lignes a droites


  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    [mode] Je ne vais pas l'écrire pour vous ! Partager une expérience ça se conçoit, écrire à votre place ça se paye [/mode]

    Comment voulez-vous que je réponde à ça alors que vous ne fournissez aucun source (dfm et pas) ? (ça peux se mettre en pièces jointes dans un zip par exemple)
    note : en parlant de pièce jointe, envoyez des PNG plutôt que des JPG comme images, utiliser par exemple : Outil Capture d'écran pour obtenir vos images

    Première piste

    Les shapes ont des propriétés, à vous, par code de calculer les hauteurs à mettre. Il faut juste que vous trouviez le bon évènement et être pointilleux sur l'ordre de création des différents élements de la ligne détail (utilisation de mettre en avant plan/mettre en arrière plan)

    Second point
    De plus je vois au moins un point que vous soulèverez ensuite comme "je voudrais que mes lignes départements aient toutes la même hauteur"
    le principe de fusion dans les tableaux en Microsoft Word
    une piste, une hauteur de sortie, ça se calcule en fonction de la fonte, une chaine, ça se découpe

    [mode] même si je sais que je pourrais me faire taper sur les doigts pour les propos qui vont suivre
    Je ne sais pas quel est votre méthode de travail, mais moi j'expose la totalité du problème (ce que je nomme mon cahier des charges) avant de m'y attaquer.
    Vraiment vous êtes "Ingénieur développement logiciels" ou bien êtes-vous étudiant pour le devenir ? Dans le premier cas, je trouve votre formation bien lacunaire (je ne parle pas du langage utilisé mais de la manière dont vous avez analysé/exposé votre besoin)
    [/mode]
    Je sais je suis brut mais ce matin les douleurs sont aiguës et je n'aime pas écrire pour les autres.
    Un dernier détail pour que vous compreniez bien ma position, Quickreport je ne l'utilise plus qu'avec D3 pour de la maintenance de programmes, il y a des années que je ne crée plus d'états Quickreport, après un passage Rave report j'utilise maintenant FastReport, c'est sur la base d'un bénévolat poussé que je prends encore la peine de répondre sur les deux premiers générateurs (idem pour D7 d'ailleurs)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/11/2019, 20h12
  2. Réponses: 1
    Dernier message: 20/02/2018, 11h43
  3. Regrouper plusieurs lignes dans une seule
    Par djinpark1 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2013, 13h26
  4. regrouper plusieurs lignes dans une colonne
    Par Satch dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/08/2009, 11h39
  5. comment afficher une cellule qui contient une formule, dans textbox
    Par cali59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/08/2009, 00h07

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