실습직접 해봐야 함!!
ABAP 초보라면 AT NEW, AT END OF 구문이 뭔지도 모르겠고,
써본 적도 없고, 언제 써야 하는지도 감이 안 올 수 있습니다.
이 포스팅은 AT NEW / AT END OF가 어떤 구문이고,
실무에서 어떤 경우에 유용한지, 그리고
SFLIGHT 예제를 통해 직접 실행해보는 실습 예제까지 제공합니다.
AT NEW, AT END OF는 ABAP의 루프 제어 구문입니다.
내부 테이블을 루프 처리할 때, 특정 필드 값이 바뀌는 순간을 포착해서
그룹별로 구분된 처리를 할 수 있게 해줍니다.
| 사용 상황 예시 | 설명 |
|---|---|
| 회사코드별로 데이터 묶어서 처리 | bukrs 값이 바뀔 때마다 처리 |
| 전표 번호별로 하위 항목 집계 | belnr 단위로 그룹 처리 |
| 항공사별로 항공편 정리 | CARRID 값이 바뀔 때 구분해서 출력 |
즉, "이 그룹이 새로 시작하거나 끝나는 시점"을 잡아서 처리하고 싶은 상황에서 쓰입니다.
| 구문 | 역할 |
|---|---|
AT NEW <필드> | 해당 필드 값이 바뀌는 첫 줄에서만 실행 |
AT END OF <필드> | 해당 필드 값이 끝나는 마지막 줄에서만 실행 |
AT NEW, AT END OF를 쓰려면 내부 테이블이 반드시 해당 필드로 정렬되어 있어야 합니다!SFLIGHT 테이블은 항공편 정보를 담고 있는 SAP의 기본 테이블입니다.
DATA: lt_sflight TYPE TABLE OF sflight,
ls_sflight TYPE sflight.
SELECT * FROM sflight INTO TABLE lt_sflight.
SORT lt_sflight BY carrid connid.
LOOP AT lt_sflight INTO ls_sflight.
AT NEW carrid.
WRITE: / '항공사:', ls_sflight-carrid.
ENDAT.
WRITE: / ls_sflight-connid, ls_sflight-fldate.
AT END OF carrid.
WRITE: / '------------------------------'.
ENDAT.
ENDLOOP.
▶ 출력 예시 (가상의 데이터 기준)
항공사: LH
2400 2024-04-01
2401 2024-04-02
------------------------------
항공사: SQ
3000 2024-04-01
3001 2024-04-03
------------------------------
AT NEW carrid. → 항공사 값이 바뀌는 첫 줄에서 항공사명 출력AT END OF carrid. → 항공사 그룹의 마지막 줄에서 구분선 출력AT NEW / AT END OF는 그룹 시작/끝 포인트를 잡아줄 때 유용합니다.SORT BY 없이 쓰면 정상 동작하지 않기 때문에 정렬은 필수입니다.SORT lt_bseg BY bukrs belnr buzei.
위처럼 정렬해놓고 AT NEW belnr. 하면 전표 번호 단위로 묶인 구간이 잡힙니다.
| 구문 | 조건 | 실행 타이밍 |
|---|---|---|
AT NEW <필드> | 해당 필드 값이 처음 바뀌는 줄 | 그룹 시작 시점 |
AT END OF <필드> | 해당 필드 값이 끝나는 마지막 줄 | 그룹 끝 시점 |