안녕하세요
ALV에 뿌려줄 데이터를 담은 인터널 테이블에 대해서 질문이 있습니다.
예를들어 원래 아래의 AS-IS처럼 조회가 된다면, TO-BE는 1000과 3000의 수량을 합쳐서 대표 플랜트인 1000에만 합계수량을 보여주고 싶습니다.
COLLECT문을 써면 공급업체가 숫자가 아니어서 오류가 뜹니다.
데이터를 다 담은 인터널 테이블에 대해서 추가 코딩할 수 있는 방안이 있을까요??
<AS-IS >
플랜트 공급업체 자재 재고
1000 ABC 11111 20
3000 ABCD 11111 30
<TO-BE>
플랜트 공급업체 자재 재고
1000 ABC 11111 50
잘 이해했나 모르겠는데... 아래 같은 느낌일까요?
TYPES: BEGIN OF T_TMP,
WERKS TYPE MSLB-WERKS,
LIFNR TYPE MSLB-LIFNR,
MATNR TYPE MSLB-MATNR,
LBLAB TYPE MSLB-LBLAB,
END OF T_TMP.
DATA: LT_TMP TYPE STANDARD TABLE OF T_TMP,
LS_TMP LIKE LINE OF LT_TMP.
LT_TMP = VALUE #( ( WERKS = '1000' LIFNR = 'ABC' MATNR = '11111' LBLAB = 20 )
( WERKS = '1000' LIFNR = 'ABCD' MATNR = '11111' LBLAB = 30 ) ).
LOOP AT LT_TMP INTO LS_TMP.
WRITE :/ LS_TMP-WERKS, LS_TMP-LIFNR, LS_TMP-MATNR, LS_TMP-LBLAB.
ENDLOOP.
WRITE :/.
DATA: LT_COL LIKE LT_TMP,
LS_COL LIKE LS_TMP.
"1. 원본 ITAB에서 첫번째 항목 READ
READ TABLE LT_TMP INTO LS_TMP INDEX 1.
LOOP AT LT_TMP INTO LS_COL.
"2. 집계를 위한 COLLECT 수행시, 플랜트와 공급업체를 첫번째 항목으로 통일
MOVE: LS_TMP-WERKS TO LS_COL-WERKS,
LS_TMP-LIFNR TO LS_COL-LIFNR.
COLLECT LS_COL INTO LT_COL.
ENDLOOP.
LOOP AT LT_COL INTO LS_COL.
WRITE :/ LS_COL-WERKS, LS_COL-LIFNR, LS_COL-MATNR, LS_COL-LBLAB.
ENDLOOP.