ARBRE DE CONDITIONS
Les arbres de conditions permettent de définir sous forme d’une arborescence, l’enchaînement de différents tests conduisant à l’exécution de matrice de MAJ d² e module ou la mise à jour de VBA, VBP.
Entête Arbre de condition
La définition et la maintenance des arbres de condition s’effectuent à l’aide de la liste paramétrée IGeEntArb.
Les cadres d’utilisation des arbres de conditions sont les suivants :
Des : Gestion Objets Dessins Librairie
Ce type d’arbre doit être affecté en tant que Référence Modèle à dessiner en sortie de VBA.
L’exécution de l’arbre permet de générer plusieurs objets en fonction du conditionnement de ses différentes branches.
La génération des objets dessins doit être effectuée à partir de matrices de type DES devant être paramétrées directement sur les branches de l’arbre.
Log : Arbre de Test
Ces arbres ont pour but de renvoyer la valeur logique d’un test via une formule de recherche sur arbre.
Lst : Liste d'Aide et Contrôle
Ces arbres ont pour but de conditionner sous forme d’une arborescence l’exécution de différentes listes d’aides.
PCIT : Pour chaque IT nomenclature
Ces arbres de conditions ont pour but de pouvoir parcourir les ITs nomenclature d’une ou plusieurs branches de la nomenclature
Le principe est de pouvoir spécifier sur la branche d’un arbre de ce type le pointeur à partir duquel on souhaite parcourir les IT et périmètre de recherche (Locale au pointeur ou avec l’arborescence de ce pointeur).
Pointeur Recherche : l’identification du pointeur de recherche doit être codifié sous forme d’une liste chainée séparateur) : Composé ; Numéro d’Ordre ; Composant ; Clé Pointeur.
Cette liste chainée peut être définie à partir d’une VBA, VBP ou d’une Formule
Type recherche : ce paramètre permet de spécifier la portée de la recherche des ITs :
Locale : le parcours des ITs ne s’effectuera que sur le pointeur de recherche
ArboNom : le parcours s’effectuera sous forme récursive depuis le pointeur de recherche et sur tous les pointeurs fils liés au pointeur de recherche
Pour chacune des ITs parcourues, la condition de sélection / IT sera appliquée afin de pouvoir n’extraire que les ITS désirées.
Les VBP suivantes sont alimentées lors de l’application de la condition de sélection sur IT :
INoRefCseASel : Reference Compose à Sélectionner
INoRefLieASel : N° Lien A sélectionner
INoRefCsaASel : Reference Composant à Sélectionner
INoClePtrASel : Clé Pointeur à Sélectionner
INOdi-t-typeASel : Type Information Technique A Sel
INOdi-t-sstypeASel : Sous-Type IT à Sélectionner
INOdi-t-codeASel : Code Information Technique à Sel
INOdi-t-valeurASel : Valeur Information Technique à Sel
Pour chacune des ITs sélectionnées, le traitement de maj de la branche sera déclenché :
Les VBP suivantes seront alimentées lors de l’exécution du traitement de maj :
INoRefCseSel : Reference Compose Sélectionné
INoRefLieSel : N° Lien sélectionné
INoRefCsaSel : Reference Composant Sélectionné
INoClePtrSel : Clé Pointeur Sélectionné
INOdi-t-typeSel : Type Information Technique Sélectionné
INOdi-t-sstypeSel : Sous-Type IT Sélectionné
INOdi-t-codeSel : Code Information Technique Sélectionné
INOdi-t-valeurSel : Valeur Information Technique Sélectionné
MAJ : Arbre de Mise à Jour
HorsCFG : Arbre de conditions exécuté dans un domaine Hors configuration ( Génération Nomenclature ou Configuration Commerciale ) . Depuis la version PCD 1.3.30 les arbres de conditions peuvent être utilisés pour effectuer un calcul de prix de ligne d’OA pour les articles sur mesure ( Requete APC) . Ces arbres peuvent utiliser des matrices et/ ou des formules Hors Configuration qui exploitent directement les variables entités liées a l’entité en cours. Dans le cas du calcul du prix d’une ligne de commande d’approvisionnement : : SAS-VAS-VAR -SAF - VAF -SDL - VDL - SDE - VDE de l’article lié à la ligne d’appro en cours , SFL - VFL de la ligne d’OA en cours , SFE - VFE de l’OA en cours , SFF - VFF lié au fournisseur de l’OA en cours.
Chaque branche de l’arbre peut être conditionnée par une formule logique (condition d’existence). Dans le cas où le test n’est pas valide, les maj liées à cette branche ne sont pas exécutées, et le parcours de l’arbre se poursuit sur les branches de niveau inférieur.
Si la branche est active, les maj liées à cette branche peuvent être effectuées de manière itérative en fonction du cadre d’utilisation du lien :
Condition TantQue : la branche va être exécutée autant de fois que la condition « tant que » est valide. Les itérations peuvent s’effectuer uniquement sur la branche courante si le champ Boucle/Arbo = No ou prendre en compte la branche courante et son arborescence si le champ Boucle /Arbo = Yes.
ListeChaine : Ce type de cadre d’utilisation lien permet de faire boucler une branche de lien nomenclature (avec ou sans arborescence ; voir Champ Boucle/Arbo) par rapport au nombre d’éléments d’une liste chainée. L’origine de la liste chainée et le séparateur doivent être identifiés sur le lien.
Les MAJ de la branche seront exécutées pour chacun des éléments de la liste chainée. Les VBP suivantes seront disponibles dans le traitement de MAJ :
VBP. IMDObjSelArc : référence de l’élément en cours sur lequel les MAJ sont effectuées
VBP. IMDLstObjSel : liste de tous les éléments de la liste chainée
VBP. IMDNbTotObjSel : Nombre total d’éléments
VBP. IMDIndObjSel : Indice de l’élément en cours
CDM : Objet du Calcul Dimensionnel
Ce cadre d’utilisation permet d’effectuer une recherche sur des éléments du calcul dimensionnel et faire boucler une branche de calcul sur chacun des éléments sélectionnés.
Exemple : Pour une branche de l’arbre de calcul Parcours de tous les Ouvrants définis du Dormant D1 afin d’harmoniser les profils des cadres.
Le cadre d’utilisation local à la branche doit être OBJCDM (objet calcul Dimensionnel)
Type Objet Recherché : Nature de l’objet du calcul dimensionnel à rechercher
Objet Départ : référence de l’objet à partir duquel la recherche doit être effectuée (E, E_D1 ; E_D2_Z3…)
Mode Sélection : permet de sélectionner parmi les objets extraits de la recherche uniquement ceux qui ont été définis (RefMod<> ‘’), ceux non encore définis (exemple : l’objet E_D1 vient d’être calculé avec un modèle 3 zones, les objets E_D1_Z1, E_D1_Z2 et E_D1_Z3 sont existants dans le CDM mais ne sont pas encore définis à ce stade : on ne connait pas encore le type d’ouvrant qui va leur être attribué : RefMod = vide ; ces objets sont donc considérés non définis. Tous : permet d’extraire les objets définis et non définis
Suite à l’exécution des objets liés aux paramètres Type d’objet ; objet départ et mode de sélection l’utilisateur peut filtrer les objets sélectionnés pour n’en garder que certains sur lesquels l’itération de la branche sera réalisée. Les VBP suivantes sont alimentées afin que l’utilisateur puisse rajouter une condition dans le champ Cond / Obj Sel (l’exécution de la condition sera appliquée pour chacun des objets) :
VBP. IMDObjASelArc : référence de l’objet en cours sur lequel la condition va s’appliquer.
VBP. IMDCtxASelObj : référence du contexte lié à l’objet en cours sur lequel la condition va s’appliquer.
VBP. IMDIndObjCal : indice de l’objet en cours (5ème élément sur 8)
VBP. IMDNbTotObjCal : Nombre total d’objets extraits
VBP. IMDLstObjCal : liste des objets extraits
VBP. IMDLstCtxCalObj : liste des contextes rattachés aux objets extraits.
Suite à l’exécution de la condition / Objets sélectionnés, les MAJ de la branche seront exécutées pour chacun des objets valides / condition. Les VBP suivantes seront disponibles dans le traitement de MAJ :
VBP. IMDObjSelArc : référence de l’objet en cours sur lequel les MAJ sont effectuées
VBP. IMDCtxSelObj : référence du contexte lié à l’objet en cours
VBP. IMDLstObjSel : liste des objets sélectionnés
VBP. IMDLstCtxObjSel : liste des contextes rattachés aux objets sélectionnés
VBP. IMDNbTotObjSel : Nombre total d’objets sélectionnés
VBP. IMDIndObjSel : Indice de l’objet en cours
Le parcours d’un arbre de condition s’effectue de façon récursive selon l’ordre des branches d’un même niveau :
Il existe deux modes de parcours d’un arbre de condition :
parcours non exclusif : parcours de tous les liens respectant une condition juste et ensuite de ces fils
Parcours exclusif : pour un niveau recherche de la première condition juste et uniquement de la premier, et parcours de ses fils selon le même principe
La notion de parcours exclusif peut être définie pour l’intégralité de l’arbre de condition au niveau de l’entête de l’arbre, ou par branche. Dans ce cas dès qu’une branche est définie en parcours exclusif, les branches de même niveau ayant un niveau d’ordre inférieur ne sont pas exécutées.
Notion de Bloc Tant Que
Nous avons vu précédemment qu’il était possible de faire boucler une branche (avec ou sans arborescence) d’un arbre de condition. La notion de Bloc tant au sein des MAJ permet d’effectuer une ou plusieurs boucles locales au sein du traitement de MAJ.
Les blocs tant que sont définis par des lignes de MAJ successives pour lesquelles le flag Bloc Tant que est coché. La condition du « tant que » doit être définie pour la première ligne du bloc. Les différentes lignes du bloc seront exécutées tant que la condition définie sur la ligne définissant le ‘tant que’ est valide.
Plusieurs blocs peuvent être définis au sein d’un traitement de MAJ.
Dans l’exemple ci-dessus la boucle du « Tant que » est exécutée sur les lignes 20 -30 et 40 tant que la condition VBP.CdeNbPbLog >0.
Action Copier-Coller de branches
Chaque branche (et son arborescence) peut être copiée dans le but d’être collée sous une autre branche de l’arborescence.
L’action Duplication Arborescence d’un autre arbre, permet d’ouvrir l’arborescence d’un autre arbre dans le but d’en copier un lien pour le coller sur l’arbre courant.
Mise à jour par Branche de l’arborescence
Lorsque la condition liée à une branche est validée, les mises à jour liées sont exécutées. Ces mises à jour sont exécutées par N° ordre croissant et peuvent être à nouveau conditionnées.
Elles permettent de mettre à jour des VBA, des VBP, ou des clés d’affichage sur le principe de mises à jour des E/S scénario (Maj multiple), ou bien d’effectuer des mises à jour par matrices.
Le flag « Tant que » permet d’effectuer une boucle sur la ligne de mise à jour en cours (et uniquement cette ligne-là) tant que la condition liée est valide.
Remarques :
Lorsque le flag « Tant que » est coché rien ne doit être renseigné dans la colonne Maj si condition fausse.
Le nombre maximum d’itération par boucle « tant que » est fixé de manière arbitraire à 100 afin d’éviter les risques de bouclage. Dans le cas où le nombre d’itérations dépasse 100, le « tant que » est stoppé, la VBP.IGeBouArbERR est alimentée afin d’indiquer qu’une erreur s’est produite, et l’on passe à la mise à jour suivante.