Ver Mensaje Individual
  #2  
Viejo 03/09/09, 09:47:54
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
Buenos dias

Hasta donde yo se en un IF no puede ser "dinamico" asi que lo unico que se me ocurre para solucionar esto es la generacion de codigo dinamico

Podrias utilizar la sentencia GENERATE SUBROUTINE POOL, a esta instruccion tienes que pasarle el nombre que se le asignara al pool de subrutinas y una tabla interna que contendra las lineas de codigo

Mas o menos quedaria algo asi:

vamos a suponer que

Campo1 = 3
Campo2 = 2
Operador = +

data: GT_PROGRAMA type table of string.

data: gs_programa like line of gt_programa.

data: gv_resultado type i,
gv_campo1 type i value 3,
gv_campo2 type i value 2,
gv_operador type char1 value '+'.


APPEND 'PROGRAM prueba.' to GT_PROGRAMA.
APPEND 'START_OF_SELECTION.' to GT_PROGRAMA.
APPEND 'FORM operacion USING p_c1 p_ope p_c2 CHANGING p_res.' to GT_PROGRAMA.

concatenate 'P_RES' '=' 'P_C1' p_ope 'P_C2' '.' into gs_programa separated by space.

append gs_programa to gt_programa.

APPEND 'ENDFORM.' to GT_PROGRAMA.

generate subroutine pool gt_programa name nombre_sub.

check sy-subrc is initial.

perform operacion using gv_campo1 gv_operador gv_campo2 changing gv_resultado in program (nombre_sub).


Es muy probable que esto no compile y que haya algun error pero es para que te hagas una idea.

Con lo que tienes que tener cuidado es si vas a realizar esto muchas veces porque creo recordar que habia un limite en el numero de veces que puedes llamara a esta instruccion dentro de una misma sesion

Espero que te ayude
Responder Con Cita