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 :

Lenteur chargement champ planning avec visible = vrai ou plan


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 55
    Points : 46
    Points
    46
    Par défaut Lenteur chargement champ planning avec visible = vrai ou plan
    Bonjour,

    J'ai une fenêtre avec 2 plans.

    Un plan ( N°1) contenant un champ planning avec environ 200 taches dans le planning.

    Un plan ( N°2) qui est vide.

    Lorsque j'arrive sur mon application, j'arrive sur le plan 1 et mon planning se charge très bien.
    Si je vais sur le plan 2 puis que je reviens sur le Plan 1 avec cette ligne de code MaFenetre..plan = 1, cela met environ 2 secondes. Je ne comprends pas pourquoi car mon planning est déjà rempli et que je ne le rafraîchi pas.

    J'ai donc mis ce code la pour vérifier :

    ChronoDébut(1)
    MaFenêtre..Plan = 1
    Trace(ChronoFin(1))

    En effet mon trace me renvoi 2000 ms (2s).

    Apparemment, Windev repasse dans le code de déclaration de la fenêtre interne "FI_WindevRDV_Planning" qui est appelé pour chaque rendez-vous du planning.
    Donc si l'on fait un "PLANNING..visible = vrai" ou "MaFenêtre..Plan = 1", cela repasse dans le code de déclaration de la fenêtre interne pour chaque rendez vous affichés.( si 200 rendez-vous alors cela est long...)

    Quelqu'un sait comment éviter ce chargement long et inutile ?


    Merci d'avance

    Romain

  2. #2
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Ton planning, tu le remplis comment ?
    Par programmation ou avec une requête ?
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  3. #3
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    Je le rempli par programmation avec une requête SQL dans mon code.
    Le planning n'est pas relié à un fichier...

    Voici un résumé de mon code pour le remplir :

    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
    sSql = [
    	SELECT *
            FROM MaTable
    ]
     
    HExécuteRequêteSQL(Gb_Fic_Planning,hRequêteDéfaut,sSql)
     
     
    HLitPremier(Gb_Fic_Planning)
    TANTQUE PAS HEnDehors(Gb_Fic_Planning)
     
        //Mon code d'ajout dans le planning
     
        Hlitsuivant(Gb_Fic_Planning)
    FIN

  4. #4
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Si tu utilise l'analyseur de performance tu devrai trouver d'où ça vient.
    Tu as peut-être du code dans la prise de focus?
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  5. #5
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Avec l'analyseur de performance il m'indique que ce code met 2000 ms.

    Si je fais un pas à pas avec le debugeur, je vois que lorsque j'arrive sur ce code il m'envoi dans la déclaration globale de ma fenêtre interne "FI_WindevRDV_Planning"

    J'ai pas du tout de code dans le traitement prise de focus du planning.


    Est ce un bug de Windev ?

    Quelqu'un peut essayé de le reproduire svp ?
    (Il faut un champ planning sur une fenêtre avec 2 plan + une fenêtre interne dans le champ planning pour la visualisation d'un rendez vous ( onglet général du champ) + 200 rendez vous pour s'apercevoir de la perte de temps.)

    Merci d'avance de vos conseils et de votre aide. Je suis vraiment bien bloqué.

  6. #6
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Citation Envoyé par pompomthebest Voir le message
    Je le rempli par programmation avec une requête SQL dans mon code.
    Le planning n'est pas relié à un fichier...
    En fait mon questionnement c'est est que quand tu reviens sur le plan la requête est rejouée ?
    Si c'est le cas, comme le montre ton code, c'est normal que l'affichage du planning soit actualisé...

    Normalement en utilisant l'analyseur de performance comme le préconise sylvain tu devrais savoir où passe le temps...

    Si la requête est rejouée et que tu n'a pas la possibilités de l'éviter, peut-être qu'en jouant sur AffichageActif avant et après la boucle de remplissage. J'ai pas testé avec un champ planning mais je sais qu'avec un champ table qui a beaucoup de lignes le gain de temps peut être conséquent.
    D'autre part l'option hSansRafraîchir dans un HLitPremier() peut aussi apporter un gain de temps.

    Ce qui donne dans ton code
    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
    sSql = [
    	SELECT *
            FROM MaTable
    ]
     
    HExécuteRequêteSQL(Gb_Fic_Planning,hRequêteDéfaut,sSql)
     
    TonPlanning..AffichageActif = Faux
    HLitPremier(Gb_Fic_Planning,hSansRafraîchir)
    TANTQUE PAS HEnDehors(Gb_Fic_Planning)
     
        //Mon code d'ajout dans le planning
     
        Hlitsuivant(Gb_Fic_Planning)
    FIN
    TonPlanning..AffichageActif = Vrai
    Ceci dit le mieux est de n'exécuter la requête que si nécessaire...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  7. #7
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Merci pour vos réponses.

    Non la requête n'est pas rejouée sinon en effet les 2000 ms serai justifié.

    C'est justement cela qui me pose problème c'est que c'est vraiment l'appel du plan ou d'un PLANNING..Visible = vrai qui prend 2000 ms. Même l'analyseur de perf m'indique les 2000 ms sur une seule ligne .

    Je trouve cela vraiment bizare ...

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Je vais pas beaucoup t'aider mais je me souviens avoir eu un gros problème de perf sur un projet où j'utilisais le champs planning...

    Je me souviens m'être aperçu que le code d'init des fenêtres internes du planning était exécuté N fois (dans le détails je sais plus pourquoi ni la valeur de N)

    Donc pour la reproduction du cas, je te confirme... de mémoire j'avais du bougé le code d'init de ma FI du planning et me la galérer comme un ... voilà !

    Par contre j'ai quitté la boite depuis.... donc j'ai plus le projet !
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  9. #9
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Merci pour cette précision.

    En effet cela ne m'avance pas beaucoup mais ça fait toujours plaisir de voir que je ne suis pas le seul à avoir ce problème.

    Quelqu'un aurait-il une idée de comment et où déplacer le code de déclaration de la Fenêtre Interne ?

    J'ai essayé de mettre un booléen dans le code de déclaration de cette fenêtre pour limiter les déclarations en double mais le temps est toujours long.

    J'ai vu que certaines personnes ont eu ce problème sur la fenêtre Interne dans le champ agenda mais pas de solution non plus...

    Je prends toutes les idées car j'ai essayé beaucoup de chose mais là je ne vois pas comment faire !!

    Merci d'avance et merci à ceux qui essaient de m'aider depuis le début!

  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

    As tu essayé de voir l'ordre d'affichage des champs de ta fenêtre?
    Je me rappelle qu'en changeant une fois cet ordre, j'ai réglé un souci de performance à l'ouverture de la fenêtre!

    A tenter?

  11. #11
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Merci pour votre proposition.

    J'ai essayer de changer l'ordre d'affichage mais rien n'y fait...

    Je pense vraiment que cela est un bug de Windev?!

    J'ai pris l'exemple WD Planning et si je fait un bouton à coter avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PLN_Principal..visible = faux
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PLN_Principal..visible = vrai
    avec un point d’arrêt sur le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PLN_Principal..visible = vrai
    alors cela fini par passer dans la déclaration globale de la fenêtre interne.

    Pouvez-vous faire le test s'il vous plait sur l'exemple ?

    Merci d'avance de vos retours.

  12. #12
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Je viens de faire un test... dans mon cas, après l'exécution de la requête et le remplissage du planning, l'aller retour plan 2 / plan 1 met 1054ms.

    juste en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PLN_SansNom1..AffichageActif = Faux
    MaFenêtre..Plan = 1
    PLN_SansNom1..AffichageActif = Vrai
    le temps tombe à 11ms (95 fois plus vite !)

    Je précise que que le temps que je donne est celui retourné par l'analyseur de performance sur le clic du bouton qui amène sur le plan 1.
    Apparemment ça enlève les nombreux appels à la fenêtre interne.

    A essayer pour voir si ça améliore ton traitement...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  13. #13
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Merci pour ce test. Cela fait plaisir de voir que vous avez essayé mon problème.

    Je viens d'essayer votre code.

    Malheureusement dans mon cas, cela ne change pas le temps de traitement même dans l'analyseur de performance.

    Je dois peut être avoir un autre paramètre qui me bloque ?!

    Avez vous fait autre chose de particulier ?

    J'ai envoyé ma demande au ST de Pcsoft mais je ne sais s'il pourrons me débloquer. En tout cas je l’espère car je suis vraiment bloqué.

    Encore merci pour vos propositions!

  14. #14
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    La propriété ..AffichageActif permet d'optimiser les traitements dans lesquels un ou plusieurs champs doivent être manipulés.
    L'affichage du champ est désactivé avant la manipulation et on le réactive juste après.

    Sans ça à chaque manipulation il vérifie l'affichage de toutes les manipulations précédentes. Du coup les temps de traitements croissent de façon exponentielles par rapport au nombre d'éléments affichés dans le champ.

    Pour en revenir au test que j'ai fait

    J'ai une requête qui me retourne les 3000 premiers enregistrements (avec une DateHeureDebut et une DateHeureFin + quelques autres rubriques)

    Dans la fenêtre sur le plan 1
    - 1 planning PLN_SansNom1 qui utilise une fenêtre interne pour les rendez vous FI_WinDevVueRDV et que je rempli par programmation

    Sur le plan 0, 3 boutons :
    - BTN_RempliPlanning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MonRDV est un RendezVous
    HExécuteRequête(REQ_RDV)
    HLitPremier(REQ_RDV,hSansRafraîchir)
    TANTQUE PAS HEnDehors(REQ_RDV)
    	MonRDV..Contenu   = REQ_RDV.RDV_id
    	MonRDV..DateDébut = REQ_RDV.RDV_DateHeureDebut
    	MonRDV..DateFin   = REQ_RDV.RDV_DateHeureFin
    	MonRDV..Ressource = REQ_RDV.RDV_Description
    	PlanningAjouteRendezVous(PLN_SansNom1,MonRDV)	
    	HLitSuivant(REQ_RDV)
    FIN
    - BTN_Plan1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PLN_SansNom1..AffichageActif = Faux
    FEN_Principale..Plan = 1
    PLN_SansNom1..AffichageActif = Vrai
    - BTN_Plan2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FEN_Principale..Plan = 2
    Protocole de test
    - je lance le test en passant par l'analyseur de performance
    - je clique sur bouton remplir le planning
    - puis sur le bouton pour passer sur le plan 2
    - puis sur le bouton pour revenir sur le plan 2
    - puis je ferme

    Peut être que tu y trouveras une différence avec ce que tu fais et qui pourra t'aider...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  15. #15
    Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Bonsoir,

    Merci de toutes ces précisions.

    Je suis en train de tester cela dans un nouveau projet vierge. Avec votre exemple précis.

    Je vous tiens au courant dès que mon test est terminé.

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Je déterre ce topic, car le problème subsiste toujours en version 21.

    Oui le ..affichageactif permet de gagner un peu de temps lors de l'affichage du planning cependant ce qui est très surprenant c'est que lorsqu'on utilise l’ascenseur windev repasse dans le code de déclaration globale de la fenêtre FI_WindevVueRDV à chaque affichage du RDV. Amusez-vous via l'analyseur de performance à afficher un planning avec beaucoup de RDV et ressources, puis faire bouger l'ascenseur, vous aller voir le nombre de parcours de la déclaration globale de FI_WinDevVueRDV est hallucinant.

    Le temps de traitement serait acceptable individuellement mais la somme de l'ensemble du temps d'affichage introduit des petites lenteurs dans le champ planning qui rend vraiment le truc désagréable à utiliser, en tout cas dès qu'il faut scroller.

    Je n'ai pas trouvé de solutions pour éviter que windev repasse à chaque affichage dans le code de déclaration globale de la fenêtre FI_WindevVueRDV. Si quelqu'un a une astuce je suis prenneur.

  17. #17
    Candidat au Club
    Homme Profil pro
    Samourai
    Inscrit en
    Octobre 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Samourai

    Informations forums :
    Inscription : Octobre 2020
    Messages : 1
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par iceuponfire Voir le message
    Je déterre ce topic, car le problème subsiste toujours en version 21.
    Pareil. Windev 25, le problème subsiste et aucun espoir d'amélioration. Le champ planning est inutilisable au delà d'un certain nombre de rendez-vous, et cela depuis plus de 7 ans!

    J'imagine que les cas réels d'utilisation sont rares et se limitent à un faible volume de données. Quelle tristesse...

  18. #18
    Membre actif

    Homme Profil pro
    Sans
    Inscrit en
    Mars 2018
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mars 2018
    Messages : 153
    Points : 295
    Points
    295
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Voici une suggestion pour l'utilisation des fenêtres internes afin de p-e éviter ce pb.

    Le remplissage par programmation du champ planning devra être fait dans l'évènement "Demande de mise à jour de l'affichage" avec une gestion du rafraichissement comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //     Ceci est la déclaration globale de la fenêtre interne
    PROCEDURE MyWindow()
     
    let gbInitializedWindow = false
    puis dans l'évènement "Demande de mise à jour de l'affichage"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    PROCEDURE refresh(pExplicitRequest is boolean = false)
     
    gbInitializedWindow = pExplicitRequest ? false ELSE gbInitializedWindow
     
    IF NOT gbInitializedWindow
         fillPlanningControl()
         gbInitializedWindow = true
    END
    fillPlanningControl() étant la procédure permettant de remplir le planning.

    De manière générale, j'initialise tous les champs contenus dans une fenêtre interne dans cette procédure refresh() dont je peux contrôler l'exécution.

    hth,
    Padbrain

Discussions similaires

  1. [WD18] Selection RDV champ planning avec clic droit
    Par Jordywolf dans le forum WinDev
    Réponses: 5
    Dernier message: 24/03/2015, 08h32
  2. Valeur d'un champ TextBox avec propriété visible = false
    Par mohamed301084 dans le forum VB.NET
    Réponses: 4
    Dernier message: 26/04/2010, 16h02
  3. Lenteur de chargement des xls avec macros
    Par Interc00ler dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/11/2006, 18h25
  4. Réponses: 7
    Dernier message: 08/12/2005, 17h37
  5. champs booleen avec ibexpert
    Par crocodingo dans le forum Outils
    Réponses: 3
    Dernier message: 18/01/2004, 16h27

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