MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Select-option dinámico de verdad!, ayuda de expertertos, abap avanzado !!! (foro/showthread.php?t=35868)

katanka3 25/03/10 16:44:23

Select-option dinámico de verdad!, ayuda de expertertos, abap avanzado !!!
 
Hola foreros, tengo un problema, bueno en resumen lo que necesito y estoy diseñando es crear un programa que introduciendo el nombre de la una tabla del diccionario y al ejecuta, me cree otra pantalla de seleccion con los campos de la tabla, lo importante es que sean los campos de esa tabla introducida anteriormente, para una vez mostrados por pantalla se puedan introducir datos en los campos para finalmente poder ser rescatados y poder ser tratados por el programa.

He probado a debuguear la se16 y tengo lo siguiente:

Lo primero que me encuentro es que llego hay una funcion la "RS_TABLE_LIST_CREATE" la cual le metemos una tabla y nos crea la pantalla de seleccion con los campos claves de la tabla. Ahora el problema que me planteo es ¿como rescato los datos del esa pantalla creada por la funcion?.

Siguo debugueando la funcion y me encuentro que esa funcion lo que hace basicamente es crear un report en tiempo de ejecucion y luego la funcion lo ejecuta, es este programa el que ejecuta la pantalla de seleccion con los campos de la tabla. Luego aqui no se puede tocar nada ya que se crea y ejecuta en tiempo de ejecucion.

Siguiendo debugueando una vez ejecutada la funcion RS_TABLE_LIST_CREATE, y pintados los campos en pantalla y ejecutado la pantalla para unos valores introducidos en los campos, la fucion ya no tiene el control del programa sino que lo hace el programa generado anteriormente comentado, y es mas, para tratar los datos de la pantalla se va a los includes del grupo de funciones SETB, grupo de funciones donde esta incluida la RS_TABLE_LIST_CREATE. Entonces he pensado en copiar SETB a ZSET y copiar el módulos de funciones RS_TABLE_LIST_CREATE a Z_RS_TABLE_LIST_CREATE para que me tire de los includes Z y pueda modificarlos para finalmente capturar los datos de la pantalla de seleccion creada por Z_RS_TABLE_LIST_CREATE.

Pero no me funciona aunque he creado un grupo nuevo y nueva funcion, el programa generado sigue tierando de los includes de SETB.

Alguna sugerencia de, ¿como crear un select-option apartir del nombre de una tabla y luego captuar los datos introducidos en los campos de la pantalla generada?.....:confused: :confused: :mad:
s
Gracias, saludos. :D :D ;) :D :D

francesc 26/03/10 06:53:30

Hola has copiado COMO Z... sólo el módulo 'RS_TABLE_LIST_CREATE' o los has copiado todos los del grupo?

DavidXD_XD 26/03/10 14:44:55

Hola. como dices es crear un reporte en tiempo de ejecucion, es la unica forma de crear un SELECT-OPTION dinamico, ahora eso no seria muy dificil pues se crearian cadenas con las sentencias:

LOOP AT itab.
CONCATENATE 'SELECT-OPTIONS s_' itab-campo INTO g_cadena.
CONCATENATE g_cadena 'FOR' g_cadena INTO g_cadena SEPARATED BY space.
CONCATENATE g_cadena itab-tabla INTO g_cadena SEPARATED BY space.
CONCATENATE g_cadena '-' itab-campo '.' INTO g_cadena.
ENDLOOP.

luego un START-OF-SELECTION
luego un REUSE_ALV_GRID_DISPLAY, y luego un INSERT REPORT si puedes pasanos tu codigo para ver en que te podemos ayudar

DavidXD_XD 31/03/10 21:41:52

Hola katanka3, hice una aplicacion muy pequenia de lo que mas o menos quieres (ojala sea :) ), y pues algunas tablas tienen muchos campos pero una pantalla no permite tener demasiados campos y se rompe en DUMP, asi que solo imprimi 20 campos en pantalla, y tambien para realizar una consulta con un SELECT SAP no permite en el codigo realizarla con muchos campos .... este es el codigo que hice y que lo puedes copiar y ejecutar, espero te pueda ayudar :D


Rodolfo SAP 06/04/10 22:12:56

Pequeña Experiencia
 
Hola realmente estuve en el mismo problema que tu y mira ya que debugueaste la trx SE16 te adelanto que es correcto observa el modulo de funciones SETB y la funcion RS_TABLE_LIST_CREATE es la que hace todo entre comillas por que realmente la magia de todo esta en que esta funcion crea un programa en tiempo de ejecucion para la tabla en especifico (estos programas de cierta forma virtuales los puedes checar en la SE38 buscando por ejemplo /1BCDWB/DBMARA ).

Realmente yo no encontre una opcion optima para poder realizar una pantalla de seleccion dinamica para cada tabla pues existen tablas como la BSEG que contienen muchos campos.

Siguiendo con la SE16 te recomiendo cheques los siguiente objetos y debugues la SE16 poniendo atencion en los siguientes perform y functions.

En la RS_TABLE_LIST_CREATE entra al perform check_generate_report ahi podras ver como nombra el programa siguiendo ahi entra a la función RS_TABLE_REPORT_GENERATE y al perform GENERATE_REPORT y estando dentro del codigo en el perform ausgeben
y vuala ahi esta la siguiente instrucción


donde report es una tabla tipo string que tiene todo el codigo del programa creado en tiempo de ejecucion, te aconsejo pongas un break point en cada paso que te digo para que observes y al final pongas uno muy importante en la sentencia INSERT y observe lo que contiene la tabla report que te menciono.

Te comento que al final yo lo que hice fue copiar el modulo de funciones SETB y sustituir todo por ZSETB y en codigo de igual forma renombrar todos los llamados a funcion call que hacen referencia al standar y redireccionar hacia mis Z.

Ejemplo si tengo un CALL FUNCTION 'RS_TABLE_REPORT_GENERATE' renombrar por CALL FUNCTION 'ZRS_TABLE_REPORT_GENERATE'.

Que lo programa creados como /1BCDWB/DBMARA ahora sean /1BCDWB/DBZMARA para no crear conflicto.

y de igual forma en el programa que se crea en tiempo de ejecucion que su codigo esta dentro de la tabla report sustuir lo que hay como SETB a que sea ZSETB y asi en todos los casos.

Bueno espero poder ayudarte con esto y si tienes algun comentario no dudes y aqui estaremos apoyandote.

Saludos.


Husos Horarios son GMT. La hora en este momento es 08:53:12.

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