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 :

Ordre de tri dans un Etat [WD20]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 11
    Points
    11
    Par défaut Ordre de tri dans un Etat
    Bonjour,
    Si quelqu’un peut m’aider je serais très reconnaissant
    Je suis en Windows 8 , je code sur WINDEV 20
    J’ai une table avec rupture sur (Produit)
    Parmi les colonnes de cette table j’ai une colonne :Col_Référence avec ordre de tri :
    AA1
    AA2
    AA3
    AA10…
    Dans mon Etat l’ordre de tri est :
    AA1
    AA10
    AA2
    AA3….
    Peut-on avoir dans l’Etat le même ordre de tri que la table
    Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Le plus simple serait d'ajouter une colonne cachée Col_Référence2, où vous allez reprendre la donnée présente dans Col_Référence mais en ajoutant à gauche la longueur de la chaine.
    Par exemple, vous allez voir les chaines 3AA1, 3AA2, 3AA3, 4AA10

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    Bonjour,

    Si l'état est basé sur la table, il doit avoir le même tri que la table. Par contre si ton état est basé sur une requête par exemple, il ta faut redéfinir une colonne de tri qui sera correcte. Perso je baserais mon état sur la table pour ne rien avoir à bouger.
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Merci de m’avoir répondu si rapidement
    1- l’état est basé sur la table
    2- Dans la table j’ai une rupture sur Produit (par exemple : Produit=891)
    J’ai ajouté une colonne qui affiche le produit (/Ex : 891) + le référence
    On obtient :
    Dans la table :
    891AA1
    891AA2
    891AA3….
    Dans l’état :
    891AA1
    891AA10
    891AA2
    Malheureusement, même avec le numéro à gauche le problème n’est pas résolu
    Peut-on avoir une autre solution ?
    Merci

  5. #5
    Invité
    Invité(e)
    Par défaut
    On dirait que mon message est passé inaperçu

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Merci Romulus001
    Avec une seule lettre votre solution est excellente !
    Mais avec deux lettres le problème persiste
    Par exemple :
    3G32
    3Q31
    4LU20…
    LU est après le Q !

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Bonjour
    Utilisez numeriqueverschaine pour aligner les chiffres a droite.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par kader111959 Voir le message
    Bonjour,
    Merci Romulus001
    Avec une seule lettre votre solution est excellente !
    Mais avec deux lettres le problème persiste
    Par exemple :
    3G32
    3Q31
    4LU20…
    LU est après le Q !
    Le soucis, c'est que dans votre premier message, il était question de AA1, AA2, AA3, AA10, c'est à dire 2 chaines + un numérique
    et là, on passe à 891AA1, 891AA10, 891AA2
    Ce qui n'est pas tout à fait pareil, surtout qu'il est désormais question de G32, Q31, LU20, où on a 1 ou 2 chaines + un numérique.

    Pourriez-vous nous expliquer le format de votre champ Référence? Serait-ce 3 numériques, 1 ou 2 chaines en majuscules puis 1 à 3 numériques?
    Si c'est le cas, le mieux serait :
    1) dans la partie "code de rupture", on ait une longueur fixe, si le code est obligatoirement un numérique, compléter par des 0 à gauche (par exemple, à l'aide de la fonction Repete)
    2) dans la partie des chaines, faire en sorte à ce qu'on ait une taille fixe, en complétant à gauche par le caractère / (car le caractère / est situé juste avant le caractère A dans le tableau ASCII)
    3) ajouter entre la partie des chaines et le numérique la taille des numériques qui suivent/

    Dans le cas où on doit trier G32, Q31, LU20
    Je mettrais à la place
    /G232
    /Q231
    LU220

    Ainsi, pour trier 891AA1, 891AA10, 891AA2
    Je mettrais à la place
    891AA11
    891AA210
    891AA12

  9. #9
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 396
    Points
    9 396
    Par défaut
    Le premier point à comprendre, c'est que le problème n'est pas une question relative à Windev, mais une question de raisonnement. Si on prend conscience de cela, on a déjà à moitié solutionné la question.

    La solution de Romulus001 était tout à fait valable... jusqu'à ce que tu nous dise que la partie "Texte" pouvait contenir des fois 2 lettres, des fois plus et des fois moins !
    Et sur les nombres, idem, on va soudain découvrir que les nombres peuvent être égatifs ?

    On a une chaine qui contient des textes et des chiffres. Comme tout ça est sous forme de chaine, le chiffres ne sont pas triés comme il faut.
    Si à une étape ou une autre du traitement, tu as d'une part la partie 'Texte', et d'autre part la partie nombre, alors il faut remonter à cet endroit pour solutionner le problème.

    Actuellement, tu fais un truc comme ça pour constituer ta clé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clé = clé_texte + clé_nombre    //  LU + 31 donne LU31   ; LU+1 donne LU1
    Tu peux remplacer cette instruction par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i = 10000000000+ clé_nombre
    clé = clé_texte + i
    Ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clé = clé_texte + numeriqueVersChaine(clé_nombre  , "08d")
    Ces 2 propositions permettront de gérer pas mal de cas (tant que le nombre fait moins de 8 chiffres. La première proposition permet en plus de gérer les nombres négatifs... tant qu'ils restent dans un intervalle raisonnable.

    Si tu n'as pas cette étape avec d'une part la partie texte, et d'autre part un nombre, alors il faut l'ajouter.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Encore une fois merci de me répondre
    Dans notre colonne de tri Col_Référence j’ai trois types :
    A1
    A2…
    A1-a
    A1-b…
    AA1
    AA2…
    J’ai importé cette table à partir d’une table ACCESS
    Pour le Numéro 891 c’est le numéro de rupture et il n’a rien à voir avec le tri.
    Je vais adapter la méthode de Romulus001 à mon projet
    je vous tiens au courant de l'avancement
    merci encore et à bientôt

  11. #11
    Membre confirmé
    Homme Profil pro
    Admin - Gestion reconverti en informatique
    Inscrit en
    Septembre 2017
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Admin - Gestion reconverti en informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 328
    Points : 493
    Points
    493
    Par défaut
    Bonjour,

    L'état est basé sur la table avec rupture Table.COL_Produit
    vous avez ajouté le colonne "Produit+Référence".

    Pour ma part, je pense que la 2ème proposition de tbc92 est facile à mettre en place
    clé = clé_texte + NumériqueVersChaine(clé_nombre , "08d")

    Avant de concaténer, il faut traiter la référence pour la standardiser avec la taille maximum, déterminée en fonction du contenu
    de la colonne Référence (toutes lignes). Exemple taille 10

    Pour ce faire, pour chaque ligne, chercher à partir de la gauche, la position du 1er chiffre.
    En fonction de cette position, insérer le nombre de zéro (Répète) à l'effet de ramener la référence (texte+numérique) à la taille maxi
    Une fois, la nouvelle référence (adaptée) est déterminée, faire la concaténation produit+nouvelle référence dans colonne "Produit+Référence"
    Trier la table sur la colonne "Produit+Référence", avant de lancer l'impression

    Pour reprendre votre exemple

    A1
    A2
    A1-a
    A1-b
    AA1
    AA2

    Par exemple, la taille maxi = 4
    ces lignes concernent le produit 891

    la colonne "Produit+Référence" comme suit :

    891A001
    891A002
    891A1-a
    891A1-b
    891AA01
    891AA02

    Remarque :
    Pour conserver, l'ordre séquentiel (numéro produit) dans l'état :
    - déterminer dans la table, la taille du numéro le plus grand.
    Exemple taille 4 pour le numéro 1000 (millième)
    - dans la concaténation "Produit+nouvelle référence", transformer le numéro produit avec numériqueverschaine, format "04d"

    soit dans notre exemple 0891A001

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    J’ai passé des jours à chercher une solution à ce problème
    Grâce à vous et a ce forum le problème est résolu !
    Je tiens vivement à remercier Romulus001,Yusep,tbc92,midou23175 et philouz
    Pour vos collaborations
    Merci encore et à bientôt

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Content pour vous.
    Montrez votre code final.
    Merci

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

Discussions similaires

  1. [AC-2007] Ordre de tri dans menu deroulant
    Par tomatotep dans le forum IHM
    Réponses: 2
    Dernier message: 22/06/2012, 10h37
  2. [AC-2003] Ordre des tris dans une requête ?
    Par lil404 dans le forum IHM
    Réponses: 2
    Dernier message: 19/05/2009, 10h51
  3. Réponses: 1
    Dernier message: 18/06/2008, 11h32
  4. [Débutant] Tri dans requête / Etat
    Par oceanediana dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 13/07/2006, 16h55

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