Présentation

Dans un certain nombre d'écrans de paramétrage, on peut être amené à entrer des formules de calcul, encore appelées expressions adonix (le moteur d'exécution des progiciels en technologie X3 s'appelle en effet adonix). Ces expressions sont exprimées sous forme algébrique, et font partie d'un langage général. On trouvera ci-dessous une description générale des fonctions utilisables dans les expressions adonix.

De nombreuses aides existent lors de la saisie de formule, à la fois pour connaître les fonctions et les variables utilisables , mais aussi pour expliciter la signification de la formule. Ces aides sont accessibles par le biais de l'éditeur de formule.

Il est possible de tester une expression (dans laquelle ne figurent que des constantes et des variables accessibles dans le contexte) grâce à la calculette.

Type d'une expression ADONIX

Une expression adonix est de type alphanumérique, numérique, ou de type date. Selon l'endroit où est réalisé ce paramétrage, on peut avoir besoin de l'un ou l'autre de ces types (même si tous les types peuvent être utilisés dans une formule, des fonctions d'un type donné pouvant faire appel à des arguments d'un autre type). Il est à noter que la fonction type permet de tester le type d'une variable.

Comment bâtir une expression ADONIX

Une expression se compose de constantes, d'opérateurs, de variables, et de fonctions.

Constantes

Les constantes peuvent être :

*    de type alphanumérique : exprimées soit entre apostrophes ('), soit entre guillemets ("). Voici deux exemples de chaînes valides :

 

"C'est certain"

 

'une "chaîne" particulière'

*    de type numérique : exprimées avec un point décimal si nécessaire. Voici deux exemples de constantes numériques valides :

 

-2.5

 

123000

*    de type date : exprimées sous la forme [ jour / mois / année ]. Il est à noter que l'année doit obligatoirement être exprimée sur 4 chiffres. Voici deux exemples de constantes dates valides :

 

[15/3/2002]

 

[21/05/1819]

*    de type logique : elle se confond avec les constantes numériques : 1 (et par extension toute valeur non nulle) équivaut à Vrai, 0 équivaut à Faux.

Opérateurs

Les opérateurs valides sont les suivants :

 

+

addition de deux nombres, d'une date et d'un nombre de jours, ou concaténation de deux chaînes de caractères.

 

-

soustraction de deux nombres, d'une date et d'un nombre de jours, ou concaténation de deux chaînes de caractères en insérant un espace entre les deux chaînes.

 

*

multiplication de deux nombres

 

/

division de deux nombres

 

^

élévation à la puissance

 

<

<=

>

>=

<>

opérateurs de comparaison

 

 

and

or

xor

not

opérateurs logiques, qui peuvent aussi s'abrévier

&

|

?

!

On dispose par ailleurs de la possibilité d'utiliser des parenthèses avec un niveau d'imbrication illimité.

Variables

Une variable s'exprime de façon générale sous la forme :

 

[ classe ] nomvar ( indice )

Par exemple, on peut définir les variables suivantes  :

 

[F:BPC]BPCNAME

 

MA_VARIABLE

 

ELEMENT(33)

Le nom de la variable nomvar s'exprime sous la forme de lettres et/ou de chiffres, le premier caractère étant toujours une lettre et le caractère de soulignement étant également admis. La longueur significative d'un nom de variable est limitée à 12 caractères. Tous les noms sont autorisés, hormis certains mots-clés réservés au langage (File, Until, ou Commit font par exemple partie de ces mots-clés). Lorsqu'on tape un nom de variable en lettres minuscules, il est automatiquement transformé en lettre majuscules, sauf s'il s'agit d'un mot-clé.

Certaines variables peuvent être dimensionnées, c'est-à-dire correspondre à des tableaux d'éléments (de 1 à 4 dimensions sont possibles). Dans cas, on donne le ou les indices sous la forme d'expressions numériques, séparées par des virgules s'il y en a plusieurs, entre parenthèses (par exemple, M_TB(1,2,8) est une syntaxe valide).

Une classe correspond à un ensemble de variable liées à un contexte. Les classes les plus courantes sont les suivantes :

*    [V] : classe de variables globales. Une variable de ce type est liée à la session ADONIX. Une fois créée, elle reste accessible tant qu'elle n'a pas été détruite, ou tant que la session ADONIX ne s'arrête pas. Sa déclaration se fait à l'aide d'instructions dédiées (selon son type, on utilise les instructions Integer, Decimal, Char, Date, Libelle, Shortint, Float, Double).

*    [L] : classe de variables locales. Elle est liée à une imbrication de sous-programme (chaque instruction Call crée une nouvelle classe de variables locales qui cache la classe précédente). La déclaration de variables de ce type se fait de même que les variables précédentes, mais en faisant précéder la déclaration du mot-clé Local.

*    [C] : classe de variables de type compteur. Il s'agit de variables communes à tous les postes d'un dossier. Leur création se fait par une fonction de développement dédiée.

*    [F:abv] ou encore [abv] : il s'agit de la classe des variables liées à une table déclarée par l'instruction File. On y retrouve les valeurs de l'enregistrement courant.

*    [M:abv] ou encore [abv] : il s'agit de la classe des variables liées à un écran de saisie déclaré par l'instruction Mask. On y retrouve les valeurs ayant été saisies ou susceptibles d'être affichées (chaque onglet d'un écran est considéré comme un masque).

La classe n'est pas obligatoire, car des règles permettent de connaître la classe par défaut.

Il existe un ensemble de variables dites système, car gérées directement par adonix. Alors que les autres variables sont transformées, lors de la saisie, en majuscules, ces variables, qui font partie des mots-clés du langage, sont affichées en minuscules. Voici quelques variables système utilisables  (liste non exhaustive) :

Nom

Type

Définition

nomap

chaîne

nom du dossier courant

datesyst

date

date système modifiable

adxdir

chaîne

répertoire de base adonix

nolign

numérique

numéro de ligne courante

fstat

numérique

statut de retour après lecture ou écriture table

Fonctions définies dans le moteur

Une fonction s'exprime sous la forme fonction(liste d'arguments). De très nombreuses fonctions existent : traitement de chaînes de caractères, calculs sur dates, fonctions numériques classiques, fonctions de troncature et d'arrondi, fonctions statistiques…

Une liste des principales fonctions utilisables dans ADONIX se trouve ci-dessous. Dans le tableau des fonctions, les conventions d'écriture sont les suivantes :

*    v est un argument de type quelconque (idem pour v1,v2,v3...)

*    c est un argument de type chaîne de caractères

*    x est un argument de type numérique

*    n, p, q... sont des arguments de type entier

*    V est une variable

*    liste est une liste de variables ou d'expressions. Dans ce type de liste, une variable TABLO de type tableau peut être utilisée sous la forme TABLO(I) (on ne prend qu'un indice), TABLO (on parcourt tous les indices), ou TABLO(I..J) (on parcourt les indices I à J inclus).

Syntaxes

Type

Définition

date$

date

date courante

sin(x), cos(x), tan(x)

numérique

fonctions trigonométriques

asin(x),acos(x)...

numérique

fonctions trigonométriques inverses

log(x),exp(x),ln(x)

numérique

fonctions logarithmiques

abs(x), sgn(x)

numérique

valeur absolue, signe

ar2(x), arr(x,y)

numérique

arrondi à 2 décimales, arrondi de x à y près

int(x), mod(x,y)

numérique

partie entière, modulo

len(c)

numérique

longueur d'une chaîne

day(d),month(d),year(d)

numérique

extraction quantième, mois, année d'une date

dayn(d),week(d)

numérique

numéro du jour dans la semaine, no de la semaine

num$(x)

chaîne

convertit un nombre en une chaîne (représentation décimale)

space$(n), chr$(n)

chaîne

chaîne composée de n espaces, de 1 caractère de code interne n

string$(n,c), string$(n,x)

chaîne

chaîne composée de n caractères c

(ou n caractères de code x)

day$(d), month$(d)

chaîne

nom du jour, nom du mois

addmonth(d,n)

date

la date d auquel on a ajouté n mois

eomonth(d)

date

le dernier jour du mois correspondant à la date d

left$(c,n), right$(c,n)

chaîne

partie gauche/droite d'une chaîne sur n caractères

mid$(c,n,p), seg$(c,n,p)

chaîne

extraction de sous-chaînes d'une chaîne donnée

gdat$(n,p,q)

date

construction d'une date (n=jour,p=mois,q=année)

pat(c1,c2)

numérique

vérifie la conformité d'une chaîne c1 à un modèle c2 (1 si conforme, 0 sinon). Le modèle peut inclure les méta-caractères * (nombre quelconque de caractères quelconques), ? (un caractère quelconque), # (un chiffre quelconque).

min(liste), max(liste)

tous types

minimum ou maximum d'un ensemble de variables ou valeurs

sum(liste), prd(liste)

numérique

somme, produit d'un ensemble de variables ou valeurs

avg(liste), var(liste)

numérique

moyenne, variance d'un ensemble de variables ou valeurs

sum(liste)

chaîne

concaténation d'un ensemble de variables ou valeurs chaînes

uni(liste)

numérique

vérification d'unicité sur un ensemble de variables ou valeurs

find(v,liste)

numérique

recherche d'une valeur de type quelconque dans une liste

evalue(c)

tous types

evaluation d'une chaîne de caractère contenant une expression

format$(c,v)

chaîne

formattage d'une valeur avec un format donné c.

toupper(c),tolower(c)

chaîne

transformation en minuscules, en majuscules

sigma(V=v1,v2,v3)

numérique

somme (V variant de v1 à v2), de l'expression v3 fonction de V.

 Fonctions définies par les développeurs

Il existe également des fonctions définies par des développeurs et utilisables dans les expressions calculées, par la syntaxe suivante :

func TRAIT.FONCT(liste d'arguments)

TRAIT étant le nom du traitement, et FONCT le nom de la fonction concernée. Il est à noter que les fonctions utilisables sont documentées dans la table des sous-programmes.