PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Tableau croisé dynamique entièrement par programmation
Tableau croisé dynamique entièrement par programmation
Started by flam70, Nov., 22 2016 6:05 PM - 18 replies
Registered member
27 messages
Posted on November, 22 2016 - 6:05 PM
Bonjour,

Je dois réaliser des TCD(s) totalement dynamiques.
J'ai le code suivant :

sourceDonnées est une Source de Données
requêteSQL est une chaîne = "SELECT ProduitFamille, DateAcquisition, ProduitMarque, sum(prix) ..." // Cette requête est externalisée dans un fichier XML
HExécuteRequêteSQL(sourceDonnées,requêteSQL)


J'ai un TCD "TCD_Dynamique" dans ma fenêtre. Ce TCD n'est lié à aucune source et les lignes et les colonnes ne sont pas positionnées. Il est "VIDE".

Je souhaite initialiser par programmation le TCD en fonction de ma requête donc le construire dynamiquement . J'ai essayé des "trucs" mais rien ne marche et j'ai l'impression que les fonctions TCDXXXX fournies ne permettent pas de le faire.
Quelqu'un à t-il des pistes quant à la faisabilité ?
Si oui comment initialiser le TCD avec "sourceDonnées" et comment lui indiquer que les lignes correspondent à "ProduitFamille", que les colonnes à "DateAcquisition" puis "ProduitMarque" et enfin que les valeurs à afficher (calculées) sont les sommes des prix.

J'ai la même problématique avec d'autres requêtes et j'aimerais donc créer un générateur de TCD en fonction de données (requêtes SQL et autres) présentes dans des fichiers XML.

J'espère avoir été suffisamment explicite.

Merci par avance pour vos réponses
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on November, 23 2016 - 5:04 AM
Bonjour,

J'ai exactement la même problématique que toi. Je n'ai toujours pas trouvé de solution miracle. Je suis en train d'essayer de travailler avec un tableau de structure dans lequel j'insère des variants, mais c'est vraiment la galère.

Je vais me répéter, mais les objets Windev ne sont pas fait pour faire du dynamique. Ce n'est pas poussé au bout. On n'a le droit de ne toucher que ce à quoi on veut nous donner accès, c'est vraiment infernal.

En tout cas si tu as une solution je suis preneur.

Je te laisse mon adresse mail pour pouvoir se transférer des idées. Si toutefois j'arrive à quelque chose je t'envoie un bout de projet si tu me laisses ton mail.
psaintbertin-at-hotmail-point-fr

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Registered member
27 messages
Posted on November, 23 2016 - 9:08 AM
Bonjour,

Je te tiens au courant si je trouve quelque chose (j'ai noté ton mail). Mais à mon avis, ayant à nouveau parcouru la documentation, j'ai l'impression que ce n'est guère réalisable. Frustrant !!

Si quelqu'un à une piste, je pense que cela intéressera beaucoup de développeur.

Merci d'avance
Registered member
27 messages
Posted on November, 23 2016 - 10:08 AM
J'ai essayer le code suivant :

SourceDonnees est une Source de Données
requeteSQL est une chaîne = "select DesignationFamille ,DateAcquisition,MarqueAppareil, sum(prix) as somme from ..."
nomTCD est une chaîne

HExécuteRequêteSQL(SourceDonnees,requeteSQL) ALORS

TCD_Dynamique..FichierParcouru = SourceDonnees
entetesColonne est une chaîne = "COL_DateAcquisition"+RC+"COL_MarqueAppareil"
entetesLigne est une chaîne = "COL_DesignationFamille"

nomTCD = FEN_Croise_dynamique.TCD_Dynamique..Nom

Ligne 17 : {nomTCD+"."+"COL_DateAcquisition",indChamp}..LiaisonFichier = {SourceDonnees+"."+"DateAcquisition",indRubrique}
{nomTCD+"."+"COL_MarqueAppareil",indChamp}..LiaisonFichier = {SourceDonnees+"."+"MarqueAppareil",indRubrique}
{nomTCD+"."+"COL_DesignationFamille",indChamp}..LiaisonFichier = {SourceDonnees+"."+"DesignationFamille",indRubrique}

TCDAxeXY(TCD_Dynamique,entetesColonne,entetesLigne)


j'ai le code erreur suivant :

Erreur à la ligne 17 du traitement Clic sur Calculer1.
Un champ n'a pas de sous-élément. L'opérateur '.' est interdit.

----- Informations techniques -----

Projet : TABLEAU_BORD

Appel WL :
Traitement de 'Clic sur Calculer1' (FEN_Croise_dynamique.Calculer1), ligne 17, thread 0

Que s'est-il passé ?
Un champ n'a pas de sous-élément. L'opérateur '.' est interdit.

Code erreur : 1069
Niveau : erreur fatale

Dump de l'erreur du module 'wd210vm.dll' (21.0.317.0).
Identifiant des informations détaillées (.err) : 1069
Informations supplémentaires :
EIT_PILEWL :
Clic sur Calculer1 (FEN_Croise_dynamique.Calculer1), ligne 17
EIT_DATEHEURE : 23/11/2016 10:02:42
EIT_TYPE_WDFILE : <2>
EIT_IDCODE : <18>

Il est donc apparemment impossible de construire dynamiquement un TCD . Il faut qu'il soit créé en amont via l'assistant (les colonnes et les lignes doivent êtres positionnées avec les liaisons qui vont bien !).
Posted on November, 23 2016 - 1:34 PM
Bonjour,

J'ai exactement le même problème et je n'ai pas trouvé de solution satisfaisante dans WinDev.

Pour mes tableaux croisés dynamiques ou les graphiques que l'utilisateur peut personnaliser, je propose un programme externe (Microsoft Power BI ou Qlik Sense Desktop) qui sont gratuits et peuvent accéder aux données HFSQL par ODBC ou OLEDB.

Cordiales salutations.
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on November, 23 2016 - 2:01 PM
J'arrive à générer un TCD dynamiquement mais avec des limites. Je travaille sur un tableau de structure composée de variant.

Je définis dès le départ que la source de mon TCD est mon tableau, j'ajoute artificiellement 8 lignes, 8 colonnes et 5 valeurs dans mon TCD que je lie aux variables de mon tableau.

Ensuite par des boucles, je remplis mon tableau en ligne, colonne et valeurs. Ca fonctionne mais il faut à peu près tout prévoir à l'avance pour les types de valeurs (moyenne, somme,...)

Les libellés des totaux ne sont à priori par modifiables. En tout cas je n'ai pas réussi à le faire. Je suis encore dessus et je pense en avoir pour encore un moment avant d'obtenir quelque chose de vraiment bien.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Registered member
27 messages
Posted on November, 23 2016 - 2:47 PM
Merci pour vos réponses.

Effectivement Philippe j'ai pris la même direction que toi et je suis en train de tester cette méthode.
On se tient au courant !
Posted on February, 14 2018 - 2:26 PM
Votre recherche de creation de TCd dynamiquement m'interesse, avez vous pu avancer.
Cordialement
Registered member
165 messages
Popularité : +12 (12 votes)
Posted on February, 14 2018 - 6:43 PM
Bonjour;
Si vous avez ou trouvez une solution à mon problème je suis preneur.
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/190369-affichage-autre-valeur-dans-tetes-colonnes-tcd-dans-206681/read.awp…

Bon Dev.
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on February, 15 2018 - 4:29 AM
Sur la version 23 il n'y a toujours aucune évolution du champ et donc on reste bloqué au même point. Créer un TCD dynamiquement est toujours impossible. C'est bien dommage, ça ouvrirait de super perspectives.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Posted on February, 15 2018 - 7:52 AM
Bonjour,
Il n'est pas possible de créer "from scratch" un TCD.
Par contre on peut le baser sur un tableau de structure (par exemple avec
une dizaine d'axes, un dernier de type date/heure et 4 indicateurs), puis
remplir ce tableau avec "ce qu'on veut".
Il suffit de masquer les axes/indicateurs inutiles, et de changer les
libelles des axes.

On ne peut pas (encore ?) tout changer, comme par exemple le type de cumul,
mais ça permet déjà d'avancer.

Frédéric.

"Philippe SB" a écrit dans le message de groupe de discussion :
20186fe51c4d905ffacb4b1e45827264e1e2@news.pcsoft.fr...

Sur la version 23 il n'y a toujours aucune évolution du champ et donc on
reste bloqué au même point. Créer un TCD dynamiquement est toujours
impossible. C'est bien dommage, ça ouvrirait de super perspectives.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Registered member
165 messages
Popularité : +12 (12 votes)
Posted on February, 15 2018 - 9:17 AM
Bonjour;
Merci beaucoup Philipe SB pour la confirmation.

Pour ceux qui n'ont besoin des TCD que pour produire des états tel que mon cas, une parmi les solutions c'est d’intégrer "Crystal Reports" dans leurs applications.

Bon Dev.

Philippe SB a écrit :
Sur la version 23 il n'y a toujours aucune évolution du champ et donc on reste bloqué au même point. Créer un TCD dynamiquement est toujours impossible. C'est bien dommage, ça ouvrirait de super perspectives.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Registered member
59 messages
Posted on August, 22 2018 - 12:00 PM
Bonjour,

je suis très intéressé par le sujet.
Ne pouvant créer un TCD complètement par programmation je travaille avec un tableau de structures. j'ai créé des colonne et des lignes
et l'utilisateur peut choisir lesqulles il veut voir afficher. Ca fonctionne pas mal.
Par contre j'ai fait la même choses pour les valeurs affichées (j'en ai 5 au total déjà mise dans mon TCD) et je donne la possibilité de choisir parmi les 5 lesquelles on veut voir affichées. Mais là je bloque je n'arrive pas le faire fonctionner.
Si quelqu'un à une idée.

Merci

Fabien
Posted on August, 24 2018 - 3:19 PM
Fabien W. a écrit :
Bonjour,

je suis très intéressé par le sujet.
Ne pouvant créer un TCD complètement par programmation je travaille avec un tableau de structures. j'ai créé des colonne et des lignes
et l'utilisateur peut choisir lesqulles il veut voir afficher. Ca fonctionne pas mal.
Par contre j'ai fait la même choses pour les valeurs affichées (j'en ai 5 au total déjà mise dans mon TCD) et je donne la possibilité de choisir parmi les 5 lesquelles on veut voir affichées. Mais là je bloque je n'arrive pas le faire fonctionner.
Si quelqu'un à une idée.

Merci

Fabien


Bonjour, Fabien W.

Je suis très intéressée par ce que tu propose de travailler avec des tableau de structures.
Je suis curieuse de savoir comment tu as fait pour permettre aux utilisateurs de choisir les colonne à afficher.
Si tu avais un morceau de code ou des explications me permettant de comprendre comment tu t'y es pris je suis preneuse.

Merci pour ton retour!

Dorine
Posted on August, 24 2018 - 3:25 PM
Fabien W. a écrit :
Bonjour,

je suis très intéressé par le sujet.
Ne pouvant créer un TCD complètement par programmation je travaille avec un tableau de structures. j'ai créé des colonne et des lignes
et l'utilisateur peut choisir lesqulles il veut voir afficher. Ca fonctionne pas mal.
Par contre j'ai fait la même choses pour les valeurs affichées (j'en ai 5 au total déjà mise dans mon TCD) et je donne la possibilité de choisir parmi les 5 lesquelles on veut voir affichées. Mais là je bloque je n'arrive pas le faire fonctionner.
Si quelqu'un à une idée.

Merci

Fabien


Bonjour Fabien W.

Je suis très intéressée par le sujet et en particulier par la méthode que vous proposez d'utiliser les tableaux de structures.
Je suis curieuse de savoir comment vous avez fait pour permettre aux utilisateurs de cacher ou non des colonnes.
Si vous aviez un morceau de code ou des explications me permettant de comprendre le mécanisme que vous avez employé, je suis preneuse.

Je vous remercie pour votre retour!

Dorine
Registered member
59 messages
Posted on August, 24 2018 - 4:12 PM
Bonjour Dorine,

je commence par dire que la source de mon TCD est mon tableau de structure. Je mets en tant que colonne et ligne de mon TCD toutes les rubriques de ma structure.

Ensuite j'ai deux listes( une pour les colonnes et l'autre pour les lignes) pour lesquelles j'ai comme valeur toutes les rubriques de ma structure
L'utilisateur choisit dans les deux listes les valeurs qu'il veut voir afficher dans le TCD.
Il calcule le TCD et juste après le TCDCalculeTout(TCDCRMSTA) j'appelle une procédure ChargeAxe() dans laquelle j'ai le code ci-dessous:


PROCÉDURE ChargeAxe()
LColonne est une chaîne
LLigne est une chaîne

POUR i = 1 _À_ COSEL..Occurrence
SI LColonne <> "" ALORS
LColonne+=RC +COSEL[i]
SINON
LColonne+=COSEL[i]
FIN
FIN

POUR i = 1 _À_ LISEL..Occurrence
SI LLigne <> "" ALORS
LLigne+=RC +LISEL[i]
SINON
LLigne+=LISEL[i]
FIN
FIN

SI LColonne <> "" ET LLigne<> "" ALORS
TCDAxeXY(TCDCRMSTA,LColonne,LLigne)
FIN

J'espère avoir pu t'aider.

Et mon but et de pouvoir faire la même chose avec les valeurs du TCD, mais là ca plante.....

Fabien
Posted on August, 24 2018 - 4:18 PM
Fabien W. a écrit :
Bonjour Dorine,

je commence par dire que la source de mon TCD est mon tableau de structure. Je mets en tant que colonne et ligne de mon TCD toutes les rubriques de ma structure.

Ensuite j'ai deux listes( une pour les colonnes et l'autre pour les lignes) pour lesquelles j'ai comme valeur toutes les rubriques de ma structure
L'utilisateur choisit dans les deux listes les valeurs qu'il veut voir afficher dans le TCD.
Il calcule le TCD et juste après le TCDCalculeTout(TCDCRMSTA) j'appelle une procédure ChargeAxe() dans laquelle j'ai le code ci-dessous:


PROCÉDURE ChargeAxe()
LColonne est une chaîne
LLigne est une chaîne

POUR i = 1 _À_ COSEL..Occurrence
SI LColonne <> "" ALORS
LColonne+=RC +COSEL[i]
SINON
LColonne+=COSEL[i]
FIN
FIN

POUR i = 1 _À_ LISEL..Occurrence
SI LLigne <> "" ALORS
LLigne+=RC +LISEL[i]
SINON
LLigne+=LISEL[i]
FIN
FIN

SI LColonne <> "" ET LLigne<> "" ALORS
TCDAxeXY(TCDCRMSTA,LColonne,LLigne)
FIN

J'espère avoir pu t'aider.

Et mon but et de pouvoir faire la même chose avec les valeurs du TCD, mais là ca plante.....

Fabien


Merci beaucoup Fabien,
Je vais étudier cela de plus près et si dans mes recherches je trouve une solution pour toi je n’hésiterais pas à revenir vers toi.
Tiens nous au courant de ton avancé quand même.
Je pense que le TCD est un sujet épineux et que cela sera surement utile pour plusieurs d'entre nous ;)
Merci pour ton temps.

Dorine
Posted on May, 02 2019 - 3:33 PM
bonjour

pourriez-vous en dire plus sur le fruit de vos recherches?
c'est précisément ce que je cherche à faire.
merci
Registered member
8 messages
Posted on November, 09 2019 - 4:17 PM