GeneXus - Macros??

 
Vista:

Macros??

Publicado por Luis Alberto (119 intervenciones) el 11/01/2007 23:45:48
Que tal gente del Foro, espero alguien me pueda ayudar. . .
Necesto saber si alguien puede realizar algo como esto:
En una campo caracter de 30 tengo almacenado lo siguiente: "Rubro1 + Rubro2 + Rubro3 - Rubro5 - Rubro7).
Donde cada Rubro es una variable con un valor asinado, Entonces quiero que se ejecute esta cadena y me devuelva el valor calculado.
Gx 9.0 VFP DBF/CDX WIN
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Macros??

Publicado por Patricio Ojeda V (194 intervenciones) el 12/01/2007 13:25:20
¿En ese campo caracter que mencionas tienes los valores separados por el signo?

O sea, si:

Rubro1=20
Rubro2=25
Rubro3=35
Rubro4=15
Rubro5=20

Tienes en tu campo caracter:

20+25+35-15-20

¿Eso es?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Macros??

Publicado por Luis Albrto (119 intervenciones) el 16/01/2007 15:49:47
Que tal,
Mira en realidad yo pensaba que estaría:
"Rubro1+rubro2+Rubro3-Rubro4" por ejemlpo, pero viene a dar igual tu sugerencia, si yo tuviera "10+15+13-20" en una variable de tipo cadena como obtengo el resultado en valor (18) tomando en cuenta que puede o no tener decimales.

Gracias de Antemano
Exitos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Macros??

Publicado por Luis Albrto (119 intervenciones) el 16/01/2007 15:49:47
Que tal,
Mira en realidad yo pensaba que estaría:
"Rubro1+rubro2+Rubro3-Rubro4" por ejemlpo, pero viene a dar igual tu sugerencia, si yo tuviera "10+15+13-20" en una variable de tipo cadena como obtengo el resultado en valor (18) tomando en cuenta que puede o no tener decimales.

Gracias de Antemano
Exitos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Macros??

Publicado por Patricio Ojeda V (194 intervenciones) el 17/01/2007 13:25:07
La sugerencia que te digo si te sirve, pues yo hace tiempo implementé algo "parecido" y funcionó sin problemas. De hecho ayer en la tarde me cree un Wkp con una variable C(30) y una variable numerica para el resultado, y con un simple Do While y un Substr recorri toda la cadena de caracteres, pocision por posicion hasta encontrar un signo mas o un signo menos, y cuando encontraba el signo, hacia la suma tomando en cuanta desde donde empece a recorrer hasta la posicion del signo -1... despues sumaba desde el siguiente valor desde la posicion del signo + 1 hasta la posicion del proximo signo que encuentre...

Hice varias pruebas y funciono sin problemas, por ejemplo, coloque:

10+13+30+14 y me daba 57...

Tan solo que quedaria pensar como hacerlo para cuando haya una resta... lo cual no le veo complejidad...

Saludos

Patricio Ojeda V
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Macros??

Publicado por Luis Alberto (119 intervenciones) el 18/01/2007 23:22:02
Esta muy bien, pero. . .
A lo mejor te puse un ejemplo muy simple, pues estos procedicmientos es para calcular roles de pagos y planillas, en donde la fórmula puede ir con paréntesis, cualquier signo, y cualquier complejidad, por ello que buscaba una solucion tipo macro, como en VB o VFP Existe
Cualquier comentario se lo agradece
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Macros??

Publicado por Patricio Ojeda V (194 intervenciones) el 20/01/2007 18:39:54
En realidad tienes razon, si existe la posibilidad de que exista cualquier signo o parentesis se torna complicado... tienes tu alguna idea de como hacerlo hasta ahora???

Saludos

Patricio Ojeda V
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Macros??

Publicado por gaston (2 intervenciones) el 21/01/2007 19:20:47
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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Macros??

Publicado por Luis Alberto (119 intervenciones) el 24/01/2007 23:41:11
Lo probare pero me parece una tarea demasiado tediosa, em VFP existe la manera de generar macros con un & y todo se realiza facilmente, en gx esta es una tarea compleja
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar