MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 03/09/09, 08:43:13
poketina poketina is offline
Senior Member
 
Fecha de Ingreso: jul 2006
Mensajes: 105
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 !!
Responder Con Cita
  #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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 13:25:21.


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