SAP/ABAP

ABAP Collect 의 사용 가이드

그녀는애교쟁이 2014. 9. 1. 11:03
반응형

최근에 개발을 하면서 Collect 를 많이 사용하고 있다. 이전에는 다른 모듈이라 잘 몰랐는데 재무쪽에서는 Collect 를 참으로 많이 쓰게 되는 것 같다. ( 각각의 합계를 구할 때 정확히 잘 구해지는 것이 아주 편리하다. ) 이전에 Collect 에 대한 포스팅을 한 적이 있다. ( Collect 의 사용 ) 그런데 그 때는 이정도로 많이 사용하지 않아서 아주아주 간단하게 포스팅을 했었는데, 자꾸 쓰다보니 그 정도의 정보로는 부족하겠다라는 생각에 추가적으로 포스팅을 하려고 한다.


Collect 문법은 숫자 또는 금액 필드 외의 나머지는 필드들은 키로 보고 동일한 데이터가 있으면 숫자 필드를 Sum 해주고 없다면 Append 를 해주는 구문이다. 그래서 결국 Internal Table 의 필드의 값들을 맞춰 준다면 각각 필드에 맞는 Sum 을 구할 수 있는 것이다. Collect 는 두가지 방식으로 사용할 수 있는데 Header Line 이 있는 Internal Table 에서 사용하는 구문과 별도의 Structure 를 Internal Table 에 Collect 시켜주는 방식이 있다. 두 방식의 차이는 없으나 형식의 차이이므로 각각 필요에 따라 사용하면 되겠다. 


참고 : SAP 공식 홈페이지





REPORT YTEST016.

DATA : LT_SFLIGHT1 TYPE TABLE OF SFLIGHT WITH HEADER LINE,
       LT_SFLIGHT2 TYPE TABLE OF SFLIGHT WITH HEADER LINE.


CLEAR : LT_SFLIGHT1, LT_SFLIGHT1[],
        LT_SFLIGHT2, LT_SFLIGHT2[].

SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_SFLIGHT1
  FROM SFLIGHT.


SORT LT_SFLIGHT1.

LOOP AT LT_SFLIGHT1.
  
  " 출발 일자에 상관없이 금액 필드를 합친다.
  CLEAR LT_SFLIGHT1-FLDATE.
  COLLECT LT_SFLIGHT1 INTO LT_SFLIGHT2.
  
ENDLOOP.

BREAK-POINT.



위의 코드를 돌려보면 확실히 내용을 알 수 있다. ( 디버그 화면을 추가 )



[ ▲ 전체 데이터는 408 건이지만 Collect 가 되면서 데이터 건수는 26건으로 줄어 들었다. ]



[ ▲ 각각의 데이터는 날짜가 있는 원본 데이터 ]



[ ▲ 날짜를 클리어 하고 Collect 를 한 결과 - 금액, 숫자 필드의 합계를 구하였다. ]