SAP/ABAP 코드

(ABAP 코드) Dynamic Internal Table

haramang 2021. 7. 7. 22:59

문바위님 블로그에 있는 코드를 바탕으로 만들어 봄.

 

출처: https://blog.daum.net/rightvoice/817

 

[Internal Table] 생성=>Class[cl_alv_table_create] 사용하기

1) 가장 추천하는 방식임 , 예제를 잘 읽어보면 쉽게 사용할 수 있음  가) Field Catalog를 설정하여 , cl_alv_table_create=>create_dynamic_table 를 이용하는 방식 (SALV와 함께 사용하지 말것) 장점 : 가독성..

blog.daum.net

 

 

TYPE-POOLSABAP.

 

FIELD-SYMBOLS<DYN_TABLE> TYPE STANDARD TABLE,  "  <ITAB>

               <DYN_WA>,      "  <WA>

               <DYN_FIELD>.   "  <FIELD>

 

DATAIR_SALV_TAB TYPE REF TO CL_SALV_TABLE.

 

DATADY_TABLE TYPE REF TO DATA,    " ITAB

      DY_LINE  TYPE REF TO DATA,    " WA

      LS_FCAT  TYPE LVC_S_FCAT,     " For field catalog.

      LT_FCAT  TYPE LVC_T_FCAT.     " For field catalog.

 

 

SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME.

  PARAMETERSP_TABNM TYPE C LENGTH 30 DEFAULT 'ZTBD2_12_01'.

SELECTION-SCREEN END OF BLOCK B01.

 

 

 

START-OF-SELECTION.

  PERFORM CREATE_DYNAMIC_ITAB.

  PERFORM GET_DATA.

  PERFORM DISPLAY_DATA.

 

 

 

 

 

 

*&---------------------------------------------------------------------*

*& Form CREATE_DYNAMIC_ITAB

*&---------------------------------------------------------------------*

*& text

*&---------------------------------------------------------------------*

*& -->  p1        text

*& <--  p2        text

*&---------------------------------------------------------------------*

FORM CREATE_DYNAMIC_ITAB .

 

  " Version 1-----------------------------------------------------------

*  " Get field catalog from the table.

*  DATA: IDETAILS TYPE ABAP_COMPDESCR_TAB,

*        XDETAILS TYPE ABAP_COMPDESCR.

*

*  DATA: REF_TABLE_DES TYPE REF TO CL_ABAP_STRUCTDESCR.

*  " Get structure of the table.

*

*  REF_TABLE_DES ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( P_TABNM ).

*  IDETAILS[] = REF_TABLE_DES->COMPONENTS[].

*

*  LOOP AT IDETAILS INTO XDETAILS.

*    CLEAR LS_FCAT.

*    LS_FCAT-FIELDNAME = XDETAILS-NAME.

*    LS_FCAT-DATATYPE = XDETAILS-TYPE_KIND.

*    LS_FCAT-INTTYPE = XDETAILS-TYPE_KIND.

*    LS_FCAT-INTLEN = XDETAILS-LENGTH.

*    LS_FCAT-DECIMALS = XDETAILS-DECIMALS.

*    APPEND LS_FCAT TO LT_FCAT.

*  ENDLOOP.

 

 

 

 

" Version 2-----------------------------------------------------------

  DATAGT_DNTAB TYPE TABLE OF DFIES.

  CALL FUNCTION 'DDIF_FIELDINFO_GET'

    EXPORTING

     TABNAME              P_TABNM

     LANGU                SY-LANGU

     TABLES

     DFIES_TAB            GT_DNTAB.

 

  SORT GT_DNTAB BY POSITION.

 

 

  LOOP AT GT_DNTAB ASSIGNING FIELD-SYMBOL(<GS_DNTAB>).

    CLEARLS_FCAT.

    LS_FCAT-FIELDNAME <GS_DNTAB>-FIELDNAME.

    LS_FCAT-DATATYPE <GS_DNTAB>-DATATYPE.

    LS_FCAT-INTTYPE <GS_DNTAB>-INTTYPE.

    LS_FCAT-INTLEN <GS_DNTAB>-INTLEN.

    LS_FCAT-DECIMALS <GS_DNTAB>-DECIMALS.

    LS_FCAT-SCRTEXT_S <GS_DNTAB>-SCRTEXT_S.

    LS_FCAT-SCRTEXT_M <GS_DNTAB>-SCRTEXT_M.

    LS_FCAT-SCRTEXT_L <GS_DNTAB>-SCRTEXT_L.

    LS_FCAT-REPTEXT <GS_DNTAB>-REPTEXT.

    APPEND LS_FCAT TO LT_FCAT.

  ENDLOOP.

 

 

  DATADY_TABLE TYPE REF TO DATA,    " ITAB

        DY_LINE  TYPE REF TO DATA.    " WA

 

  " CREATE_DYNAMIC_TABLE Function

  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE

    EXPORTING

      IT_FIELDCATALOG           LT_FCAT

    IMPORTING

      EP_TABLE                  DY_TABLE.

 

  " Assign dynamic table to <DYN_TABLE>

  ASSIGN DY_TABLE->TO <DYN_TABLE>.

 

*  " Create Workarea of <DYN_TABLE>

*  CREATE DATA DY_LINE LIKE LINE OF <DYN_TABLE>.

*  ASSIGN DY_LINE->* TO <DYN_WA>.

 

*  " Assign field from wa

*  ASSIGN COMPONENT 1 OF STRUCTURE <LS_WA> TO <LF_FIELD>. " First field

*  ASSIGN COMPONENT LV_NAME1 OF STRUCTURE <LS_WA> TO <LF_FIELD>. "CONNID

*  ASSIGN COMPONENT 'DEVNM' OF STRUCTURE <LS_WA> TO <LF_FIELD>. "CONNID

 

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GET_DATA

*&---------------------------------------------------------------------*

*& text

*&---------------------------------------------------------------------*

*& -->  p1        text

*& <--  p2        text

*&---------------------------------------------------------------------*

FORM GET_DATA .

 

    SELECT FROM (P_TABNM)

    INTO CORRESPONDING FIELDS OF TABLE <DYN_TABLE>.

 

ENDFORM.

*&---------------------------------------------------------------------*

*& Form DISPLAY_DATA

*&---------------------------------------------------------------------*

*& text

*&---------------------------------------------------------------------*

*& -->  p1        text

*& <--  p2        text

*&---------------------------------------------------------------------*

FORM DISPLAY_DATA .

  TRY.

    CALL METHOD CL_SALV_TABLE=>FACTORY

        EXPORTING

          LIST_DISPLAY IF_SALV_C_BOOL_SAP=>FALSE

        IMPORTING

          R_SALV_TABLE IR_SALV_TAB

        CHANGING

          T_TABLE      <DYN_TABLE>.

 

      IR_SALV_TAB->DISPLAY(   ).

    CATCH CX_SALV_MSG.

  ENDTRY.

ENDFORM.