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 :

Utilisation d'une requête pour impression d'un état sur formulaire [WD18]


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2014
    Messages : 20
    Points : 28
    Points
    28
    Par défaut Utilisation d'une requête pour impression d'un état sur formulaire
    Bonsoir à toutes et à tous,

    Je viens de passer de la version 5.5 à la version 18, autant dire que je suis Cro-Magnon qui découvre l'électricité... J'en apprend tous les jours mais là, je sollicite votre aide (vu le temps que j'y ai passé...). J'espère arriver à expliquer clairement ce que je veux...
    Je suis en train de créer un programme pour une association dont vous pouvez voir un bout de l'analyse en bas du message. Elle a un peu changé depuis mais rien d'important pour mon pb.

    Comme marqué dans l'intitulé, je cherche à imprimer un "certificat" sous forme "d'état sur formulaire".
    Pour résumé, j'ai besoin :
    - Dans le fichier "soldat" et pour UN soldat précis de (je n'en cite que quelques-unes pour simplifier) : NOM, Matricule, Armée, DateDeces, emplacement
    - Dans le fichier "Parrain" et pour UN parrain précis de (Idem, je n'en cite que quelques-unes pour simplifier) : NOM, Adresse, code postal, ville
    - Dans le fichier "décorations" de toutes les décorations que possède le soldat sélectionné gràce au champ "NomDécoration".

    Donc afin de selectionner LE soldat et LE parrain, dans ma requete, je met en plus de ce que je viens de citer l'IDSoldat sur lequel je met une sélection, par exemple : 23 ainsi que l'IDParrain sur lequel je met également une sélection par exemple : 8

    La requete me donne un résultat satisfaisant, du genre : Je prend comme exemple un soldat qui possède 2 médailles, j'ai donc 2 lignes qui ressemblent à ça :

    23, NOM, Matricule, Armée, DateDeces, emplacement, 8, NOM, Adresse, code postal, ville, décoration N°1
    23, NOM, Matricule, Armée, DateDeces, emplacement, 8, NOM, Adresse, code postal, ville, décoration N°2

    Les informations sont correctes mais quand je lance l'impression, il m'imprime autant de certificat qu'il y a de décorations alors que je veux UN certificat qui regroupe toutes les informations (notamment les décorations les unes en dessous des autres).


    Je pense que je rédige mal ma requete mais j'avoue que je cale...

    J'ai bien quelques idées en tête pour remédier au pb sans passer par une requete mais je pense que cela sera moins "propre" (passer par une table mémoire en "concaténant" les décorations, regrouper les décorations dans un champ mémo dans le fichier soldat (ça ne me plait pas trop) etc...
    J'ai même essayer de "jouer" avec le "corps" du formulaire mais rien de convainquant (à cause du logo qui est en fond)...

    J'ai même pensé que ça n'est pas possible via une requete et j'espère que non...

    Voilà, si quelqu'un a une idée, je suis preneur... MERCI d'avance...


    Pour info, voici le code de la requete :

    Code SQL : 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
    SELECT 
      Décoration_Soldat.IDSoldat AS IDSoldat_Dé,  
      Soldat.Nom AS Nom,  
      Grades.NomGrade AS NomGrade,  
      Armée.NomArmée AS NomArmée,  
      Soldat.Matricule AS Matricule,  
      Escadre.NomEscadre AS NomEscadre,  
      Escadron.NomEscadron AS NomEscadron,  
      EtatUS.NomEtat AS NomEtat,  
      Soldat.DateDeces AS DateDeces,  
      Soldat.Emplacement AS Emplacement,  
      Parrain.IDParrain AS IDParrain,  
      Parrain.Nom AS Nom_Pa,  
      Parrain.Adresse AS Adresse,  
      Parrain.Code_Postal AS Code_Postal,  
      Parrain.Ville AS Ville,  
      Décoration.NomDécoration AS NomDécoration
    FROM 
      Décoration,  
      Décoration_Soldat,  
      Soldat,  
      Grades,  
      EtatUS,  
      Escadre,  
      Escadron,  
      Armée,  
      Parrain_Soldat,  
      Parrain
    WHERE 
      Parrain.IDParrain = Parrain_Soldat.IDParrain
      AND    Soldat.IDSoldat = Parrain_Soldat.IDSoldat
      AND    Armée.IDArmée = Soldat.IDArmée
      AND    Escadron.IDEscadron = Soldat.IDEscadron
      AND    Escadre.IDEscadre = Soldat.IDEscadre
      AND    EtatUS.IDEtatUS = Soldat.IDEtatUS
      AND    Grades.IDGrades = Soldat.IDGrades
      AND    Soldat.IDSoldat = Décoration_Soldat.IDSoldat
      AND    Décoration.IDDécoration = Décoration_Soldat.IDDécoration
      AND
      (
        Parrain.IDParrain = {IdentifiantParrain}
        AND  Décoration_Soldat.IDSoldat = {IdentifiantSoldat}
      )

    Nom : IMG_AnalyseWD.jpg
Affichages : 453
Taille : 135,4 Ko

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    pour afficher les informations il faut que tu affiches les données dans le bloc corps. Chaque ligne sera alors une décoration. Pour l'en-tête du document, il faut prendre le bloc en-tête de page. Dans celui-ci tu peux reprendre le contenu de ta requête concernant les informations nécessaires.

    Pour le type d'état, cela dépend de la forme dans laquelle tu veux présenter les données. Un état formulaire ne te permet peut-être pas de synthétiser facilement les données sur une seule ligne. Un état étiquette serait peut-être plus approprié et tu peux en afficher plusieurs à la suite sans changer de ligne.
    Le mieux serait de savoir quel devra être la présentation finale du document (liste des décorations en vertical ou pas, sur 1 colonne ou plus, nombre de données à afficher en moyenne ....)

    Si tu veux avoir toutes les lignes dans un seul champ dans ta requête, alors il faut composer ce champ en dehors de la requête pour plus de facilités. Dans ce cas, tu boucles sur les lignes retournées par la requête en ajoutant le contenu attendu à ce champ. Ensuite ce champ sera affiché dans le corps de l'état à la place des données de la requête.

    Sinon bienvenue dans le 21e siècle, de mémoire la version 5.5 est aussi vieille que notre coupe du monde de foot

    à bientôt,

    Nicolas

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 552
    Points : 1 193
    Points
    1 193
    Par défaut
    Bonjour,

    Personnellement, je garderais la requête (vu que le résultat est juste) et je passerais par une rupture programmée. La rupture se baserait sur : "IDSoldat_Dé"

    Dans le "corps" je mettrait uniquement la donnée : "NomDécoration"


    avec un peu de mise en forme cela donnerait quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    NOM (ou ce que l'on veut comme info dans le haut de rupture)
                                                         décoration N°1
                                                         décoration N°2

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2014
    Messages : 20
    Points : 28
    Points
    28
    Par défaut
    Bonsoir à toutes et à tous,

    Merci à vous pour vos réponses rapides et veuillez m'excuser pour la mienne qui est tardive : j'étais absent...

    - Pour répondre à Ry_Yo : j'avais déjà essayé avec une rupture mais ça n'avait pas été convainquant... Je vais tenter un nouvel essai.

    - Pour répondre à Nicolas :
    1. Je cite : "pour afficher les informations il faut que tu affiches les données dans le bloc corps. Chaque ligne sera alors une décoration. Pour l'en-tête du document, il faut prendre le bloc en-tête de page. Dans celui-ci tu peux reprendre le contenu de ta requête concernant les informations nécessaires."

    Entièrement d'accord, il faut que juste les décorations apparaissent dans le bloc de corps et à ce moment là, ça fonctionne. Mais dans ce cas, c'est le type d'état qui pose problèmes (l'image de fond, en fait).

    2. Je cite : Pour le type d'état, cela dépend de la forme dans laquelle tu veux présenter les données. Un état formulaire ne te permet peut-être pas de synthétiser facilement les données sur une seule ligne. Un état étiquette serait peut-être plus approprié et tu peux en afficher plusieurs à la suite sans changer de ligne.
    Le mieux serait de savoir quel devra être la présentation finale du document (liste des décorations en vertical ou pas, sur 1 colonne ou plus, nombre de données à afficher en moyenne ....)


    Seul l'état formulaire répond à mes besoins : En fait,, mes données sont les une en dessous des autres, identiques pour chaque ligne de ma requête sauf les décorations qu'il faut que je regroupe. Donc pas d'état étiquette...

    3. Je cite : Si tu veux avoir toutes les lignes dans un seul champ dans ta requête, alors il faut composer ce champ en dehors de la requête pour plus de facilités. Dans ce cas, tu boucles sur les lignes retournées par la requête en ajoutant le contenu attendu à ce champ. Ensuite ce champ sera affiché dans le corps de l'état à la place des données de la requête.

    C'est en effet une des solutions à laquelle je pense...



    Au vu de ce que vous m'avez répondu, je vois que j'en étais arrivé aux mêmes conclusions... Donc, voici les solutions auxquelles je pense :

    - utiliser un état formulaire simple (sans image "de fond") mais cette image sera pré-imprimée sur le papier que je mettrais dans l'imprimante (et c'est, je pense la solution qui sera adoptée par l'association, simplement pour une histoire de coût) et, dans ce cas, je pourrai utiliser le bloc de corps juste pour les décorations.

    - utiliser quand même un état sur formulaire en ayant pris soin avant de lancer l'impression, de "concaténer" les informations concernant les décorations et de les passer à l'état sous forme de variable.

    Je vais tester les deux et posterai ici ma solution, on ne sait jamais, ça pourra peut-être aider quelqu'un...

    Bonne fin de WE à tous et bonne prog !!!

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2014
    Messages : 20
    Points : 28
    Points
    28
    Par défaut
    Bonsoir à toutes et à tous,

    Bon, comme promis, je viens donner des nouvelles.
    Mon problème est résolu, j'ai opté pour la méthode suivante :
    - recherche des décorations via une requête pour le soldat concerné et stockage dans une variable en les "additionnant" et en y ajoutant un RC entre chacune d'entre elles
    - recherche des informations concernant le soldat ET le parrain concerné via une requête. Cette requête est intégrée au formulaire auquel je "passe", au lancement de l'état, la variable qui contient les décorations

    Et tout fonctionne correctement !!!

    Merci à ceux qui m'ont répondu... Ca m'a bien orienté pour la solution.

    Bonne programmation à tout le monde...

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Merci à toi pour le retour !

    bon courage pour la suite

    Nicolas

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

Discussions similaires

  1. Optimisation d'une requête pour l'utiliser dans trigger
    Par Skandyx dans le forum Développement
    Réponses: 1
    Dernier message: 29/11/2012, 09h12
  2. Réponses: 2
    Dernier message: 27/07/2011, 14h34
  3. Réponses: 7
    Dernier message: 24/06/2010, 16h38
  4. Réponses: 0
    Dernier message: 01/04/2009, 10h12
  5. [Sécurité] Sécurité portable pour les données utilisées dans une requête
    Par berceker united dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/07/2006, 14h48

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