Ver Mensaje Individual
  #14  
Antiguo 13-04-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Reputación: 22
fjcg02 Va camino a la fama
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;
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita