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

Delphi Discussion :

Problème d'impression avec QuickReport


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Problème d'impression avec QuickReport
    Bonjour tout le monde,
    Voila plus d’une semaine que je suis confronté a un problème qui parait très simple mais que je ne trouve pas de solutions :
    Il s’ajit d’imprimer des factures :
    J’utilise delphi 7 / paradox et quickreport comme générateur d’état (page header pour entete, band détail pour imprimer les produits, summary pour imprimer les totaux ..) jusque la tout marche très bien .
    Mon problème : si une facture se tient sur plusieurs pages, je doit ajouté pour chaque fin de page un sous total et ce sous total je doit le porté sur le début de la page suivante ainsi de suite jusqu’à la dernière page qui contient les totaux (Montant HT , TVA , Montant TTC) de la Facture.

    quelq'un a t-il une solution ? c'est extrémement urgent .
    merci

  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,
    Citation Envoyé par yab2000dz Voir le message
    J’utilise delphi 7 / paradox et quickreport comme générateur d’état

    Mon problème : si une facture se tient sur plusieurs pages, je doit ajouté pour chaque fin de page un sous total et ce sous total je doit le porté sur le début de la page suivante ainsi de suite jusqu’à la dernière page qui contient les totaux (Montant HT , TVA , Montant TTC) de la Facture.
    Tout ça date un peu (enfin pour moi) . La solution est simple mettre une bande de bas de page et gérer son évènement OnBeforePrint .
    nb. Quickreport a un 'sous-forum' spécifique ici à quoi cela sert d'avoir un beau raccourci Générateurs d'états si personne n'y fait attention !

    voici un extrait d'un programme de facturation , dans lequel je gère les traits verticaux (vshapes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm1.PageFooterBand1BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    var CliHeight : Real;
    begin
    PrintBand:=Pied;  // gestion de la dernière page 
    if PrintBand then   // Proformatage --------------------------------------------
     begin
      CliHeight:=QuickRep1.Page.Length-(QuickRep1.Page.BottomMargin+QuickRep1.Page.TopMargin+VShape1.Size.Top);
      VShape.Size.Height:=CliHeight-12;
      VShape1.Size.Height:=CliHeight-12;
      VShape2.Size.Height:=CliHeight-12;
     end;
    end;
    les sommes (j'en ai 2 dans cette bande) , sont gérées avec les évents OnPrint
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.TotArticlesPrint(sender: TObject; var Value: String);
    begin
    Value:=IntToStr(RQte);
    end;
     
    procedure TForm1.SubSommePrint(sender: TObject; var Value: String);
    begin
    Value:=Format('%8.2f',[RSomme]);
    end;
    j'aurais pu les mettre dans le même évent que plus haut , mais pour des raisons de calculs ils ont été séparés (et donc les valeurs sont des variables du programme et je n'utilise pas de QRExpression mais l'utilisation de QRExpression est possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.PageFooterBand1BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    var CliHeight : Real;
    begin
    ....
    SubSomme.Caption:=Format('%8.2f',[RSomme]);
    TotArticles.Caption:=InttoStr(RQte);
    end;
    Pour ne pas avoir de pied de page en dernière page , j'utilise un booléan Pied , initialisé a True à l'edition de l'entête de la facture et passé à false lors de l'édition de la bande Résumé
    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
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 19
    Points
    19
    Par défaut facture plusieurs pages
    Merci sergiomaster de m’avoir répondu,
    Mais honnêtement je n’ai pas pu faire la liaison entre la solution proposée et mon problème.
    1. La gestion des traits verticaux (Vshapes) : à quoi servent-ils dans mon cas ?
    2. Je ne vois pas l’opération qui permet le report du sous total de chaque page dans le début de la page suivante.
    3. Comment éliminer le sous total du début de la première page et de la fin de la dernière page (une facture peut contenir 2, 3,4… pages).
    4. Dans le cas ou ma facture tient sur une seule page. Ne rien faire.

    Je suis désolé si je n’étais pas assez explicite. Mais je suis novice dans le domaine.

  4. #4
    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,
    1. La gestion des traits verticaux (Vshapes) : à quoi servent-ils dans mon cas ?
    à rien , c'est juste un bout de code que j'ai repiqué d'un de mes programmes .
    Pour info ce programme "tourne" depuis 1999 et à été réalisé avec D3 , il permet d'éditer non pas une , mais un ensemble de factures, de générer traites (papier ou numériques ) et bien sur les écritures comptables correspondantes .

    2. Je ne vois pas l’opération qui permet le report du sous total de chaque page dans le début de la page suivante.
    je n'allais pas mettre tout mon source non plus ! les montants dans mon cas , sont des variables privées de la forme qui sont initialisées (ainsi que d'autres) au moment de l'édition de l'entête principal (l'entête de la première page a les adresses de facturation et de livraison, ainsi que d'autres renseignements qui ne sont pas répétés sur les autres pages de la facture) .
    Ces Sous-totaux sont incrémentés au moment de l'édition de la ligne (AfterPrint de la bande détail)
    3. Comment éliminer le sous total du début de la première page et de la fin de la dernière page (une facture peut contenir 2, 3,4… pages).
    c'est à cela que sert , dans mon programme , le boolean Pied (comme je l'ai déjà indiqué lors de mon précédent post) .
    Ce boolean est mis a True , encore une fois au moment de l'édition de l'entête , et mis à false lors de l'édition de la bande Résumé donc si :
    - la facture tient dans une page , la bande pied de page avec les sous-totaux n'est pas imprimée
    - la facture (bande résumé incluse) ne tient pas dans une page , le bande pied de page est imprimée sur les toutes les pages sauf la dernière
    ce qui répond aussi au point 4

    en fait tout l'avantage de Quickreport est dans les évènements qui peuvent être contrôlés aussi bien au niveau des bandes que des zones (texte ou autres) choses qui sont beaucoup plus délicates à faire avec RaveReport ou FastReport (version de base) mais je ne vais pas faire une comparaison détaillée des pour et contre de chacun de ces trois générateurs qui ont été proposés tour à tour par Delphi (j'ai fait l'impasse sur ReportSmith , le premier de la série)
    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

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 19
    Points
    19
    Par défaut factures a plusieurs pages
    Bonjour sergiomaster,
    tout ce que j'ai fourni comme effort m'a permis d'avoir le total de chaque page et son report sur la page suivante , mais pour toutes les pages (Y compris la première qui démarre avec un montant =0 et la dernière avec le montant de la facture ).
    - est ce que vous pouvez me traduire la phrase suivante 8. Pour ne pas avoir de pied de page en dernière page , j'utilise un booléan Pied , initialisé a True à l'edition de l'entête de la facture et passé à false lors de l'édition de la bande Résumé en instructions delphi .

    m'excuse pour le dérangement je suis vraiment coincé.

  6. #6
    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,

    S'il s'agit que d'une seule facture à éditer :


    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      quickrpt, Qrctrls, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        QuickRep1: TQuickRep;
        PageHeaderBand1: TQRBand;
        TitleBand1: TQRBand;
        ColumnHeaderBand1: TQRBand;
        DetailBand1: TQRBand;
        PageFooterBand1: TQRBand;
        QRLabel1: TQRLabel;
        SummaryBand1: TQRBand;
        QRSomme: TQRLabel;
        procedure SummaryBand1AfterPrint(Sender: TQRCustomBand;
          BandPrinted: Boolean);
        procedure PageFooterBand1BeforePrint(Sender: TQRCustomBand;
          var PrintBand: Boolean);
        procedure QuickRep1BeforePrint(Sender: TQuickRep;
          var PrintReport: Boolean);
        procedure DetailBand1AfterPrint(Sender: TQRCustomBand;
          BandPrinted: Boolean);
        procedure PageHeaderBand1BeforePrint(Sender: TQRCustomBand;
          var PrintBand: Boolean);
        procedure TitleBand1BeforePrint(Sender: TQRCustomBand;
          var PrintBand: Boolean);
        procedure TitleBand1AfterPrint(Sender: TQRCustomBand;
          BandPrinted: Boolean);
      private
        { Déclarations privées }
        PrintHeader : Boolean;  // Gestion de l'entête
        PrintPied : Boolean;    // Gestion du bas de page
        Somme : Currency;       // cumul page
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
     
    procedure TForm1.QuickRep1BeforePrint(Sender: TQuickRep;
      var PrintReport: Boolean);
    begin
    // initialisations , début de facture
    PrintPied:=True;
    PrintHeader:=True;
    Somme:=0.00;
    end;
     
    procedure TForm1.TitleBand1BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    begin
    // l'entête  n'est imprimé que sur la 1°page
    PrintBand:=PrintHeader;
    end;
     
    procedure TForm1.TitleBand1AfterPrint(Sender: TQRCustomBand;
      BandPrinted: Boolean);
    begin
    PrintHeader:=False;
    //une fois imprimé l'entête ne sera plus visible
    end;
     
     
    procedure TForm1.DetailBand1AfterPrint(Sender: TQRCustomBand;
      BandPrinted: Boolean);
    begin
    // après édition de la ligne je fais le cumul
    Somme:=Somme+[MontantLigne]; // [MontantLigne]à remplacer
    end;
     
    procedure TForm1.PageFooterBand1BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    begin
    // permet l'impression du bas de page
    PrintBand:=PrintPied;
    // imprime le cumul en passant la valeur
    QRSomme.Caption:=Format('%3.2f',[Somme]);
    end;
     
    procedure TForm1.SummaryBand1AfterPrint(Sender: TQRCustomBand;
      BandPrinted: Boolean);
    begin
    // empêche l'impression du bas de page
    PrintPied:=False;
    end;
     
     
    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

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 19
    Points
    19
    Par défaut facture a plusieurs pages
    bonjour sergiomario,
    le montant qui figure dans le composant qrsomme en bas de chaque page et qui doit étre reporté sur le début de la page suivante dans le composant (QRDebut par exemple) doit figurer dans quelle bande ?.

    - si je le met dans la bande title, il disparaitra des pages suivantes .
    - si je met l'entete de la facture dans une bande de type ageHeader et le QRDebut dans la bande title : il va étre reporté dans toutes les pages y compris la première , même avec un montant=0 (ci joint copie d'une facture ), et ceci ne résout pas mon problème.
    (le report du sous total de chaque page ne doit pas figurer sur le début de la première page: c'est le seul point qui manque pour régler mon probléme) .
    Remerciements et Salutations .
    Images attachées Images attachées  

  8. #8
    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,

    Avec l'image montrant le résultat souhaité c'est quand même plus facile .

    la solution pourrait être de rajouter une childband (liée la pageHeader) et de gérer (une fois de plus) son édition par son événement beforePrint
    ou encore de gérer le onprint du label et de son montant (comme il s'agit en fait de 2 QRText , un seul peut suffire) qui dans ce cas serait dans le PageHeader

    Comme il y a déjà la variable PrintHeader (enfin dans le code que j'ai proposé) il est aisé d'utiliser cette même variable mais selon la logique inverse
    soit ainsi (calqué sur le même principe que le reste)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.ChildBand1BeforePrint(Sender: TQRCustomBand;
          var PrintBand: Boolean);
    begin
    PrintBand:=not PrintHeader;
    end;
    soit en utilisant la propriété HasChild de PageHeader (à tester)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.PageHeaderBand1BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    begin
    PageHeaderBand1.HasChild:=not PrintHeader;
    end;
    une autre solution , mais beaucoup moins facile à gérer d'un point de vue maintenance est de mettre le report du montant dans le PageHeader et de gérer la hauteur de ce dernier .

    Bref il suffit de faire travailler son imagination
    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

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 19
    Points
    19
    Par défaut factures a lpusieurs pages
    bonjour ,
    j'avoue franchement que sans votre aide , je n'aurai jamais pensé a ce genre de solutions , étant habitué a une utilisation trés simple du quickreport.
    mille fois merci et a une autre discussion.

  10. #10
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Bonsoir,
    Toujours aussi génereux Serge!
    Merci à toi.

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    ii
    Inscrit en
    Octobre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Algérie

    Informations professionnelles :
    Activité : ii

    Informations forums :
    Inscription : Octobre 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    essaye ca
    1.dans l'evenement de l'entete de page "befortprint"
    initialiser le ttc=0
    2.dans le befort print de details
    calculer le ttc
    3.dans le beforprint de bas de page
    affecter cette ttc a une etiquette qrlabel

  12. #12
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    le 21/06/2014, 12h40
    Citation Envoyé par yab2000dz Voir le message
    Bonjour tout le monde,
    Voila plus d’une semaine que je suis confronté a un problème qui parait très simple mais que je ne trouve pas de solutions :
    ...
    c'est extrémement urgent .
    merci
    Citation Envoyé par benmaamar Voir le message
    essaye ca
    1.dans l'evenement de l'entete de page "befortprint"
    initialiser le ttc=0
    2.dans le befort print de details
    calculer le ttc
    3.dans le beforprint de bas de page
    affecter cette ttc a une etiquette qrlabel
    C'est gentil à toi de répondre mais je pense que tu y réponds avec un an et quatre mois de retard. A mon avis ça fait longtemps qu'il est passé à autre chose (j'espère pour lui)...

    D'autant plus que le solution a été donnée....

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    pardon,
    c'est extrêmement urgent,
    pour la réponse mieux vaut tard que jamais.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'impression avec les cases à cocher
    Par madseb dans le forum Access
    Réponses: 7
    Dernier message: 17/09/2022, 18h20
  2. Problème d'impression avec QuickReport sous Delphi
    Par abdenour-nab dans le forum Bases de données
    Réponses: 2
    Dernier message: 31/12/2008, 10h28
  3. Erreur à l'impression avec QuickReport
    Par defluc dans le forum Composants VCL
    Réponses: 2
    Dernier message: 05/09/2007, 11h38
  4. Problème d'impression avec delphi
    Par Bourak dans le forum Langage
    Réponses: 1
    Dernier message: 12/11/2005, 17h13
  5. impression avec quickreport
    Par k_boy dans le forum Bases de données
    Réponses: 4
    Dernier message: 14/06/2004, 09h06

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