La gestion et les limites multi-dimensions des tableaux de type « array » dans Microsoft Dynamics NAV

blog image

La gestion et les limites multi-dimensions des tableaux de type « array » dans Microsoft Dynamics NAV

Dans Nav, il est possible de gérer différents types de variables et de les « indicer ». Pour cela, on utilise des tableaux (« array » dans les langages de programmations).

Ces tableaux peuvent être de plusieurs dimensions et au maximum de 10 dimensions (en fonction de chaque élément maximum indicé). De plus, dans Nav, en combinant plusieurs dimensions, nous ne pouvons adresser que 1000000 éléments au total. Nous verrons ensuite comment utiliser cette limite dans la déclaration des tableaux.

Pour déclarer un tableau dans Nav, il suffit d’aller dans le « C/AL Global » ou « C/AL Local », dans l’onglet « Variables », de déclarer sa variable avec le type souhaité (cela peut même être un tableau de Record !!) et d’aller ensuite dans les propriétés de la variable.

Dans la propriété « Dimensions », vous pouvez définir ainsi les dimensions de votre tableau.

Voici la formule pour connaître les limites fixées par Nav :

– Nous savons qu’au maximum le nombre de dimensions est limitée à 10 mais ce nombre peut être restreint en fonction de chaque indice maximum pour chaque dimension.

Voici un exemple :

– Si je veux le maximum de dimensions dans Nav pour mon tableau, chaque dimension ne pourra pas dépasser 3 car Nav calcule ainsi :

3*3*3*3*3*3*3*3*3*3 = 59049 est <= 1000000 Maintenant si je veux encore un tableau à 10 dimensions avec une valeur de 4 pour chaque dimensions, nous avons : 4*4*4*4*4*4*4*4*4*4 = 1048576 est > 1000000, donc nous aurons un message d’erreur dans cette propriété.

Il est rare qu’on utilise un tableau à 10 dimensions mais cela permet de connaître les limites du produit sur ce point.

L’inconvénient aussi c’est que toutes les dimensions doivent être du même type de données pour la même variable. Nous ne pourrons pas avoir comme dans certains langages une première dimension avec un type record et une deuxième dimension avec un type integer. Dommage !!!

Partant de ce principe, cela va être très utile aussi pour les tableaux à 1 ou 2 dimensions que nous pouvons utiliser plus régulièrement dans Nav pour les rapports ou des calculs matriciels qui sont beaucoup plus rapides que des calculs spécifiques avec des données de l’ERP.

Donc, pour un tableau à 1 dimension, mon indice maximum sera de 1000000. Si j’ai un tableau de 2 dimensions je pourrais avoir une première dimension à 10000 et une deuxième à 100 mais pas 101.

Nous aurons 10000;100 = 10000 * 100 = 1000000, ce qui est la limite permise.

Utilisation possibles de tableaux à plusieurs dimensions dans le code

Pour utiliser ensuite un tableau à N dimensions, il suffit de le séparer par une virgule dans le code. Si on reprend l’exemple d’une variable indicée dans l’écran 1 (MyarrayItem, tableau à 2 dimensions avec 10000;100), le code sera ainsi fait pour un tableau de record :

Myarrayitem[1,4]. »No. » := ‘2000’;

Dans cet exemple, j’affecte un tableau de record de ma première dimension sur le premier élément et sur le quatrième élément de ma deuxième dimension. Dans ce càs là, cela peut permettre d’historiser des valeurs en mémoire sans relire par des records les enregistrements.

Un autre exemple d’utilisation de tableaux peut être dans un rapport pour gérer automatiquement l’affichage d’éléments dans une section en fonction du nombre maximum d’éléments à afficher par page sur le rapport, etc… Dans ce càs-ci, une seule dimension est utilisée.

itemcode[1] := itemcode[(maxitembypage * (Number – 1)) + 1];

itemcode[2] := itemcode[(maxitembypage * (Number – 1)) + 2];

itemcode[3] := itemcode[(maxitembypage * (Number – 1)) + 3];

itemcode[4] := itemcode[(maxitembypage * (Number – 1)) + 4];

itemcode[5] := itemcode[(maxitembypage * (Number – 1)) + 5];

itemcode[…] := itemcode[(maxitembypage * (Number – 1)) + …];

 

 

Dominique
Vice président Exécutif, Associé
CentreDynamics Inc.

– Consultant Expert Sénior et développeur Microsoft Dynamics NAV / Dynamics 365 Business Central / Dynamics 365 CRM
– Développement de logiciels mobiles pour iOS et Android autour de Microsoft Dynamics et les suites Zoho CRM
– Analyse fonctionnelle, Analyse d’affaire, Gestion de projet, Développement, Formation, Interface, Migration, etc.
– Conseiller stratégique et technique pour les directions informatiques et financières

FR
EN FR