PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Créer une variable de type combinaison xxxx
Créer une variable de type combinaison xxxx
Débuté par Pierre-yves, 25 mar. 2023 18:29 - 5 réponses
Membre enregistré
47 messages
Posté le 25 mars 2023 - 18:29
Bonjour,

Afin d'obtenir un code le plus générique possible dans un modèle de champ, je souhaite créer une variable de type combinaison selon le nom d'une combinaison stocké dans une chaine.

Je souhaiterais faire quelque chose du genre:
Couleur est une Combinaison
Bleu
Rouge
Vert
FIN

NomDeLaCombinaison est chaîne ="Couleur"

MaCombinaisonAManipuler est un {NomDeLaCombinaison, indCombinaison}

MaCombinaisonAManipuler [CombinaisonDepuisNom(NomDeLaCombinaison , "Bleu")] = Vrai


Bien sur, les indirections sur les combinaisons n'existent pas en V28.

Avez-vous déjà rencontré ce besoin et avez vous une solution ?

D'avance merci à tous,

--
La complexité d'une solution doit être adaptée à la complexité du problème qu'elle essaye de résoudre.
Membre enregistré
3 844 messages
Popularité : +227 (347 votes)
Posté le 26 mars 2023 - 12:50
Bonjour,
Avant tout, Couleur est un mot réservé, il est étonnant que tu n'ais pas eu d'erreur à ce niveau.
Dans un 2° temps la doc explique l'affectation d'un membre d'une combinaison qui n'a rien à voir avec ce que tu écris
Le code statique devient donc :
CCouleur est Combinaison
Rouge
Vert
Bleu
FIN

oMaCouleur est une CCouleur
oMaCouleur[Bleu]=Vrai


Tu veux déclarer dynamiquement une variable, il faut donc utiliser une compilation dynamique, un truc du style :
saNomCombinaison est une chaîne
saCodeBleuVrai est une chaîne
procBleuVrai est Procedure

saNomCombinaison="CCouleur"
saCodeBleuVrai=[
oMaCombinaison est %1

oMaCombinaison[Bleu]=Vrai
]

saCodeBleuVrai=ChaîneConstruit(saCodeBleuVrai,saNomCombinaison)

procBleuVrai=Compile(saCodeBleuVrai)
SI PAS ErreurDétectée ALORS
procBleuVrai()
SINON
Erreur(ErreurInfo())
FIN


--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
287 messages
Popularité : +51 (79 votes)
Posté le 27 mars 2023 - 11:41
Les énumérations et les combinaisons ne sont pas disponibles en compilation dynamique.

saCodeBleuVrai=[
oMaCombinaison est %1

oMaCombinaison[Bleu]=Vrai
]


Tu devrai tester ton code avant de donner de fausses solution.


@Pierre-yves Malheureusement ce n'est pas possible

Peut-être dans les futures version ?

--
#DKR
Message modifié, 27 mars 2023 - 11:42
Membre enregistré
47 messages
Posté le 31 mars 2023 - 21:18
Bonjour à tous,

Merci 404 ERROR, et merci également à Voroltinquo.

Une solution serait d'avoir une procédure globale avec un beau SELON avec toutes les combinaisons déclarées/utilisées dans le projet.
C'est n'est pas une vrai solution car à chaque création d'une combinaison, je vais devoir ajouter un "CAS" dans ce SELON ! :(
Et le code de sélection des valeurs devra être dupliquée dans chaque "CAS".

Merci à vous en tout cas, en espérant que le support tombe sur nos échanges et apporte une vrai solution.

--
La complexité d'une solution doit être adaptée à la complexité du problème qu'elle essaye de résoudre.
Membre enregistré
47 messages
Posté le 31 mars 2023 - 21:36
oui... ça marche:

Procedure renvoiCombinaisonValeurs(sNomCombinaison est chaîne, tabValeurCombinaison est tableau de chaîne)

SELON sNomCombinaison
CAS "CBN_Type_Tarif"
coMaCombinaison est un CBN_Type_Tarif
POUR TOUT sItem de tabValeurCombinaison
coMaCombinaison[CombinaisonDepuisNom(sNomCombinaison, sItem)] = Vrai
FIN
RENVOYER coMaCombinaison

CASE "TypeContact"
coMaCombinaison est un TypeContact
POUR TOUT sItem de tabValeurCombinaison
coMaCombinaison[CombinaisonDepuisNom(sNomCombinaison, sItem)] = Vrai
FIN
RENVOYER coMaCombinaison

AUTRE CAS
ExceptionDéclenche(1,"Type de combinaison non connue !")
FIN


--
La complexité d'une solution doit être adaptée à la complexité du problème qu'elle essaye de résoudre.
Membre enregistré
287 messages
Popularité : +51 (79 votes)
Posté le 01 avril 2023 - 10:27
Oui c'est une solution éventuellement de faire un selon à la main :merci:

--
#DKR