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 25/03/10, 16:44:23
katanka3 katanka3 is offline
Junior Member
 
Fecha de Ingreso: nov 2007
Mensajes: 20
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?.....
s
Gracias, saludos.
Responder Con Cita
  #2  
Viejo 26/03/10, 06:53:30
francesc francesc is offline
Member
 
Fecha de Ingreso: mar 2006
Localización: Barcelona
Mensajes: 58
Hola has copiado COMO Z... sólo el módulo 'RS_TABLE_LIST_CREATE' o los has copiado todos los del grupo?
Responder Con Cita
  #3  
Viejo 26/03/10, 14:44:55
Avatar de DavidXD_XD
DavidXD_XD DavidXD_XD is offline
Moderator
 
Fecha de Ingreso: ago 2006
Localización: Lima - Perú
Mensajes: 1,251
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
__________________
David Carballido Córdova
Responder Con Cita
  #4  
Viejo 31/03/10, 21:41:52
Avatar de DavidXD_XD
DavidXD_XD DavidXD_XD is offline
Moderator
 
Fecha de Ingreso: ago 2006
Localización: Lima - Perú
Mensajes: 1,251
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

__________________
David Carballido Córdova
Responder Con Cita
  #5  
Viejo 06/04/10, 22:12:56
Rodolfo SAP Rodolfo SAP is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 89
Lightbulb 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.

Úlima edición por Rodolfo SAP fecha: 06/04/10 a las 22:15:48.
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 16:53:10.


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