#03. OCCURS 0 / WITH HEADER LINE 차이점

썸지·2022년 4월 24일
3

ABAP Study

목록 보기
3/3
post-thumbnail

오늘 스터디를 진행하면서 중점적으로 다룬 내용은 Header line 선언이다.
(거의 SAP ERP 직무로 일한지 1년이 다 되어가는 시점에서 Occurs 0과 With header line의 차이점을 알게 되었다는게 부끄럽지만 이제부터라도 알아가면 되는 내용이니까! 이 글을 읽는 분들 또한, 자세히 모르는 내용이었다면 도움이 되기를 바란다.)

회사에서 운영 업무를 하다가 보면 내가 개발하지 않은 프로그램을 분석해야하는 경우가 많은데, 나는 지금까지 다른 사람들이 개발한 소스를 볼 때, Occurs 0 = With header line이라고 생각을 해왔다.
(비슷한 개념이고 조금의 차이가 있다는것을 공부하면서 알게 되었다.)

OCCURS 0

1번
DATA : G_TEST  TYPE SFLIGHT.

2번
DATA : G_TEST1 TYPE SFLIGHT OCCURS 0.

1번 로직과 2번 로직의 차이점은 Body의 유무이다.

해당 로직 선언 후, 디버깅을 걸어 보면 다음과 같은 차이점을 볼 수 있다.

OCCURS 0을 선언한 G_TEST1은 BOBY가 생긴 테이블이 되었고, OCCURS 0을 선언하지 않은 G_TEST는 SFLIGHT 타입의 Structure이 되었다.

G_TEST1은 BOBY가 있지만, HEADER LINE은 없는 테이블

WITH HEADER LINE

"3번
DATA : G_TEST2 TYPE SFLIGHT WITH HEADER LINE.

"4번
DATA : G_TEST2 TYPE TABLE OF SFLIGHT WITH HEADER LINE.

3번과 4번의 로직의 차이점은 G_TEST2가 Structure 형태이냐, 테이블 형태이냐가 큰 차이점이다. 해당 로직을 입력한 후, 활성화 버튼을 누르면

"WITH HEADER LINE" can only be specified with table types

라는 에러가 뜨는 것을 확인 할 수 있다.
즉, 3번 로직은 잘못된 로직이고 WITH HEADER LINE 구문은 TABLE TYPE일 때만 사용을 할 수 있다.

"3번
DATA : G_TEST2 TYPE SFLIGHT WITH HEADER LINE. "잘못된 로직!!

"4번
DATA : G_TEST2 TYPE TABLE OF SFLIGHT WITH HEADER LINE.

G_TEST2는 HEADER LINE이 생긴 TABLE이다. (모자 아이콘이 생긴 G_TEST2 Structure 형태가 HEADER LINE임을 알 수 있다.)

즉, OCCURS 0은 Structure 형태에서 BOBY를 만드는 것이고 WITH HEADER LINE은 Table 형태에서 Header line(work area)을 만드는 로직이다.

<추가로 알아두면 좋은 것>
그런데,,
이제 SAP S/4 HANA 버전 부터는 HEADER LINE을 사용하는 것을 권장하지 않는다고 한다. (권장하지 않는다고 하면 S/H HANA에서 아예 헤더라인 구문이 먹히지 않는 것은 아닐 것 같은데 이렇게 애매하게 남겨두는 이유는 모르겠다.)
그래서 따로, WORK AREA를 선언을 해주어야 한다는데 개인적으로는 WITH HEADER LINE구문만 추가해주면 헤더라인이 생기는데 왜..이렇게 바뀌는지 이해가 가지 않는다. 하지만, 자기들도 무슨 이유가 있어서...그런거겠지! S/4 HANA로 컨버전하는 회사가 많아지고 있기 때문에 지금 ABAP을 배우고 있는 입장이라면 WITH HEADER LINE을 쓰지 않고 WORK AREA를 선언해주는 방식으로 습관을 길러두면 좋을 것 같다!

5번
DATA : BEGIN OF GS_TEST,
       NAME(10) TYPE C,
       PHONE(20) TYPE I,
       CITY(10)  TYPE C,
       END OF GS_TEST.

DATA : GT_TEST LIKE TABLE OF GS_TEST.

GS_TEST가 WORK AREA로 헤더라인 역할을 해주고, GT_TEST는 GS_TEST TYPE을 참고한 인터널테이블로 선언이 되었다.
5번 로직처럼 선언을 하는 방식이 앞으로 더 도움이 될 수 있다.

2개의 댓글

comment-user-thumbnail
2022년 11월 8일

개념정리 감사해요

답글 달기
comment-user-thumbnail
2023년 8월 23일

감사합니다 잘읽고가요!!

답글 달기