Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

dynamic Ranges

Former Member
0 Kudos

Hello,

i would like to create an internal range table about a table, which Name is in a Field.

I had create a Table with following Fields:

FALL CHAR10

LFDNR INT2

ZUORD CHAR5

FNAME M_COMB_FNAME

SIGN SIGN

OPTIO OPTION

HIGH HIGH_RANGE

LOW LOW_RANGE

At first i would like to create an internal range table, about a table which standing in the Field FNAME. And if there is a new Tablename in the Field FNAME, than i would like to create a new internal range table.

My suggestions are:

At First to create a Fieldsymbol:

assign (FNAME) to ).

And now, to create the new range table.

But How?

there are "create data", but it´s not working.

And then to fill the range table...

Is there anybody, who could help me.

Thanks.

2 REPLIES 2

uwe_schieferstein
Active Contributor
0 Kudos

Hello Tobias

Here is a sample report showing how to create range itabs dynamically.

*&---------------------------------------------------------------------*
*& Report  ZUS_SDN_RTTI_CREATE_RANGE
*&
*&---------------------------------------------------------------------*
*& NOTE: create range itab dynamically
*&
*&---------------------------------------------------------------------*

REPORT  ZUS_SDN_RTTI_CREATE_RANGE.


TYPE-POOLS: abap.


CONSTANTS:
  gc_range         TYPE tabname  VALUE 'RSDSSELOPT'.

DATA:
  gd_tabnam        TYPE string,
  gd_tabfield      TYPE string,
  go_table         TYPE REF TO cl_salv_table,
  go_sdescr        TYPE REF TO cl_abap_structdescr,
  go_sdescr_new    TYPE REF TO cl_abap_structdescr,
  go_tdescr        TYPE REF TO cl_abap_tabledescr,
  go_typedescr     TYPE REF TO cl_abap_typedescr,
  gdo_handle       TYPE REF TO data,
  gs_component     TYPE abap_compdescr,
  gt_components    TYPE abap_compdescr_tab,
*
  gs_comp          TYPE abap_componentdescr,
  gt_comp          TYPE abap_component_tab.
*


FIELD-SYMBOLS:

  <gt_range>        TYPE STANDARD TABLE.


PARAMETER:
  p_tabfld(61)       TYPE c  DEFAULT 'KNB1-KUNNR'.




START-OF-SELECTION.



  " Describe structure
  go_sdescr ?= cl_abap_structdescr=>describe_by_name( gc_range ).
  gt_components = go_sdescr->components.



  REFRESH: gt_comp.
  LOOP AT gt_components INTO gs_component.
    CLEAR: gs_comp.

    IF ( gs_component-name = 'LOW'  OR
         gs_component-name = 'HIGH' ).
      " Take data description from parameter !!!
      gs_comp-type ?= cl_abap_datadescr=>describe_by_name( p_tabfld ).
    ELSE.
      "  Build fieldname
      CONCATENATE gc_range gs_component-name INTO gd_tabfield
                                              SEPARATED BY '-'.

     gs_comp-type ?= cl_abap_datadescr=>describe_by_name( gd_tabfield ).
    ENDIF.

    gs_comp-name  = gs_component-name.
    APPEND gs_comp TO gt_comp.
  ENDLOOP.


  go_sdescr_new  = cl_abap_structdescr=>create( gt_comp ).
  go_tdescr      = cl_abap_tabledescr=>create( go_sdescr_new ).
  "   Create data refence followed by table creation
  CREATE DATA gdo_handle TYPE HANDLE go_tdescr.

  ASSIGN gdo_handle->* TO <gt_range>.





  DO 5 TIMES.
    APPEND INITIAL LINE TO <gt_range>.
  ENDDO.


  TRY.
      CALL METHOD cl_salv_table=>factory
        IMPORTING
          r_salv_table = go_table
        CHANGING
          t_table      = <gt_range>.
      go_table->display( ).
    CATCH cx_salv_msg .
  ENDTRY.


  " Display component list in order to prove that indeed the field names
  " are used (instead of the data element names)
  TRY.
      CALL METHOD cl_salv_table=>factory
        IMPORTING
          r_salv_table = go_table
        CHANGING
          t_table      = gt_comp.
      go_table->display( ).
    CATCH cx_salv_msg .
  ENDTRY.

END-OF-SELECTION.

Regards

Uwe

0 Kudos

Thanks, that was my answer:

lr_strucdescr ?= CL_ABAP_STRUCTDESCR=>describe_by_name( <fs> ).

lr_tabledescr ?= cl_abap_tabledescr=>create( p_line_type = lr_strucdescr ).

create data lr_data_struct TYPE HANDLE lr_strucdescr.

ASSIGN lr_data_struct->* TO <fs_struct>.

create data lr_data_table TYPE HANDLE lr_tabledescr.

ASSIGN lr_data_table->* TO <fs_table> .

Regard