bartolome.sastre
Participante
bartolome.sastre

Hola Antonio,
Recientemente he tenido que hacer algo similar.

Prueba con esta procedure, la unica forma que conozco para evaluar expresiones matematicas es con una funcion que emplea el esquema de cuentas en la codeunit AccSchedManagement. Revisa la codeunit por si hay funciones que te puedan ser de utilidad como CheckFormula, si no recuerdo mal.

Esta funcion de calculo tiene las limitaciones de que solo podras operar con los siguientes operadores. +, -, *, / y potencia (elevado a…). Ademas no te permitira poner dos operadores consecutivos como 2/-1, tendras que rodearlo con parentesis 2/(-1)

Un saludo.

Tolo Sastre

procedure CalcMathExpression(formula: Text; var result: Decimal): Boolean
var
AccScheduleLine: record “Acc. Schedule Line”;
ColumnLayout: record “Column Layout”;

AccSchedManagement: codeunit AccSchedManagement;
excesiveLengthLbl: label ‘Error: the formula can”t exceed the 250 characters!’;

begin
Clear(AccSchedManagement);

AccScheduleLine.Init();
ColumnLayout.Init();

formula := DelChr(formula, ‘=’, ‘ ‘); //remove spaces…

//Max 250 length
if StrLen(formula) < 250 then begin

result := AccSchedManagement.EvaluateExpression(true, CopyStr(formula, 1, 250), AccScheduleLine, ColumnLayout, true);
exit(true);
end;
end
else
Error(excesiveLengthLbl);

exit(false);
end;

#1028336