Calculer le pied de page d'une colonne de listbox de type collection

v17 R6
Bonjour, j’au une listbox de type collection et j’aimerais obtenir la somme d’une colonne en faisant un clic droit sur l’entête de la colonne.
Comme il s’agit d’une génération générique de listbox, je ne connais pas à l’avance la position de la colonne (que peux changer par l’utilisateur ) .
Au départ je pense utiliser :

ARRAY TEXT($tabNomsCols;0)
ARRAY TEXT($tabNomsEntêtes;0)
ARRAY POINTER($tabVarCols;0)
ARRAY POINTER($tabVarEntêtes;0)
ARRAY BOOLEAN($tabColsVisibles;0)
ARRAY POINTER($tabStyles;0)
ARRAY TEXT($tabNomsPieds;0)
ARRAY POINTER($tabVarPieds;0)
ARRAY REAL($TR_Champ_Reel;0)
ARRAY REAL($TR_Real_Val;0)

LISTBOX GET ARRAYS(*;"myListbox";$tabNomsCols;$tabNomsEntêtes;$tabVarCols;$tabVarEntêtes;$tabColsVisibles;$tabStyles;$tabNomsPieds;$tabVarPieds)

pour obtenir le nom de l’objet ou l’utilisateur avait fait son clic droit puis avec :
LISTBOX SET FOOTER CALCULATION(*;$tabVarCols{$indice};lk footer sum)

mais ça ne marche pas

comme je suis certain que le problème se situe entre la chaise et le clavier, peut être quelqu’un à déjà trouvé une solution pour ça ???

merci

Bonjour Carlos,
je pense que les tableaux ne peuvent s’appliquer ici.

Si tu as une collection, il te faut créer tes colonnes sur la base de la collection dynamiquement, ou alors, tu connais déjà le nom de tes colonnes et dans ce cas, le nom de tes “widgets pied de colonne”.

Ensuite, pour faire la comme dans une collection, il me semble que tu as ’ collection.sum( ) ’ qui devrait répondre à ton besoin

Patrick

Je ne me sers pratiquement plus de https://doc.4d.com/4Dv17R6/4D/17-R6/LISTBOX-LIRE-TABLEAUX.301-4311106.fr.htmlLISTBOX LIRE TABLEAUX> depuis qu’il y a https://doc.4d.com/4Dv17R6/4D/17-R6/LISTBOX-LIRE-OBJETS.301-4311121.fr.htmlLISTBOX LIRE OBJETS>.

ok pour listbox lire objets mais la question reste car j’aimerais savoir si :

est ce que la commande pour calculer la somme d’une colonne “set footer calculation” fonctionne pour une listbox collection ?

j’ai vu que avec le chemin de la selection MySelection.lenomdel’objet on peux calculer la somme, mais ceci est valable que pour un champ de la table de la selection

si le champ pour lequel je souhaite obtenir la somme est un champ d’une table liée en sachant que : nos liens sont bien nommés pour connaître le sens du lien et deuxièmement, la solution de faire une boucle sur la table liée est à proscrire car trop longue en fonction du nombre d’enregistrements. Comment faire ?

MySelection[$I].MonLien.lechampliée cette notation marche dans une boucle mais comme j’ai mis plus haut inutilisable en fonction du nombre d’entités

merci

: Carlos PISTERMAN

est ce que la commande pour calculer la somme d’une colonne “set
footer calculation” fonctionne pour une listbox collection ?
Oui d’après https://doc.4d.com/4Dv17/4D/17.3/Proprietes-specifiques-des-pieds-de-List-box.300-4639899.fr.htmlla doc> :
Note : Les calculs automatiques ne peuvent pas être utilisés avec (vous devez effectuer des calculs personnalisés) :
• les pieds des colonnes basées sur des formules.
• les pieds des colonnes de list box de type “Collection ou entity selection”.
Par contre je ne suis pas sûr de piger la somme en question : tu peux expliciter ?

Le calcul automatique ne fonctionnant pas, reste la solution de Patrick (.sum()) afficher une valeur que tu peux afficher/calculer en fonction de la taille (.length()) de ta collection.

cette commande n’est pas implémenté pour les listbox collections

tu as deux tables A et B

tu fabriques par une générique une listbox collection avec des colonnes de la table A ET de la table B

si tu essayes de générer la somme d’une colonne de la table A c’est ok avec MySelection.sum(“monchampdelaTableA”), mais si tu essayes de calculer la somme d’une colonne de la table B ça ne marche pas a moins de faire une boucle pour la calculer entre TOUS les entités. C’est bon si tu as 10 entités c’est mort si tu as un nombre important.

Ce que je cherche c’est une solution viable et générique car je n’utilise pas une listbox différente pour chaque table mais une seule listbox générique pour toutes les tables.

:sunglasses:

Mais y a quoi comme relation entre ta table A et B ?
T’as pas moyen de construire une entité selection supplémentaire sur ta table B ?

entre les tables A et B il y a une relation manuelle ou la table A et la table 1 et la table B est la table N

mais pour aller encore plus loin : si une des colonnes de la listbox collection est une formule quelconque comment va on faire pour calculer le pied de page ?

ORDA est très bien mais j’essaye de dupliquer le fonctionnement que j’avais sur des listbox selection avant de mettre en prod cette solution , car sinon c’est une “régression dans le fonctionnement”

Dans mes listbox sélection, je peux ajouter, insérer, supprimer des colonnes de la table A ou des tables liées et faire une somme sur clic droit dans l’entête de chaque colonne si le type le permet. Je peux aussi modifier la disposition des colonnes et enregistrer leur position, largeur etc pour un utilisateur ou pour l’ensemble des utilisateurs, etc etc, donc, je dois retrouver l’identique ou mieux en termes de fonctionnalités et vitesse.

Cordialement

Pour avoir un système similaire, on peut rapidement tomber dans des absurdités dans les formules de colonnes qui effondrent les perfs ou au pire renvoi des sélections incohérentes !

Et oui ORDA a actuellement des limites. Le calcul automatique de colonne en est une (ce n’est pas la seule). Encore la preuve que vouloir utiliser ORDA partout n’est pas forcement LA solution.

merci et espérons que l’équipe de 4d nous sorte rapidement une commande adapté à ce problème dans la v18 :pray:

La listbox dont tu parles est une LB entity selection, je pense, pas
une LB collection. Je précise car avec les “anciennes” LB tableau
(LBt) et sélection (Las), une fois le type fixé en propriétés, on ne
pouvait pas transformer une LBt en Las au runtime ; avec la “nouvelle”
LB collection/entity sélection (LBc), on peut - et c’est sympa…

: Carlos PISTERMAN

si une des colonnes de la listbox collection est une formule
quelconque comment va on faire pour calculer le pied de page ?
Je ne pige pas la “régression”, avec une LBs on ne pouvait déjà pas calculer en pied de https://doc.4d.com/4Dv17/4D/17.3/LISTBOX-FIXER-CALCUL-PIED.301-4621112.fr.htmlcolonne formule> : “Si une colonne contient une formule (list box de type sélection), l’erreur 10 est générée”.

la régression pour moi est au niveau du calcul du footer pour une colonne d’une table lié , et je faisais allusion au fait que maintenant on peux ajouter une colonne avec une formule et donc on aura le même problème. Avant une colonne avec une formule dans une listbox selection nous permettait aussi le calcul du footer (pas très performant, certes) …

vla

bye :sunglasses: