[ABAP] AT NEW, AT END OF (SFLIGHT 예제 해보기)

몰라·2025년 4월 5일

ABAP

목록 보기
2/13

실습직접 해봐야 함!!

ABAP 초보라면 AT NEW, AT END OF 구문이 뭔지도 모르겠고,
써본 적도 없고, 언제 써야 하는지도 감이 안 올 수 있습니다.

이 포스팅은 AT NEW / AT END OF가 어떤 구문이고,
실무에서 어떤 경우에 유용한지, 그리고
SFLIGHT 예제를 통해 직접 실행해보는 실습 예제까지 제공합니다.


✅ AT NEW / AT END OF란?

AT NEW, AT END OF는 ABAP의 루프 제어 구문입니다.
내부 테이블을 루프 처리할 때, 특정 필드 값이 바뀌는 순간을 포착해서
그룹별로 구분된 처리를 할 수 있게 해줍니다.


🧠 언제 쓰는가?

사용 상황 예시설명
회사코드별로 데이터 묶어서 처리bukrs 값이 바뀔 때마다 처리
전표 번호별로 하위 항목 집계belnr 단위로 그룹 처리
항공사별로 항공편 정리CARRID 값이 바뀔 때 구분해서 출력

즉, "이 그룹이 새로 시작하거나 끝나는 시점"을 잡아서 처리하고 싶은 상황에서 쓰입니다.


✅ 핵심 개념

구문역할
AT NEW <필드>해당 필드 값이 바뀌는 첫 줄에서만 실행
AT END OF <필드>해당 필드 값이 끝나는 마지막 줄에서만 실행

🔍 사용 전 주의사항

  • AT NEW, AT END OF를 쓰려면 내부 테이블이 반드시 해당 필드로 정렬되어 있어야 합니다!
  • 그렇지 않으면 올바르게 동작하지 않습니다.

✈️ SFLIGHT 예제로 실습하기

SFLIGHT 테이블은 항공편 정보를 담고 있는 SAP의 기본 테이블입니다.

▶ 목표: 항공사(CARRID)별로 항공편 목록을 묶어서 출력하기

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 <필드>해당 필드 값이 끝나는 마지막 줄그룹 시점
profile
일주일 동안 헤맨 흔적을 정리하러 왔습니다

0개의 댓글