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 :

Filtrage requête et lancement d'un état [WD17]


Sujet :

WinDev

  1. #1
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut Filtrage requête et lancement d'un état
    Bonjour,

    je développe un module de gestion de commandes clients, et je voudrais afficher un état quand je clique sur un bouton imprimer.

    J'ai une requête REQ_Etat_Commande_Client qui ressemble à ça (elle n'est pas optimisée car elle ramène absolument tous les champs mais bon) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM cc, ccl, art, um, clt AS client, clt AS livraison 
    WHERE ccl_cc_id = cc_id AND ccl_article_id = art_id AND art_um = um_id
    AND cc_client = client.clt_id AND cc_livraison = livraison.clt_id;
    Pour faire court, j'ai une table cc qui comporte les données d'entête d'une commande (client, adresse, tva, conditions de paiment, ....), une table ccl pour les lignes de la commande, table art pour les articles, um c'est les unités de mesure (pc, kg, m, lopin, ....)

    J'ai réussi tant bien que mal à concocter un état Etat_Commande_Client pas très joli, mais c'est déjà pour tester que ça fonctionne.

    Sur clic de mon bouton imprimer, j'ai mis ce code mais ça ne semble pas filtrer correctement ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ccid est un entier = REQ_Commandes_Clients.cc_id   // id de ma commande
    critere est une chaîne = "cc_id = " + ccid
    HExécuteRequête(REQ_Etat_Commande_Client)
    HFiltre(REQ_Etat_Commande_Client, critere)
    Info(REQ_Etat_Commande_Client.clt_denomination)
    Et la fenêtre d'info n'affiche rien (vide).

    Plusieurs choses à vous demander donc :

    1) Ma requête ne me retourne que les commandes clients qui ont des lignes de commandes, sinon ça ne match pas et ça ne retourne pas une commande qui n'aurait pas de lignes. Comment définir ma requête autrement pour que je puisse quand même avoir dans les résultats de la requête la commande (table cc) mais sans les lignes (table ccl). Il faut faire une jointure externe mais je ne sais pas la définir...

    2) Au niveau du filtrage, je préfère passer par les fonctions HFiltre et compagnie, bien que je bute dessus !! Mais sinon, peut-être que je devrais faire une requête paramétrée, le résultat de la requête serait moins volumineux ? Dans ce cas comment fait-on cela ?

    3) Enfin, une fois que la requête est correctement positionnée sur le bon record (cc_id = ccid ) comment lancer mon état (qui est affecté à la requête en question) ?


    Je précise que j'ai pas mal cherché sur le forum et je n'ai pas trouvé d'aide à ce sujet, je trouve que globalement les questions des gens sont d'un niveau assez relevé, et moi je débute !!! Je vais me payer des bouquins de formation je crois

    Merci d'avance pour votre pédagogie !
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  2. #2
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Bon j'ai eu peu creusé par moi-même quand même !

    J'ai réécrit ma requête avec des jointures externes et un paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * 
    FROM cc LEFT OUTER JOIN ccl ON cc.cc_id = ccl.ccl_cc_id
    	    LEFT OUTER JOIN art ON ccl_article_id = art_id
    	    LEFT OUTER JOIN um ON art_um = um_id,
    	 clt AS client, clt AS livraison 
    WHERE cc_client = client.clt_id AND cc_livraison = livraison.clt_id AND cc_id = {ccid};
    J'ai testé dans l'éditeur de requête, et en fournissant un numéro de commande existant à mon paramètre ccid et ça fonctionne bien.

    Il ne me reste plus qu'à trouver comment déclarer, exécuter cette requête et la donner à manger à mon état.... J'ai essayé ça, mais ça ne va pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ccid est un entier = REQ_Commandes_Clients.cc_id   // ccid = 169 ok
    HExécuteRequête(REQ_Etat_Commande_Client, hRequêteDéfaut, ccid)
    Info(REQ_Etat_Commande_Client.cc_id)   // m'affiche 0
    Un petit bout de code exemple serait le bienvenu. Merci

    EDIT : Curiosité, quand je teste ma requête dans l'éditeur de requête elle fonctionne bien et me renvoie des resultats. Quand je suis dans l'éditeur d'état et que je teste mon état, il me demande bien de fournir le paramètre, mais ensuite j'ai le message : "Il n'y a pas de données à imprimer"
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  3. #3
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Bon je progresse tout seul, mais ça pourra servir à d'autres peut-être.

    J'ai trouvé comment lancer l'état :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ccid est un entier = REQ_Commandes_Clients.cc_id
    iInitRequêteEtat(ETAT_Commande_Client, ccid)
    iAperçu(100)
    iImprimeEtat(ETAT_Commande_Client)
    Ca ne me dit pas pourquoi quand je teste mon état via l'éditeur d'état, il ne me sort rien (il n'y a pas de données à imprimer).....

    Enfin, j'utilise l'apercu de l'état avant impression, je voulais savoir si on peut avoir une fenêtre d'aperçu un peu plus épurée (sans les barres d'outils un peu brouillons tout en haut), voire même dans l'idéal intégrer un état dans mon application, dans un des onglets de mon système à onglets. Ca ça m'intéresserait vraiment.
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  4. #4
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Points : 841
    Points
    841
    Par défaut
    Bonjour
    Peut être as-tu un effet de bord sur le test de ton état que tu n'as pas dans l'éditeur de requête.
    il faudrait que tu le testes pas à pas pour voir s'il n'y a pas de filtre, de code d'initialisation qui pertube... faire éventuellement des trace()...

    Gancau

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

    il faut un HLitPremier pour lire l'enregistrement que la requête a trouvé et l'afficher dans Info.

    Nicolas

  6. #6
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Oui c'est ça qu'il me manquait !

    Le HLitPremier mais je n'ai jamais ce réflexe de me positionner sur le premier record car je suppose que ça devrait être la position naturelle après un HExecuteRequete......

    Bon je crois que c'est presque résolu.

    J'ai encore un soucis que je me permets d'exposer dans cette même discussion parce que c'est lié : au lieu de faire un iApercu de mon état, je souhaite directement générer un pdf et l'afficher dans un champs HTML qur l'utilisateur pourra imprimer ou non si ça lui chante. J'ai donc vu qu'il fallait utiliser l'instruction iDestination pour rediriger la sortie impression, et ensuite charger le fichier généré dans la zone HTML. Malheureusement en ce qui me concerne, rien ne se charge dans mon champs HTML, au lieu de ça mon fichier pdf s'ouvre dans Acrobat Reader de façon tout à fait indépendante....

    Voici le code utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    monfichier est une chaîne
    monfichier = ComplèteRep(SysRep(srMesDocuments))+REQ_Commandes_Clients.cc_num + ".pdf"
    HTML1 = monfichier
    Un idée ?
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  7. #7
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Points : 841
    Points
    841
    Par défaut
    Bonjour
    Quel est ton code de idestination et iimprimeétat ?

    Gancau

  8. #8
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Citation Envoyé par gancau Voir le message
    Bonjour
    Quel est ton code de idestination et iimprimeétat ?

    Gancau
    NomFichier est une chaîne=ComplèteRep(SysRep(srMesDocuments))+ REQ_Commandes_Clients.cc_num + ".pdf"
    iDestination(iPDF, NomFichier)
    iFenêtreAbandon(Faux)
    iImprimeEtat(ETAT_Commande_Client)
    HTML1 = NomFichier


    Par contre, j'aimerais ne pas avoir à me rabattre sur la solution de charger le pdf dans un champs image, parce que oui effectivement ça fonctionne mais c'est un peu dégueulasse, et ça m'embête de me priver de l'activex acrobat

    après, est-ce qu'il s'agirait pas encore d'une histoire de bug 32/64bits ???
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  9. #9
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Bon c'est bien ce que je craignais, je viens de regénérer l'exécutable de mon projet mais en 32bits, hé bien ça fonctionne !! Le pdf se charge bien dans le champs HTML, alors que toute à l'heure en 64bits le pdf s'ouvrait en dehors de l'appli.....

    je pense une mauvaise intégration de l'activex de chez adobe de la part de chez pcsoft....

    Mais ya personne qui pourrait tester le morceau de code ci-dessus sur un environnement x64 ?

    Toute info est bonne à prendre, merci
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  10. #10
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Points : 841
    Points
    841
    Par défaut
    Je croyais que tu avais un champ html, pas un ActiveX acrobat ?

    A quel moment ton pdf s'ouvre tout seul ?
    tu as fait un debug pas à pas pour isoler la ligne qui l'ouvre ?

    Gancau

  11. #11
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    non non c'est bien un champs html

    mais quand on ouvre un fichier pdf dans un navigateur il y a toujours cette interface de chez acrobat qui encapsule le pdf, et je pense que c'est un activex cette fois !!

    le pdf s'ouvrait tout seul quand je faisais l'affectation de la source du fichier pdf au champs html, donc cette instruction-ci :

    HTML1 = NomFichier

    Bon là ça fonctionne mais j'ai un effet de bord un peu pénible que je vais peut-être expliquer dans un autre sujet => http://www.developpez.net/forums/d12...f/#post6905139
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/04/2007, 14h14
  2. Réponses: 3
    Dernier message: 30/03/2007, 09h53
  3. Lancement d'un état paramétré
    Par frevale dans le forum Access
    Réponses: 2
    Dernier message: 13/05/2006, 23h03
  4. Réponses: 2
    Dernier message: 27/01/2006, 15h42

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