본문 바로가기

ABAP 물타기/Report

동적 테이블 필드 활용 function


동적으로 테이블 이름과 internal 테이블 데이터를 받아서 활용하는 Function!

1. 먼저 function - 테이블에는 아무런 타입을 참조 시키지 않고, 테이블 명은 importing 함.


  FUNCTION ZTESTFF01.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(ZTABLE_NAME) LIKE  DD02L-TABNAME
*"  TABLES
*"      ZTABLE
*"----------------------------------------------------------------------

  TYPE-POOLS : slis.

  FIELD-SYMBOLS: <F> TYPE ANY TABLE,
                 <FL>.

  DATA: gt_fieldcat_h TYPE slis_t_fieldcat_alv WITH HEADER LINE.

  DATA: ZFNAME TYPE CHAR30.

  CLEAR : gt_fieldcat_h[], gt_fieldcat_h.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = sy-repid
      i_inclname             = sy-repid
      i_structure_name       = ZTABLE_NAME    "<<--- TABLE NAME!!!
    CHANGING
      ct_fieldcat            = gt_fieldcat_h[]
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2.


  LOOP AT ZTABLE.
    LOOP AT gt_fieldcat_h.
      CONCATENATE 'ZTABLE-' gt_fieldcat_h-fieldname INTO ZFNAME.  
       "<<--- gt_fieldcat_h-fieldname : FIELD NAME

      ASSIGN (ZFNAME) TO <FL>.  "<<--- <FL> : FIELD VALUE
      IF <FL> IS NOT INITIAL.
        WRITE :/ <FL>.    "<<--- INSERT LOG TABLE
      ENDIF.
    ENDLOOP.

  ENDLOOP.

ENDFUNCTION.



2. 호출 report - 테이블 명과 데이터를 넘김

  REPORT  ZTEST.

data: gt01 TYPE TABLE OF mara WITH HEADER LINE.  "<<-- TARGET TABLE

START-OF-SELECTION.

gt01-MATNR = '1'APPEND GT01.  "<<--- SET VALUE
gt01-MATNR = '2'APPEND GT01.
gt01-MATNR = '3'APPEND GT01.
gt01-MATNR = '4'APPEND GT01.


CALL FUNCTION 'ZTESTFF01'
  EXPORTING
    ZTABLE_NAME = 'MARA'   "<<--- TABLE NAME
  TABLES
    ZTABLE        = gt01   "<<--- TABLE TYPE INTERNAL TABLE
          .

if sy-subrc = 0.
  write :/'ok'.
endif.