|
#1
|
|||
|
|||
Agregar columna a tabla dinámica.
Hola! ¿Como están?.
Hice un programa que baja el contenido de las tablas dinamicamente a una archivo en el servidor, funciona bien. El probrlema que tengo es que se requiere agregar un campo adelante de todos los archivos (el campo sy-sysid), como las estrucutras y tablas se crean dinamicamente no se como agregar el dato. En el siguiente perform bajo la tabla al servidor. *&---------------------------------------------------------------------* *& Form F_BAJAR_ARCHIVO_SERVIDOR *&---------------------------------------------------------------------* FORM f_bajar_archivo_servidor CHANGING pve_fs_table TYPE STANDARD TABLE "-----> Tabla generica con datos pvi_le_zuinfotabla TYPE tye_zuinfotabla. "-----> En pvi_le_zuinfotabla-ztabname figura el nombre de la tabla. DATA: l_filename TYPE string, lv_string TYPE c LENGTH 70, le_estructura TYPE REF TO data. FIELD-SYMBOLS <fs_estructura> TYPE ANY. *Se crea tabla dinámica. CREATE DATA le_estructura TYPE (pvi_le_zuinfotabla-ztabname). ASSIGN le_estructura->* TO <fs_estructura>. CONCATENATE pvi_le_zuinfotabla-zpath_server pvi_le_zuinfotabla-zsysid '_' pvi_le_zuinfotabla-zmandt '_' pvi_le_zuinfotabla-ztabname '.TXT' INTO l_filename. OPEN DATASET l_filename FOR OUTPUT IN BINARY MODE. IF sy-subrc = 0. LOOP AT pve_fs_table INTO <fs_estructura>. TRANSFER <fs_estructura> TO l_filename. ENDLOOP. CLOSE DATASET l_filename. ENDIF. |
#2
|
|||
|
|||
Ya lo resolví.
Cualqueir cosa que quieran mas info, por inbox. Para el que quiera le dejo parte del codigo donde se realiza la generación del archivo. Saludos. DATA: le_zuinfotabla TYPE tye_zuinfotabla, lt_generic_table TYPE REF TO data, lv_tabix TYPE sy-tabix, lt_dd03l TYPE tyt_dd03l, lt_dd04t TYPE tyt_dd04t. * Se crea dinamicamente la tabla CREATE DATA lt_generic_table TYPE STANDARD TABLE OF (le_zuinfotabla-ztabname). "--> Tabla generica ASSIGN lt_generic_table->* TO <fs_table>. PERFORM f_bajar_archivo_servidor CHANGING lt_dd03l <fs_table> le_zuinfotabla. *&---------------------------------------------------------------------* *& Form F_BAJAR_ARCHIVO_SERVIDOR *&---------------------------------------------------------------------* FORM f_bajar_archivo_servidor CHANGING pve_gt_dd03l TYPE tyt_dd03l pve_fs_table TYPE STANDARD TABLE pvi_le_zuinfotabla TYPE tye_zuinfotabla. *&---------------------------------------------------------------------* *& Declaración de datos. *&---------------------------------------------------------------------* * Datos para el proceso. DATA: l_filename TYPE string, lv_string TYPE c LENGTH 70, * Estrucutra del tipo pve_fs_table que viene por parametro. le_estructura TYPE REF TO data. FIELD-SYMBOLS <fs_estructura> TYPE ANY. * Estrucutra que contiene los campos a declarar. DATA: lt_comp_tab TYPE cl_abap_structdescr=>component_table, * Estructura Dinámica. le_dref TYPE REF TO data, le_struct_type TYPE REF TO cl_abap_structdescr. FIELD-SYMBOLS: <fs_struc> TYPE ANY. * Tabla Dinámica DATA: lt_tabla TYPE REF TO data, lt_table_type TYPE REF TO cl_abap_tabledescr. FIELD-SYMBOLS: <fs_tabla> TYPE STANDARD TABLE. * Campo Sysid FIELD-SYMBOLS: <fs_comp> TYPE ANY. *&---------------------------------------------------------------------* *& Proceso de bajada de tabla dinámico. *&---------------------------------------------------------------------* * Asígnación dinámica de la estructura del diccionario. CREATE DATA le_estructura TYPE (pvi_le_zuinfotabla-ztabname). ASSIGN le_estructura->* TO <fs_estructura>. PERFORM f_obtener_campos_estructura CHANGING pve_gt_dd03l lt_comp_tab. * Se crea una estrucutra dinámica. le_struct_type = cl_abap_structdescr=>create( lt_comp_tab ). CREATE DATA le_dref TYPE HANDLE le_struct_type. ASSIGN le_dref->* TO <fs_struc>. * Se crea la tabla dinámica. lt_table_type = cl_abap_tabledescr=>create( p_line_type = le_struct_type p_table_kind = cl_abap_tabledescr=>tablekind_std ). CREATE DATA lt_tabla TYPE HANDLE lt_table_type . ASSIGN lt_tabla->* TO <fs_tabla>. * Se recorren los registros de la tabla generica. LOOP AT pve_fs_table INTO <fs_estructura>. ASSIGN COMPONENT 'ZSYSID' OF STRUCTURE <fs_struc> TO <fs_comp>. <fs_comp> = pvi_le_zuinfotabla-zsysid. MOVE-CORRESPONDING <fs_estructura> TO <fs_struc>. APPEND <fs_struc> TO <fs_tabla>. ENDLOOP. * Ruta de bajada. CONCATENATE pvi_le_zuinfotabla-zpath_server pvi_le_zuinfotabla-zsysid '_' pvi_le_zuinfotabla-zmandt '_' pvi_le_zuinfotabla-ztabname '.TXT' INTO l_filename. * Bajada de archivo. OPEN DATASET l_filename FOR OUTPUT IN BINARY MODE. IF sy-subrc = 0. LOOP AT <fs_tabla> INTO <fs_struc>. TRANSFER <fs_struc> TO l_filename. ENDLOOP. CLOSE DATASET l_filename. ELSE. CONCATENATE text-004 l_filename INTO pvi_le_zuinfotabla-message SEPARATED BY space. pvi_le_zuinfotabla-id = c_error. ENDIF. ENDFORM. "F_BAJAR_ARCHIVO_SERVIDOR *&---------------------------------------------------------------------* *& Form F_OBTENER_CAMPOS_ESTRUCTURA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <--P_PVE_GT_DD03L text * <--P_LT_COMP_TAB text *----------------------------------------------------------------------* FORM f_obtener_campos_estructura CHANGING pve_gt_dd03l TYPE tyt_dd03l pve_comp_tab TYPE cl_abap_structdescr=>component_table. DATA: le_comp LIKE LINE OF pve_comp_tab, le_dd03l TYPE dd03l, le_aux TYPE dd03l, lv_length TYPE i, lv_decimals TYPE i. DELETE pve_gt_dd03l WHERE fieldname = '.INCLUDE'. * Se recorren los campos de la tabla. SORT pve_gt_dd03l BY position. LOOP AT pve_gt_dd03l INTO le_aux. le_dd03l = le_aux. AT FIRST. le_comp-name = 'ZSYSID'. le_comp-type = cl_abap_elemdescr=>get_c( 8 ). APPEND le_comp TO pve_comp_tab. ENDAT. * Nombre del campo. le_comp-name = le_dd03l-fieldname. CASE le_dd03l-inttype. WHEN 'I'. le_comp-type = cl_abap_elemdescr=>get_i( ). WHEN 'F'. le_comp-type = cl_abap_elemdescr=>get_f( ). WHEN 'D'. le_comp-type = cl_abap_elemdescr=>get_d( ). WHEN 'T'. le_comp-type = cl_abap_elemdescr=>get_t( ). WHEN 'C'. lv_length = le_dd03l-intlen. le_comp-type = cl_abap_elemdescr=>get_c( lv_length ). WHEN 'N'. lv_length = le_dd03l-intlen. le_comp-type = cl_abap_elemdescr=>get_n( lv_length ). WHEN 'X'. lv_length = le_dd03l-intlen. le_comp-type = cl_abap_elemdescr=>get_x( lv_length ). WHEN 'P'. lv_length = le_dd03l-intlen. lv_decimals = le_dd03l-decimals. le_comp-type = cl_abap_elemdescr=>get_p( p_length = lv_length p_decimals = lv_decimals ). ENDCASE. * Se guardan los campos de la estructura. APPEND le_comp TO pve_comp_tab. ENDLOOP. ENDFORM. " F_OBTENER_CAMPOS_ESTRUCTURA |
Herramientas | Buscar en Tema |
Desplegado | |
|
|