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 :

position d'une ligne dans une table est faussée par les tris


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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 : 43
    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
    Par défaut position d'une ligne dans une table est faussée par les tris
    Bonjour à tous,

    je rencontre un problème pas facile à expliquer. J'ai déjà mis un petit moment à comprendre ce qui perturbait mon programme.

    J'ai un écran de gestion de stocks qui me permet de voir pour tous mes articles l'état du stock, la quantité attendue (les achats que l'on va recevoir tôt ou tard), le besoin (d'après les OFs qui ont besoin de l'article comme fourniture), ......

    J'ai donc une table TABLE_Stocks (la principale) qui est alimentée par une requête SQL, cette table a pour clé de parcourt la référence article, donc par défaut cette table est triée selon la colonne ARTICLE.

    Quand je clique sur une ligne d'un article j'ai le détail des besoins dans la table BESOINS en bas. Dans cette table je peux double-cliquer un OF pour lui affecter une quantité de fourniture, ce qui a pour conséquence de changer un certain nombre de compteurs, le stock, le besoin, ....

    Il faut donc que la table principale se raffraichisse tout en revenant sur la même ligne qu'auparavant. J'ai donc essayé ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // j'ai dans ma variable aid la clé de l'article
    Ouvre(FEN_Lancement_OF)
    Pos est un entier = TableCherche(TABLE_Stocks.COL_id, aid)
    Info(Pos)
    TableAffiche(TABLE_Stocks)
    TableSelectPlus(TABLE_Stocks, Pos)
    Et je remarque que ce code fonctionne bien tant qu'on ne touche pas aux fonctions de tri des différentes colonnes de la table TABLE_Stocks.

    Exemple : On considère l'article 70113 STATIQUE (en 6ème position dans la table).



    On voit que j'ai 982 statiques en stock, et un besoin sur 2 OF pour un total de 182 statiques. Je veux affecter 12 statiques à l'opération 501 de l'OF F1103075. Je double-clique sur la ligne de l'OF à alimenter, et je renseigne la fenêtre :



    Une fois que je clique VALIDER, le programme recherche la position de la ligne de l'article 70113 STATIQUE, et la trouve bien !!



    et mes données se rafraichissent toutes seules l'instant d'après :



    On a bien 12 pièces en moins sur le stock, 12 en moins sur le besoin, et le besoin sur l'OF F1103075 est passé de 82 à 70 aussi. Donc tout est ok.


    Maintenant, je joue un peu avec les colonnes, les tris surtout, au niveau des quantités, notamment la colonne STOCK, au point que je me retrouve dans cette configuration (l'article considéré est maintenant en position 2):



    De nouveau je vais faire un lancement de 9 statiques pour voir :



    Je valide, et de retour aux tables, le programme me calcule la ligne de l'article 70113 STATIQUE en position 3.



    On pourrait croire que c'est la bonne position mais regardez bien la toute première ligne !! Il s'est glissé une ligne qui n'a rien à faire là puisqu'elle ne respecte pas le filtre imposé (zone de saisie 70 tout en haut à gauche) mais pendant un court instant elle apparait en tête de la table et fausse le calcul de la position. Finalement, la ligne sélectionnée n'est pas la bonne et les infos affichées non plus !!



    Ce qui est étrange c'est que je lance la recherche de position avant la réactualisation de la table donc je ne vois pas ce qui déclenche l'apparition de cette ligne qui ne rentre pas dans le filtre.

    D'autre part, je ne rencontre le problème que lorsque j'ai cliqué sur les tris de colonnes avant.

    Enfin je précise que le filtrage des tables est réalisé en utilisant le traitement "Filtrage des enregistrements" associé aux objets "Tables", peut-être que c'est une piste....

    Désolé d'avoir été aussi long mais je voulais décrire parfaitement le probème.

    Merci à quiconque m'aidera à trouver la solution

  2. #2
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 563
    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 563
    Par défaut
    Je penche également pour un problème de filtrage, mais essaye voir le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // j'ai dans ma variable aid la clé de l'article
    Pos est un entier = TableCherche(TABLE_Stocks.COL_id, aid)
    Ouvre(FEN_Lancement_OF)
    Info(Pos)
    TableAffiche(TABLE_Stocks)
    TableSelectPlus(TABLE_Stocks, Pos)
    Pour vois si c'est l'ouverture de la fenêtre qui perturberait...

  3. #3
    Membre éclairé 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 : 43
    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
    Par défaut
    Ok j'ai testé sans même l'ouverture de la fenêtre, uniquement ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // j'ai dans ma variable aid la clé de l'article
    Pos est un entier = TableCherche(TABLE_Stocks.COL_id, aid)
    Info(Pos)
    Et dans la deuxième situation (en tri décroissant sur le stock) il me trouve toujours le même numero de ligne : 3

    Et toujours cet article "2310 CONTREPLAQUE" qui apparait en tête de table, et qui persiste cette fois... Pour info, cet article est celui qui a le stock le plus important. Est-ce que le mécanisme de filtrage fonctionnerait mal et laisserait passer le premier enregistrement de la requete ???

    Pour info, voici comment est réaliser le filtrage de ma table TABLE_Stocks :

    Attention c'est pas super lisible mais ce filtrage doit gérer la combinaison de 2 filtres : article et/ou emplacement de stockage


    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
     
    // TRAITEMENT Filtrage des enregistrements de TABLE_Stocks
     
    Monfiltre est une chaîne  = SAI_filtre     // le filtre sur reference article
    Monfiltre2 est une chaîne = SAI_filtre2   // le filtre sur nom de l'emplacement
     
    SI ((LISTE_articles..Valeur = 0 ET (Taille(Monfiltre) = 0 OU (Taille(Monfiltre) <> 0 ET Contient(REQ_Stocks.art_reference, Monfiltre, SansCasse)))) ...
    	OU LISTE_articles..Valeur = REQ_Stocks.stck_article) ...
    	ET
    	((LISTE_emplacements..Valeur = 0 ET (Taille(Monfiltre2) = 0 OU (Taille(Monfiltre2) <> 0 ET Contient(REQ_Stocks.empl_nom, Monfiltre2, SansCasse)))) ...
    	OU LISTE_emplacements..Valeur = REQ_Stocks.empl_id) ...
    ALORS 
    	RENVOYER Vrai
    SINON
    	RENVOYER Faux
    FIN
    Si ça se trouve il y a plus simple, plus performant, peut-être avec une H fonction placée dans l'évenement Fin d'initialisation de TABLE_Stocks ?

  4. #4
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 563
    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 563
    Par défaut
    Ce ne serait pas ta req_stocks qui poserait problème ?
    Je pense que tu devrais essayer de simplifier ton filtrage. Je n'ai pas ton modèle de données mais tu dois avoir une liaison entre article et emplacement.
    Regarde du coté de hfiltre et de hcreevue.

  5. #5
    Membre éclairé 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 : 43
    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
    Par défaut
    Ben en fait mon filtrage je le fait sur la requete REQ_Stocks qui alimente ma table TABLE_Stocks, est-ce que je devrais tester directement les enregistrements de la table et pas de la requête ?

    Comment ça marche Windev à ce niveau là ? Si je clique sur les tris de colonnes, est-ce que ça trie aussi ma requête qui est derrière ou bien c'est uniquement l'objet table qui gère tout seul les tris ?

    Ma requête REQ_Stocks elle est pas super compliquée, quoi qu'il y a un calcul de champs mais bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT stck.*, empl.*, art.art_reference, art.art_stock_secu, 
    CASE WHEN (stck_besoin + art_stock_secu - stck_qte - stck_attendu) > 0 THEN (stck_besoin + art_stock_secu - stck_qte - stck_attendu) 
         WHEN (stck_besoin + art_stock_secu - stck_qte - stck_attendu) <= 0 THEN 0 
    END AS reappro 
    FROM stck, empl, art WHERE art_empl = empl_id AND stck_article = art_id;
    Pour ce qui est du HFiltre j'ai déjà creusé de ce côté là mais ça m'a pris la tête, je n'arrivais pas à écrire ma condition de filtrage...

  6. #6
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 563
    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 563
    Par défaut
    Quelle est la liaison entre emplacement et article ?

    [EDIT]
    Ta ligne parasite, elle disparait après réaffichage ?
    As-tu essayé un tablesupprimetout() avant réaffichage ?

Discussions similaires

  1. Récupérer une information d'une ligne dans une table
    Par Lebas dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/04/2013, 10h24
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  5. Réponses: 3
    Dernier message: 29/01/2008, 12h08

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