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 :

Tableau 2D en windev


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 219
    Points : 72
    Points
    72
    Par défaut Tableau 2D en windev
    Bonjour,

    Je cherche a faire un tableau 2D mais je ne trouve pas celà en natif dans windev? Erreur de ma part?

    En gros j'aimerai "x" colonnes (x sera égal à 990) et "y" lignes (y sera 99)
    Avec au croisement de chaque "x""y" une valeur

    J'ai créé une analyse dans laquelle j'ai "mon ID auto", "x","y","et la valeur que je souhaite dans le croisement".


    J'ai presque réussi à faire ma structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    TableSupprimeTout(TABLE_Remise)
     
     
    POUR j = 1 A 10
    	ChampClone(TABLE_Remise.COL_Code_,"COL_Code_"+j)
    FIN
     
    POUR TOUTE REMISE SUR CodeRemiseClient
    	TableAjouteLigne(TABLE_Remise,REMISE.IDREMISE,Remise.CodeRemiseClient)
    FIN
     
    TableAjuste(TABLE_Remise)

    j va jusque 10 car je voudrai défiler mon tableau de 10 en 10 par la suite.


    Voici le contenu de mon fichier


    ID "x" "y" "Valeur croisement"
    1 1 200 10
    2 2 200 15
    3 3 200 20
    5 1 201 25
    6 2 201 30
    7 3 201 35
    8 1 202 40
    Il me faudrai donc avec un tel fichier :
    3 colonnes (200,201,202)
    3 lignes (1,2 et 3)
    et dans le croisement de la colonne 200 avec la ligne 1 : 10 / avec la ligne 2 : 15 / etc...
    Suis-je partis dans le bon sens? Il ya un moyen plus simple? Ca m'étonne que ca n'existe pas en natif.

    Merci

  2. #2
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Bonjour,
    Il y a TableConstruitFichier, ainsi tu n'auras plus besoin de ChampColone.

  3. #3
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 219
    Points : 72
    Points
    72
    Par défaut
    Merci

    Je ne connaissais pas cette fonction même si dans ce cas elle ne me sert pas.
    En fait mes colonnes doivent être les valeurs de mes "y"
    Peut être que la structure de mon fichier est à revoir.

    Merci

  4. #4
    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
    Tu parles à un moment de 990 colonnes. Ne modifie surtout as ton analyse pour créer un fichier avec 990 colonnes !

    Ici, les données que tu veux dans le 'coeur' du tableau (à chaque croisement ligne x colonne) sont des numériques. Tu peux donc utiliser le Tableau croisé Dynamique.
    Mais personnellement, je ne suis pas fan du TCD, et je passerais par une autre piste, un truc du genre :

    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
     
    sd est une source de donnees
    sreq est une chaine
    sreq = [
    select x, 
    max ( case when y = 200 then valeur_croisement else null end )  as col200,
    max ( case when y = 201 then valeur_croisement else null end )  as col201,
    max ( case when y = 202 then valeur_croisement else null end )  as col202
    from remise
    ]
    hexecuterequeteSQL(sd , sreq)   // syntaxe certainement incorrecte, à vérifier
    tableconstruitfichier( sd, table1)
    ]
     
    Et si la liste des colonnes est variable, tu peux construire la chaine sreq dynamiquement, pour choisir le nombre de colonnes voulu et la liste des y de ton choix.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 219
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Tu parles à un moment de 990 colonnes. Ne modifie surtout as ton analyse pour créer un fichier avec 990 colonnes !

    Ici, les données que tu veux dans le 'coeur' du tableau (à chaque croisement ligne x colonne) sont des numériques. Tu peux donc utiliser le Tableau croisé Dynamique.
    Mais personnellement, je ne suis pas fan du TCD, et je passerais par une autre piste, un truc du genre :

    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
     
    sd est une source de donnees
    sreq est une chaine
    sreq = [
    select x, 
    max ( case when y = 200 then valeur_croisement else null end )  as col200,
    max ( case when y = 201 then valeur_croisement else null end )  as col201,
    max ( case when y = 202 then valeur_croisement else null end )  as col202
    from remise
    ]
    hexecuterequeteSQL(sd , sreq)   // syntaxe certainement incorrecte, à vérifier
    tableconstruitfichier( sd, table1)
    ]
     
    Et si la liste des colonnes est variable, tu peux construire la chaine sreq dynamiquement, pour choisir le nombre de colonnes voulu et la liste des y de ton choix.
    Bonjour

    Effectivement géré 990 colonnes me semble très compliqué et pas du tout évolutif !

    Le TCD correspond exactement à ce que je veux, sauf un point. C'est que j'ai besoin de modifier les données affiché. Le tableau que je cherche à faire est un tableau de remise dont la valeur change suivant le code remise du client et le code remise de l'article.
    A moins qu'il soit possible d'avoir un TCD modifiable?
    Je regarde du côté de ton autre bout de code en attendant.

    Merci

  6. #6
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par Nicos77 Voir le message
    Merci

    Je ne connaissais pas cette fonction même si dans ce cas elle ne me sert pas.
    En fait mes colonnes doivent être les valeurs de mes "y"
    Peut être que la structure de mon fichier est à revoir.

    Merci
    Bonjour,
    Un champ table WinDev peut contenir une zone répétée, par la suite il faudra adapter le sens de cette dernière , verticale ou horizontale.

  7. #7
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 219
    Points : 72
    Points
    72
    Par défaut
    J'ai avancé mais c'est très (trop lent) et je n'ai pas imaginé la suite

    Voici mon 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
    17
    18
    19
    20
    21
    22
    TableSupprimeTout(TABLE_Remise)
    soit i = 200
    soit j = 201
    sCaaa est une chaîne
    bPremierpassage est un booléen=Faux
     
    POUR nToto =1 A 99
    	HExécuteRequête(REQ_TableauRemise,hRequêteDéfaut,i,j,nToto)
    	POUR TOUT REQ_TableauRemise
    		SI bPremierpassage= Faux ALORS		
    			sCaaa=REQ_TableauRemise.Remise_RE
    			bPremierpassage=Vrai
    		SINON
    			sCaaa+=TAB+REQ_TableauRemise.Remise_RE
    		FIN
    	FIN
    	TableAjoute(TABLE_Remise,nToto+TAB+sCaaa)
    	sCaaa=""
    	bPremierpassage=Faux
    FIN
     
    TableAjuste(TABLE_Remise)
    J'ai traité en dur que 2 code remise pour mes 99 type de client possible.
    Le traitement prend bien une 10aine de secondes ! Mais le tableau se charge correctement.
    A moi ensuite à chaque modif de chaque colonne de réussir à savoir ou je suis pour modifié le fichier.

    Peut être un expert voit comment optimisé mon code?

    Merci

  8. #8
    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
    Il faudrait que tu montres la requête req_tableau_remise pour qu'on ait tous les éléments, mais l'organisation générale ne me paraît pas bonne.
    Ici, tu exécutes 99 requêtes consécutives. Idéalement, tu devrais exécuter une seule requête, qui te renvoie tes 99 lignes x 3 colonnes.
    En caricaturant à peine, exécuter une requête, ça prend un temps fixe. Peu importe que la requête renvoie 99 lignes, ou une seule, le temps d'exécution sera quasiment le même.

    Pour analyser les performances, il y a un outil intégré dans Windev, c'est l'analyseur de performance...ça te donne plein d'informations sur ce qui prend du temps dans ton code.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  9. #9
    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
    Il ne faut lancer qu'une seule fois la requête. De ce que je vois tu filtres tes enregistrements par type de client, tu lances donc 99 fois la requête.

    Je suppose que la requête est capable de remonter le type de client, le code de la remise et son montant.

    Code windev : 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
    TableSupprimeTout(TABLE_Remise)
    nIndice est un entier
     
    // Création des x Colonnes
    // Champclone()
     
    TABLE_Remise..AffichageActif = Faux
    HExécuteRequête(REQ_TableauRemise)
    POUR TOUT REQ_TableauRemise
    nIndice = TableCherche(COL_TypeClient,REQ_TableauRemise.TypeClient)
    SI nIndice = -1 ALORS
    nIndice = TableAjouteLigne(TABLE_Remise,REQ_TableauRemise.TypeClient)
    FIN
    {"COL_"+REQ_TableauRemise.CodeRemise,indChamp}[nIndice] = REQ_TableauRemise.Remise_RE
    FIN
    TABLE_Remise..AffichageActif = Vrai
    TableAjuste(TABLE_Remise)

    Cordialement,

    Philippe
    Philippe,


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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/09/2012, 10h37
  2. [WD16] Tableau HTM vers table Windev
    Par wojc01 dans le forum WinDev
    Réponses: 4
    Dernier message: 24/08/2011, 19h16
  3. [Windev 12]POO et tableau d'objets
    Par jonas0 dans le forum WinDev
    Réponses: 31
    Dernier message: 17/04/2008, 09h41
  4. Tableau croisé Excel avec Windev
    Par cal_i_mero dans le forum WinDev
    Réponses: 0
    Dernier message: 01/02/2008, 12h35
  5. Réponses: 10
    Dernier message: 05/02/2007, 11h21

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