ABAP

Dynamic table test

clode 2023. 2. 24. 13:01
728x90
반응형

TOP

PARAMETERS : p_table(30) TYPE c OBLIGATORY.

"입력받을 abap dictionary 테이블을 위한 파라미터

FIELD-SYMBOLS <fs_table> TYPE STANDARD TABLE.

DATA : gv_tabname TYPE dd02t-ddtext, "테이블 텍스트
       ok_code TYPE sy-ucomm.

"ALV

DATA : gt_fieldcat TYPE lvc_t_fcat,

       gs_fieldcat TYPE lvc_s_fcat.


DATA : gs_variant TYPE disvariant,

       gs_layout TYPE lvc_s_layo.

GET DATA

FORM get_data .

DATA gv_data TYPE REF TO data.

CLEAR gv_tabname.


SELECT SINGLE ddtext

  INTO gv_tabname

  FROM dd02t

    WHERE tabname = p_table

    AND ddlanguage = sy-langu.

"파라미터와 동일한 이름의 테이블과 시스템 언어


IF sy-subrc <> 0.

MESSAGE '존재하지 않는 테이블 입니다' TYPE 'A' DISPLAY LIKE 'E'.

ELSE.


"입력받은 테이블형태의 동적 internal table 생성
CREATE DATA gv_data TYPE TABLE OF (p_table). 
"파라미터로 입력받은 테이블 이름
ASSIGN gv_data->* TO <fs_table>.


"입력받은 테이블로부터 데이터 SELECT
SELECT * FROM (p_table) INTO TABLE <fs_table> UP TO 100 ROWS.

ENDIF.

ENDFORM.
FORM set_fieldcat .


DATA : lt_fieldcat TYPE slis_t_fieldcat_alv,

      lv_tabname TYPE dd02l-tabname. "SAP 테이블 이름


FIELD-SYMBOLS <fs_fcat> TYPE lvc_s_fcat.

lv_tabname = p_table. "파라미터 값을 넣어줌

CLEAR gt_fieldcat.


CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

i_program_name = sy-repid

i_structure_name = lv_tabname "파라미터로 넘겨받은 테이블 이름

i_inclname = sy-repid

CHANGING

ct_fieldcat = lt_fieldcat[].


CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'

EXPORTING

it_fieldcat_alv = lt_fieldcat

IMPORTING

et_fieldcat_lvc = gt_fieldcat

TABLES

it_data = <fs_table>.


ENDFORM.
FORM display_alv .

CALL METHOD go_grid->set_table_for_first_display
EXPORTING
i_save = 'A'
i_default = 'X'
is_layout = gs_layout
CHANGING
it_outtab = <fs_table>
it_fieldcatalog = gt_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
others = 4.

ENDFORM.
728x90
반응형