PDA

Ver la Versión Completa : sacar estructura de 1 tabla en tiempo ejecucion


Skadeour
29/05/06, 13:37:23
hola, hay alguna forma de recuperar la estructura de una tabla interna, k me pasan como parametro en un metodo, es decir yo puedo acceder a los datos k contiene esa tabla interna en tiempo de ejecución pero, necesito acceder a su estrucutura, a como se llama cada campo de esa tabla, alguien me puede ayudar.

carlosalcala
29/05/06, 14:13:38
Se puede hacer de unas cuantas formas, para que quieres la estructura luego?

Skadeour
29/05/06, 14:57:12
para meter el nombre de cada campo en la estructura de otra tabla

carlosalcala
29/05/06, 15:22:04
Nose si te servirá ni el motivo de hacer esto, haz
SELECT SINGLE * FROM dd03m
WHERE tabname = l_tabla AND
ddlanguage = 'S' AND
ddtext IS not NULL.

Y te devolverá el nombre de los campos, el meterlos en otra estructura¿? nose si te la quieres crear en tiempo de ejecución, si es asi es algo como

DATA: CODE TYPE TABLE OF RSSOURCE-LINE,
LINEA LIKE RSSOURCE-LINE.

DATA: VARIABLE(10). "ESTA VARIABLE LLEVA EL NOMBRE DE LA TABLA.

VARIABLE = 'ZAPR'.

CLEAR LINEA.
CONCATENATE 'TABLES: ' VARIABLE INTO LINEA SEPARATED BY SPACE.
CONCATENATE LINEA '.' INTO LINEA.
APPEND LINEA TO CODE.

CLEAR LINEA.
CONCATENATE 'DATA TI_' VARIABLE INTO LINEA.
CONCATENATE LINEA 'LIKE' VARIABLE INTO LINEA SEPARATED BY SPACE.
CONCATENATE LINEA 'OCCURS 0 WITH HEADER LINE.' INTO LINEA SEPARATED BY
SPACE..
APPEND LINEA TO CODE.

INSERT REPORT 'ZREPORTDINAMICHR' FROM CODE.

Espero que te sea de ayuda.

Un saludo al foro!

Skadeour
29/05/06, 15:46:27
Haber te explico, necesito meter en una tabla itab-descripcion, todos los campos de la estructura de otra tabla en tiempo de ejecucion.
el select a la tabla que me has dicho me da subrc = 4. un saludo

carlosalcala
30/05/06, 10:28:50
Lo único que se me ocurre es que utilices las funciones de las ALV en la cual cuando te creas un catálogo de campos lo tienes ahi, solo te quedaría mover el campo fieldname a itab-descripcion.
Espero t sea util

Skadeour
30/05/06, 15:00:50
no hay otra forma de sacar la estructura de una tabla interna,o alguan funcion que te genere un alv, con solo pasarle la tabla interna

carlosalcala
30/05/06, 15:08:08
Claro que existe y sino se inventa, aqui te copio algo de código:
CREATE OBJECT go_custom_container
EXPORTING container_name = 'ALV_CONTAINER'.
CREATE OBJECT go_grid
EXPORTING i_parent = go_custom_container.

CALL METHOD go_grid_err->set_table_for_first_display
EXPORTING i_structure_name = 'ZTACGHR03' "una estructura kmo la tabla is_layout = v_layout_err "No es necesaria
CHANGING it_outtab = g_t_incon_excel. "la tabla con los datos

la estructura se la coje sola,las definiciones de los data los tienes en esta página: http://help.sap.com/saphelp_erp2004/helpdata/en/0a/b5533cd30911d2b467006094192fe3/content.htm

te vienen todos los métodos del objeto.

Haber si esto te vale! ;)

carlosalcala
30/05/06, 15:11:33
Se me olvidaba, tienes que crear una screen con un container al que asignas el objeto, te copiado x error 2 objetos distintos xq tngo 2 alvs distintas pero el método es ese. Si necesitas modificar el fieldcatalog o el layout dimelo

Skadeour
30/05/06, 16:02:18
pero no puedo crear un objeto dentro de otro, me explico ese objeto le tengo k crear dentro de un metodo, no puedo crear una instacia
saludos

carlosalcala
30/05/06, 16:19:05
Ahi me has perdido, escribe el código donde te da error o lo que quieres implementar xq asi segun lo explicas no lo entiendo ya que llevo solo un mes con abap y hay muchisimas cosas que nose como hacer o como darselo a entender a sap.

Salu2

Skadeour
31/05/06, 09:44:28
me he creado una estructura del tipo

* Creamos un objeto que hace referencia a nuestra clase.
DATA container TYPE REF TO CL_GUI_CONTAINER.
DATA: MY_OBJ TYPE REF TO ZCL_PEDIDOS.

* Creamos el objeto y lo inicializamos.
* Y la clase genera automaticamente el resultado.
CREATE OBJECT MY_OBJ
EXPORTING I_PARENT = container.

el caso es que ejecuto el alv, y no sale nada, que hay que pasarle a la referencia cl_gui_container, las usado alguna ved,
Para llevar solo un mes controlas mucho

carlosalcala
31/05/06, 10:11:15
Tienes que hacer la llamada a la screen creada y tiene que llamarse el container que te has creado igual que el parámetro que le pasas,
como poco deberias ver la grid vacia. Llamas a la screen
CALL SCREEN '0100'. y dntro del PBO debe ir el código.
data: go_grid TYPE REF TO cl_gui_alv_grid,
go_custom_container TYPE REF TO cl_gui_custom_container,
g_t_incon_excel TYPE STANDARD TABLE OF ztacghr03,
g_i_ztacghr03 TYPE STANDARD TABLE OF ztacghr03.


*-- Creación del obj. en el contenedor
CREATE OBJECT go_custom_container
EXPORTING container_name = 'ALV_CONTAINER'.
*-- Creación de la grid a partir del contenedor
CREATE OBJECT go_grid
EXPORTING i_parent = go_custom_container.
*-- Importo el layout para modificar la visualización
CALL METHOD go_grid->get_frontend_layout
IMPORTING es_layout = v_layout.

v_layout-cwidth_opt = 'X'.
v_layout-zebra = 'X'.
v_layout-grid_title = 'Listado de campos en parametrización'.
v_layout-no_toolbar = 'X'.
*-- Devuelve el layout modificado
CALL METHOD go_grid->set_frontend_layout
EXPORTING is_layout = v_layout.
*-- Llenado de datos
PERFORM load_data_into_grid.

FORM load_data_into_grid.
* read data
SELECT * FROM ztacghr03
INTO TABLE g_i_ztacghr03
WHERE zoperacion = s_ztacghr01-zoperacion.
*-- Carga los datos en la tabla y muestra los datos
CALL METHOD go_grid->set_table_for_first_display
EXPORTING i_structure_name = 'ZTACGHR03'
is_layout = v_layout
CHANGING it_outtab = g_i_ztacghr03.

ENDFORM. " load_data_into_grid