Les scripts basiques se font sur les champs d'une simple fiche, mais il est aussi possible de faire des opérations sur d'autres fiches. Les scripts utilisant des informatiosn se trouvant sur plus d'une fiche sont appelés script inter-fiches. Il y a deux différences importantes avec les scripts basiques. La première est l'utilisation des deux opérations spécifiques sort et ffr La simple utilisation d'une de ces fonction change le type de script.
Operator & Args | Titre | Explications |
---|---|---|
sort [fld] [up?] | Tri | 2 arguments qui doivent être des entiers. Le premier indique l'id du champ sur lequel doit se faire le tri. Le second doit être 0 si le tri doit être descendant (du plus grand au plus petit). |
ffr [fld] [off] [d] | Champ d'une fiche | 2 ou 3 arguments dont les 2 premiers doivent être des nombres. Le premier est l'id du champ à retrouver. Le second est le déplacement à faire pour retrouver la fiche à utiliser. La localisation de la fiche cible est relative à la fiche courante. Le 3ième est la valeur par défaut si la fiche cible n'existe pas. |
La seconde différence est qu'un script inter-fiches est divisé en deux parties distinctes. La première est une simple clause de tri. La seconde contient une clause ou plus qui vont être exécutées pour chaque fiche de la base.
Exemple de script inter-fiches:
(sort 1 1)(+ %0 (ffr 1 1))
Ce script trie les fiches suivant le champ 1 (deuxième champ) dans un ordre ascendant des valeurs. Ensuite pour chaque fiche, il ajoute à la valeur du champ 0 (premier champ) la valeur du champ 1 de la fiche suivante.
En général, vous ne pouvez pas faire référence à un champ «calculé» d'une autre fiche pour ne pas avoir de rebouclage entre scripts. Quand vous utilisez la fonction ffr avec une valeur par défaut elle peut référencer tous les champs d'une fiche. Cela permet les opérations comme l'accumulation de valeurs dans des fiches.
Avec une base définissant des fiches ayant pour types de champs: [texte] [entier] [calculé] avec le nom de la personne [texte] qui emprunte un montant [entier] et la somme des emprunts [calculé]. Le calcul de la somme empruntée sera:
(sort 0 1) (+ (? (seq (ffr 0 -1 na) %0) (ffr 2 -1 0) 0) %1)
Si l'on décortique le script, on obtient:
La clause (sort 0 1) trie les fiches sur le nom de la personne dans l'ordre croissant (de A vers Z). |
La clause (ffr 0 -1 na) retrouve le nom de la personne de la fiche précédente et retourne «na» s'il n'y en a pas. |
La clause (seq (ffr 0 -1 na) %0) retourne VRAI si le nom de la personne de la fiche précédente est le même que la fiche courante. |
La clause (ffr 2 -1 0) retrouve le montant emprunté dans la fiche précédente ou retourne 0 si elle n'existe pas. |
La clause (? (seq (ffr 0 -1 na) %0) (ffr 2 -1 0) 0) retourne le montant emprunté dans la fiche précédente si celle-ci correspond à la même personne que celle de la fiche courante ou retourne 0. |
La clause (+ (? .....) %1) ajoute à la valeur retournée par la clause précédente, le montant emprunté dans la fiche courante. |
Le contenu de cette base pourrait être:
Nom | montant | montant total |
---|---|---|
Scott | 4 | 4 |
Scott | 2 | 6 |
Marc | 3 | 3 |
Marc | 4 | 7 |
Marc | 5 | 12 |