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 :

Table avec fenetre interne de détail d'une ligne par programmation


Sujet :

WinDev

  1. #1
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut Table avec fenetre interne de détail d'une ligne par programmation
    Bonjour à tous,
    Je me tourne une fois de plus vers vous pour trouver une solution à mon problème.
    J'ai une table qui affiche une facture avec des regroupements d'articles (sorte de kit)
    La table n'affiche que le titre du regroupement et lorsque l'on clique sur le petit + le détail s'ouvre.
    Comme toutes les lignes n'ont pas de regroupement j'effectue l'attribution de la FI par programmation et je n'ai le petit + que pour les lignes qui doivent afficher un détail.

    Jusque là tout fonctionne.

    Le problème c'est que lorsque je clique sur la première ligne vide (en bas de table/ nouvel enregistrement), la fenêtre interne de détail s'ouvre quand même, elle est vide mais je ne peux plus la fermer

    Avez vous déjà rencontré ce problème ?

    dans les onglets IHM de description de la table j'attribue une "FI de détail d'une ligne" malgré que je le fasse ensuite par programmation. Sans ça je n'arrive pas à avoir le détail. Cela pourrait il être la cause du problème ?

    Le code d'affectation des FI: dans affichage d'une ligne de la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Tab_DetailFactures_CalculPrix()
    index est un entier= IndiceEnCours()
    SI TABLE_DetailFactures.COL_IDKit<>0 ALORS
    	TABLE_DetailFactures[index]..FenêtreDétailLigne="FI_DetailKit"
    SINON SI TABLE_DetailFactures.COL_IDgroupes<>0
    	TABLE_DetailFactures[index]..FenêtreDétailLigne="FI_DetailGroupe"
    SINON
    	TABLE_DetailFactures[index]..FenêtreDétailLigne=""
    FIN
    La fenêtre interne s'ouvre avec comme paramètre, le n° de la table et le N° de la ligne
    Dans déclaration Globale de la FI:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PROCÉDURE MaFenêtre(gPtableAppelant est un Champ,gnNumeroLigne est un entier)
    Je ne sais pas comment est attribué le n° gPtableAppelant car j'ai l'impression qu'il change alors que je suis dans la même table, par contre le gnNumerodeLigne a bien la bonne information => ligne sur laquelle je double clique


    Je vous remercie d'avance pour vos propositions d'exploration !

  2. #2
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 885
    Points : 5 458
    Points
    5 458
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Ne serait il pas plus logique de mettre ton code dans "Déroulé du détail" ?
    En ce qui concerne gPtableAppelant, ce n'est pas un numéro mais un champ
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  3. #3
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    Merci pour ta réponse.
    Si je mets ce code dans le déroulé, la table se charge avec par défaut la FI attribué dans l'onglet IHM.
    J'ai donc des + sur toutes les lignes même celles qui ne devraient pas en avoir.

    Sur affichage d'une ligne ça me permet d’attribuer la bonne FI en fonction de la ligne.... J'avais trouvé cette solution sur le forum.
    Mais peut être que ce n'est pas comme cela qu'il faut faire.... je veux bien essayer autre chose mais je ne sais pas quoi.

    En ce qui concerne gPtableAppelant, ce n'est pas un numéro mais un champ
    je dis un numéro parce que quand je regarde sa valeur en debug c'est bien un chiffre qui sort. Je pense que le champ doit être repéré par un ID unique.
    Ce qui m'interpelle c'est que je n'ai pas toujours le même numéro. Mais là encore je ne suis sûr de rien....

    Mon but c'est juste d'éviter que la FI s'ouvre lorsque on double clique sur la ligne d'un nouvel enregistrement..... le reste marche plutôt bien.

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 389
    Points : 9 564
    Points
    9 564
    Par défaut
    Bonjour,

    Pourquoi ne pas capturer l'avènement double-clic ? Tu testes s'il y a un détail pour ensuite, afficher la FI
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  5. #5
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    Merci pour ta réponse
    J'ai essayé cette solution mais peut-être en m'y prenant mal.
    J'ai donc essayé dans le code evenement "double-clic" "bouton gauche de la souris enfoncé" et "relaché" de mettre ce code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    index est un entier= IndiceEnCours()  //récupére l'indice de la ligne sur laquelle l'utilisateur clique
    SI index > TableOccurrence(TABLE_DetailFactures) ALORS index=TableOccurrence(TABLE_DetailFactures)  // j'ai ajouté ça pour essayer de voir si l'indice était plus grand
                                                                                                                                                             // que le nombre d’occurrence de la table pour essayer de lui attribuer celui de la dernière ligne
    SI TABLE_DetailFactures.COL_IDDetailFacture="" ALORS
    	TABLE_DetailFactures[index]..FenêtreDétailLigne=""  // et ça pour ne pas attribuer de FI à la ligne
    FIN

    Mais malgré toutes ces tentatives j'ai toujours cette FI qui apparait lors d'un double clic sur une nouvelle ligne

    J'espérai aussi pourvoir agir sur l'initialisation de la FI pour empêcher son ouverture avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROCÉDURE MaFenêtre(gPtableAppelant est un Champ,gnNumeroLigne est un entier)
    //si TableOccurrence(gPtableAppelant) < gnNumeroLigne alors retour
    detailligne est une chaîne=(gPtableAppelant[gnNumeroLigne])
    gsValeurIDdetailFacture est une chaîne=ExtraitChaîne(detailligne,3)
     
    SI gsValeurIDdetailFacture ="" ALORS
    	 TableEnroule(gPtableAppelant,gnNumeroLigne)   // pour essayer d'enrouler la table.. et d'arrêter l'initialisation de la fenetre
    	 RETOUR
    FIN
    AffichageTableDetailsFactureKit()
    J'ai également fait un bouton sur ma FI avec ce code histoire d'avoir une solution pour enrouler le détail:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    PROCÉDURE MaFenêtre(gPtableAppelant est un Champ,gnNumeroLigne est un entier)
    //si TableOccurrence(gPtableAppelant) < gnNumeroLigne alors retour
    detailligne est une chaîne=(gPtableAppelant[gnNumeroLigne])
    gsValeurIDdetailFacture est une chaîne=ExtraitChaîne(detailligne,3)
    SI gsValeurIDdetailFacture ="" ALORS
    	 TableEnroule(gPtableAppelant,gnNumeroLigne)
    	 RETOUR
    FIN
    AffichageTableDetailsFactureKit()
    Mais bizarrement le gPtableAppelant n'est pas le même que lors de l'initialisation de la fenêtre, et ça n'a aucun effet

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2023
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2023
    Messages : 85
    Points : 158
    Points
    158
    Par défaut
    Bonjour,
    Avez-vous essayé un "Renvoyer Faux" qui pourrait bien empêcher l'ouverture de la FI.
    Cdlt

  7. #7
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 885
    Points : 5 458
    Points
    5 458
    Billets dans le blog
    1
    Par défaut
    Tu pourrais essayer de régler ça en 2 fois.
    1-Affichage de "+" dans "Affichage d'une ligne"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SI PAS ConditionDétail ALORS
         TABLE_DetailFactures[index]..FenêtreDétailLigne=""
    FIN
    2-Dans "Déroulé du détail" il te resterait à choisir l'une ou l'autre des FI
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  8. #8
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    Merci pour toutes ces idées !
    DevOcc, oui j'ai essayé le RENVOYER FAUX. Je l'ai testé dans "bouton gauche de la souris enfoncé" et surement aussi dans le déroulé....mais je n'en suis pas certain, j'essayerai demain au cas où!
    Voroltinquo, je testerai aussi demain mais si je mets le code indiqué dans l'affichage des lignes je n'aurai pas le plus visible devant les lignes concernées. Mais pourquoi pas faut tester .... retour demain!
    Merci en tout cas pour l'intérêt porté à mon problème.....

  9. #9
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 885
    Points : 5 458
    Points
    5 458
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mnssylvain Voir le message
    Voroltinquo, je testerai aussi demain mais si je mets le code indiqué dans l'affichage des lignes je n'aurai pas le plus visible devant les lignes concernées.
    Dans la mesure où tu as une FI par défaut, normalement si. Ce code annule l'affectation d'une FI si la condition n'est pas remplie.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  10. #10
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    Bonjour,
    Oui j'ai lu un peu rapidement le code hier soir, effectivement ta solution en 2 fois fonctionne pour l'attribution des FI et j'ai bien les petits plus devant les lignes souhaitées.
    Malheureusement ça ne règle pas le problème de l'appel à la FI lorsque je clique sur la ligne de nouvel enregistrement...
    J'ai essayé aussi avec le RENVOYER FAUX.
    Il est bien lu lorsque je clique sur la ligne dans l'évènement déroulé mais tout ce suite après j'ai initialisation de la FI....
    Y aurait il pas moyen de bloquer ou d'éviter l'évènement "déroulé" dans la succession des opérations?

    J'avais essayé sur le clic bouton gauche mais je n'y suis pas arrivé non plus.
    Est ce que ce comportement ne serai pas un bug de Windev ?
    J'avoue ne pas avoir essayer dans d'autres tables pour le moment.....
    Je vais essayer d'enlever l'attribution des FI par programmation pour voir comment ça se comporte.....

    Encore merci pour vos idées !

  11. #11
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    PUNAISE, je crois que j'ai trouvé!

    Pour reprendre l'histoire, je déclare bien l'affectation des mes FI dans l'affichage des lignes (comme au début et non en 2 fois comme proposé par Voroltinquo)
    Le "RENVOYER faux" ne donne rien dans l'évènement "déroulé" de la table car en fait c'est trop tard. Si on est dans le déroulé alors la FI s'ouvre ensuite!
    J'ai donc creusé le shuntage de cet évènement, et bingo ça fonctionne.
    J'ai donc mis le code ci-dessous dans les évènements "double-clic" et "bouton gauche enfoncé" et là ça semble fonctionner
    Je teste quand même la condition pour ne pas annuler l'effet du double clic qui permet d'ouvrir la FI s'il y en a une d'attribuée....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SI TABLE_DetailFactures.COL_IDKit=0 ET TABLE_DetailFactures.COL_IDgroupes=0 ALORS 
    	RENVOYER Faux
    FIN
    Bon je passe en résolu en espérant de pas de voir y revenir..... et j'espère aussi que cette discussion pourra aider d'autres utilisateurs.
    Merci encore pour votre aide

  12. #12
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 885
    Points : 5 458
    Points
    5 458
    Billets dans le blog
    1
    Par défaut
    Ce que je ne comprend pas, c'est cette histoire de double clic.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  13. #13
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    Bon évidemment j'ai crié victoire trop tôt!

    Effectivement le code dans le clic gauche empêche l'ouverture de la FI mais il empêche aussi de sélectionner toute autre ligne de la table.... screugneugneu !
    J'ai essayé de le mettre sur "bouton gauche relâché" mais l'initialisation de la FI se lance avant...... (en fait non fait c'était du à un pb de code j’explique dessous)

    J'utilisais la commande IndiceEnCour() pour connaitre le n° de ligne sélectionnée et faire en sorte que si le n° de ligne était supérieur au nombre de ligne de la table (TabbleOcurence()) et bien je mettais un "RENVOYER faux"
    Hors cela ne marche que si la ligne est sélectionnée. En effet si la ligne 3 est sélectionnée et que je clique sur la ligne de nouvel enregistrement et bien IndiceEnCours() renvoie 3.....
    J'ai donc eu l'idée de trouver le n° de ligne en repérant la position de la souris...... et là ça fonctionne..... j'ai le bon n° de ligne du coup ma condition fonctionne et j'ai bien le RENVOYER faux qui est lu !

    Voici le code, j'ai laissé mes 3 tests de contrôle dedans pour que ça soit plus clair

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SI TABLE_DetailFactures.COL_IDKit=0 ET TABLE_DetailFactures.COL_IDgroupes=0 ALORS 
    	test1 est un entier=TableOccurrence(TABLE_DetailFactures)
    	test2 est un entier =IndiceEnCours()
    	ligne est un entier= TableInfoXY(TABLE_DetailFactures,tiNumLigne,SourisPosX,SourisPosY)
    	SI TableOccurrence(TABLE_DetailFactures)<TableInfoXY(TABLE_DetailFactures,tiNumLigne,SourisPosX,SourisPosY) ALORS
    	//SI TABLE_DetailFactures.COL_IDDetailFacture="" ALORS
    		RENVOYER Faux
    	FIN
    FIN
    Pour Voroltinquo
    Le double clic permet normalement sur la table d'ouvrir le détail de la ligne. Mais il faut que je le bloque pour un double clic sur la ligne d'enregistrement sinon il m'ouvre la FI de détail.....
    Donc le code permet de bloquer l'ouverture de la FI
    J'espère être plus clair.

    Je laisse en résolu car ça semble fonctionner....

    Merci pour votre aide cela m'a aider dans mon raisonnement

    Je suis quand même étonné de devoir faire tout ça et que ça ne fonctionne pas plus simplement...... Je crois vraiment en un bug de Windev mais bon comme ma version n'est pas récente on ne le saura jamais.....

  14. #14
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 885
    Points : 5 458
    Points
    5 458
    Billets dans le blog
    1
    Par défaut
    J'ai tenté de reproduire ton problème.
    Avec une saisie en cascade et le code en de partie (une pour l'affichage ou pas des "+", et une pour savoir quoi dérouler) je n'ai aucun problème. Comme avec ce mode le double clic ne déroule pas le détail, je suis passé en mode affichage seul, et là encore, le traitement est nominal.

    Il faudrait envisager une exécution en mode pas à pas afin de voir si tu ne passe pas par une ouverture de FI
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 22/01/2024, 03h00
  2. [WD25] Fenêtre interne de détails d'une ligne d'un champ table
    Par laurent30s dans le forum WinDev
    Réponses: 7
    Dernier message: 24/05/2022, 01h17
  3. Réponses: 1
    Dernier message: 22/09/2021, 15h12
  4. Réponses: 4
    Dernier message: 20/03/2017, 15h35
  5. UPDATE d'une table avec test d'un champ d'une autre table
    Par delphim dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2004, 13h30

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