entitySelection.toCollection() à plat

Je voudrais extraire une table N pour la mettre dans ViewPro mais j’ai besoin de champs de la table 1.
J’ai donc écrit :
<code 4D>
$accountItems_c:=ds.ACC_DOC_ITEMS
.query(“account =:1 & documentHeader_.dateOperation >=:2 & documentHeader_.dateOperation <=:3”
;$account_o.account;$o.dateBegin;$o.dateEnd)
.toCollection(“documentNumber, documentHeader_.dateOperation, label, dcCode, paymentMode, transacCurAmount, documentHeader_.currency, dateReconciliation, numberReconciliation, account, intCurAmount, id”
) //;dk with primary key+dk with stamp)//, balance, nbDays,

</code 4D>
table N : ACC_DOC_ITEMS
table 1 : ACC_DOC_HEADERS qui donne date et currency
Ça fonctionne mais avec une structure comportant un sous-objet pour le Header

[]33495583;“Your comment here…”[/]

Pas vraiment pratique… comment puis-je récupérer ce résultat “à plat” sans faire une boucle For each ?

Qu’est ce qui pose problème exactement ?
Qu’est ce qui serait plus simple à plat ?

Comme https://forums.4d.com/Post/FR/33471204/1/33485424#33485424ici>, je me gratterais la tête pour le faire par une formule.

Bonjour,

La member method toCollection() reproduit effectivement dans les objets extraits les liens vers les “related entity” / “related entities” (documentHeader_ dans votre cas).

documentHeader_ est un attribut de votre dataclass ACC_DOC_ITEMS au même titre que les autres attributs.

Comment fais-tu pour afficher l’exemple indiqué dans une zone ViewPro ?
Il faut que j’ai une table, pas une collection d’objets à plusieurs niveaux.

Je comprends que si on a un lien 1 vers N, la représentation à plat est impossible* mais pour N vers 1, il n’y a pas de difficulté ; à quand une member function toFlatCollection() ?

Bon, je vais faire une boucle.

  • encore que : si on applique une fonction du type somme, max,…, ça devient possible également.

J’ai compris le principe mais je ne parle pas encore naturellement ce langage !
Encore un peu d’investissement et d’explications…

Pareil, pour le moment je pige juste qu’il y a du potentiel mais que le mien est loin derrière !

Bonjour,

Une telle member method n’est pas prévue pour le moment.

Vous devez re travailler la collection obtenir un modèle à plat.

Entre une boucle pour insérer les données dans la zone ou une boucle pour les mettre à plat puis les insérer, autant les insérer directement, non ?
De plus, il n’est pas forcément nécessaire de les récupérer dans une collection. On peut de la même manière parcourir une entitySelection.

Par ailleurs, ça me semble compliqué d’avoir une member function pour mettre à plat des données de tables diverses où les attributs peuvent avoir le même nom. Certains champs peuvent eux-mêmes être des objets alors ça devient un casse-tête infernal.

Il vaut mieux, à mon avis, changer de façon de faire et ne plus avoir ce schéma plat en tête, hérité des tableaux.

Je ne comprends pas ta réponse Stanislas.
Si tu veux une liste de mouvements de stocks avec le libellé de l’article (et non le code) et que tu veux mettre la liste dans Excel ou View Pro, tu es typiquement dans le cas décrit.
Ce n’est pas un besoin périmé ; c’est juste un cas banal !

Je n’ai pas dit que ton besoin n’avait pas lieu d’être. Le besoin s’impose à nous, pauvres développeurs :slight_smile:

Je disais juste 2 choses. D’une part, faire une fonction de “mise à plat” générique me parait difficile. D’autre part, tu n’es pas obligé de passer par une collection, tu peux tout aussi bien parcourir l’entity selection et ajouter tes lignes à chaque itération.