Puedes usar la unidad PREXPR.PAS, que está incluida en el programa de contabilidad que está publicado en el ftp del Club.
Una vez tienes la fórmula, la puedes enviar alas funciones que te devuelven el resultado
Te adjunto la forma de realizar las llamadas. Puedes observar que las formulas las obtengo de una variable y los valores también de la bbdd pasándole el nombre del campo, concretamente del registro activo.
En las jedi tienes un interprete de pascal incorporado, que además viene en los programas de ejemplo, pero nunca lo he utilizado. Puede ser una buena opción también. Lo que no recuerdo es cómo se llama el componente ni cómo se usa.
Espero que te sirva de ayuda.
Saludos
Código Delphi
[-]procedure TForm.CDSVistaReciboCalcFields(DataSet: TDataSet);
begin
inherited;
if CDSVistaRecibo.FieldByName('COBRAPOLIZA').AsString = 'AGENTE' then
begin
DataSet.FieldByName('TOTCOMISION').AsFloat:= CalcularFormula(WFormulaComisionAgente);
DataSet.FieldByName('TOTLIQUIDACION').AsFloat:= CalcularFormula(WFormulaLiquidacionAgente);
end;
if CDSVistaRecibo.FieldByName('COBRAPOLIZA').AsString = 'COMPAÑIA' then
begin
DataSet.FieldByName('TOTCOMISION').AsFloat:= CalcularFormula(WFormulaComisionCIA);
DataSet.FieldByName('TOTLIQUIDACION').AsFloat:= CalcularFormula(WFormulaLiquidacionCIA);
end;
end;
function TForm.CalcularFormula(Formula:String): Double;
var
E: TExpression;
begin
Result:= 0;
E:= CreateExpression(Formula, ValoresFunc);
if Assigned(E) then
Result:= E.AsFloat;
end;
function TForm.ValoresFunc( const Identifier: String;
ParameterList: TParameterList): TExpression;
begin
Result:= TFloatLiteral.Create(CDSVistaRecibo.fieldByName(Identifier).AsFloat);
end;