Les documents 4D Write Pro peuvent contenir des tableaux. Les tableaux 4D Write Pro sont créés et construits par programmation, mais leur contenu peut être modifié et géré par l'utilisateur. Plusieurs attributs de tableau 4D Write Pro peuvent être définis, notamment la hauteur de ligne, l'alignement, les marges, le style de texte, la couleur, ou encore les bordures.
Pour créer un tableau 4D Write Pro, vous devez appeler la commande WP Insert table. Vous pouvez ensuite ajouter des lignes à l'aide de la commande WP Table append row.
Note : L'utilisateur peut créer un tableau par copier-coller d'une plage de cellules :
Le contenu des cellules peut être ajouté par programmation à l'aide de la commande WP Table append row.
Une fois qu'un tableau est créé, le contenu des cellulles peut également être modifié à l'exécution par l'utilisateur. Il peut cliquer dans les cellules, puis sélectionner, modifier, copier/coller ou supprimer le texte et les images comme dans tout paragraphe. Il peut naviguer parmi les cellules en appuyant sur la touche Tabulation (Maj+Tabulation pour se déplacer dans la direction inverse).
Utiliser la touche Retour chariot dans une cellule crée un nouveau paragraphe dans la cellule.
Notez que la largeur des cellules est fixe : lorsque l'utilisateur saisit du texte ou colle une image, la hauteur de la ligne est automatiquement ajustée si nécessaire et le texte passe automatiquement à la ligne :
Les utilisateurs peuvent également sélectionner des colonnes, des lignes ou des cellules et appliquer divers attributs relatifs au style de texte, aux couleurs, alignements etc., via le pop up menu intégré ou une interface personnalisée. 4D Write Pro fournit plusieurs commandes permettant de sélectionner toutes les parties d'un tableau :
(*) Les colonnes n'ont pas d'équivalent en html. Dans 4D Write Pro, une plage de colonne est en réalité une plage de cellules, ce qui signifie que les colonnes ont la même priorité que les cellules (cf. ci-dessous).
Une fois que vous avez sélectionné une plage, vous pouvez lui appliquer un attribut à l'aide de la commande WP SET ATTRIBUTES. A l'intérieur des cellules, les attributs sont appliqués aux paragraphes, caractères ou images, suivant leur contenu. Par exemple, vous pouvez définir la hauteur, la taille de police, la bordure, la marge intérieure etc. d'un tableau ou des cellules d'un tableau (pour plus d'informations, veuillez vous référer à la section Attributs 4D Write Pro).
Lorsque des attributs différents sont appliqués à des éléments concurrents d'un tableau, l'ordre de priorité suivant est utilisé pour le rendu :
Le tableau est dessiné en premier
Les lignes sont ensuite dessinées (écrasant les attributs du tableau)
Les cellules/colonnes sont ensuite dessinées (écrasant les attributs des lignes).
La largeur des colonnes du tableau peut être modifiée en faisant glisser le séparateur de colonne vers la gauche ou la droite. Le curseur change pour indiquer qu'il peut être déplacé horizontalement et une ligne verticale apparait dans la règle :
Le redimensionnement des colonne génère un événement formulaire On After Edit.
Pour redimensionner une colonne, cliquez sur le séparateur de colonnes et glissez-le vrs la gauche ou la droite. La taille minimale d'une colonne est de 8 points. Si la colonne adjacente située à droite atteint la plus petite taille, toutes les colonnes de droite seront déplacées. Si la première colonne ou une colonne adjacente située à gauche atteint la plus petite taille, aucun redimensionnement ne peut s'effectuer dans cette direction.
Si vous appuyez sur la touche Shift tout en redimensionnant une colonne, la taille de la colonne adjacente de droite ne sera pas modifiée.
Note : La propriété Saisissable doit être activée pour que le document 4D Write Pro autorise le redimensionnement des colonnes.
Lorsqu'ils sont affichés en mode Page ou en mode Brouillon (ou dans le contexte de l'impression de document), les tableaux 4D Write Pro peuvent être coupés :
automatiquement, si la hauteur du tableau est supérieure à la hauteur de page/colonne disponible,
en fonction des sauts de pages/sauts de colonnes définis par programmation ou par l'utilisateur.
Les coupures de tableaux peuvent s'effectuer entre les lignes (les paragraphes à l'intérieur des lignes ne sont jamais coupés).
Les coupures de tableaux peuvent s'effectuer entre les lignes et les coupures de rangées sont également possibles. La pagination de la table est mise à jour dynamiquement si l'orientation ou le numéro de colonne sont modifiés.
Notes :
Vous pouvez désactiver les sauts de tableaux automatiques en utilisant les attributs wk page break inside row / wk page break inside table (voir Attributs 4D Write Pro) ou les actions standard table/avoidPageBreakInside et row/avoidPageBreakInside (voir Utilisation des actions standard 4D Write Pro).
Lorsqu'une ligne de tableau et un paragraphe ont des options de saut de page différentes, les options appliquées à la ligne sont prioritaires. Par exemple, lorsqu'un paragraphe autorise les sauts de page, mais que sa ligne mère ne les autorise pas, la ligne ne sera pas divisée.
La pagination des tableaux peut également être contrôlée par programmation ou par l'utilisateur. Les actions disponibles incluent :
option Insérer saut de colonne du menu contextuel par défaut
Lorsqu'un saut de page ou de colonne est inséré via une action standard ou le menu contextuel, il est ajouté avant le contenu sélectionné : la première ligne de la sélection est déplacée au début de la page ou de la colonne suivante. Par exemple :
===>
Notes :
Seuls les tableaux situés dans le corps d'un document peuvent être rompus. Les ruptures insérées dans les tableaux, dans les en-têtes et les pieds, sont ignorées.
Les tableaux ne peuvent pas être séparés dans des sections différentes. Insérer un saut de section dans un tableau déplacera la totalité du tableau dans la nouvelle section.
4D Write Pro vous permet de définir jusqu'à cinq lignes d'en-tête par tableau. Les lignes d'en-tête sélectionnées seront répétées sur chaque colonne ou sur chaque page lorsqu'un saut de colonne ou un saut de page se produit.
Les en-têtes de tableau sont la ou les premières lignes du tableau. Pour définir les lignes d'en-tête, vous pouvez :
Si vous désignez plus de cinq lignes comme en-tête (ou si cela résulte d'une insertion de lignes dans un en-tête existant), 4D Write Pro utilise uniquement les cinq premières lignes comme en-tête. Si vous supprimez la ou les lignes définies dans l'en-tête, le nombre de lignes d'en-tête est réduit.
Vous pouvez assigner un objet formule comme source de données pour un tableau et accéder aux valeurs résultantes à travers le tableau en utilisant des Expressions avec This (voir ci-dessous). La formule de la source de données est évaluée par 4D Write Pro lors du calcul des formules (par exemple à l'ouverture du document, lors de l'appel de la commande WP COMPUTE FORMULAS, etc.). Cette fonctionnalité bénéficie des contextes de données (voir WP SET DATA CONTEXT).
Pour affecter une source de données à un tableau, utilisez la commande WP SET ATTRIBUTES avec wk datasource et un objet formule 4D comme valeur. Par exemple, pour remplir un tableau avec une ligne pour chaque personne vivant en France :
$formula:=Formula(ds.people.query("country = :1";"France")) WP SET ATTRIBUTES($table;wk datasource;$formula)
Si l'objet formule de la source de données renvoie une collection ou une sélection d'entités (non vide), le tableau est automatiquement rempli lorsque la formule est calculée : il contient au moins autant de lignes qu'il y a d'éléments dans la collection ou d'entités dans la sélection d'entités. La première ligne du tableau, appelée ligne répétée, est utilisée comme ligne modèle (à l'exclusion de la ou des lignes d'en-tête et de la ou des lignes de rupture éventuelles).
Dans la ligne répétée (et la ou les lignes de rupture), vous pouvez insérer des expressions qui utilisent des mots-clés spéciaux tels que This.item.lastname. Les expressions sont remplacées au cours du traitement par les données de la collection ou de la sélection d'entités. La ligne répétée sera dupliquée de manière à ce que le nombre de lignes d'éléments soit égal au nombre d'éléments de la collection ou de la sélection d'entités après le traitement des formules.
Si la formule de la source de données ne renvoie pas de collection ou de sélection d'entités, ou si elle renvoie une collection/sélection d'entités vide, les lignes du tableau par défaut ne sont pas créées automatiquement et toutes les lignes sont traitées comme des lignes normales.
Pour supprimer une source de données d'un tableau, utilisez la commande WP RESET ATTRIBUTES. La valeur de l'attribut de la source de données sera alors null :
La formule de datasource doit retourner des éléments itérables
Si le tableau n'a pas de lignes d'en-tête et/ou ligne(s) de rupture, la ligne répétée est la première ligne du tableau - sinon, c'est la première ligne après l'en-tête ou la (les) ligne(s) de rupture. Elle est généralement remplie d'expressions utilisant This (e.g. This.item.value) qui donnent accès aux données traitées lorsque le document est en mode Display values et que la ligne est dupliquée..
Lignes de rupture
jusqu'à 5
-
La formule de datasource doit retourner des éléments itérables
Lorsque les formules sont calculées, la ligne répétée est automatiquement dupliquée si nécessaire pour correspondre à toutes les entities ou éléments de collection retournées par la formule du datasource :
Dans tous les cas, l'instruction suivante retourne le véritable nombre de lignes :
WP GET ATTRIBUTES($table;wk row count;$vcount) //31 pour l'exemple ci-dessus
Les tableaux basés sur des sources de données prennent en charge les bottom carry-over rows (lignes à reporter en bas) qui s'affichent automatiquement au bas de chaque page/colonne lorsque le tableau est réparti sur plusieurs pages/colonnes.
Les carry-over rows peuvent afficher des informations supplémentaires basées sur les éléments précédemment affichés/imprimés, grâce à l'expression This.previousItems (voir Expressions avec This). Cette fonctionnalité vous permet, par exemple, d'ajouter des lignes de sous-total.
Les carry-over rows sont affichées :
lorsqu'un tableau de source de données ne tient pas dans une seule page (ou colonne)
au bas du tableau
sur la première page (ou première colonne) et toutes les autres sauf la dernière.
Important: Les carry-over rows ne sont disponibles que sur les tableaux remplis par une formule de source de données renvoyant une collection ou une entity selection non vide, et en mode d'affichage des valeurs. Dans tous les autres cas ou lorsque la formule de la source de données n'a pas été calculée, une ligne à reporter en bas est affichée comme une ligne normale.
Pour créer des carry-over rows :
Dans le template de tableau, ajoutez une ligne juste après la ligne répétée ou la (les) ligne(s) de rupture et insérez-y les formules nécessaires, en utilisant par exemple This.previousItems.
Activer la fonctionnalité carry-over row pour votre document. Vous pouvez: - Utiliser l'action standard bottomCarryOverRow (voir Utiliser les actions standard 4D Write Pro), ou - Utiliser la commande WP SET ATTRIBUTES avec le sélecteur d'attribut wk bottom carry over rowTableaux.
Remarque: Les sauts de page à l'intérieur des lignes ne sont pas autorisés lorsque la fonctionnalité carry-over row est activée (voir Pagination des tableaux). Les options correspondantes, si elles sont définies, sont ignorées.
Les tableaux basés sur des sources de données acceptent une ou plusieurs Sort Break Rows (lignes de rupture) qui peuvent être affichées avant ou après la ligne répétée. Les lignes de rupture vous permettent de diviser visuellement vos éléments de source de données préalablement triés en différentes parties dans votre tableau selon la valeur d'une formule calculée.
Chaque fois que la valeur de la formule change, une nouvelle ligne de rupture est insérée. Par conséquent, pour que votre tableau soit rendu correctement, l'entity selection (ou la collection) utilisée comme source de données du tableau doit être triée en conséquence. Par exemple, si on souhaite obtenir des ruptures par pays et par ville, la source de données doit être triée comme suit : ds.people.all().orderBy("country asc, city asc")
La valeur de rupture est définie par l'attribut wk break formula. La valeur est généralement une formule basée sur une propriété d'élément comme "This.item.name", autrement la valeur calculée risque de ne jamais changer, ce qui rend la formule de rupture inutile.L'attribut wk break formula est ignoré si le tableau n'a pas de source de données ou si la ligne est un en-tête. Une ligne de rupture doit être adjacente à la ligne répétée (avant ou après) ou à une autre ligne de rupture, sinon elle est ignorée.
WP SET ATTRIBUTES($row_2;wk break formula;Formula(This.item.country))
Grâce à l'expression This.breakItems, on peut par exemple afficher la moyenne totale des lignes répétées à l'intérieur d'une ligne de rupture. breakItems est un sous-ensemble évalué de la source de données de la table, soit une entity selection si la source de données du tableau est une entity selection, soit une collection si la source de données est une collection. Vous pouvez donc taper à l'intérieur d'une ligne de rupture : This.breakItems.sum("salary")
Pour créer des lignes de rupture :
Ordonnez la source de données avec les niveaux correspondant aux ruptures que vous souhaitez afficher, par exemple, ds.People.all().orderBy("continent asc, country asc, city asc")
Tracer la ou les lignes de rupture dans le modèle de tableau. Si les ruptures sont situées après la ligne répétée, elles doivent suivre l'ordre de tri opposé à celui de la source de données, et si elles sont situées avant la ligne répétée, elles doivent suivre le même ordre de tri que celui de la source de données.
Définir la formule de rupture de l'attribut wk break formula pour la ou les ligne(s) sélectionnée(s) :
$row:=WP Table get rows($table;2;1) //sélectionner la deuxième ligne comme rupture WP SET ATTRIBUTES($row_2;wk break formula;Formula(This.item.country))
Lorsqu'il est utilisé dans une formule à l'intérieur du tableau, le mot-clé This donne accès à des données différentes selon le contexte :
Contexte
Expression
Type
Retourne
N'importe où
This.table
Objet
Tableau courant
This.row
Objet
Elément de ligne ou de tableau courant
This.rowIndex
Numérique
Indice de ligne courante, commençant par 1
Lorsqu'un datasource a été défini pour un tableau
This.table.dataSource
Objet (formula)
Datasource en tant que formula
This.tableData
Collection ou Entity selection (souvent)
Evaluated table.dataSource
Dans chaque ligne répétée lorsqu'une source de données du tableau retourne une collection ou une entity selection.
This.item.xxx
Tout type
Correspond à chaque élément de la collection de datasource du tableau ou à l'entity selection, par exemple This.item.firstName si l'entity associée possède l'attribut firstName
This.itemIndex
Numérique
Indice de l'élément courant dans la collection ou l'entity selection, en commençant par 0
Dans n'importe quelle ligne (à l'exception des lignes d'en-tête), lorsqu'une source de données de type table renvoie une collection ou une sélection d'entités.
This.previousItems
Collection ou Entity selection
Éléments affichés sur les pages avant carry over row (le cas échéant) ou avant la ligne de l'expression, y compris la page où est affichée la ligne contenant l'expression. Cette expression renvoie le même type de valeur que l'expression This.tableData.
Dans une ligne de rupture
This.breakItems
Collection ou Entity selection
Les éléments de la collection ou de la entity selection affichés dans les lignes entre :
la ligne de rupture actuelle et la ligne de rupture précédente du même niveau (ou le début du tableau) si la ou les lignes de rupture sont affichées après la ligne répétée.
la rupture actuelle et la ligne de rupture suivante du même niveau (ou la fin du tableau) si la ou les lignes de rupture sont affichées avant la ligne répétée.
Dans tout autre contexte, ces expressions retourneront undefined.
Note : Pour plus d'informations sur l'insertion de formules, voir WP INSERT FORMULA.
Lorsqu'un tableau est rempli à partir d'une datasource, les lignes sont automatiquement créées lorsque les références sont calculées. Vous pouvez insérer ou supprimer des lignes, modifier le contenu des cellules, changer le style, etc :
A noter cependant que si la datasource du tableau est recalculée, toutes les modifications effectuées sur les lignes calculées (sauf sur la première ligne) sont perdues. Par contre, comme la première ligne est la ligne modèle (la ligne répétée), toute modification apportée à cette ligne sera propagée à toutes les lignes si la datasource du tableau est recalculée. De même pour les lignes de rupture, toutes les modifications apportées aux lignes de rupture calculées sont perdues, à l'exception des lignes de rupture modèles (qui peuvent être situées soit à la fin, soit au début du tableau).
Par exemple :
Après le recalcul des expressions :
Lorsque le curseur est inséré dans une cellule d'un tableau rempli avec une datasource, une icône d'avertissement s'affiche sur le côté gauche ainsi qu'une infobulle qui affiche des informations :
Lorsque les formules sont affichées comme références ou lorsque vous enregistrez le document, seule la première ligne est affichée/enregistrée comme modèle (si les formules ne sont pas gelées).
Lorsque les formules sont gelées, le tableau devient un tableau standard et la datasource du tableau est réinitialisée.
Note : L'action standard freezeExpressions ne recalcule pas les formules.