안녕하세요.
SAP ABAP new Syntax에 대해서 한 번 알아보겠습니다.
SAP 버전 7.4 Patch 이후로 ABAP에서 신규로 사용할 수 있는 구문들에 대해서 정리해보겠습니다.

1. 데이터 선언 및 테이블 선언
1-1. 데이터 선언
7.4 이전 구문
DATA : lv_var1 TYPE char5.
lv_var1 = ‘ABC’.
신 구문 활용
DATA(lv_var1) = ‘ABC’.
1-2. 테이블 선언
7.4 이전 구문
DATA lt_tab LIKE lt_table.
lt_tab[] = lt_table[].
신 구문 활용
DATA(lt_tab) = lt_table[].
해당 내용 변경을 통해, 변수 및 테이블에 대한 변수 선언을 별도로 사용할 필요가 없어졌습니다.
해당 변수는 local object로써 사용되며, perform밖으로 수행될 경우 데이터가 자동으로 clear 처리 됩니다.
2. 데이터 SELECT 중 데이터 선언
7.4 이전 구문
DATA : ls_workarea TYPE char10.
SELECT SINGLE fld1 fld2
FROM (DB-TABLE)
INTO ls_workarea
WHERE fld1 = lv_var1
AND fld2 = var2.
신 구문 활용
SELECT SINGLE fld1, fld2
FROM (DB-TABLE)
INTO @DATA(ls_workarea)
WHERE fld1 EQ @lv_var1
AND fld2 EQ @var2.
해당 내용 변경을 통해, 별도의 workarea나 Internal table에 대한 구조체 선언을 별도로 해줄 필요가 없어졌습니다.
해당 변수는 local object로써 사용되며, perform밖으로 수행될 경우 데이터가 자동으로 clear 처리 됩니다.
추가로 선언되는 변수는 가지고 오는 DB-TABLE의 변수와 동일한 유형으로 선언되며,
필드의 순서 또한 select 쿼리 기준으로 생성됩니다.
3. 데이터 SELECT 중 테이블 선언
7.4 이전 구문
DATA : lt_table TYPE TABLE OF BKPF
SELECT fld1 fld2
FROM BKPF
INTO TABLE lt_table
WHERE fld1 = lv_var1
AND fld2 = var2.
신 구문 활용
SELECT fld1, fld2
FROM BKPF
INTO TABLE @DATA(lt_table)
WHERE fld1 EQ @lv_var1
AND fld2 EQ @var2.
2번 내용 참조.
4. Loop 로직 / READ TABLE 로직 중 데이터 선언
7.4 이전 구문
DATA : ls_workarea TYPE structure
Loop 로직
LOOP AT lt_table INTO ls_workarea.
ENDLOOP.
Read Table 로직
READ TABLE lt_table into ls_workarea WITH KEY field1 = lv_var1.
신 구문 활용
Loop 로직
LOOP AT lt_table INTO data(ls_workarea).
ENDLOOP.
Read Table 로직
READ TABLE lt_table into data(ls_workarea) WITH KEY field1 = lv_var1.
2번 내용과 동일
5. Loop 로직 / READ TABLE 로직 중 필드심볼 필드 선언
7.4 이전 구문
Loop 로직
FIELD-SYMBOLS : <line> type any.
LOOP AT lt_table ASSIGNING <line>.
ENDLOOP.
Read Table 로직
READ TABLE lt_table ASSIGNING <line> WITH KEY FLD1 = LV_VAR1.
신 구문 활용
Loop 로직
LOOP AT lt_table ASSIGNING FIELD-SYMBOL(<line>).
ENDLOOP.
Read Table 로직
READ TABLE lt_table ASSIGNING FIELD-SYMBOL(<line>) WITH KEY FLD1 = LV_VAR1.
해당 내용 변경을 통해, 별도의 Field-symbol에 대한 구조체 선언을 별도로 해줄 필요가 없어졌습니다.
해당 변수는 local object로써 사용되며, perform밖으로 수행될 경우 데이터가 자동으로 unassign 처리 됩니다.
6. Read Table 로직 활용
6-1. Key를 활용한 데이터 선택
7.4 이전 구문
READ TABLE lt_table INTO DATA(ls_workarea) WITH KEY fld1 = lv_var1.
신 구문 활용
DATA(ls_workarea) = lt_table[ fld1 = lv_var1 ].
6-2. index를 활용한 데이터 선택
7.4 이전 구문
READ TABLE lt_table INTO DATA(ls_workarea) index 1.
신 구문 활용
DATA(ls_workarea) = lt_table[ 1 ].
6-3. 데이터 선택 후 특정 필드 입력
7.4 이전 구문
READ TABLE lt_table INTO ls_workarea WITH KEY fld1 = lv_var1.
IF sy-subrc EQ 0.
lv_var2 = ls_workarea-var2.
ENDIF.
신 구문 활용
lv_var2 = lt_table[ fld1 = lv_var1 ]-var2.
6-4. Key를 활용한 데이터 선택 후 존재 여부 확인
7.4 이전 구문
READ TABLE lt_table TRANSPORTING NO FIELDS WITH KEY fld1 = lv_var1.
IF sy-subrc = 0.
ENDIF.
신 구문 활용
IF line_exists( lt_table[ fld1 = lv_var1 ] ).
ENDIF.
6-5. Key를 활용한 데이터 선택 후 index 값 도출
7.4 이전 구문
READ TABLE lt_table TRANSPORTING NO FIELDS fld1 = lv_var1.
IF sy-subrc eq 0
lv_tabix = sy-tabix.
ENDIF.
신 구문 활용
lv_tabix = line_index( lt_table[ fld1 = lv_var1 ] ).
6-6. Key를 활용한 데이터 선택 후 Field-symbol 활용 데이터 값 변경
7.4 이전 구문
READ TABLE lt_table ASSIGNING <lfs_tab> fld1 = lv_var1.
IF sy-subrc eq 0
<lfs_tab>-fld2 = 'Text'.
ENDIF.
신 구문 활용
lt_table[ fld1 = lv_var1 ]-fld2 = 'Text'.
해당 내용 변경을 통해, Read table 활용 시 로직이 간소화 되었습니다.
7. ALPHA Conversion 활용
DATA : lv_var1 type char10.
lv_var1 = '0000012345'.
7.4 이전 구문
Conversion Output ( 0 제거 함수 )
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_OUTPUT’
EXPORTING
INPUT = lv_var1
IMPORTING
OUTPUT = lv_var1 .
결과 : lv_var1 = 12345.
신 구문 활용
lv_var1 = |{ lv_var1 ALPHA = OUT}|.
결과 : lv_var1 = 12345.
해당 내용 변경을 통해, ALPHA Conversion 활용 시 로직이 간소화 되었습니다.
INPUT Function도 OUTPUT과 동일하게 처리할 수 있습니다.
8. IF / CASE 구문 활용
8-1. IF 구문 활용
7.4 이전 구문
DATA : lv_var1 type char10.
IF cond1.
lv_var1 = fld1.
ELSE.
lv_var1 = fld2.
ENDIF.
신 구문 활용
DATA(lv_var1) = COND #( WHEN cond1 THEN fld1 ELSE fld2 ).
8-2. CASE 구문 활용
7.4 이전 구문
DATA : lv_var1 type char10.
CASE lv_var1 .
WHEN cond1.
lv_var1 = fld1.
WHEN cond2.
lv_var1 = fld2.
ENDCASE.
신 구문 활용
DATA(lv_var1) = SWITCH #( lv_var1 WHEN cond1 THEN fld1
WHEN cond2 THEN fld2 ).
해당 내용 변경을 통해, IF문과 CASE 구문 활용 시 로직이 간소화 되었습니다.
단, 디버깅 시 선언한 데이터로 결과값이 바로 입력되어,
데이터를 따라가야하는 복잡한 IF , CASE문의 경우 추적의 어려움이 있습니다.
9. Internal Table 데이터 입력
9-1. Table 데이터 Append
7.4 이전 구문
DATA: lt_table TYPE TABLE OF structure,
ls_workarea TYPE structure.
ls_workarea-fld1 = 1.
ls_workarea-fld2 = 'A'.
APPEND ls_workarea TO lt_table. CLEAR LS_WORKAREA.
ls_workarea-fld1 = 2.
ls_workarea-fld2 = 'B'.
APPEND ls_workarea TO lt_table. CLEAR LS_WORKAREA.
신 구문 활용
DATA(lt_table) = VALUE structure(( fld1 = 1 fld2 = 'A' )
( fld1 = 2 fld2 = 'B' )).
※ 추가 내용
만일 기존에 가지고 있는 데이터를 건들이지 않고 append를 하고 싶을 경우 아래의 로직대로 BASE를 활용한다.
위의 로직은 lt_table[] = lt_table_tmp[] 의 결과와 유사하다고 판단하면 됩니다.
lt_table = VALUE #( BASE lt_table ( fld1 = 1 fld2 = 'A' )
( fld1 = 2 fld2 = 'B' ) ).
테이블간 append도 이와 동일하게 BASE구문을 활용하여 처리할 수 있습니다.
lt_table3 = corresponding #( BASE ( lt_table3 ) lt_table2 ).
9-2. Table간 데이터 이동
7.4 이전 구문
MOVE-CORRESPONDING lt_table1 to lt_table2.
신 구문 활용
lt_table2 = CORRESPONDING #( lt_table1 ).
만일 필드를 정하여 이동하고 싶을 경우, 아래와 같이 필드명을 매핑지어서 처리할 수 있습니다.
lt_table2 = CORRESPONDING #( lt_table1 MAPPING t1_fld1 = t2_fld1
t1_fld2 = t2_fld2 ).
데이터를 옮기면서 특정 필드만 제외를 원한다면, EXCEPT 로직으로 처리가 가능합니다.
lt_table2 = CORRESPONDING #( lt_table1 EXCEPT t1_fld3,t1_fld4 ).
9-3. 구조가 다른 테이블 간 데이터 이동.
*--Defining Structure
TYPES: BEGIN OF lty_stru
gjahr TYPE gjahr,
belnr TYPE belnr_d,
END OF lty_stru,
lt_t_stru TYPE STANDARD TABLE OF lty_stru.
7.4 이전 구문
DATA: lt_awkey TYPE TABLE OF lty_stru,
ls_awkey TYPE lty_stru.
LOOP AT lt_bkpf into ls_bkpf.
ls_awkey-gjahr = ls_bkpf-awkey+10(4).
ls_awkey-belnr = ls_bkpf-awkey+0(10).
APPEND ls_awkey to lt_awkey. CLEAR : ls_awkey.
ENDLOOP.
신 구문 활용
DATA(lt_awkey) = VALUE lt_t_stru( FOR <lfs_bkpf> IN lt_bkpf
( gjahr = <lfs_bkpf>-awkey+10(4)
belnr = <lfs_bkpf>-awkey+0(10) ) ).
위와 같은 내역들의 새로운 ABAP New syntax를 살펴봤습니다.
코딩에 도움이 되길 바랍니다.

'SAP ABAP' 카테고리의 다른 글
SAP 디버깅 - Watch Point (0) | 2025.01.06 |
---|---|
SAP 디버깅 방법 (1) | 2025.01.06 |
SAP 개행문자에 대해서 알아보자 (1) | 2024.11.26 |
ABAP 개발 단축키 (1) | 2024.11.20 |
SAP ABAP 기본 Syntax (1) | 2024.11.19 |