|
#1
|
|||
|
|||
Declarar tabla interna dinamicamente
Saludos, me gustaría saber si hay alguna manera de declararme una tabla interna cuya estructura solo sepa en tiempo de ejecución.
He probado esto: DATA: BEGIN OF li_tabla OCCURS 0. INCLUDE STRUCTURE <tbl>. DATA: END OF li_tabla. donde <tbl> tiene el nombre de una tabla, pero me da fallo de compilación. |
#2
|
|||
|
|||
Una manera de hacer es utilizando el metodo CREATE_DYNAMIC_TABLE de la clase CL_ALV_TABLE_CREATE, creo recordar que solo hay que rellenar el fieldcat con los campos que deseas y el te crea la tabla
|
#3
|
|||
|
|||
Gracias ballan por contestar, pero la verdad es que de objetos en SAP no tengo idea. Si me pudieraís especificar más o si supiese de alguna otra forma ...
Un saludo. |
#4
|
|||
|
|||
Aqui te dejo un ejemplo, haz un poco de pruebas para adaptarlo a tus necesidades y si tienes alguna duda preguntalo aqui
un saludo REPORT zprueba003. DATA: t_fieldcat TYPE lvc_t_fcat, t_fieldcat_wa TYPE LINE OF lvc_t_fcat. DATA: tabla TYPE REF TO data. START-OF-SELECTION. t_fieldcat_wa-col_pos = '1'. t_fieldcat_wa-fieldname = 'DOCUM'. t_fieldcat_wa-ref_table = 'VBAK'. t_fieldcat_wa-ref_field = 'VBELN'. APPEND t_fieldcat_wa TO t_fieldcat. CLEAR t_fieldcat_wa. t_fieldcat_wa-col_pos = '2'. t_fieldcat_wa-fieldname = 'POSIC'. t_fieldcat_wa-ref_table = 'VBAP'. t_fieldcat_wa-ref_field = 'POSNR'. APPEND t_fieldcat_wa TO t_fieldcat. CLEAR t_fieldcat_wa. t_fieldcat_wa-col_pos = '3'. t_fieldcat_wa-fieldname = 'STATU'. t_fieldcat_wa-ref_table = 'VBUK'. t_fieldcat_wa-ref_field = 'WBSTK'. APPEND t_fieldcat_wa TO t_fieldcat. CLEAR t_fieldcat_wa. CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING * I_STYLE_TABLE = it_fieldcatalog = t_fieldcat * I_LENGTH_IN_BYTE = IMPORTING ep_table = tabla * E_STYLE_FNAME = * EXCEPTIONS * GENERATE_SUBPOOL_DIR_FULL = 1 * others = 2 . IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. |
#5
|
||||
|
||||
Aqui va otro sin objetos, espero que te sirva
DATA: pv_tabla TYPE dd02l-tabname, generic_table TYPE REF TO data, generic_line TYPE REF TO data. FIELD-SYMBOLS: <table> TYPE ANY TABLE, <wa> TYPE ANY, <field> TYPE ANY. *& en pv_tabla almacenamos el nombre de la tabla del diccionario pv_tabla = 'spfli'. *& Referenciamos la estructura de la tabla CREATE DATA generic_table TYPE STANDARD TABLE OF (pv_tabla). ASSIGN generic_table->* TO <table>. *& Referenciamos la cabecera de la tabla CREATE DATA generic_line TYPE (pv_tabla). ASSIGN generic_line->* TO <wa>. *& Rellenamos la tabla interna creada dinamicamente SELECT * INTO CORRESPONDING FIELDS OF TABLE <table> FROM (pv_tabla). *& Recorremos la tabla creada dinamicamente LOOP AT <table> INTO <wa>. DO. *& Como no conocemos los campos de la tabla hasta la ejecucion *& assignamos a <field> un campo de la estructura en cada bucle *& cuando sy-index supere el nº de campos de la estructura *& sy-subrc = 4 con lo que sale del bucle ASSIGN COMPONENT sy-index OF STRUCTURE <wa> TO <field>. IF sy-subrc <> 0. EXIT. ENDIF. WRITE <field>. ENDDO. NEW-LINE. ENDLOOP. |
#6
|
|||
|
|||
Hola crounly, en la respuesta que me has dado me da fallo de compilación en la línea:
CREATE DATA generic_table TYPE STANDARD TABLE OF (pv_tabla). He probado de esta manera: DATA: generic_table TYPE STANDARD TABLE OF (pv_tabla). pero me dice que el tipo (pv_tabla) es desconocido. Por otro lado, en esa tabla querría guardar el resultado de una select. Me dejará hacer un into table a una de estas tablas genéricas? Úlima edición por pepe500 fecha: 16/04/07 a las 07:46:35. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|