본문 바로가기
ABAP/Syntax

[Syntax] FOR - 반복 표현식

by name_text 2023. 10. 17.

FOR

반복표현식, REDUCE, NEW, VALUE와 함께 사용

 

ABAP New syntax인 FOR는 다른 개발언어의 for와 마찬가지로 반복적인 처리를 할수 있습니다.

REDUCE의 사용방법은 아래 링크를 참고하면 되며,

2023.07.12 - [ABAP/Syntax] - [Syntax] REDUCE - 축소 연산자

NEW와 VALUE를 사용하여 Internal Table로 데이터를 받을 수 있습니다.

 

 

# Syntax

REDUCE|NEW|VALUE type( ... FOR ... UNTIL|WHILE ...|... IN ... ... ) ...

 

# 사용예시

VALUE FOR의 사용예시입니다.

Internal Table 유형에 따른 성능은 : Sorted Table > Standard Table > Secondary Key

FOR IN의 성능 비교

DATA: LT_BSEG TYPE STANDARD TABLE OF BSEG WITH NON-UNIQUE SORTED KEY KEY1 COMPONENTS BUKRS GJAHR,
      LT_BSEG_SORT TYPE SORTED TABLE OF BSEG WITH NON-UNIQUE KEY BUKRS GJAHR.
TYPES: BEGIN OF T_FILTER,
  BUKRS TYPE BSEG-BUKRS,
  GJAHR TYPE BSEG-GJAHR,
  END OF T_FILTER,
  TT_FILTER TYPE STANDARD TABLE OF T_FILTER WITH EMPTY KEY.
DATA LT_TMP TYPE TT_FILTER.

DO 100000 TIMES.
  LT_BSEG = VALUE #( BASE LT_BSEG
                  ( BUKRS = '1000' GJAHR = '2023'  BELNR = '11111' BUZEI = '001' )
                  ( BUKRS = '1000' GJAHR = '2022'  BELNR = '11111' BUZEI = '002' )
                  ( BUKRS = '1000' GJAHR = '2022'  BELNR = '11111' BUZEI = '003' )
                  ( BUKRS = '1000' GJAHR = '2023'  BELNR = '11122' BUZEI = '001' )
                  ( BUKRS = '1100' GJAHR = '2023'  BELNR = '11022' BUZEI = '001' )
                  ( BUKRS = '1100' GJAHR = '2023'  BELNR = '11022' BUZEI = '002' )
                  ( BUKRS = '1100' GJAHR = '2023'  BELNR = '11022' BUZEI = '003' )
                  ).
ENDDO.
LT_BSEG_SORT = CORRESPONDING #( LT_BSEG ).

"Standard Table을 조건으로 FOR IN
LT_TMP = VALUE #( FOR LS IN LT_BSEG
                  WHERE ( BUKRS EQ '1000' AND GJAHR EQ '2023' )
                  ( BUKRS = LS-BUKRS
                    GJAHR = LS-GJAHR ) ).
                    
"Standard Table의 Secondary Key로 FOR IN
LT_TMP = VALUE #( FOR LS IN LT_BSEG USING KEY KEY1
                  WHERE ( BUKRS EQ '1000' AND GJAHR EQ '2023' )
                  ( BUKRS = LS-BUKRS
                    GJAHR = LS-GJAHR ) ).
                    
"Sorted Table의 Primary key로 FOR IN
LT_TMP = VALUE #( FOR LS IN LT_BSEG_SORT
                  WHERE ( BUKRS EQ '1000' AND GJAHR EQ '2023' )
                  ( BUKRS = LS-BUKRS
                    GJAHR = LS-GJAHR ) ).

 

# 사용예시 - Internal Table의 내용을 Range로 복사

"Internal Table의 내용을 Range로 간단하게 복사
RANGES LR_PRCTR FOR CEPC-PRCTR.
LR_PRCTR[] = VALUE #( FOR LS IN LT_HIERARCHYVALUES
                      ( LOW     = LS-VALFROM
                        HIGH    = LS-VALTO
                        SIGN    = 'I'
                        OPTION  = 'BT' ) ).

댓글