Une avancée majeure aux tables 4D Write Pro : Des lignes de rupture !

Traduit automatiquement de Deepl

Les tables des documents 4D Write Pro ont été considérablement améliorées au cours des dernières versions. En fait, l’équipe 4D s’est beaucoup investie pour faire de 4D Write Pro un puissant générateur de documents basés sur des modèles. Nous avons déjà mis en place des avancées telles que les en-têtes, les sources de données, les lignes de report… entre autres fonctionnalités puissantes qui me viennent à l’esprit.

Maintenant, avec 4D v20, c’est au tour des lignes de rupture de faire leur apparition !

Mesdames et messieurs, roulements de tambour, s’il vous plaît !

La fonctionnalité en action

 

L’objectif à atteindre

Quelle que soit votre activité, vous avez certainement besoin de créer des listes.

Ces listes sont triées selon vos propres critères, et il est généralement nécessaire de créer des blocs pour chacun de ces critères afin d’obtenir des totaux ou des statistiques. C’est ce que vous propose cette nouvelle fonctionnalité de 4D Write Pro !

Quand et comment ? Voici un exemple concret

Lorsqu’une table est alimentée par une source de données triées, le but est d’insérer une ligne de rupture lorsque la valeur correspondant au critère de tri change.

Imaginez que vous connaissiez des personnes de plusieurs continents, pays et villes.

Vous souhaitez créer une liste de ces personnes regroupées par continent, pays et ville.

blank

Ou bien vous voulez créer un rapport basé sur la relation avec l’entreprise et créer une liste d’employés groupés par l’entreprise sur chaque continent.

blank

 

Dans les deux cas, vous devez d’abord vous assurer que cette sélection est triée en fonction de ces trois critères.

Cas 1 :

ds.people.all().orderBy("continent asc, country asc, city asc")

Cas 2 :

ds.People.all().orderBy("worksFor.name asc, continent asc)

Pour chaque critère de tri, une ligne de rupture

Une fois la source de données associée à la table, les personnes seront affichées dans la ligne répétée et dans l’ordre souhaité. Voyons comment les regrouper par critère de tri.

Utilisation de l’interface

De nouveaux éléments sont désormais disponibles dans le menu de la ligne. Ils sont contextuels et n’apparaissent que si le curseur se trouve à l’intérieur d’un tableau (et sous l’en-tête, le cas échéant).

blank

 

 

 

 

Par exemple, la formule peut être basée sur le nom d’un attribut (This.item.country) ou sur le chemin d’un attribut connexe (ex : This.item.worksFor.name) ou sur toute autre formule (Substring(This.item.name;1;1)).

Une fois que l’attribut de rupture a été défini… vous pouvez voir sa formule en survolant le symbole de rupture « S » comme dans Sort (« Sort » signifie « Tri » en anglais).

 

blank

Au-dessus ou au-dessous de BreakS ?

Les lignes de rupture peuvent se situer au-dessus ou au-dessous de la ligne répétée (remplie par la source de données du tableau).

Les ruptures seront rendues chaque fois que la valeur renvoyée par la formule de rupture changera, assurez-vous donc que la position des ruptures correspond aux critères de tri de la source de données.

blank

 

Un nouvel attribut de ligne

L’attribut wk break formula contient la formule dont le résultat déterminera l’affichage de la ligne de rupture. La simple présence de cet attribut fera qu’une ligne sera considérée comme une ligne de rupture. Vous pouvez définir autant de lignes de rupture que nécessaire, par exemple, Formula(This.item.city) pour le niveau de rupture le plus bas et Formula(This .item.continent) pour le niveau le plus élevé.

 

WP SET ATTRIBUTES($row; wk break formula; Formula(This.item.country))
WP RESET ATTRIBUTES($row; wk break formula)

N’oubliez pas :

  • Une ligne de rupture doit être située juste au-dessus ou au-dessous d’ une ligne répétée ou d’une autre ligne de rupture s’il y a plusieurs niveaux. Dans le cas contraire, elle ne sera pas prise en compte.
  • Le nombre de niveaux est limité à cinq. Si vous ajoutez un sixième niveau, aucune erreur ne sera déclenchée, mais il ne sera pas pris en compte.
  • L’insertion de lignes de rupture dans le tableau ne trie pas la source de données. La source de données doit être triée indépendamment.

Voilà, c’est tout !

Contenu des lignes de rupture

En plus du texte, les lignes de rupture peuvent contenir deux types de formules.

  • La première possibilité consiste à utiliser les éléments présents – ou susceptibles d’être présents – dans les lignes répétées (Ex : This.item.continent).
    La valeur renvoyée sera la dernière valeur utilisée avant la rupture (ou la première valeur utilisée si la ligne de rupture précède les lignes répétées).
  • La deuxième possibilité est nouvelle : la propriété breakItems ne peut être utilisée que dans le contexte des ruptures (Ex : This.breakItems).
    Le breakItems est un sous-ensemble des données source du tableau qui correspond précisément aux lignes répétées de la ligne de rupture concernée.

    • Pour reprendre l’exemple des ruptures multiples par continent-pays-ville, lorsque le contenu change, le sous-ensemble correspond aux personnes du continent (avant le changement), et ce, que la ligne de rupture soit placée avant ou après la ligne répétée. Ce sous-ensemble peut donc être utilisé pour effectuer des calculs tels que sum(« salary »), average(« salary »), etc.

 

blank

 

Enfin, précisons que ces sous-ensembles seront du même type que les données sources de la table, c’est-à-dire une sélection d’entités ou bien une collection.

Plus d’informations

Plus d’informations sur cette fonctionnalité peuvent être trouvées dans la documentation.

Conclusion

Cette nouvelle fonctionnalité démontre une fois de plus la puissance de 4D Write Pro en matière de création automatique de documents.

Avec les ruptures, une étape supplémentaire est franchie. Faites-nous savoir ce que vous en pensez du Forum 4D !

Roland Lannuzel
- Product Owner & 4D Expert - Après avoir étudié l'électronique, Roland s'est lancé dans l'informatique industrielle en tant que développeur et consultant, créant des solutions pour les clients avec une variété de bases de données et de technologies. À la fin des années 80, il est tombé amoureux de 4D et l'a utilisé pour écrire des applications commerciales, notamment des systèmes de comptabilité, de facturation et de messagerie électronique. Il a rejoint la société en 1997 et a contribué à la conception de spécifications, d'outils de test et de démonstrations, ainsi qu'à la formation et à la présentation de la communauté 4D lors de nombreuses conférences. Il continue à façonner activement l'avenir de 4D en définissant de nouvelles fonctionnalités et des outils de développement de bases de données.