본문 바로가기
ABAP/Syntax

[Syntax] VALUE - structure 와 internal table에 값 할당

by name_text 2023. 7. 18.

VALUE

ABAP New syntax 인 VALUE는 move-corresponding 및 append와 유사한 기능을 수행합니다.

 

Structure에 사용시 초기화 후 move-corresponding 형태로 값을 할당합니다.

Internal Table에 사용시 초기화 후 append 형태로 값을 추가 합니다.

* BASE 문을 이용하여 Internal Table을 초기화하지 않고 append가 가능합니다

 

workarea를 이용한 append를 완전히 대체하긴 어렵지만 간단히 사용하기에는 아주 편리합니다.

 

# 사용예시

TYPES: BEGIN OF T_TMP,
  BUKRS TYPE T001-BUKRS,
  BUTXT TYPE T001-BUTXT,
  END OF T_TMP.

TYPES TT_TMP TYPE TABLE OF T_TMP WITH NON-UNIQUE KEY BUKRS.

DATA: LT_T001 TYPE STANDARD TABLE OF T001,
      LS_T001 LIKE LINE OF LT_T001.

* Structure 에 값 할당(move-corresponding)
  " value #        --> 값을 받은 변수의 형식으로 변환
  LS_T001 = VALUE #( BUKRS = '1000' BUTXT = '회사명' ).

  WRITE:/ LS_T001.

  " value {type}   --> {type} 형식으로 move
  DATA(LS_TMP1) = VALUE T001( BUKRS = '1000' BUTXT = '회사명' ).
  WRITE:/ LS_TMP1.

  DATA(LS_TMP2) = VALUE T_TMP( BUKRS = '1000' BUTXT = '회사명' ).
  WRITE:/ LS_TMP2.


* Internal Table 에 값 할당 (append)
  LT_T001 = VALUE #( ( BUKRS = '1000' BUTXT = '회사명' )
                     ( BUKRS = '2000' BUTXT = '회사2' )
                     ( BUKRS = '3000' BUTXT = '회사3' )
                     BUTXT = '회사이름 고정'  "다음 레코드 부터 고정값으로 설정할 수 있다
                     ( BUKRS = '4000' )
                     ( BUKRS = '5000' ) ).

  " BASE를 이용하여 기존 Internal Table에 append 할수 있다
  LT_T001 = VALUE #( BASE LT_T001
                     ( BUKRS = '9000' BUTXT = '회사9' ) ).

  ZCL_SALV_TEST=>DISPLAY( LT_T001 ).

  "value {type} 을 이용하여 지정된 형식으로 Internal Table을 생성하면서 append 할수 있다
  DATA(LT_TMP) = VALUE TT_TMP( ( BUKRS = '1000' BUTXT = '회사명' )
                               ( BUKRS = '2000' BUTXT = '회사2' )
                               ( BUKRS = '3000' BUTXT = '회사3' )
                               BUTXT = '회사이름 고정'
                               ( BUKRS = '4000' )
                               ( BUKRS = '5000' ) ).

  LT_TMP = VALUE TT_TMP( BASE LT_TMP
                        ( BUKRS = '9000' BUTXT = '회사9' ) ).

  ZCL_SALV_TEST=>DISPLAY( LT_TMP ).

댓글