오늘 스터디를 진행하면서 중점적으로 다룬 내용은 Header line 선언이다.
(거의 SAP ERP 직무로 일한지 1년이 다 되어가는 시점에서 Occurs 0과 With header line의 차이점을 알게 되었다는게 부끄럽지만 이제부터라도 알아가면 되는 내용이니까! 이 글을 읽는 분들 또한, 자세히 모르는 내용이었다면 도움이 되기를 바란다.)
회사에서 운영 업무를 하다가 보면 내가 개발하지 않은 프로그램을 분석해야하는 경우가 많은데, 나는 지금까지 다른 사람들이 개발한 소스를 볼 때, Occurs 0 = With header line이라고 생각을 해왔다.
(비슷한 개념이고 조금의 차이가 있다는것을 공부하면서 알게 되었다.)
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은 없는 테이블
"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임을 알 수 있다.)
<추가로 알아두면 좋은 것>
그런데,,
이제 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번 로직처럼 선언을 하는 방식이 앞으로 더 도움이 될 수 있다.
개념정리 감사해요