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 :

impression la meme colonne dans trois colonne


Sujet :

QuickReport

  1. #1
    Candidat au Club
    impression la meme colonne dans trois colonne
    salut tous le monde
    je travail avec Delphi 7 en utilisant QuickReport
    j'ai un table paradox qui contient les champs ( N° et PRIX) et je veut imprimer ces champ sur le quickreport dans trois colonne chacune contient 25 ligne
    et a la fin de chaque colonne il y a un sous total de la colonne on ajoutant le report sur le debut de chaque colonne

    comme suite dans le tableau ci dessus ...MERCI

  2. #2
    Rédacteur/Modérateur

    Bonjour,

    voici un zip (D3) qui contient une solution partielle.

    Utilisation de trois colonnes une bande détail entourée d'un groupheader et d'un groupfooter. Le seul 'truc' est l'utilisation d'une colonne (qui peut être calculée) pour gérer les groupes

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // QRBand3 c''est le GroupFooter
    procedure TForm1.QRBand3AfterPrint(Sender: TQRCustomBand;
      BandPrinted: Boolean);
    begin
     QuickRep1.NewColumn;
    end;
     
    // QRGroup1 c''est le groupHeader 
    procedure TForm1.QRGroup1AfterPrint(Sender: TQRCustomBand;
      BandPrinted: Boolean);
    begin
    QRExpr1.Enabled:=true; // ceci gère le premier total quand le fichier n''est pas encore ouvert, au départ QRExpr1 est invisible (enabled=false)
    end;


    Désolé pour le peu d'explication, mais j'ai fait ça à la va-vite
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  3. #3
    Candidat au Club


    merci boucou serge pour ton aide thx شكرا

  4. #4
    Candidat au Club

    salut SergioMaster
    malgré que je suivi tt les consigne mais j'arrive pas a le faire
    1. les sous totaux des trois colonne ne s'affiche plus
    2. j'ai pas 25 ligne dans chaque collone
    j'ai essai de faire mon mieu mais ...

  5. #5
    Rédacteur/Modérateur

    Bonjour,
    malgré que je suivi tt les consigne mais j'arrive pas a le faire
    il y a de quoi être désolé car toutes les consignes n'ont pas été suivies !

    tout d'abord, première erreur, il n'y a pas d'expression pour le groupe , pas d'expression = pas de groupe. Et constatation le calcul n'est pas mis au bon endroit ! (dans la bande Entête de colonne au lieu de la bande GroupeHeader)

    [Edit] et après test (NB qui chez moi fonctionne après corrections) le groupfooter n'est pas lié au groupheader . Je ne vous ferais pas le cadeau de renvoyé le zip corrigé car cela serait vous desservir, l'apprentissage par l'erreur et la compréhension de ce que vous devez faire est une bonne pédagogie

    DONC :

    Dans le petit programme que j'ai proposé, l'expression du groupe était une colonne de la table, la colonne G
    qui était en fait calculée à partir du n° d'enregistrement i (égal à la valeur) fieldByName('G').asInteger:=(i-1) div 25;

    Citation Envoyé par sergiomaster
    Le seul 'truc' est l'utilisation d'une colonne (qui peut être calculée) pour gérer les groupes
    c'est cette phrase qui est la clé de la solution

    Si Table1N_Ligne est le numéro de ligne ( qu'il n'y a pas de "trous" et que l'ordre est bien sur ce dernier) alors il suffit de faire les choses suivantes :
    ajouter un champ G calculé (clic droit sur la table, éditeur de champs, clic droit dans l'éditeur, ajouter des champs)
    coder l'évènement OnCalcField
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.Table1CalcFields(DataSet: TDataSet);
    begin
    // il y a plusieurs manières de coder cette partie
    // celle-ci est la plus compréhensible 
    Table1G.asInteger:=(table1N_ligne.asInteger - 1) div 25;
    // Table1.FieldByname('G').asInteger:=(Table1.FieldByName('N_ligne').asInteger-1) div 25;
    // DataSet['G']:=(Dataset['N_Ligne']-1) div 25;
    end;

    et enfin, faire ce que j'ai dit au début , c.a.d. indiquer G comme expression dans les propriétés du GroupHeader
    et ne pas oublier de lier le GroupFooter à ce dernier

    P.S. ne pas re-citer à chaque fois les messages c'est inutile sur ce forum
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  6. #6
    Candidat au Club
    Merci ç bien marché