Agregar columna a tabla dinámica.

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • goyleo
    Senior Member
    • sep
    • 102

    #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.
  • goyleo
    Senior Member
    • sep
    • 102

    #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

    Comentario

    Trabajando...