MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Operadores relacionales dinámicos.. (foro/showthread.php?t=32120)

poketina 03/09/09 08:43:13

Operadores relacionales dinámicos..
 
Hola !!!

Tengo un problema con una tabla y un programa.. Resulta que los usuarios quieren almacenar en una tabla, qué tipo de operación tienen que hacer con unos determinados campos, es decir, si A y B tengo que sumarlos, restarlos, si uno es mayor o menor que otro..
El caso es que en la tabla se guardaría de la siguiente manera (por poner un ejemplo..):
campo 1 = 'A'
campo 2 = 'B'
operador = '<'

Lo que no sé es si puedo luego asignar el operador de alguna forma dinámicante para poder hacer un IF.. es decir, un IF A < B.... No sé si me explico..
Sino me veo haciendo un CASE enorme con todas las posibilidades... Alguna idea ??

Gracias !!

ballan 03/09/09 09:47:54

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


Husos Horarios son GMT. La hora en este momento es 17:35:55.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web