문바위님 블로그에 있는 코드를 바탕으로 만들어 봄.
출처: 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-POOLS: ABAP.
FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE, " <ITAB>
<DYN_WA>, " <WA>
<DYN_FIELD>. " <FIELD>
DATA: IR_SALV_TAB TYPE REF TO CL_SALV_TABLE.
DATA: DY_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.
PARAMETERS: P_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-----------------------------------------------------------
DATA: GT_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>).
CLEAR: LS_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.
DATA: DY_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.
'SAP > ABAP 코드' 카테고리의 다른 글
(ABAP 코드) 앞에 빈자리 숫자 0 채우기 (0) | 2021.08.09 |
---|---|
(ABAP 코드) STRING 앞 뒤 공백제거 (0) | 2021.08.09 |
(ABAP 코드) SELECTION-SCREEN TABBED BLOCK (0) | 2021.07.07 |
(ABAP 코드) DROPBOX / Function Key (버튼) (0) | 2021.07.07 |
(ABAP 코드) Selection-Screen Dropbox (0) | 2021.07.07 |