Voici les principaux points de la manipulation en WLangage des champs Table remplis par programmation.
Le WLangage met à votre disposition de nombreuses fonctions permettant de gérer par programmation ce type de champ. N'hésitez pas à consulter la documentation de ces fonctions.
Initialisation d'un champ Table par programmation
La création d'une ligne d'un champ Table n'est pas automatique. Elle doit être demandée explicitement par un appel aux fonctions :
Remarque : si l'option "Saisie en cascade (Ajout)" n'est pas sélectionnée :
- A sa création, un champ Table ne comporte aucune ligne :
TABLE_MaTable.Occurrence = 0.
Dans ce cas, aucune saisie n'est possible et la propriété Vide est à Vrai. - Pour insérer automatiquement une ligne si le champ Table est vide, il faut utiliser les lignes de code suivantes dans l'événement "Initialisation" du champ Table :
SI TABLE_MaTable.Vide = Vrai ALORS TABLE_MaTable.Ajoute()
Ajout de lignes dans un champ Table par programmation
L'ajout de lignes dans un champ Table par programmation est réalisé :
Gestion des colonnes calculées
La formule de calcul d'une colonne calculée doit être décrite dans l'événement "Affichage d'une ligne" du champ Table. Par exemple :
// COL_PHT : colonne calculée
// COL_PUHT et COL_QTE : colonnes remplies par programmation
COL_PHT = COL_PUHT * COL_QTE
Modification d'une ligne ou d'une colonne
Le contenu des lignes et des colonnes d'un champ Table peut être modifié :
- par l'utilisateur, en saisissant directement dans les colonnes. Les modifications sont mémorisées automatiquement dans le champ Table, sans programmation complémentaire. La propriété Modifié est à Vrai.
- par programmation :
- avec la fonction <Table>.Modifie pour modifier le contenu de la ligne en cours ou d'une ligne donnée.
Par exemple :
TABLE_CLIENT.Modifie("PY" + TAB + "Jean" + TAB + "Nîmes")
Remarque : il est également possible d'utiliser directement le nom du champ Table :
// Modifier la ligne en cours
TABLE_CLIENT = "DURAND" + TAB +"Sophie" + TAB + "Nîmes"
// Modifier la ligne 3
TABLE_JOUR.Modifie("Mercredi" + TAB + "Vaqué", 3)
- directement en donnant le nom de la colonne (comme pour un champ de saisie) pour modifier le contenu de la colonne. Pour modifier une colonne d'une ligne précise, il faut indiquer le numéro de la ligne (indice).
Par exemple :
COL_NOM[Indice] = SAI_NomClient
Pour modifier une colonne de la ligne en cours, il n'est pas nécessaire de préciser l'indice. Par exemple :
La propriété Modifié est à Faux (elle n'est mise à Vrai que par une saisie dans le champ Table).
// Traitement d'entrée colonne COL_QTE
// COL_QTE ne peut pas être saisi,
// si COL_PRODUIT n'est pas saisi
SI SansEspace(COL_PRODUIT) = "" ALORS
Erreur("La colonne Produit doit être saisie en premier")
DonneFocusEtRetourUtilisateur(COL_PRODUIT)
FIN
Opérations sur les lignes et les cellules
Suppression d'une ligne
La suppression d'une ligne doit être demandée explicitement à l'aide de la fonction
<Table>.Supprime. La syntaxe utilisée est :
<Champ Table>.Supprime([<Indice>])
Si l'indice est précisé, la fonction
<Table>.Supprime supprime la ligne correspondant à l'indice. Sinon, elle supprime la ligne en cours. Par exemple :
La sélection d'une ligne s'effectue avec la fonction
<Table>.SelectPlus.
La syntaxe utilisée est :
<Champ Table>.SelectPlus([<Indice>])
Récupération d'une ligne ou d'une cellule
Le contenu d'un champ Table rempli par programmation peut être récupéré :
- soit la ligne entière.
- soit cellule par cellule.
Valeur d'une cellule de la ligne en cours
Pour récupérer la valeur d'une colonne (ou cellule) de la ligne en cours, la syntaxe est la même que pour un champ de saisie simple.
Exemple :
// COL_QTE est une colonne du champ Table
SI COL_QTE < 10 ALORS
Info("Qté insuffisante")
FIN
Valeur d'une cellule pour une ligne spécifique
Pour récupérer la valeur d'une colonne qui n'est pas sur la ligne en cours, il faut passer l'indice de la ligne.
<Valeur> = <Nom Colonne>[<Indice>]
Par exemple :
// Totaliser le Prix PHT pour toutes les lignes de commande
PrixTotal = 0
POUR Indice = 1 _À_ TABLE_COMMANDE.Occurrence
PrixTotal = PrixTotal + COL_PHT[Indice]
FIN
Contenu de la ligne en cours
Pour récupérer le contenu de la ligne en cours, la syntaxe est la suivante :
Contenu d'une ligne spécifique
Pour récupérer le contenu de la ligne d'indice <Indice>, la syntaxe est la suivante :
<Valeur> = <Champ Table>[<Indice>]
Remarque : L'indice de la ligne en cours peut être connu par la fonction
<Table>.Select.
Par exemple :
// Récupérer la ligne 10 dans le champ Table TABLE_CLIENT
LigneEnCours = TABLE_CLIENT[10]
// Nom du client sélectionné
NomClient = COL_NOM[TABLE_CLIENT.Select()]
// Récupérer la ligne en cours dans le champ Table TABLE_CLIENT
LigneEnCours = TABLE_CLIENT