Il est parfois utile de rendre paramétrables des formules de calcul simples soit par un utilisateur, soit par une fenêtre de maintenance de l'application.
Voici donc une solution...
Cette solution ne s'applique qu'aux formules "simples".
C'est-à -dire celles mettant en oeuvre les opérateurs standards de calcul reconnus par WinDev (+-*/).
En effet, la formule va être interprétée dynamiquement par WinDev au moment de son exécution. Il ne s'agit donc pas de mettre en place un algorythme de calcul scientifique.
La solution est extrèmement simple à mettre en oeuvre.
Elle fait intervenir :
- La construction des chaînes pour créer le code de la formule de calcul
- la compilation dynamique pour la réalisation du calcul.
On peut construire la formule dans une rubrique texte.
Les variables (paramètres) sont identifiées par les chaines '%1' pour la première, '%2' pour la seconde...
On utilise la fonction
ChaineConstruit pour créer la formule, d'où le besoin d'appeler les variables %1...
Exemple de formule: (3a + 2b)²
PROCEDURE Calcule(pnVar1 est un monetaire, pnVar2 est un monétaire)
// Retourne le résultat du calcul ou Null en cas d'erreur
cFormule est une chaine = "(3*%1+2*%2)*(3*%1+2*%2)"
nResultat est un monétaire
// application des variables dans la formule
cFormule=ChaineConstruit(cFormule,pnVar1,pnVar2) // ici on obtient pour 5 et 6 : "(3*5+2*6)*(3*5+2*6)"
// Réalisation du calcul
Codeà Compiler est une chaîne = "renvoyer ("+cFormule+")"
Res est une chaîne= Compile("CalcDyn", Codeà Compiler)
SI Res = "" ALORS
nResultat=ExécuteTraitement("CalcDyn", trtProcédure)
SINON
Erreur("Erreur compilation dynamique", Res)
RENVOYER Null
FIN
RENVOYER nResultat