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를 사용해야한다. ( 테스트를 해보시길 )

# 만약 CARRIDCONNID보다 에 있다고 가정하면 PAYMENTSUM( Total ) 합계가 달라지게 된다. 

 

 

시작해 보자.

 

SAP LOOP AT을 사용해서 다음 예제를 만들어보자.

2024.04.11 - [.SAP/....ABAP 예제] - SAP LOOP AT 예제

 

SAP LOOP AT 예제

 

potato98.tistory.com

 

 

# 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 FIRSTINDEX"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
LIST

'.SAP > ..ABAP' 카테고리의 다른 글

SAP Clear SAP/ABAP Memory 정리  (0) 2024.04.17
SAP 특정 컬러 중복제거( GROUP BY ) 정리  (0) 2024.04.11
SAP ALV Hotspot 정리  (0) 2024.04.02
SAP Unicode 문자열 길이 정리  (0) 2024.03.20
SAP Maintenance View ( + ) 해결 방법  (0) 2024.03.15