tableau, types de données en syntaxe Crystal). SAP pour Enterprise
14.8.9 tableau, types de données en syntaxe Crystal)
Dans Crystal Reports, les tableaux sont des listes ordonnées de valeurs qui sont toutes du même type. Ces valeurs portent le nom d'éléments de tableau. Les éléments d'un tableau peuvent être de type simple ou de type plage. Les tableaux peuvent être créés à l'aide de crochets ([ ]).
Exemples
Tableau de trois valeurs numériques. Le premier élément est 10, le deuxième est 5 et le troisième est 20.
[10, 5, 20]
Tableau de sept valeurs de type chaîne :
["Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat"]
Tableau de deux valeurs de plage de type date/heure :
[#Jan 1, 1998# To #Jan 31, 1998#,
#Feb 1, 1999# To #Feb 28, 1999#]
Vous pouvez extraire des éléments individuels d'un tableau en utilisant des crochets contenant l'indice de l'élément souhaité. Cette opération est désignée par le terme "indexation de tableau".
[10, 5, 20] [2] //Equal to 5
Les plages numériques peuvent également être utilisées pour indicer les tableaux. Le résultat est un autre tableau. Par exemple :
[10, 5, 20] [2 To 3] //Equal to [5, 20]
Les tableaux sont très utiles lorsqu'ils sont utilisés avec des variables. Ils seront traités plus en détail dans la
[page 336]. Les variables vous permettent de modifier les éléments individuels d'un tableau et de le redimensionner pour qu'il comprenne plus d'éléments. Vous pouvez, par exemple, cumuler des valeurs d'objets de résultats dans une variable tableau globale dans une formule de niveau détails, puis utiliser une formule dans un pied de page de groupe pour effectuer un calcul basé sur ces valeurs. Ceci vous permet de réaliser une vaste gamme d'opérations de synthèse personnalisées.
14.8.10 Variables (syntaxe Crystal)
Cette section décrit les composants clés des variables et vous montre comment créer des variables et leur affecter des valeurs.
336
©
2014 SAP SE ou société affiliée SAP. Tous droits réservés.
Guide de l'utilisateur de SAP Crystal Reports pour Enterprise
Formules
14.8.10.1 Présentation générale des variables
Une variable représente un élément de données spécifique, ou une valeur, et joue le rôle d'espace réservé pour cette valeur. Lorsqu'une variable est rencontrée dans une formule, la valeur de cette variable est recherchée puis utilisée dans la formule. Contrairement à une valeur constante qui est fixe et invariable, différentes valeurs peuvent être affectées de manière répétée à une variable. Vous affectez une valeur à une variable, qui la conserve jusqu'à ce vous lui en affectiez une nouvelle. En raison de cette souplesse, vous devez déclarer les variables avant de les utiliser pour que Crystal Reports en ait connaissance et comprenne de quelle manière vous entendez les utiliser.
Exemple
Si vous vouliez créer un rapport sur les clients par code de zone régional, vous pourriez créer une variable qui extrait cette information de numéro de fax du client. L'exemple ci-dessous utilise une variable nommée codeZone :
Local StringVar areaCode; areaCode := {Customer.Fax} [1 To 3];
La première ligne de l'exemple est la déclaration de variable ; un nom et un type sont affectés à la variable. L'objet du résultat {Client.Fax} est un objet de type chaîne et le segment [1 To 3] extrait les trois premiers caractères de sa valeur actuelle. Cette valeur est ensuite affectée à la variable "codeZone".
14.8.10.2 Déclarations de variables (syntaxe Crystal)
Avant d'utiliser une variable dans une formule, vous devez la déclarer.
Une variable peut contenir des valeurs d'un type donné. Les types autorisés sont les sept types simples (nombre, devise, chaîne, booléen, date, heure et date/heure), les six types de plages (plage de nombres, plage de devises, plage de chaînes, plage de dates, plage d'heures et plage de valeurs de type date/heure) et les variables contenant des tableaux des types déjà mentionnés. En tout, une variable peut donc avoir 26 types différents.
Lorsque vous déclarez une variable, vous spécifiez également son nom. Une variable ne peut pas avoir le même nom qu'une fonction, un opérateur ou un autre mot clé valable de la syntaxe Crystal. Par exemple, votre variable ne peut pas être nommée Sin, Mod ou If, car Sin est une fonction intégrée, Mod est un opérateur intégré et If est un mot clé intégré. Lorsque vous saisissez des formules dans la page Formules, les noms des fonctions intégrées, des opérateurs et autres mots clés sont mis en surbrillance à l'aide de couleurs différentes. Il est ainsi facile de repérer l'existence de conflits avec les noms de variables.
Une fois déclarée, une variable peut être utilisée dans la formule. Par exemple, vous pouvez souhaiter lui affecter une valeur initiale :
Local NumberVar x; //Declare x to be a Number variable x := 10; //Assign the value of 10 to x
Guide de l'utilisateur de SAP Crystal Reports pour Enterprise
Formules
©
2014 SAP SE ou société affiliée SAP. Tous droits réservés.
337
Remarque
Le mot clé pour déclarer la variable numérique se termine par Var. Ceci s'applique à tous les types de variable de la syntaxe Crystal.
Les valeurs contenues dans une variable ne peuvent être que d'un seul type. Si, par exemple, une variable contient une valeur numérique, vous ne pouvez pas l'utiliser plus tard pour contenir une chaîne.
Exemple
Local StringVar y; y := "hello";
//OK- the Length function expects a String argument
Length (y);
//Error- y can only hold String values y := #Jan 5, 1993#;
//Error- y can only hold String values y := ["a", "bb", "ccc"];
//Error- the Sin function expects a Number argument
Sin (y);
Vous pouvez déclarer une variable et lui affecter une valeur dans une seule expression. Par exemple :
Local NumberVar x := 10 + 20;
Local StringVar y := "Hello" + " " + "World";
Local DateVar z := CDate (#Sept 20, 1999#);
Local NumberVar Range gradeA := 90 To 100;
C'est une bonne méthode car elle est plus efficace et permet d'éviter de faire l'erreur courante qui consiste à initialiser les variables de façon incorrecte.
Les exemples ci-dessous concernent la déclaration et l'initialisation de variables de plage :
Local NumberVar Range gradeA;
Local DateVar Range quarter; gradeA := 90 To 100; quarter := CDate (1999, 10, 1) To CDate (1999, 12, 31);
14.8.10.3 Etendue de variables (syntaxe Crystal)
Les étendues de variables servent à définir dans quelle mesure les variables d'une formule sont utilisables par les autres formules. Il existe trois niveaux d'étendue dans Crystal Reports : l'étendue locale, l'étendue globale et l'étendue partagée. Chaque variable a une étendue et celle-ci est spécifiée lors de la déclaration de la variable.
338
©
2014 SAP SE ou société affiliée SAP. Tous droits réservés.
Guide de l'utilisateur de SAP Crystal Reports pour Enterprise
Formules
14.8.10.3.1 Variables locales (syntaxe Crystal)
Les variables à étendue locale, également appelées variables locales, sont déclarées à l'aide du mot clé Local suivi du nom du type (doté du suffixe Var) et suivi du nom de la variable comme dans les exemples ci-dessus.
Les variables locales sont limitées à une seule formule et à une seule évaluation de cette formule. Ceci signifie que vous ne pouvez pas accéder à la valeur d'une variable locale d'une formule à partir d'une autre formule.
Exemple
//Formula A
Local NumberVar x; x := 10;
//Formula B
EvaluateAfter ({@Formula A})
Local NumberVar x; x := x + 1;
L'appel de fonction EvaluateAfter ({@Formule A}) garantit que la formule B sera évaluée après la formule A. La formule A renvoie la valeur 10 et la formule B renvoie la valeur 1. La formule B ne peut pas accéder à la variable x de la formule A et ne peut donc pas utiliser la valeur 10 et lui ajouter 1. Au lieu de cela, elle utilise la valeur par défaut, qui est égale à 0, de la variable locale x non initialisée trouvée dans la formule B, et lui ajoute 1, ce qui donne 1.
Vous pouvez également créer des variables locales ayant le même nom mais des types différents dans différentes formules. Par exemple, les déclarations de type dans les formules A et B n'entrent pas en conflit avec :
//Formula C
Local StringVar x := "hello";
Les variables locales sont les plus efficaces des trois étendues. En outre, elles n'interfèrent pas les unes avec les autres dans différentes formules. C'est pourquoi il est préférable que les variables soient déclarées comme locales chaque fois que possible.
14.8.10.3.2 Variables globales (syntaxe Crystal)
Les variables globales utilisent le même bloc de mémoire pour stocker une valeur sur l'ensemble du rapport principal. Cette valeur est alors utilisable par toutes les formules qui déclarent la variable, à l'exception de celles situées dans les sous-rapports. Vous déclarez une variable globale comme dans l'exemple suivant :
Global StringVar y;
Vous pouvez également omettre le mot clé Global car, par défaut, la variable créée est globale :
StringVar y; //Same as: Global StringVar y;
Cependant, même si les variables globales sont faciles à déclarer, il est préférable de ne les utiliser que lorsque les variables locales ne sont pas suffisantes.
Guide de l'utilisateur de SAP Crystal Reports pour Enterprise
Formules
©
2014 SAP SE ou société affiliée SAP. Tous droits réservés.
339
Etant donné que les variables globales partagent leurs valeurs sur l'ensemble du rapport principal, vous ne pouvez pas déclarer une variable globale dans une formule avec un type puis déclarer une variable globale portant le même nom dans une formule différente avec un type différent.
Exemple
//Formula A
Global DateVar z; z := CDate (1999, 9, 18)
//Formula B
NumberVar z; z := 20
Dans ce cas, si vous saisissez et enregistrez la formule A en premier, Crystal Reports renvoie un message d'erreur lorsque vous vérifiez ou tentez d'enregistrer la formule B. Cela est dû au fait que la déclaration de la variable globale z en tant que nombre entre en conflit avec sa précédente déclaration dans la formule A en tant que date.
Utilisation des variables globales
Les variables globales sont souvent utilisées pour effectuer des calculs complexes lorsque le résultat d'une formule dépend du regroupement et de la structure de page du rapport imprimé. Ceci est obtenu en créant plusieurs formules, en les plaçant dans différentes sections du rapport et en faisant interagir les différentes formules par le biais de variables globales.
Exemple
//Formula C
Global NumberVar x; x := 10;
//Formula D
//Call the function WhileReadingRecords
WhileReadingRecords;
Global NumberVar x; x := x + 1
Si la formule C est placée dans l'en-tête du rapport et que la formule D est placée dans une section Détails, la formule C sera évaluée avant la formule D. La formule C sera évaluée une fois puis la formule D sera évaluée pour chaque enregistrement apparaissant dans la section Détails. La formule C renvoie 10. Pour le premier enregistrement de détail, la formule D renvoie 11. Ceci est dû au fait que la valeur 10 de x est conservée depuis le moment où elle a été définie par la formule C. La formule D ajoute alors 1 à cette valeur, en donnant à x la valeur 11, puis renvoie 11. Pour le deuxième enregistrement de détail, la formule D renvoie 12, en ajoutant 1 à la valeur précédente de x qui était 11. Ce processus se poursuit sur les autres enregistrements de détail restants.
L'appel de la fonction WhileReadingRecords demande à Crystal Reports de réévaluer la formule D au fur et à mesure qu'elle est lue dans chaque enregistrement du rapport. Sinon, étant donné que la formule ne contient aucun objet de résultat, le programme l'évalue une fois pour toutes avant de lire les enregistrements de la base de
340
©
2014 SAP SE ou société affiliée SAP. Tous droits réservés.
Guide de l'utilisateur de SAP Crystal Reports pour Enterprise
Formules
données. La formule renverra alors toujours la valeur 11 et non pas 11, 12, 13, ... au fur et à mesure du traitement des enregistrements successifs.
Si l'expression x := x + 1 est remplacée par x := x + {Détails des commandes.Quantité}, vous créez l'effet d'un total cumulé fondé sur {Détails des commandes.Quantité}, bien qu'il commence à 10 et non à 0 à cause de la formule
C. Dans ce cas, vous pouvez omettre l'appel à la fonction WhileReadingRecords, car, étant donné que la formule contient un objet de résultat, l'appel se fera automatiquement.
14.8.10.3.3 Variables partagées (syntaxe Crystal)
Les variables partagées utilisent le même bloc de mémoire pour stocker la valeur d'une variable sur l'ensemble du rapport principal et de ses sous-rapports. Ainsi, les variables partagées sont encore plus générales que les variables globales. Pour utiliser une variable partagée, déclarez-la dans une formule du rapport principal comme dans l'exemple suivant :
Shared NumberVar x := 1000; et déclarez-la dans une formule du sous-rapport comme dans l'exemple suivant :
Shared NumberVar x;
Pour qu'elles puissent être utilisées, il faut déclarer les variables partagées et leur affecter une valeur avant qu'elles puissent être communiquées entre le rapport principal et le sous-rapport.
14.8.10.4 Déclaration des variables de tableau (syntaxe
Crystal)
Vous pouvez déclarer les variables de tableau en faisant suivre le nom du type du mot clé tableau.
Exemple
//Declare x to be a Global variable of
//Number Array type
Global NumberVar Array x := [10 , 20, 30];
//cost is a Global variable of Currency Array type
//It is automatically Global since the scope specifier
//(one of Local, Global or Shared) is omitted.
CurrencyVar Array cost := [$19.95, $79.50, $110.00,
$44.79, $223.99];
//payDays is a Global variable of Date Array type
Global DateVar Array payDays := [CDate(1999, 5, 15),
CDate(1999, 5, 31)];
//y is a Shared variable of String Range Array type
Shared StringVar Range Array y := ["A" To "C",
"H" To "J"];
//days is a Local variable of String Array type
Local StringVar Array days; days := ["Sun", "Mon", "Tue", "Wed", "Thu",
Guide de l'utilisateur de SAP Crystal Reports pour Enterprise
Formules
©
2014 SAP SE ou société affiliée SAP. Tous droits réservés.
341
"Fri", "Sat"];
14.8.10.4.1 Utilisation des variables de tableau (syntaxe
Crystal)
Vous pouvez affecter des valeurs aux éléments d'un tableau et également les utiliser pour d'autres calculs.
Exemple
StringVar Array x := ["hello", "bye", "again"]; x [2] := "once"; //Now x is ["hello", "once", "again"]
//The expression below would cause an error if not
//commented out since the array has size 3
//x [4] := "zap";
//The formula returns the String "HELLO"
UpperCase (x [1])
Les mots clés Redim et Redim Preserve peuvent être utilisés pour redimensionner un tableau si vous voulez lui ajouter des données supplémentaires. Redim efface d'abord le contenu précédent du tableau avant de le redimensionner tandis que Redim Preserve conserve ce contenu.
Local NumberVar Array x;
Redim x [2]; //Now x is [0, 0] x [2] := 20; //Now x is [0, 20]
Redim x [3]; //Now x is [0, 0, 0] x [3] := 30; //Now x is [0, 0, 30]
Redim Preserve x [4]; //Now x is [0, 0, 30, 0]
"finished"
Local StringVar Array a;
Redim a [2];
//Assign a value to the first element of the array a a[1] := "good"; a[2] := "bye";
//The & operator can be used to concatenate strings a[1] & a[2] //The formula returns the String "goodbye"
14.8.10.4.2 Utilisation des tableaux avec des boucles For
Les tableaux sont couramment utilisés avec des boucles For. L'exemple suivant crée puis utilise le tableau [10, 20,
30, ..., 100] à l'aide d'une boucle For. Pour en savoir plus, voir
Local NumberVar Array b;
Redim b[10];
Local NumberVar i;
For i := 1 To 10 Do
(
b[i] := 10 * i
);
342
©
2014 SAP SE ou société affiliée SAP. Tous droits réservés.
Guide de l'utilisateur de SAP Crystal Reports pour Enterprise
Formules
b [2] //The formula returns the Number 20
14.8.10.5 Valeurs par défaut pour les types simples (syntaxe
Crystal)
Une variable non initialisée contient la valeur par défaut de son type. En général, ce n'est pas une bonne habitude de programmation que de s'appuyer sur les valeurs par défaut des types. Par exemple, initialisez toutes les variables locales de votre formule, initialisez toutes les variables globales d'une formule placée dans l'en-tête du rapport et initialisez toutes les variables partagées d'une formule placée dans l'en-tête du rapport principal.
Lorsqu'un tableau est redimensionné à l'aide du mot clé Redim, les entrées sont remplies avec la valeur par défaut du type. Il est utile de connaître les valeurs par défaut lorsqu'on utilise les expressions If et Select.
14.8.10.5.1 Valeurs par défaut
Nombre
0
Devise
$0
Chaîne
"" //The empty string
Date
Date (0, 0, 0) //The null Date value
Guide de l'utilisateur de SAP Crystal Reports pour Enterprise
Formules
©
2014 SAP SE ou société affiliée SAP. Tous droits réservés.
343
Heure
Valeur d'heure nulle. Valeur contenue dans une variable Heure non initialisée.
DateHeure
Valeur de type date/heure nulle. Valeur contenue dans une variable DateHeure non initialisée.
Remarque
Il n'est pas recommandé que vos formules reposent sur les valeurs de variables de plage ou de tableau non initialisées.
14.8.10.6 Conversions de type automatiques (syntaxe Crystal)
Généralement, dans Crystal Reports, les valeurs d'un type ne peuvent pas être utilisées là où les valeurs d'un autre type sont attendues sans fournir explicitement une fonction de conversion de type. Par exemple :
Local StringVar postalCode;
//Error- assigning a Number value to a String postalCode := 10025;
//OK - use the type conversion function CStr
//to create "10025" postalCode := CStr (10025, 0);
Cependant, quelques conversions sont effectuées automatiquement :
● nombre en devise ;
● date en date/heure ;
● type simple en valeur de plage du même type simple sous-jacent.
Par exemple, les affectations suivantes sont correctes :
Local CurrencyVar cost;
//Same as: cost := $10 cost := 10;
Local DateTimeVar orderDate;
//Same as: orderDate := CDateTime (1999, 9, 23, 0, 0, 0) orderDate := CDate (1999, 9, 23);
Local NumberVar Range aRange;
//Same as: aRange := 20 To 20 aRange := 20;
Local NumberVar Range Array aRangeArray;
//Same as : aRangeArray := [10 To 10, 20 To 25, 2 To 2] aRangeArray := [10, 20 To 25, 2];
344
©
2014 SAP SE ou société affiliée SAP. Tous droits réservés.
Guide de l'utilisateur de SAP Crystal Reports pour Enterprise
Formules

Enlace público actualizado
El enlace público a tu chat ha sido actualizado.