Compilation dynamique : des formules de calcul dans vos fichiers...

Date 5/7/2002 12:00:00 | Sujet : Trucs et astuces

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





Cet article provient de WDForge.org
http://old.wdforge.org

L'adresse de cet article est :
http://old.wdforge.org/article.php?storyid=12