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

Langage Delphi Discussion :

imprimer avec condition


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut imprimer avec condition
    Bonjour,
    Je cherche une solution à un problème que j'ai rencontré au cours du développement d'une application de gestion de Budget financier d'une entreprise.
    La première partie de l'application est achevée, elle consiste à saisir les données des chapitres, articles, factures, fournisseurs.
    Pour la partie impression si l'utilisateur décide de tout imprimer, le programme doit faire une sélection par partie c'est-à-dire: sur la première page toute les factures du même chapitre et article doivent y figurés

    Page 1-- Chapitre 1-- Article 1---Facture 1
    --------------------------------Facture 2
    --------------------------------Facture 3

    Page 2-- Chapitre 1-- Article 2---Facture 4
    --------------------------------Facture 5
    --------------------------------Facture 6

    Page 3-- Chapitre 2-- Article 1---Facture 7
    --------------------------------Facture 8
    --------------------------------Facture 9

    Devrai-je utilser sql pour la sélection et print before pour imprimer la selection??
    Comment procéder ?

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Salut;

    • Tout à fait pour le SQL y a pas mieux dans ton cas.
    • Print Before je ne connais pas par contre tu peux utiliser BeforePrint pour restreindre le champ d'application.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Salut, merci pour la réponse
    Print Before je ne connais pas par contre tu peux utiliser BeforePrint
    c'est ce que je voulais dire BeforePrint.
    Pour le SQL je n'ai pas encore trouvé la formule qu'il faut, j'ai essayé ceci mais ça ne donne rien pour le moment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT NUMFACTURE
    FROM TFacture
    GROUP BY Article
    Devrai je mettre deux Group by imbriqués?

    help please

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Re;

    tu mélange entre condition (Where en SQL) et grouper les données (Group By en SQL).

    donne plus de détail sur ce que tu veux faire. si tu compte grouper les données par numéro de facture par exemple, dans ce cas ta requête devrais ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select champ1, champ2, champ..., champn
    Where Num_Facture =: n_facture
    Group By Num_Facture
    puis tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TQuery1.Close;
    TQuery1.Params.[0] := EditNumFacture.Text;
    TQuery1.Open;
    bien sûr en supposant que tu utilise un TQuery et que ton EditNumFacture contient le numéro de facture à imprimer.
    donc pas besoin de BeforePrint du QReport.

    Bonne chance.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Merci pour la réponse mais je n'ai toujours pas trouvé la solution!!!
    Ce que je veux c'est faire un groupement de facture par Numéro d'article 'NUMART' ensuite groupement d'article par Numéro de chapitre 'NUMCH'.
    Donc au moment de lancer l'impression tout doit être organisé comme ceci sur des pages distinctes:
    1) Chapitre n°1 Num article1: facture n°1, facture n°4, facture n°6

    2) Chapitre n°2 Num article3: facture n°8, facture n°9, facture n°10

    3) Chapitre n°2 Num article6: facture n°18, facture n°19, facture n°20

    j'espère avoir été plus clair, toute propositions est la bienvenue!! merci

  6. #6
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Re;

    sur la base de ce que je viens de voir, je te conseil de travailler avec les bandes détail et sous-détail.

    Dans la bande détail tu pose un DBText référençant le champ Chapitre et dans la bande sous-détail tu pose des DBText référençant le champ facture.

    De cette manière tu auras le résultat attendu. pour ce qui du code SQL tu dois l'adapter au sous-détail puisque la bande détail à une propriété DataField (si je me souviens bien) positionnée sur le champ Chapitre. En plus, tu devra forcé le passage à la page suivante à chaque changement du Chapitre par la propriété ForceNewPage à True (espérant toujours que c'est la bonne propriété).

    Je crois aussi avoir été claire, bonne chance.

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 081
    Points
    41 081
    Billets dans le blog
    62
    Par défaut
    Ah , parce qu'il s'agissait de Quickreport ?!!!
    Et de quelle Base de Données ? car en fonction du type de BDD la réponse peut ne pas être la même. De même une vraie, bonne, description de la table ça aide .

    en admettant , qu'en fait de facture on parles de lignes de factures , qu'à chaque fois le chapitre est bien indiqué le SQL donnerait quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CHAPITRE,ARTICLE,FACTURE,SUM(QTE)  FROM FACTURE
    GROUP BY CHAPITRE,ARTICLE,FACTURE
    ceci dit à moins qu'un article soit facturé plusieurs fois dans une même facture le group by n'a pas beaucoup de sens contrairement à l'ordre (ORDER BY)

    Bien sur en aucun cas ce SQL ne peut donner une liste de facture comme indiqué ici,

    1) Chapitre n°1 Num article1: facture n°1, facture n°4, facture n°6
    une liste telle que celle-ci ne pourrait se faire avec quickreport que de la manière suivante:
    un bande entete de groupe sur chapitre (vide ou avec l'intitulé du chapitre)
    une bande entete de groupe sur article (vide)
    une bande détail (vide)
    une bande bas de groupe article contenant
    le code article , la quantité totale (donc un QRExpression que l'on oubiera pas de réinitialiser apres impression ) et un mémo qui contiendra les numéros de factures
    La bande bas de groupe Chapitre sera aligné en bas de page (ce qui fourniras le saut de page souhaité et ce sans rien coder )
    la bande détail bien que vide de tout texte aura un événement onBeforePrint ou AfterPrint peu importe où l'on remplira le mémo avec les numéros de factures
    La bande entete de groupe chapitre / ou bas de groupe chapitre également aura un évènement permettant de réinitilaiser le mémo

    En passant je ferais remarquer qu'il y a un forum spécialisé (ou peu s'en faut) quickreport ici

  8. #8
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    en admettant , qu'en fait de facture on parles de lignes de factures , qu'à chaque fois le chapitre est bien indiqué le SQL donnerait quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CHAPITRE,ARTICLE,FACTURE,SUM(QTE)  FROM FACTURE
    GROUP BY CHAPITRE,ARTICLE,FACTURE
    ceci dit à moins qu'un article soit facturé plusieurs fois dans une même facture le group by n'a pas beaucoup de sens contrairement à l'ordre (ORDER BY)
    C'est bien ce que je voulais comme formule de SQL, maintenant que le groupement est fait! Je dois imprimer le résultat et cela en forçant (comme indiqué par Juste-Soft) le passage à la page suivante à chaque changement d'Article, je n’ai jamais utilisé cette option auparavant!

    Juste-Soft:
    En plus, tu devra forcé le passage à la page suivante à chaque changement du Chapitre par la propriété ForceNewPage à True (espérant toujours que c'est la bonne propriété).
    En passant je ferais remarquer qu'il y a un forum spécialisé (ou peu s'en faut) quickreport
    ici
    Je vais consulter le lien que vous m'avez indiquez en espérant trouver la solution
    Merci de votre aide !!!

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 081
    Points
    41 081
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par kiminfor Voir le message
    à chaque changement d'Article
    pratiquement la même solution qu'indiqué précédemment à la différence que c'est la bande bas de groupe article qui sera alignée en bas de page

    Je vais consulter le lien que vous m'avez indiquez en espérant trouver la solution
    de toute façon c'est moi qui y sévit le plus pour ce qui est de QuickReport

    néanmoins , un conseil , montre bien ce que tu veux exactement en sortie car les solutions seront certainement différentes selon la présentation souhaitée. Le top , c'est un dessin d'état en pièce jointe et une bonne description du/des fichiers d'entrée.
    Un problème bien posé est déjà grandement résolu

  10. #10
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Bonjour,
    Citation Envoyé par SergioMaster Voir le message
    Le top , c'est un dessin d'état en pièce jointe et une bonne description du/des fichiers d'entrée.
    Un problème bien posé est déjà grandement résolu
    Vous avez raison: Un exemple vaut mieux que mille discours !

    C'est ce que je veux obtenir comme résultats.

    Merci pour l'aide que vous m'apportez
    Images attachées Images attachées   

  11. #11
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Mon ami à priori tu as besoin de te documenter sur les bandes car je vois que tu mélange.

    1. La bande titre n'est pas destinée aux enregistrements donc se contenter de n'afficher que les info correspondant; Nom de l'entreprise, Logo, Date d'impression, etc.
    2. Faut se servir de la bande colonne car c'est cet endroit qui est prévu pour recevoir les noms des champs; Libellé en d'autres termes.
    3. La bande détail est destinée à afficher les enregistrements donc les champs

    Avec ça tu devra avancer grandement, bonne chance.

  12. #12
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 081
    Points
    41 081
    Billets dans le blog
    62
    Par défaut
    Voici comment je vois la chose dans le fichier joint .
    bien sur la présentation y est succinte .
    le principe était déjà expliqué (je m'auto cite avec quelques corrections en fonction de l'état souhaité)
    un bande entete de groupe sur chapitre
    une bande entete de groupe sur article
    une bande détail
    une bande bas de groupe article contenant
    le code article , la quantité totale (donc un QRExpression que l'on oubiera pas de réinitialiser apres impression ) et un mémo qui contiendra les numéros de factures
    La bande bas de groupe Chapitre sera aligné en bas de page (ce qui fourniras le saut de page souhaité et ce sans rien coder )

  13. #13
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Bonjour,
    Merci pour les réponses ça ma beaucoup aider à avancer (je n'ai pas fais de reply à cause des problèmes techniques).

    Pour l'impression, je voudrais forcer la création d'une nouvelle page à chaque changement de n° d'article:

    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
     
    procedure TForm14.DetailBand1BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    begin
    Query2.first;
    while not (Query2.eof) do
    if ((Query2.FieldValues['Article'])<>(Query2.FieldValues['Article'].Next)) Then  // BUG A CE NIVEAU 
     
    Begin
    QuickRep1.NewPage;
    Query2.Next;
    end
    else
     
    Query2.Next;
    end;
    J'ai un problème au niveau du test "if" je n'ai pas su comment comparer un enregistrement avec sans suivant.

    S.V.P corrigez moi

  14. #14
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Re;

    à mon sens cela devrait se passer "après" impression mais pas "avant" donc au niveau du AfterPrint. Le code me semble être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm14.DetailBand1AfterPrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    begin
       // si on n'est pas sur la 1ère page alors
       PrintBand := (Query2.RecordCound > 1);
       // forcer le passage à une nouvelle page
       if (PrintBand) then QuickRep1.NewPage;
    end;
    Bonne chance.

  15. #15
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Bonjour,
    Je pense que j'ai été mal compris, je dois parcourir le query en comparant le champ article avec son suivant, s'il est différent alors forcer la création d'une nouvelle page.
    Merci

  16. #16
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    donc c'est plus facile que je le pensais. voici l'algo (si je puis dire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Ouvrir Query
    Lire Enregistrement
    Sauver champ dans variable_globale
    si pas premier enregistrement alors
      si champ_actuel = variable_globale
         nouvelle_page
      fin_si
    fin_si
    et que tout cela soit fait au niveau du BeforePrint de ton QReport.

  17. #17
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 081
    Points
    41 081
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par kiminfor Voir le message
    Bonjour,
    Pour l'impression, je voudrais forcer la création d'une nouvelle page à chaque changement de n° d'article:
    pas la peine de se compliquer inutilement la vie , si tu as suivi mes conseils il suffit de mettre un alignbottom dur le bas de groupe article comme pour celui de
    Citation Envoyé par moi-même
    La bande bas de groupe Chapitre sera aligné en bas de page (ce qui fourniras le saut de page souhaité et ce sans rien coder )

  18. #18
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    oui oui et oui c'est la meilleure solution ; saut de page sans aucun code
    merci maître.

  19. #19
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Bonjour, merci pour les réponses just-soft et sergio

    Sergio:
    pas la peine de se compliquer inutilement la vie, si tu as suivi mes conseils il suffit de mettre un alignbottom dur le bas de groupe article comme pour celui de ....
    J'ai suivi les étapes mais je n'ai pas obtenu le résultat que je voulais, il y a peut être une propriété à changer, ou peut être c'est moi qui a mal suivi les étapes.
    Voilà ce que j'ai obtenu comme résultat (pièce joint), or ce que je veux c'est passer à une nouvelle page à chaque changement de chapitre.

    Aiguillez-moi plus, svp, sur les détails.
    Images attachées Images attachées  

  20. #20
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 081
    Points
    41 081
    Billets dans le blog
    62
    Par défaut
    je ne comprends pas tout c'est par chapitre , par article , ou les deux pour ce saut de page ?????

    Outre le fait qu'il faut que la query soit bien ordonnée (ordre by) le principe est pourtant clair : un alignbottom sur le groupfooter correspondant fait l'affaire. Dans le cas ou c'est pour les deux au pire il faut ruser en utilisant une donnée "combinée" chapitre+article .

    pour y voir plus clair , au pire fournis nous la partie dfm concernant le Quickreport (c'est pas facile a lire mais au moins on peut y deceler des erreurs) et la requete de la query pour vérifier l'ordre

Discussions similaires

  1. imprimer pages avec condition
    Par vbanovice dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/07/2009, 23h09
  2. imprimer 2 feuilles avec conditions
    Par lindette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/08/2007, 21h29
  3. [Impression] Imprimer avec jbuilder
    Par joker34 dans le forum JBuilder
    Réponses: 3
    Dernier message: 15/11/2005, 13h15
  4. Index avec conditions
    Par marhnix dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/03/2004, 10h48
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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