select ~ .
DESCRIBE TABLE itab LINES v_cnt.
IF v_cnt <> 0.
CLEAR v_cnt.
READ TABLE itab INDEX 1.
DO 12 TIMES.
v_cnt = v_cnt + 1.
gt_list-werks = itab-werks.
gt_list-year = itab-revise_date(4).
gt_list-month = v_cnt.
COLLECT gt_list.
CLEAR gt_list.
ENDDO.
ENDIF.
LOOP AT itab.
IF itab-dis_status = 'Y'.
clear v_month.
gt_list-werks = itab-werks.
gt_list-year = itab-revise_date(4).
v_month = itab-revise_date+4(2).
gt_list-month = v_month.
gt_list-plcnt = 1.
CASE itab-machi_kd.
WHEN '01'.
gt_list-machi_kd01 = 1.
WHEN '02'.
gt_list-machi_kd02 = 1.
ENDCASE.
COLLECT gt_list.
gt_list-month = '합계'.
COLLECT gt_list.
CLEAR gt_list.
ENDIF.
ENDLOOP.
를 하면
좌측에 1~12월까지의 월이 찍히고 월에 해당하는 데이터의 수량을
공통된 키필드를 찾아서 SUM하여 출력하는 것입니다.
그런데
1 ~ 12까지 출력되고 마지막 줄에 합계가 한번만 나와야 하는데
출력이
1 ~
2
3
4
5
6
7
8
9
10
11
12
합계
4
2
3
5
6
1
2
7
8
9
10
합계
2
3
합계
:
와 같이 나옵니다. 제가 키필드를 주어서 COLLECT한것인데 필드가 잘못
주어진건가요?
1 ~
2
3
4
5
6
7
8
9
10
11
12
합계
와 같이 나오게 COLLOECT할 수 없을까요?
댓글 6
-
썬바바
2007.12.04 23:03
-
풍뎅이
2007.12.05 00:18
아닙니다 마지막합계도 구하고 각 월별 합계도 구해서 sum한 수량을 collect하는 것입니다. 몇일째 고민하고 계속 로직을 바꿔보지만 힘드네요
-
e-abap
2007.12.05 00:23
월기준으로 SORT 한 다음
at new 월.
월별 sum.
endat.
at last.
전부 sum
endlast.
하면 되겠네요.
-
썬바바
2007.12.05 02:05
at 구분을 사용할때는 sorting 이 필수입니다. 인터널 테이블 구조도 중요합니다..제가 볼때는 월을 표시하는 필드가 구조 젤 앞에 와야 할것같네요.. -
풍뎅이
2007.12.05 03:19
SORT ITAB BY revise_date+4(2).
at new revise_date+4(2).
COLLECT gt_list. <==월별 sum
endat.
gt_list-month = '합계'.
at last.
COLLECT gt_list. <==* 전부 sum
endat.
위와 같이 월별 SORT하고 월별SUM , 전체 SUM을 COLLECT로 처리하였지만 합계는 하나로 나오지만
1~12는 이전과 같이 2개 이상씩 나옵니다. COLLECT로 처리하는게 잘못된건가요?
-
풍뎅이
2007.12.05 22:48
collect문으로만 해결하였습니다.
문제는 지정된 날짜문제였던것 같습니다.
결국 마지막 합계이므로
AT LAST.
SUM.
gt_list-month = '합계'.
APPEND gt_list.
CLEAR gt_list.
ENDAT.
요렇게 사용하면 될 것같네요