hola gente, yo una ves armé esto, es mas "artesanal", pero sirve, es mi humilde ayuda, saludos !!!
...lo que hace es buscar un operador (+ / - *) en la cadena y con un do case hacer la operación pertinente, este código no es exactamente lo que buscan, pero el resultado es el mismo, hacer operaciones aritméticas apartir de datos en campos de texto.
...esté código es mas largo y no tiene mucho que ver, pero al final hace las operaciones según el operador
//recibe los importes y el Str de la formula
//devuelve un importe (la comisión)
//Se usa la fun Val, que utiliza el . como separador decimal, sin separador de miles
//Inicializa la salida
&Comision = 0
&FormulaError = 'N'
//////////////////////
//Analiza la formula//
//////////////////////
call( PFunParmStrLeer, &UsuCod, &CModRFormula, &Sale1, &Sale2, &Sale3, &Sale4, &Sale5, &Sale6, &Sale7, &Sale8, &Sale9, &Sale10)
//Valores que se esperaban
// sale-1 sale-2 3 sale-4 5 sale-6 sale-7
//[IMPTOTAL] [operador] [1] [BASEMIN] [0] [BASEMAX] [9999]
//[IMPNETO] [operador] [1] [BASEMIN] [0] [BASEMAX] [9999]
//[IMPCUOTA] [operador] [1] [BASEMIN] [0] [BASEMAX] [9999]
//[CASOS] [operador] [1] [BASEMIN] [0] [BASEMAX] [9999]
//[FIJO] [00000]
do case
case &Sale1 = 'IMPTOTAL'
&AuxImporte = &ImpTotal
&AuxConstante = Val(&Sale3)
//Analiza Errores de la formula
if &Sale2 <> '*' and &Sale2 <> '/' and &Sale2 <> '+' and &Sale2 <> '-'
&FormulaError = 'S'
return
endif
if Val(&Sale3) <=0
//puede o no ser error, pero el resultado siempre será 0
return
endif
case &Sale1 = 'IMPNETO'
&AuxImporte = &ImpNeto
&AuxConstante = Val(&Sale3)
//Analiza Errores de la formula
if &Sale2 <> '*' and &Sale2 <> '/' and &Sale2 <> '+' and &Sale2 <> '-'
&FormulaError = 'S'
return
endif
if Val(&Sale3) <=0
//puede o no ser error, pero el resultado siempre será 0
return
endif
case &Sale1 = 'IMPCUOTA'
&AuxImporte = &ImpCuota
&AuxConstante = Val(&Sale3)
//Analiza Errores de la formula
if &Sale2 <> '*' and &Sale2 <> '/' and &Sale2 <> '+' and &Sale2 <> '-'
&FormulaError = 'S'
return
endif
if Val(&Sale3) <=0
//puede o no ser error, pero el resultado siempre será 0
return
endif
case &Sale1 = 'CASOS'
&AuxImporte = &Casos
&AuxConstante = Val(&Sale3)
//Analiza Errores de la formula
if &Sale2 <> '*' and &Sale2 <> '/' and &Sale2 <> '+' and &Sale2 <> '-'
&FormulaError = 'S'
return
endif
if Val(&Sale3) <=0
//puede o no ser error, pero el resultado siempre será 0
return
endif
case &Sale1 = 'FIJO'
//////////////////
// FIJO - salir //
//////////////////
&AuxConstante = Val(&Sale2)
&Comision = &AuxConstante
return
otherwise
&FormulaError = 'S'
return
endcase
//realiza el calculo
do case
case &Sale2 = '/'
&Comision = &AuxImporte / &AuxConstante
case &Sale2 = '*'
&Comision = &AuxImporte * &AuxConstante
case &Sale2 = '+'
&Comision = &AuxImporte + &AuxConstante
case &Sale2 = '-'
&Comision = &AuxImporte - &AuxConstante
endcase
//verifica si hay topes minimos y maximos
if &Sale4 = 'BASEMIN'
if &Sale6 = 'BASEMAX'
&BaseMin = Val(&Sale5)
&BaseMax = Val(&Sale7)
if &BaseMin > &Comision
&Comision = &BaseMin
endif
if &Comision > &BaseMax
&Comision = &BaseMax
endif
endif
endif