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 :

[WD26] Création de table à la volée. Quelle est la meilleure méthode


Sujet :

WinDev

  1. #1
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 370
    Points : 9 704
    Points
    9 704
    Par défaut [WD26] Création de table à la volée. Quelle est la meilleure méthode
    Bonjour,

    Comme c'est ma première demande en 2021, j'en profite pour vous souhaiter à toutes et tous une Bonne et Heureuse Année, riche en développements (personnels et windev ) et une très très bonne santé (par les temps qui courent, c'est pas du luxe).

    Ma demande : voilà, je suis en plein développement de notre futur ERP (refonte d'un vieux truc en Windev 5.5 et fichiers dBase ), et je voudrais proposer un truc pour afficher les tables de certains fichiers (article, client, fournisseur, ...) permettant aux utilisateurs de choisir les champs à afficher.

    En effet, les besoins de chacun sont différents, entre le responsable méthode, le chef d'atelier, les personnes du service achat, le bureau d'études, ... les besoins sont différents.

    Au départ je pensais me tourner vers ConstruitTableFichier que j'associerais à une requête faite à la volée, en fonction des colonnes sélectionnées par l'utilisateur (dont la liste est mémorisée dans un fichier ini ou autre)

    Toutefois, cette fonction, qui fonctionne bien, présente quelques inconvénients, entre autre sur la gestion de colonnes invisibles nécessaires et que je dois ajouter à la liste (de manière transparente pour les utilisateurs) afin de gérer certains filtres, mais aussi sur la taille des colonnes (la table étant ancrée en largeur et en hauteur, les champs ont tous la même taille, après la fonction).

    L'autre méthode, mais que je n'ai pas expérimenté, c'est la création de colonnes à la volée. J'avoue ne pas trop savoir comment réaliser cela.

    Avez-vous déjà réalisé ce genre de choses ? Et, si oui, comment avez-vous procédé ? Et quels conseils pourriez-vous me prodiguer ?

    Merci d'avance
    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    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 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    J'ai déjà mis en place ce genre de fonctionnalité dans une application.
    En premier je crée un fichier HF local, qui va recevoir les données à afficher. La structure exacte de ce fichier dépend du résultat d'une requête, qui va me donner les colonnes dynamiques.
    Ensuite j'ai une table fichier, reliée à mon fichier, avec une colonne cachée qui va me servir de "prototype" pour les colonnes dynamiques.
    Enfin en me basant sur la liste des colonnes à ajouter (même méthode que pour les rubriques du fichier), je clone la colonne, et la relie à la colonne du fichier.

    Cela me permet de traiter cette table comme n'importe quelle table fichier, sans me soucier de savoir si une colonne donnée est clonée ou pas.

    Par contre je ne sais pas si les FAA fonctionnent correctement dans ce cas.

    Tatayo.

  3. #3
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 370
    Points : 9 704
    Points
    9 704
    Par défaut
    Merci pour cette piste intéressante.
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut
    Bonjour et bonne année

    Actuellement on utilise principalement les FAAs pour que les utilisateurs fassent ce qu'ils veulent : affichage ou non, déplacement de colonne, etc.
    Une fois fait, les modifications sont bien récupérées.

    Sur certaines colonnes, je vais manipuler l'affichage dans la base de registre, la même que pour les FAAs et ça fonctionne bien aussi.

    Edit : Il y a également des menus créés façon FAA pour que seules certaines colonnes soient cachées par les utilisateurs mais avec derrière la base de registre des FAAs.

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    941
    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 : 941
    Points : 1 931
    Points
    1 931
    Par défaut
    Tu peux tout simplement utiliser champcrée() et tout gérer à la main ça se fait très bien si tant est que tu ais stocké toutes infos nécessaires en base. De cette manière, un utilisateur retrouvera son paramétrage quelque soit le pc d'où il se connecte.
    Philippe,


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

  6. #6
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 800
    Points : 5 242
    Points
    5 242
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    As tu songé à l'utilisation des plans.
    Chaque plan est affecté à un service et le plan s'affiche en fonction du service.
    Une autre solution est d'affecter une vue par service et de l'utiliser via ConstruitTableFichier comme tu l'avais envisagé
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  7. #7
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 370
    Points : 9 704
    Points
    9 704
    Par défaut
    Merci pour toutes vos pistes.

    Je ne suis pas fan des plans, et puis, je pense que chaque utilisateur est différent et voudra SA personnalisation, donc pour la gestion par plan, je ne crois pas que ce soit une bonne idée.

    La méthode Champcree me plait bien, même si je n'ai jamais utilisé cela. Comment est-ce que ça se passe pour l'alimentation de la table via une requête ?

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    941
    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 : 941
    Points : 1 931
    Points
    1 931
    Par défaut
    Il suffit d'affecter la propriété ..FichierParcouru du champ table et la propriété ..LiaisonFichier de chaque colonne
    Philippe,


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

  9. #9
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 370
    Points : 9 704
    Points
    9 704
    Par défaut
    Merci,
    Une question subsidiaire, en conception, je crée la table comment ? Avec une requête bateau ?
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  10. #10
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 186
    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 186
    Points : 9 169
    Points
    9 169
    Par défaut
    Hello et bonne année,

    Tatayo obtient la liste de ses colonnes par requête. Tu peux faire la même chose, ou lire les valeurs de colonnes de l'utilisateur depuis un fichier ini ou une table de la bdd dédiée à cela.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  11. #11
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    941
    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 : 941
    Points : 1 931
    Points
    1 931
    Par défaut
    Tout dépend de la base et de si tu utilises une analyse ou non. Si tu utilises une analyse, tu peux récupérer la description des colonnes d'une table avec HListeRubrique().
    Philippe,


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

  12. #12
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 370
    Points : 9 704
    Points
    9 704
    Par défaut
    La base est postgreSQL, et oui, il y a une analyse (qui est en conformité avec la base). Donc, je peux en effet récupérer les descriptions de rubriques.

    Ma question est plus du coté du comment je prépare ma table en conception. L'idée était de dire qu'il y a avait des colonnes obligatoires (code et désignation pour la base article - par exemple) et que les utilisateurs pouvaient rajouter des colonnes de la table, ou d'une ou plusieurs tables liées. Et c'est là que le bât blesse.
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  13. #13
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 800
    Points : 5 242
    Points
    5 242
    Billets dans le blog
    1
    Par défaut
    Pourquoi ne pas demander aux différents services ce qu'ils désirent ?
    Ensuite, tout peut se régler au niveau du groupware utilisateur
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  14. #14
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 370
    Points : 9 704
    Points
    9 704
    Par défaut
    Parce que :
    1)Je n'utilise pas le GroupeWare Utilisateur
    2)Dans un même service, il peut y avoir des personnes au profil fort différent (dans notre boite)
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  15. #15
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    941
    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 : 941
    Points : 1 931
    Points
    1 931
    Par défaut
    Les colonnes obligatoires sont les mêmes pour tout le monde ?
    Philippe,


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

  16. #16
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 370
    Points : 9 704
    Points
    9 704
    Par défaut
    Oui
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  17. #17
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    941
    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 : 941
    Points : 1 931
    Points
    1 931
    Par défaut
    Dans ce cas tu peux créer un tableau avec le nom des colonnes obligatoires pour créer celles-là dans tous les cas et le reste en fonction de ce qui est stocké dans les paramètres.
    Philippe,


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

  18. #18
    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 768
    Points
    1 768
    Par défaut
    Avec HExécuteRequêteSQL() tu peux exécuter une requête placée dans une chaîne

    Donc pour construire ta table à la volée, tu construits d'abord ta requête à la volée avec les rubriques que tu veux afficher dans le SELECT.
    Tu la stockes dans une variable chaîne, puis avec ConstruitTableFichier() t'envoies les données dans la table
    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.

  19. #19
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 370
    Points : 9 704
    Points
    9 704
    Par défaut
    Citation Envoyé par laurent30s Voir le message
    Avec HExécuteRequêteSQL() tu peux exécuter une requête placée dans une chaîne

    Donc pour construire ta table à la volée, tu construits d'abord ta requête à la volée avec les rubriques que tu veux afficher dans le SELECT.
    Tu la stockes dans une variable chaîne, puis avec ConstruitTableFichier() t'envoies les données dans la table
    C'est ce que j'avais pensé faire au démarrage. Mais, mes essais m'ont montré que le formatage des colonnes créées par ConstruitTableFichier laissaient à désirer. C'est pour cela que j'ai abandonné cette technique et cherché une autre solution.
    Merci pour ta réponse.
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  20. #20
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 370
    Points : 9 704
    Points
    9 704
    Par défaut
    Bonjour,

    Je reviens avec mon problème de création de table à la volée.

    Voilà, j'ai créé tout un tas de table qui me permettent de récupérer les colonnes à afficher (avec leur taille, le format des numériques, le taux d'ancrage, de gérer des rubriques invisibles, des obligatoires, bref, tout.
    J'ai une procédure qui créé la requête SQL qui va bien. toussa toussa.

    Mais je me heurte à un souci.

    Dans la fenêtre qui contient ma table, j'ai une variable Source de donnée.
    Cette source de données servira pour exécuter la requête ci-dessus mentionnée.

    Lors de la conception, j'ai créé une table, avec une seule colonne invisible, et je n'ai pas renseigné de fichier/requête dans l'onglet Liaison.
    Nom : Table_a_la_volee_liaison.PNG
Affichages : 180
Taille : 43,0 Ko

    Dans mon code, je clone la colonne de base (que j'ai appelé COL_AJOUT) autant de fois que j'ai de colonnes dans ma configuration.
    Pour chaque colonne je renseigne les différentes propriétés.
    Code Winedv : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    POUR TOUT l_vColonne, l_inIndice de gf_taLesColonnes
    	AVEC l_vColonne
    		SI .chTypeColonne = "B" ALORS
    			l_vUnChampColonne <- ChampClone(COL_AjtInt,ChaîneConstruit( "COL_%1",.chNomColonne)) //J'ai créé une colonne COL_AJTINT pour ajouter des colonnes interrupteurs, car je n'arrivais pas à les créer depuis la colonne COL_AJOUT
    		SINON
    			l_vUnChampColonne <- ChampClone(COL_Ajout, ChaîneConstruit( "COL_%1",.chNomColonne))
     			l_vUnChampColonne..MasqueAffichage = .chFormat
    			l_vUnChampColonne..Taille = .inNbcarac
    		FIN
    		l_vUnChampColonne..Libellé = .chLibelle
    		l_vUnChampColonne..Largeur = .inLargeur
    		l_vUnChampColonne..TauxAncrageLargeur = .inTauxancrage
    		l_inTotAncrage = .inTauxancrage
    		SELON .chTypeColonne
    			CAS "C"	: l_vUnChampColonne..TypeSaisie = typSaisieTexte
    			CAS "N"	: l_vUnChampColonne..TypeSaisie = typSaisieNum
    			CAS "D" : l_vUnChampColonne..TypeSaisie = typSaisieDate
    			CAS "H" : l_vUnChampColonne..TypeSaisie = typSaisieHeure
    			CAS "Du" : l_vUnChampColonne..TypeSaisie = typSaisieDurée
    			AUTRE CAS		
    		FIN
    		l_vUnChampColonne..LiaisonFichier = "gf_sdReqLstArt."+.chNomChamp
    		l_vUnChampColonne..Visible = .boVisible		
    	FIN
    FIN
    TBL_RepertArt..FichierParcouru = "gf_sdReqLstArt"
    SI PAS HExécuteRequêteSQL(gf_sdReqLstArt, gP_cnxCnxAppli, hRequêteSansCorrection, gf_chReqSelect_Articles)
    	Erreur( HErreurInfo(hErrCode), HErreurInfo(hErrComplet))
    SINON
     	TBL_RepertArt.Affiche(taInit)
    FIN
    Tout fonctionne bien, ma table a bien les bonnes colonnes, la requête semble bien s'exécuter (aucun message d'erreur). MAIS ... il faut un mais, bien sûr.
    Ma table est vide ! Donc, la question est : Qu'est-ce que j'ai raté ?

    Merci d'avance
    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/01/2009, 22h47
  2. Réponses: 2
    Dernier message: 10/07/2008, 12h29
  3. [HTML] quelle est la meilleure méthode pour changer la langue d'un site?
    Par poupouille dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/02/2008, 12h17
  4. Réponses: 12
    Dernier message: 10/08/2006, 09h44
  5. Réponses: 20
    Dernier message: 27/06/2006, 17h42

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