Exemple de tableur dynamique hiérarchique
Nous allons monter un exemple de tableur dynamique hiérarchique à partir d’un tableur dynamique classique.
Soit le tableur dynamique suivant :
Nous allons paramétrer une structure hiérarchique afin d’obtenir le résultat suivant :
Définition de la hiérarchie défaut du tableur dynamique
A partir de l’application « Hiérarchies Défaut Tableurs Dynamiques », on définit la hiérarchie « TabDynHie ».
A partir de l’action « Structure Hiérarchie » sur la liste, on définit la structure de cette hiérarchie.
Les nœuds de dernier niveau de la hiérarchie ont pour référence :
Etage 1 (Batiment A) : 0000000004
Etage 2 (Batiment A) : 0000000005
Rez De Chaussée (Batiment A) : 0000000006
Etage 1 (Batiment B) : 0000000007
Rez De Chaussée (Batiment B) : 0000000008
Ces références nous serviront par la suite pour faire le lien entre les enregistrements du tableur et les nœuds de dernier niveau de la hiérarchie.
Définition dans l’application des tableurs dynamiques
Définition de la structure dans la requête d’initialisation du tableur.
Il est possible de remplir la liste WfArbSor avec les 8 éléments hiérarchiques que l’on souhaite intégrer en respectant bien la relation père-fils entre les différents enregistrements.
Pour notre exemple, nous utiliserons la hiérarchie définie précédemment et la fonction « HIE-INI-ARB »
Une fois les éléments créés, il faut lier les enregistrements existants aux différents enregistrements de la hiérarchie. Pour cela, on définit le champ LIS_Noeud sur la liste personnelle. (Voir définition d’un tableur dynamique).
Exemple pour les 4 premiers enregistrements définis dans la liste ElementBatiment. :
Requête REB de mise à jour des liens hiérarchiques.
Une fois la hiérarchie définie, il faut alimenter les différentes cellules du tableur dynamique pour les liens hiérarchiques. Cette opération s’effectue à partir de la requête de mise à jour des liens hiérarchiques.
On récupère dans un premier temps la référence du nœud courant ainsi que le libellé défini lors de l’initialisation de la hiérarchie.
On affecte alors à la cellule de la colonne « Désignation » de notre nœud, la valeur récupérée à partir du libellé :
Une fois la désignation renseignée, on va alimenter la colonne prix.
Dans un premier temps, on va sauvegarder dans la variable VLO.AncienPrix, le prix de base qui nous sera utile pour la suite. Pour cela on effectue un premier parcours sur les enregistrements liés (PARCOURS TABLEUR POUR HIERARCHIE DES LIGNES LIEES …) et on calcule la somme de l’opération Prix Unitaire * Quantité.
Pour un nœud de dernier niveau :
Pour calculer le nouveau prix, on réalise un second parcours des lignes liées et on additionne les prix.
Une fois le nouveau prix calculé, on l’affecte à notre ligne via la fonction :HIE-INI-CTX.
Si on n’est pas sur un nœud de dernier niveau, on parcourt tous les enregistrements du tableur qui font partis de la descendance du nœud pour calculer le prix de base.
Pour calculer le nouveau prix, on effectue un parcours sur les fils direct du nœud (qui sont eux-mêmes des nœuds) et on les additionne.
A partir des variables locales VLO.AncienPrix (Pris de base) et VLO.NouveauPrix il est facile de calculer la valeur de la remise pour un nœud. On en profite pour modifier le libellé en ajoutant –remise- à côté du libellé existant. (Pour affichage sur l’arbre).
Requête RCT de contrôle local
Dans notre tableur dynamique classique, on avait déjà une requête RCT qui à partir de la saisie d’une remise, calculait le nouveau prix d’un élément :
Avec RCTTABDYNHIEP :
On utilise également cette même requête pour le contrôle local sur un enregistrement hiérarchique.
Pour le contrôle local sur une ligne classique du tableur, on utilise la SCR SCR.RCT_TypLig = CLO."T".
Pour les lignes hiérarchiques, on utilise la SCR SCR.RCT_TypLig = CLO."H".
Lorsque l’on saisit une remise sur un élément hiérarchique, on remet à jour non seulement le prix de l’enregistrement hiérarchique, mais on reporte la remise sur tous les fils du tableur.
Remarque : On ne mettra à jour que les enregistrements classiques du tableur. La mise à jour de ces enregistrements déclenchera automatiquement la mise à jour de la hiérarchie via la requête REB de mise à jouir des liens hiérarchiques.