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 :

Variable globale, pas tout à fait globale [WD15]


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 67
    Points : 36
    Points
    36
    Par défaut Variable globale, pas tout à fait globale
    Salut,

    J'ai un léger soucis avec une variable globale, mais après différents tests je ne vois vraiment pas ce qui cloche.

    J'ai une fenêtre (FEN_Devis) dans laquelle j'ai déclaré gnIdClient en tant qu'entier au niveau de la déclarations globales de la fenêtre.

    Plus loin dans ma fenêtre, se trouve au sein d'un surperchamp, une combo dont la requête est paramétrée par la valeur de gnIdClient. Le seul soucis est que gnIdClient au niveau de cette combo est toujours égale à 0, pourtant cette valeur contient bien une valeur à sa déclaration.

    Auriez-vous une idée pour m'aiguiller un peu

    merci

    @++

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    - Met un point d'arrêt à l'ouverture de ta fenêtre
    - Ajoute ta variable aux "variables espions" dans le debugger
    - Execute
    - Lorsque tu t'arrêtes, clique sur le rond vert de ta variable espionnée pour que l'exécution stoppe dès que la valeur change
    - Reprend l'exécution

    Tu devrais voir où ta variable change de valeur.

  3. #3
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 995
    Points
    1 995
    Par défaut
    Hello,
    D'accord avec VMOLINES sur la trace et comment le faire. j'apporte ici une réflexion sur la notion de variables globales.
    Dans votre fenêtre, le code se comporte-t-il ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Procédure FEN_DEVIS(Modeouverture = "Création)
     
    // Déclaration des variables globales
    GLOBAL
     
    gnIDCLIENT est un entier = 0
     
    // declaration des variables locales
    LOCAL
    Si oui, je ne vois par pourquoi le superchamps qui se trouve dans l'objet FEN_DEVIS n'est pas reconnu, ou alors, faire le test suivant dans le superchamps avec la structure FEN_DEVIS.gnIDCLIENT qui prend en compte l'objet initial et l'un de ses composants... gnIDCLIENT
    A vous lire pour la suite,
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 67
    Points : 36
    Points
    36
    Par défaut
    Bonjour EDM-TAHITI,

    Mon code suis bien ce que vous dites, et dans le superchamp lorsque je tape gn.. la variable gnIdClient est bien proposée, preuve qu'elle soit accessible, mais on dirait qu'elle change de valeur en cours de route

    init : = 0
    traitement : = valeur id client
    par la suite : = repassage a zéro, alors qu'au niveau de la trace je ne vois pas ce passage à zéro.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Citation Envoyé par tux59 Voir le message
    Bonjour EDM-TAHITI,

    Mon code suis bien ce que vous dites, et dans le superchamp lorsque je tape gn.. la variable gnIdClient est bien proposée, preuve qu'elle soit accessible, mais on dirait qu'elle change de valeur en cours de route

    init : = 0
    traitement : = valeur id client
    par la suite : = repassage a zéro, alors qu'au niveau de la trace je ne vois pas ce passage à zéro.
    Vous avez tenté de tracer le changement de valeur via le mécanisme des variables espions ?

  6. #6
    Membre confirmé
    Profil pro
    Freelance
    Inscrit en
    Avril 2003
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Avril 2003
    Messages : 393
    Points : 492
    Points
    492
    Par défaut
    La variable espion est le meilleur moyen de breaker dessus lorsque sa valeur changera.
    Sinon, au moment du debugging, peut etre que cette variable est mise à zero dans le debugger ?

    A+
    Vince
    http://www.ennovsys.fr

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 67
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par vmolines Voir le message
    Vous avez tenté de tracer le changement de valeur via le mécanisme des variables espions ?
    Oui bien sur, c'est d'ailleurs avec cela que j'ai remarqué que la variable récupère bien la valeur désirée.

    Mais si je fais un Info(gnIdClient) dans l'initialisation de mon superchamp qui doit utiliser cette variable, cela m'affiche zéro.

    J'ai l'impression de tourner en rond à cause de ce soucis

  8. #8
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 995
    Points
    1 995
    Par défaut
    Hello,
    La remarque et la manip que propose VINCE est la meilleure pour savoir si la variable change en cours de route, mais ne donne pas le pourquoi de la chose.
    Par exemple, si une autre variable gnIDCLIENT se cache (ce qui peut probable mais...) et vient interférer avec la variable global, mais locale à la fenêtre, le fait d'appuyer sur fen_devis.gnIDCLIENT peut vous permettre de trouver un début de réponses.
    A defaut, le code du superchamps peut aussi aider, car là, nous sommes tous dans des supputations et de recherches de solutions pour lesquelles, vous ne répondez pas directement aux préconisations, surtout celle de tracer la vie de cette variable récalcitrante.
    A vous lire sur vos tests
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 67
    Points : 36
    Points
    36
    Par défaut
    Salut,

    Je vais essayer de clarifier un peu les choses, pour que vous cerniez mieux mon soucis.
    Avant cela, j'ai bien essayé d'utiliser FEN_Devis.gnIdClient au lieu de gnIdClient mais aucun résultat, j'ai par ailleurs essayé de changer le nom de variable au cas où une autre gnIdClient se cacherait, mais même problème.

    Ma fenêtre se présente ainsi :
    Code Déclarations globales de FEN_Devis : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // parametre fenetre
    PROCEDURE FEN_Fiche_Devis(gnIdDevis est un entier = Null)
     
    // variables
    gbTraite est un booléen
    gnIdClient est un entier

    Code Initialisation de FEN_Devis : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // recuperation des informations
    SI gnIdDevis <> Null ALORS
     
    	// données
    	HLitRecherchePremier(Devis, IDDevis, gnIdDevis)
    	gnIdClient = Devis.IDClient
    	FichierVersEcran()	
     
    FIN

    Ci-dessous, l'en droit où j'ai besoin de la valeur de gnIdClient, afin de remplir une combo qui contient les différents contacts du carnet d'adresses client.

    Cette combo est à l'intérieur d'un superchamp, il n'y a aucun code d'initialisation pour ce superchamp.

    Code Initialisation de COMBO_Contact : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaSource.id_client = gnIdClient

    C'est à cet endroit que la valeur de ma variable gnIdClient vaut toujours 0 alors que celle-ci a bien été initialisée avec l'id du client dans l'initialisation de la fenêtre.

    A noter qu'en traçant la variable gnIdClient, je vois bien que celle-ci récupère bien la valeur de Devis.IdClient et qu'ensuite elle ne change plus de valeur apparemment.

    J'espère que cela pourra vous aider.

    Merci pour votre aide

    A+

    ------ Edition ------
    Je viens de remarquer une chose, qui est peut être bête, mais cela répondrait à ma question.
    Je déclare ma variable dans la déclaration globale de la fenêtre à 0 par exemple. Plus loin dans la fenêtre, je place une trace sur cette variable et cela me retourne 0, alors que dans l'initialisation de la fenêtre, j'ai affecté la valeur 10 à cette variable.
    Tout ceci me laisse penser, que les affectations de variables en windev seraient faites en dernier lorsqu'on ouvre une fenêtre et cela pourrait expliquer mon problème ?

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Salut Tux59
    Est ce que tu teste si la recherche a trouvé?
    Code Initialisation de FEN_Devis : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // recuperation des informations
    SI gnIdDevis <> Null ALORS
    	
    	// données
    	HLitRecherchePremier(Devis, IDDevis, gnIdDevis)
            SI HTrouve(Devis) ALORS
      	  gnIdClient = Devis.IDClient
    	  FichierVersEcran()	
    	FIN
    FIN

  11. #11
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 67
    Points : 36
    Points
    36
    Par défaut
    J'avais essayé avec ou sans, mais ne l'ai pas mis quand j'ai posté, pour ne pas surcharger le post.

    Par contre, je viens de tester une chose et j'ai l'impression d'être sur une bonne piste. Apparemment, en plaçant HLitRecherchePremier et le traitement qui va avec dans la déclaration globale de la fenêtre, cela fonctionne nettement mieux.

    Je continue de tester et vous tiens au courant

    A+

  12. #12
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Si c'est vraiment le cas, j'ai l'impression que tu n'as pas tracé les valeurs de ta variable en mode débug car tu aurais remarqué que les valeurs n'étaient pas les bonnes là où elles auraient dû l'être.

  13. #13
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Je ne suis sûr que ça peut aider, mais je viens de faire le test en 14 et ça marche parfaitement.
    Ordre des évenements relevés :
    • Init fenetre
    • Init superchamp
    • Init combo

    valeur après accès : 45 (c'est à dire la valeur que j'ai placé dans l'init de mon code)

    Juste pour voir, vires donc le "= 0" à la fin de ta ligne d'init fenêtre :
    gnIDCLIENT est un entier = 0

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Tu n'aurais pas par hasard une déclaration de variable gnIDCLIENT dans ton superchamp ?

    Tatayo.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 67
    Points : 36
    Points
    36
    Par défaut
    la trace a bien fonctionné, mais seulement j'ai l'impression que la variable était utilisée en tant que paramètre de ma combo, avant qu'elle ne soit remplit par la valeur de l'id client.
    La trace au final, montre bien que la variable contient la bonne valeur, mais une fois la fin d'initialisation de l'ensemble des champs + fenêtre effectuée.

    D'ailleurs, j'ai regardé l'exemple gestion commerciale et FichierVersEcran et HFiltre sont bien utilisés au niveau de la déclaration globale et non dans l'initialisation.
    C'est peut être un changement au niveau de la version 15, si c'est vraiment ça, le principal étant de le savoir.

    Juste pour voir, vires donc le "= 0" à la fin de ta ligne d'init fenêtre :
    gnIDCLIENT est un entier = 0
    Je n'ai jamais mis le = 0, c'était une autre personne qui avait essayé.

    Bonjour,
    Tu n'aurais pas par hasard une déclaration de variable gnIDCLIENT dans ton superchamp ?
    Non

    Je finis de faire mes tests et si c'est bon, je passe en résolu.

    Merci à vous pour votre temps passé

    A++

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/05/2013, 14h52
  2. [Débutant] Longueur d'un step pas tout à fait respectée
    Par lecteur1001 dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/06/2010, 11h28
  3. [WS 2008] Easy PHP ne fonctionne pas tout à fait !
    Par diamic dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 28/01/2010, 20h55
  4. history.go et IE qui marche.. mais pas tout à fait !
    Par sacha69 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/09/2008, 11h54
  5. La 2D isométrique pas tout à fait isométrique
    Par usbeck dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 16/07/2006, 13h43

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