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 :

Onglet dynamique procédure [WD24]


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 87
    Points : 52
    Points
    52
    Par défaut Onglet dynamique procédure
    Bonjour,

    Dans mon application à base d'onglets dynamique j'ai un souci dans une de mes procédure.
    J'ouvre ma FI_ListeProduits avec une table alimenté par une requête.Quand je veux saisir un nouvel enregistrement je clique sur mon bouton nouveau qui m'ouvre ma FI_NouveauProduit.Une fois tout les champs remplis j'enregistre et tout est bon car mes 2 onglets dynamiques sont ouverts et ma table FI_ListeProduits se rafraîchie bien.
    Mais si ma FI_ListeProduits n'est pas ouverte j'ai une erreur par rapport à ma procédure de rafraîchissement.
    J'ai cherché sur le forum et dans l'aide mais je n'arrive pas à voir mon erreur je loupe quelque chose mais où je bug....

    Bouton Valider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // Ajoute / modifie l'enregistrement
    Enregistrer()
    OngletFerme()
    Mon code d'enregistrement :
    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
    // On récupère les informations à l'écran
    EcranVersFichier()
    
    // Ajoute ou modifie l'enregistrement
    SI nNumProduit = 0 ALORS
    	HAjoute(FProduits)
    SINON
    	HModifie(FProduits)
    FIN
    
    nNumProduit = FProduits.IDFProduits
    BTN_Valider..Grisé = Vrai
    
    // Il faut mettre à jour le libellé de l'onglet
    oVolet est un Champ <- VoletDuChamp(MoiMême)
    oVolet..Libellé = ChaîneConstruit("Fiche produit de : %1",SAI_NomProduit)
    
    //	 On regarde si l'onglet produit n'est pas déjà ouvert
    SI gtaOnglet[nNumProduit]="" _OU_ ChampExiste(gtaOnglet[nNumProduit])=Faux ALORS
    	ExécuteTraitement(gtaOnglet[nNumProduit] + ".Rafraichir",trtProcédure,SAI_NomProduit)
    SINON
    	C'est là que je bug....
    FIN
    Ma procédure Rafraichir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PROCÉDURE Rafraichir(pNumProduit)
     
    FI_NouveauProduit..Libellé = "Fiche du produit : [%pNumProduit%]"
    TableAffiche(FI_ListeProduits.TABLE_REQ_SelectionProduit,taCourantEnreg)
    Merci pour votre aide en espérant avoir été assez clair.

  2. #2
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 805
    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 805
    Points : 5 253
    Points
    5 253
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Normalement ton champ onglet est lié à ta FI, soit "en dur" dans la définition du champ, soit via OngletOuvre.
    Le changement de libellé se fait alors de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ONG_OngletDyn[ONG_OngletDyn]..Libellé=FI_ListeProduit.SAI_NomProduit
    Ou alors dans la mesure où l'onglet se réfère à un enregistrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ONG_OngletDyn[ONG_OngletDyn]..Libellé=Produit.NomProduit
    En règle général, on n'accède pas directement à une FI en tant que fenètre, elle est toujours liée à un conteneur (CFI, Onglet dynamique, Champ table ...)
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 87
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    Merci correction faite pour le changement de nom de mon libellé d'onglet,

    mais comment ne pas exécuter ma procédure "rafraichir" si ma fenêtre interne FI_ListeProduits n'est pas ouverte quand je valide mon nouvel enregistrement.

    Merci de votre aide.

  4. #4
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 805
    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 805
    Points : 5 253
    Points
    5 253
    Billets dans le blog
    1
    Par défaut
    Le fait d'ouvrir l'onglet ouvre la fenêtre dans l'onglet.
    En fait, je crois deviner que tu as créé une FI de type fiche pour le nouveau produit qui s'affiche dans un onglet dynamique, et une FI de type table pour une liste de produit qui s'affiche quelque part.
    2 solutions sont possibles :
    Soit mettre le champ table dans ta FI nouveau produit, soit le mettre dans le premier onglet qui est obligatoirement statique.
    Il suffira, à l'initialisation du champ de lui affecter un alias (e.g. "Récap") pour pouvoir y accéder plus facilement par programmation. Dans les premier cas, le rafraîchissement se fait via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TableAffiche(TABLE_REQ....)
    Dans le 2° via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TableAffiche(ONG_Dyn["Récap"].TABLE_REQ....)
    Sans oublier avant le TableAffiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    REQ_.... .pParam=MonParam
    HExecuteRequête(REQ_....)
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 87
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    J'ai bien compris que mon traitement comme il est actuellement ne fonctionne que si ma fenêtre contenant ma table est en dur.

    Mais je n'arrive pas à transcrire en programmation le fait de dire ma fenêtre contenant ma table n'est pas ouverte, ne pas exécuter ma procédure ".Rafraichir", ma fenêtre contenant
    ma table est ouverte donc exécuter ma procédure ".Rafraichir".

    J'ai essayé avec "SI", "SELON" soit cela ne fonctionnera jamais, soit je me trompe totalement et je dois tout repenser je sais plus.

    Merci de votre aide.

  6. #6
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 805
    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 805
    Points : 5 253
    Points
    5 253
    Billets dans le blog
    1
    Par défaut
    Dans quel conteneur se trouve ta FI table ? (FI_ListeProduit).
    Pourrait-on avoir une copie écran de la fenêtre qui contient les FI, ce sera plus simple. Pour la FI_Produit, j'ai compris, pour la FI table je ne comprend pas d'où mon "Quelque part"
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 87
    Points : 52
    Points
    52
    Par défaut
    Voila les copies d'écran. Merci de prendre le temps de te pencher sur mon problème.
    Seul mon onglet dasboard est fixe à l'ouverture de l'application les autres onglets sont mes FI qui peuvent être de façon indépendante.
    Nom : 2020-03-16_11h21_55.jpg
Affichages : 812
Taille : 116,2 Ko
    Nom : 2020-03-16_11h22_23.jpg
Affichages : 776
Taille : 224,0 Ko
    Nom : 2020-03-16_11h22_53.jpg
Affichages : 753
Taille : 144,2 Ko

    Merci de votre aide.

  8. #8
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 805
    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 805
    Points : 5 253
    Points
    5 253
    Billets dans le blog
    1
    Par défaut
    J'y vois un peu plus clair.
    L'utilisateur affiche la liste des produit dans un volet dynamique alimenté par FI_ListeProduit.
    A partir de cet onglet, il peut Ajouter ou modifier un produit, via le bouton adéquat dans un volet dynamique alimenté par FI_Produit. A l'issue, la table doit être à jour.

    C'est jouable, il suffit passer le nom de la table en paramètre à FI_Produit et d'utiliser une indirection

    Initialisation de FI_Produit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PROCÉDURE FI_Produit(gsNomTable est chaîne,gn8PKProduit est entier sur 8=0)
    Ouverture de l'onglet Produit en ajout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OngletOuvre(FEN_Gestion_des_produits.ONG_Produit,"Produit",FI_Produit,TABLE_Produit..NomComplet)
    Ouverture du volet Produit en modification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OngletOuvre(FEN_Gestion_des_produits.ONG_Produit,"Produit",FI_Produit,TABLE_Produit..NomComplet,ProduitAModifier)
    Rafraîchissement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TableAffiche({gsNomTable,indChamp})
    Rappel Affichage du produit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FEN_Gestion_des_produits.ONG_Produit[FEN_Gestion_des_produits.ONG_Produit]..Libellé=Produit.NomProduit
    Attention, affin que tout les onglets "Liste" soient à jour, il faut s'assurer que "Contexte HFSQL Indépendant" soit décoché dans FI_Liste. Sinon, seul le volet appelant risque d'être mis à jour. A l'inverse, il est préférable de cocher cette case au niveau de FI_Produit.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 87
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    Je m'excuse de répondre tardivement un oubli.

    Merci pour la solution.

  10. #10
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 805
    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 805
    Points : 5 253
    Points
    5 253
    Billets dans le blog
    1
    Par défaut
    Etant donné les circonstances, c'est compréhensible.
    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. insertion d'onglets dynamiquement
    Par bit_o dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 01/02/2007, 00h08
  2. TWebBrowser et onglets dynamiques
    Par krokmitaine dans le forum Delphi
    Réponses: 1
    Dernier message: 29/09/2006, 11h23
  3. Réponses: 2
    Dernier message: 14/07/2006, 14h24
  4. JTabbedPane avec onglets dynamique
    Par oOoOuuhmAn dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 18/03/2006, 16h23
  5. Onglet dynamique
    Par OjBarbare dans le forum MFC
    Réponses: 2
    Dernier message: 11/12/2005, 21h53

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