Problemas creando tabla dinámica

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • uo4396
    Member
    • ago
    • 90

    #1

    Problemas creando tabla dinámica

    Hola a todos;

    Estoy intentando crear una tabla dinámica. El código es el siguiente:

    TYPE-POOLS: abap, col.
    * Tablas dinámicas
    FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
    <dyn_wa>,
    <fs>.

    DATA: gt_dyn TYPE REF TO data,
    gw_dyn TYPE REF TO data,
    r_table TYPE REF TO cl_salv_table,
    r_header TYPE REF TO cl_salv_form_element,
    r_footer TYPE REF TO cl_salv_form_element,
    r_columns_table TYPE REF TO cl_salv_columns_table,
    r_column_table TYPE REF TO cl_salv_column_table,
    r_datadescr TYPE REF TO cl_abap_datadescr,
    r_structdescr TYPE REF TO cl_abap_structdescr,
    gw_component TYPE abap_componentdescr,
    gt_component TYPE abap_component_tab.

    DATA: l_idx(2) TYPE c,
    l_matnr TYPE matnr,
    l_maktx TYPE maktx,
    l_matkl TYPE matkl,
    l_hslxx(6) TYPE C,
    lt_color TYPE lvc_t_scol,
    l_desc TYPE char50.

    r_datadescr ?= cl_abap_datadescr=>describe_by_data( l_desc ).
    gw_component-name = 'MATERIAL'.
    gw_component-type = r_datadescr.
    APPEND gw_component TO gt_component.


    El problema lo tengo al realizar la llamada al método siguiente :

    cl_abap_datadescr=>describe_by_data( l_desc ).

    Para que sirve el parámetro que le estoy pasando al método describe_by_data?

    Depende que cabecera me cree para la tabla mas adelante me lanza una excepción y no se campo exactamente pasar para que me funcione.
    Si por ejemplo tengo definida una variable asi:

    l_hslxx(6) TYPE c,

    Y es la que le paso al método:

    DO p_times TIMES.
    l_idx = sy-index.
    CONDENSE l_idx NO-GAPS.
    r_datadescr ?= cl_abap_datadescr=>describe_by_data( l_hslxx ).
    CONCATENATE 'HOY' l_idx INTO gw_component-name SEPARATED BY space.
    gw_component-type = r_datadescr.
    APPEND gw_component TO gt_component.
    ENDDO.

    El programa luego me casca en la siguiente sentencia:

    CREATE DATA gw_dyn TYPE HANDLE r_structdescr.

    ¿ Alguien sabe que estoy haciendo mal ?

    Saludos y gracias
  • DavidXD_XD
    Moderator
    • ago
    • 1255

    #2
    Hola, te paso como creo una tabla interna y una estructura en forma dinamica, es muy similar a lo que colocas pero aver si se entiende mejor

    Código:
    TYPE-POOLS: abap, col, slis.
    [COLOR="Blue"]* Tablas dinámicas[/COLOR]
    FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
                   <dyn_wa>,
                   <fs>.
    
    [COLOR="Blue"]* Variables Globales[/COLOR]
    DATA: gt_dyn          TYPE REF TO DATA,
          gw_dyn          TYPE REF TO DATA.
    
    FORM build_dynamic_table.
    
      DATA: lr_datadescr   TYPE REF TO cl_abap_datadescr,
            lr_structdescr TYPE REF TO cl_abap_structdescr,
            ls_component   TYPE abap_componentdescr,
            lt_component   TYPE abap_component_tab.
    
      DATA: l_descr    TYPE char50,
            l_indx(3)  TYPE n,
            l_char5(5) TYPE c.
    
    [COLOR="Blue"]* Columna 1[/COLOR]
    [COLOR="Blue"]* El metodo describe_by_data nos devuelve los atributos que tiene el tipo
    * de variable que se le inserta como parametro y se le asigna al campo type[/COLOR] 
      lr_datadescr ?= cl_abap_datadescr=>describe_by_data( l_descr ).
      ls_component-name = 'COLUMNA'.
      ls_component-type = lr_datadescr.
      APPEND ls_component TO lt_component.
    [COLOR="Blue"]* Columnas Dinamicas[/COLOR]
      DO p_col TIMES.
        l_indx = sy-index.
        CONDENSE l_indx NO-GAPS.
        lr_datadescr ?= cl_abap_datadescr=>describe_by_data( l_char5 ).
        CONCATENATE 'COL' l_indx INTO ls_component-name.
        ls_component-type = lr_datadescr.
        APPEND ls_component TO lt_component.
      ENDDO.
    [COLOR="Blue"]* Creando la tabla interna[/COLOR]
      TRY.
        lr_structdescr = cl_abap_structdescr=>create( p_components = lt_component ).
        CATCH cx_sy_struct_creation.
        WRITE: / 'Excepcion:', 'CX_SY_STRUCT_CREATION'.
      ENDTRY.
    [COLOR="Blue"]* Aqui creo una estructura[/COLOR]
      CREATE DATA gw_dyn TYPE HANDLE lr_structdescr.
      ASSIGN gw_dyn->* TO <dyn_wa>.
    [COLOR="Blue"]* Y aqui creo una tabla interna con los campos de la estructura[/COLOR]
      CREATE DATA gt_dyn LIKE STANDARD TABLE OF <dyn_wa>.
      ASSIGN gt_dyn->* TO <dyn_table>.
    
    ENDFORM.                    " build_dynamic_table
    David Carballido Córdova

    Comentario

    Trabajando...