LOOP AT gt_sum01.
IF gt_sum01-bewtp = 'E' AND gt_sum01-shkzg = 'S'.
l_chk01 = l_chk01 + gt_sum01-dmbtr.
ELSEIF gt_sum01-bewtp = 'E' AND gt_sum01-shkzg = 'H'.
l_chk01 = l_chk01 - gt_sum01-dmbtr.
ENDIF.
IF gt_sum01-bewtp = 'Q' AND gt_sum01-shkzg = 'S'.
l_chk02 = l_chk02 + gt_sum01-dmbtr.
ELSEIF gt_sum01-bewtp = 'Q' AND gt_sum01-shkzg = 'H'.
l_chk02 = l_chk02 - gt_sum01-dmbtr.
ENDIF.
AT END OF ebeln.
IF l_chk01 < l_chk02.
READ TABLE gt_sum01 WITH KEY ebeln = gt_sum01-ebeln.
gt_list = gt_sum01.
APPEND gt_list.
CLEAR gt_list.
ELSEIF l_chk01 EQ l_chk02.
READ TABLE gt_sum01 WITH KEY ebeln = gt_sum01-ebeln.
gt_sum02 = gt_sum01.
APPEND gt_sum02.
CLEAR gt_sum02.
ELSE.
READ TABLE gt_sum01 WITH KEY ebeln = gt_sum01-ebeln.
gt_list = gt_sum01.
APPEND gt_list.
CLEAR gt_list.
ENDIF.
CLEAR : l_chk01, l_chk02.
ENDAT.
AT LAST.
IF gt_list[] IS INITIAL AND gt_sum02[] IS NOT INITIAL.
MESSAGE i000 WITH 'GR/IR의 값이 같습니다.'.
ENDIF.
ENDAT.
ENDLOOP.
이와 같은 로직을 만들어봤는데 일단 제대로 작동하기는 합니다만..
AT END를 타고 기준 필드인 ebeln에 새로운 값이 오면 해당 인터널테이블인 gt_sum01의 헤더에
ebeln값만 남고 다른 필드들은 ******(NULL값?)으로 표시가 되서
이를 어떻게 해야하나 한참 고민하다 소가 뒷걸음질로 개구리 잡는다고..
read table로 돌려서 겨우 나머지 필드값도 가져오긴 했습니다.
문제는 기간을 예를 들어 1.1~ 1.30일로 잡고 위의 로직을 탈경우 만약 12월에 입고를 하고 1월에 송장을 낸경우같이
조건설정한 기간외에 값이 있는경우 문제가 생깁니다..
정말 초보라.. 위 로직도 하루종일 고민해서 만든건데 이런문제가 생기니 깜깜하네요..
이경우 어찌해야할까요..
댓글 3
-
옥뚱
2009.01.22 02:06
-
카츠
2009.01.22 04:59
음 일단 해결은 했습니다.
기간을 조건으로 가져오는 쿼리문에 해당하는 인터널 테이블을 하나 만든후
다른 인터널테이블에 위 기간을 조건으로 한 인터널테이블의 필드를 조건으로 쿼리를 짜서 해결했습니다. ^^
소스는 이렇습니다.
SELECT ebeln budat
FROM ekbe
INTO CORRESPONDING FIELDS OF TABLE l_tmp01
WHERE budat IN s_budat.
SORT l_tmp01 BY ebeln.
LOOP AT l_tmp01.
SELECT ebeln budat bewtp vgabe shkzg dmbtr
FROM ekbe
APPENDING CORRESPONDING FIELDS OF TABLE gt_sum01
WHERE ebeln = l_tmp01-ebeln.
ENDLOOP.
만약 전체조회를 할경우 퍼포먼스가 급격히 떨어질듯한데.. IF조건문 넣어서 해결하면 될듯하네요..
답변주신 옥뚱님 감사드리고 내일 말씀주신대로 해봐야겠네요 ^^
-
쭈니
2009.01.23 00:28
at end라는 구문이 머하는데 쓰이는것이며, at end구문이 혹시 endat.이 부분인가요???
설명좀 해주실수있나요. 부탁드립니다.
그럼 HEADER LINE을 사용하지 말고 INTERNAL TABLE을 STRUCTURE에 넣어서 사용하시면 되지 않나요.
LOOP AT GT_SUM01 INTO ST_SUM01.