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: 

Create Internal table dynamicaly

Former Member
0 Kudos

Hi All,

I have one internal table having name of Fields with following structure,

Sl No Field Name

1 CARRID

2 CONNID

3 FLDATE

4 PRICE

.....................

.....................

.....................

Here the entries in the 'Field Name' are all simple values. Nothing related to there SAP meaning.

I need to create a structure and internal table from these values. the type of each field in the resulting structure will be string.

Regards,

Anirban

1 ACCEPTED SOLUTION

Former Member
0 Kudos

hi,

refer the thread :

it will definately help you

regards

rahul

6 REPLIES 6

Former Member
0 Kudos

hi,

refer the thread :

it will definately help you

regards

rahul

Former Member
0 Kudos

Hi,

You can use field symbols to create a dynamic internal table structure

Former Member
0 Kudos

HI,

Check this code..

************************************************************************
TYPE-POOLS : abap.

************************************************************************
* tables
************************************************************************
TABLES:
   objec,
   t510,                                " Pay Scale Groups
   z90pfunar,                           " Functional Area
   z90pldrlv.                           " Leadership Level
************************************************************************
* infotypes
************************************************************************
INFOTYPES :
      1000,                            " Object Name
      1002,                            " Description
      1005,                            " Planned Compensation
      1050 .                           " Job Evaluation Results
************************************************************************
* types
************************************************************************
TYPES:
  BEGIN OF t_output,
    trfg1 TYPE p1005-trfg1,                   " Job Grade
    objid TYPE p1000-objid,                   " Object Id
    funar TYPE z90pfunar-unvdp,               " Functional Area
    ldrlo TYPE z90pldrlv-ldrlo,               " Leadership Level
    stext TYPE p1000-stext,                   " Job Title
    tline TYPE pt1002-tline,                  " Job Descrition
  END OF t_output,

  BEGIN OF t_z90pldrlv,
        ldrlo LIKE z90pldrlv-ldrlo,          " Leadership Level
        ldrhi LIKE z90pldrlv-ldrhi,          " Leadership Level
        ltext LIKE z90pldrlv_t-ltext,        " Leadership Level text
  END OF t_z90pldrlv.


************************************************************************
* internal tables
************************************************************************
DATA:
   i_output    TYPE STANDARD TABLE OF t_output,
   i_z90pldrlv TYPE STANDARD TABLE OF t_z90pldrlv,
   i_t1002     TYPE STANDARD TABLE OF pt1002,
   i_fieldcat  TYPE lvc_t_fcat,
   i_vsort     TYPE lvc_t_sort,
   i_z90pfunar TYPE STANDARD TABLE OF z90pfunar,
   i_fc TYPE lvc_t_fcat.


************************************************************************
* work areas
************************************************************************
DATA:
   i_output_line    LIKE LINE OF i_output,
   i_z90pldrlv_line LIKE LINE OF i_z90pldrlv,
   i_t1002_line     LIKE LINE OF i_t1002,
   i_vsort_line     LIKE LINE OF i_vsort,
   i_fieldcat_line  LIKE LINE OF i_fieldcat,
   i_fc_line TYPE lvc_s_fcat.

FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
               <dyn_wa>,
               <dyn_field>.

DATA: dy_table TYPE REF TO data,
      dy_line  TYPE REF TO data.

************************************************************************
* field symbols
************************************************************************

************************************************************************
* internal data fields
************************************************************************
DATA:
   g_cus_container  TYPE REF TO cl_gui_custom_container,   " Custom Cont
   g_alv_grid       TYPE REF TO cl_gui_alv_grid,       " ALV Declaration

   g_count(5)      TYPE c,
   g_stext         TYPE p1000-stext,
   g_container     TYPE scrfname VALUE 'G_CONTAINER',
   g_layout        TYPE lvc_s_layo,
   g_ok_code       TYPE sy-ucomm.

RANGES:
*  r_ldrlv FOR z90pldrlv-ldrlo,
  r_stext FOR p1000-stext.
************************************************************************
* Parameters and Selection Options
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS:
    s_objid FOR p1000-objid,
    s_trfg1 FOR t510-trfgr,
    s_funnr FOR z90pfunar-unvdp,
    s_ldrlo FOR z90pldrlv-ldrlo.
PARAMETER:
    p_table(30) TYPE c ,
    p_stext TYPE p1000-stext,
    p_rundt TYPE p1000-endda    DEFAULT sy-datum,
    p_otype TYPE p1000-otype    DEFAULT 'C'.
SELECTION-SCREEN SKIP.
PARAMETER : p_bmark TYPE p1050-bmark AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.

*eject
************************************************************************
* Initialization
************************************************************************
INITIALIZATION.
* Security check
  AUTHORITY-CHECK OBJECT 'S_TCODE' ID 'TCD' FIELD 'ZH63'.
  IF sy-subrc > 0.
    MESSAGE e172(pg) WITH 'ZH63'.
  ENDIF.

  pchplvar = '01'.           " Plan Version
  pchostat = '1'.
*eject
************************************************************************
* at selection screen
************************************************************************
AT SELECTION-SCREEN.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_objid-low.
*  PERFORM list_jobids_and_select USING s_objid-low.
*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_objid-high.
*  PERFORM list_jobids_and_select USING s_objid-high.
*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_ldrlo-low.
*  PERFORM list_ldrlv_and_select TABLES s_ldrlo.
*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_ldrlo-high.
*  PERFORM list_ldrlv_and_select TABLES s_ldrlo.
*
*AT SELECTION-SCREEN ON HELP-REQUEST FOR p_stext.
*  PERFORM list_help_for_stext.

*eject
************************************************************************
* Event top of page
************************************************************************
TOP-OF-PAGE.
*eject
************************************************************************
* event Start of Selection
************************************************************************
START-OF-SELECTION.
  set PF-STATUS 'MENU'.
  PERFORM build_table.
  PERFORM build_structure.
  PERFORM create_dynamic_itab.
* Move the selection screen data to LDB selection screen
  pchobjid[] = s_objid[].
  pchotype = p_otype.
  pchbegda = p_rundt.
  pchendda = p_rundt.

* If the selection screen date is intital set the system date
  IF p_rundt IS INITIAL.
    p_rundt = sy-datum.
  ENDIF.

  IF NOT p_stext IS INITIAL.
    TRANSLATE p_stext TO UPPER CASE.                      "#EC SYNTCHAR
    r_stext-sign = 'I'.
    r_stext-option = 'EQ'.
    r_stext-low = p_stext.
    APPEND r_stext.
  ENDIF.

GET objec.

* Check for the entry in 1000 infotype if doesn't exist continue with
* new object id
  LOOP AT p1000 . ENDLOOP.
  IF sy-subrc NE 0.
    REJECT.
  ENDIF.

* Filter Functional Area as entered in the selecetion screen
  CHECK p1000-short(2)  IN s_funnr.

* Filter Leadership Level as entered in the selecetion screen
  CHECK p1000-short+2(4)  IN s_ldrlo.

* Check for the entered s_text
  g_stext = p1000-stext.
  TRANSLATE g_stext TO UPPER CASE.                        "#EC SYNTCHAR
  CHECK g_stext IN r_stext.

  i_output_line-objid = p1000-objid.
  i_output_line-funar = p1000-short(2).
  i_output_line-ldrlo = p1000-short+2(4).
  i_output_line-stext = p1000-stext.

* Filter for Job Grade from p1005
  LOOP AT p1005 WHERE trfg1 IN s_trfg1. ENDLOOP.
  IF sy-subrc EQ 0.
    i_output_line-trfg1 = p1005-trfg1.
  ELSE.
    REJECT.
  ENDIF.

* Check for the Bench mark Jobs if selected on the selection screen
  IF p_bmark EQ 'X'.
    LOOP AT p1050. ENDLOOP.
    IF sy-subrc EQ 0.
      CHECK p1050-bmark EQ p_bmark.
    ENDIF.
  ENDIF.

* Get the object general Description
  PERFORM read_1002_desc TABLES i_t1002 USING p1000-plvar
        p1000-otype p1000-objid sy-datum p_rundt '0120'.
  IF NOT i_t1002[] IS INITIAL.
    g_count = g_count + 1.
    LOOP AT i_t1002 INTO i_t1002_line.
      i_output_line-tline = i_t1002_line.
      APPEND i_output_line TO i_output.
    ENDLOOP.
  ENDIF.

  CLEAR i_output_line.

END-OF-SELECTION.
  PERFORM fill_table.

*&---------------------------------------------------------------------*
*&      Form  BUILD_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_table .
  SELECT *
    FROM z90pfunar
    INTO TABLE i_z90pfunar
   WHERE unvdp IN s_funnr.
ENDFORM.                    " BUILD_TABLE
*&---------------------------------------------------------------------*
*&      Form  BUILD_STRUCTURE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_structure .
  DATA l_z90pfunar TYPE z90pfunar.
  DATA : idetails TYPE abap_compdescr_tab,
         xdetails TYPE abap_compdescr.

  i_fc_line-fieldname = 'TRFG1'.
  i_fc_line-datatype = 'C'.
  i_fc_line-inttype = 'C'.
  i_fc_line-intlen = '1'.
  i_fc_line-decimals = space.
  APPEND i_fc_line TO i_fc.

  LOOP AT i_z90pfunar INTO l_z90pfunar.
    CLEAR i_fc_line.
    CONCATENATE l_z90pfunar-unvdp 'BMARK' INTO i_fc_line-fieldname
                            SEPARATED BY '_'.
    i_fc_line-datatype = 'C'.
    i_fc_line-inttype = 'C'.
    i_fc_line-intlen = '1'.
    i_fc_line-decimals = space.
    APPEND i_fc_line TO i_fc.

    CONCATENATE l_z90pfunar-unvdp 'STEXT' INTO i_fc_line-fieldname
                            SEPARATED BY '_'.
    i_fc_line-datatype = 'C'.
    i_fc_line-inttype = 'C'.
    i_fc_line-intlen = '40'.
    i_fc_line-decimals = space.
    APPEND i_fc_line TO i_fc.

    CONCATENATE l_z90pfunar-unvdp 'LDRLO' INTO i_fc_line-fieldname
                            SEPARATED BY '_'.
    i_fc_line-datatype = 'C'.
    i_fc_line-inttype = 'C'.
    i_fc_line-intlen = '40'.
    i_fc_line-decimals = space.
    APPEND i_fc_line TO i_fc.
  ENDLOOP.

ENDFORM.                    " BUILD_STRUCTURE
*&---------------------------------------------------------------------*
*&      Form  read_1002_desc
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_1002     text
*      -->P_PLVAR    text
*      -->P_OTYPE    text
*      -->P_OBJID    text
*      -->P_BEGDA    text
*      -->P_ENDDA    text
*      -->P_SUBTY    text
*----------------------------------------------------------------------*
FORM read_1002_desc TABLES   p_1002 STRUCTURE pt1002
                    USING    p_plvar TYPE p1002-plvar
                             p_otype TYPE p1002-otype
                             p_objid TYPE p1002-objid
                             p_begda TYPE p1002-begda       "#EC NEEDED
                             p_endda TYPE p1002-endda
                             p_subty TYPE p1002-subty.


  REFRESH p_1002. CLEAR p_1002.

  CALL FUNCTION 'RH_OBJECT_DESCRIPTION_READ'
    EXPORTING
      plvar         = p_plvar
      otype         = p_otype
      objid         = p_objid
      sttag         = p_endda
      subty         = p_subty
      langu         = sy-langu
    TABLES
      ptxt1002      = p_1002
    EXCEPTIONS                                              "#EC *
      nothing_found = 1
      infty_empty   = 2
      undefined     = 3
      OTHERS        = 4.
  IF sy-subrc EQ 0.

  ENDIF.

ENDFORM.                    " read_1002_desc
*&---------------------------------------------------------------------*
*&      Form  create_dynamic_itab
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM create_dynamic_itab.

* Create dynamic internal table and assign to FS
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = i_fc
    IMPORTING
      ep_table        = dy_table.

  ASSIGN dy_table->* TO <dyn_table>.

* Create dynamic work area and assign to FS
  CREATE DATA dy_line LIKE LINE OF <dyn_table>.
  ASSIGN dy_line->* TO <dyn_wa>.

ENDFORM.                    "create_dynamic_itab
*&---------------------------------------------------------------------*
*&      Form  FILL_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_table .
  DATA g_dat TYPE char32.
  DATA l_field TYPE REF TO object.
*  CREATE DATA l_field LIKE g_dat.


  FIELD-SYMBOLS <fs_field_temp> TYPE ANY.
  FIELD-SYMBOLS <fs_field> TYPE ANY.
*  DATA : l_field TYPE char15.


  SORT i_output BY trfg1.
  LOOP AT i_output INTO i_output_line.


    CONCATENATE i_output_line-funar '_STEXT' INTO g_dat.
    ASSIGN g_dat TO <fs_field_temp>.

    ASSIGN COMPONENT <fs_field_temp>
       OF STRUCTURE <dyn_wa> TO <fs_field>.
    <fs_field> = i_output_line-stext.

    APPEND <dyn_wa> TO <dyn_table>.
  ENDLOOP.

  LOOP AT <dyn_table> INTO <dyn_wa>.
    DO.
      ASSIGN COMPONENT sy-index
      OF STRUCTURE <dyn_wa> TO <fs_field> .
      IF sy-subrc NE 0.
        EXIT.
      ENDIF.
      IF sy-index = 1.
        WRITE:/ <fs_field>.
      ELSE.
        WRITE: <fs_field>.
      ENDIF.

    ENDDO.
  ENDLOOP.
ENDFORM.                    " FILL_TABLE

Former Member
0 Kudos

Hi,

data :

begin of fs,

sno type i,

field type string,

end of fs.

data itab like standard table of fs.

Former Member
0 Kudos

Hi,

Use the class

CL_ABAP_TABLEDESCR

and the method create to create the internal table dynamically

Regards,

Siddarth

Former Member
0 Kudos

Hi,

Check the below Link

http://help.sap.com/saphelp_nw04/helpdata/en/9f/db999535c111d1829f0000e829fbfe/frameset.htm

Hope this helps you.

Regards,

Anki Reddy