300x250
728x90
SAP LOOP AT에 대해서
# LOOP에서 사용되는 ( First, New, End, Last )에 대해서
# 총계, 소계 등 계산할 때 자주 사용하는 구문, LOOP문을 제어할 때 많이 쓰이기도 한다.
# 한 번쯤 써보게 되는 LOOP AT 문
# 시작하기 전, 미리 알아야 하는 것은 ( First, New, End, Last ) 구문을 쓸 때에는 조심해야 할 게 있다 #
1. LOOP문이 보이는 곳에 AT문을 써야 한다. ( LOOP문 안에 사용한다고 AT문을 사용 할 순 없다 )
2. AT문 안에 Workarea을 넣으면 다음과 같이 " * " 값이 변경되는 걸 볼 수 있다.
3. SORT는 필수로 해주는 게 좋다. ( 여기서는 사용 안 했다 )
4. AT NEW, AT END OF를 사용하려고 할 때, 인터널 테이블에서 기준 필드를 가장 앞 필드로 설정해야한다.
예를 들어)
# 01. 가상 테이블에서 CONNID 기준으로 PAYMENTSUM( Total )을 합계를 낸다 가정한다면
# 02. 인터널 테이블의 필드 위치를 바꾼 후? AT NEW, AT END OF를 사용해야한다. ( 테스트를 해보시길 )
# 만약 CARRID가 CONNID보다 앞에 있다고 가정하면 PAYMENTSUM( Total ) 합계가 달라지게 된다.
시작해 보자.
SAP LOOP AT을 사용해서 다음 예제를 만들어보자.
2024.04.11 - [.SAP/....ABAP 예제] - SAP LOOP AT 예제
# AT FIRST란
# LOOP문이 처음 시작 할 때 타는 로직
# AT FIRST #
DATA:
GT_LIST TYPE TABLE OF SFLIGHT WITH HEADER LINE.
SELECT *
FROM SFLIGHT
INTO CORRESPONDING FIELDS OF TABLE GT_LIST.
LOOP AT GT_LIST.
AT FIRST.
WRITE:/
SY-TABIX, 'AT FIRST'.
ENDAT.
ENDLOOP.
# 실행하게 되면 다음과 같이 AT FIRST가 탄 걸 볼 수 있다.
여기서 중요한 것은 LOOP문에 Where 조건문이 있다고 하면 AT FIRST가 탈 수도 있고 안 탈 수도 있는 것이다.
AT FIRST는 LOOP문에서 INDEX가 "1"일 때만 타는 구문이다.
예제를 보면) LOOP문에 조건 값을 걸어준다면
DATA:
GT_LIST TYPE TABLE OF SFLIGHT WITH HEADER LINE.
SELECT *
FROM SFLIGHT
INTO CORRESPONDING FIELDS OF TABLE GT_LIST.
LOOP AT GT_LIST
WHERE
CARRID EQ 'UA'.
AT FIRST.
WRITE:/
SY-TABIX, 'AT FIRST'.
ENDAT.
ENDLOOP.
WRITE:
'끝!'.
# 디버깅을 돌려보면 안 타는 걸 볼 수 있고, SY-TABIX를 보면 1173이 되어있는 걸 볼 수 있다.
# 한마디로 AT FIRST는 INDEX가 "1"일 경우에만 타는 것이다.
이렇기 때문에 AT FIRST가 처음에 무조건 탄다고 생각하면 안 된다.
# AT NEW란
# 해당 값이 새롭게 갱신될 때마다 실행되는 구문
# 해당 값이 갱신 될 때마다 "AT NEW" 구문을 태우고 싶으면 AT NEW 뒤에 필드명을 적으면 된다
# AT NEW (Field) #
예를 들어, 다음과 같은 "SFLIGHT" 데이터를 사용해 보자.
우리가 해야 할 것은 "CARRID"의 값이 변경될 때마다 "AT NEW" 구문을 타게 만들어보자.
DATA:
GT_LIST TYPE TABLE OF SFLIGHT WITH HEADER LINE.
SELECT *
FROM SFLIGHT
INTO CORRESPONDING FIELDS OF TABLE GT_LIST.
LOOP AT GT_LIST.
AT NEW CARRID.
BREAK-POINT.
ENDAT.
ENDLOOP.
# 위에서 설명했듯이 AT NEW 구문 안에 있으면 Workarea는 "CARRID" 말곤 나머진 " * " 변경이 되기 때문에 다음과 같이 체크 로직으로만 사용하면 좋다
# AT END OF란
# 해당 값이 마지막이면 실행되는 구문
# 값이 마지막일 때 "AT END OF" 구문을 태우고 싶으면 AT END OF 뒤에 필드명을 적으면 된다
# AT END OF (Field) #
이것 또한 "SFLIGHT" 데이터를 이용해 보자. ( AA에 대한 데이터 84개 )
# 다음과 같이 SY-TABIX : 84 일 때 탄 것을 볼 수 있다.
# LAST란
# LOOP문이 마지막일 때 타는 로직
# AT LAST #
# "SFLIGHT" Table에서는 총 1322 데이터가 있는 걸 볼 수 있다.
# AT LAST을 사용해서 언제 타는지 한번 봐보자.
# 다음과 같이 SY-TABIX : 1322로 찍혀있는 걸 볼 수 있다.
# 다음과 같이 마지막에 값을 합치고 싶을 때나 마지막에 무언가를 하려고 할 때 사용하면 될 것 같다!
728x90
'.ABAP > ..모든 것' 카테고리의 다른 글
SAP Clear SAP/ABAP Memory 정리 (0) | 2024.04.17 |
---|---|
SAP 특정 컬러 중복제거( GROUP BY ) 정리 (0) | 2024.04.11 |
SAP Unicode 문자열 길이 정리 (0) | 2024.03.20 |
SAP Maintenance View ( + ) 해결 방법 (0) | 2024.03.15 |
SAP 테이블 데이터 강제 수정하기 [SE16N] (1) | 2024.02.06 |