LOOP AT GT_DATA
SELECT MANDT, ZBUKR, GJSHR, BELNR, APPR_KAMT
APPENDING CORRESPONDING FIELDS OF TABLe GT_ZT
FROM ZT
WHERE
ZBUKR = P_BUKRS
AND GJAHR = P_GJAHR
AND BELNR = GT_DATA-BELNR.
ENDLOOP.
위에 보시다시피
GT_DATA에 담아둔걸 하나씩 ZT라는 테이블에서 찾아다가....
조건이 (주로 전표번호) 일치 하는게있으면 GT_ZT에 넣습니다.
그런데 문제는, 루프를 돌다보면 ZT라는 테이블에 GT_DATA에서 찾는 전표번호가 없을 수도 있습니다.
하지만 OUTERJOIN 을 하듯, 아 경우에도 없으면 없는대로 GT_ZT라는데에다가
그 값을 넣어야합니다.
최종적으로는 출력되는 데이터가 GT_DATA 인지라... 해당 전표니 그러한 정보들을 가지고잇지만
위의 구문에서 엉뚱한 값이 들어가있습니다. 깔끔하게 0으로 혹은 NULL로 들어가면 좋을걸;;
저렇게 위의 루프문 도중에 조건을 걸거나 할 수 없나요?
REAL TABLE의 경우
IF subrc <> 0. 이런게있던데 그런것처럼요..
안된다면 어떻게 해결해야할지요..^^
도와주세요!
무엇을 하시는 지 모르겠지만.. ZT 테이블에서 검색 결과가 없어도 빈라인을 저장하여야 한다면 굳이 그렇게 하실 필요는 없는거 같네요..
성능상의 문제로 대략 다음과 같이 하시는 것이 좋을 듯 하네요..메모장에서 한거라 줄맞춤이 ^^;
Data : begin of gt_zt occurs 0,
MANDT like 해당 테이블-element,
ZBUKR like 해당 테이블-element,
GJSHR like 해당 테이블-element,
BELNR like 해당 테이블-element,
APPR_KAMT like 해당 테이블-element,
end of gt_zt.
clear : gt_zt, gt_zt[].
if gt_data[] is not initial.
SELECT MANDT, ZBUKR, GJSHR, BELNR, APPR_KAMT
INto CORRESPONDING FIELDS OF TABLe GT_ZT
FROM ZT
For all entries in gt_data
WHERE ZBUKR = P_BUKRS
AND GJAHR = P_GJAHR
AND BELNR = GT_DATA-BELNR.
endif.
소트하시고..
LOOP AT GT_DATA
clear : gt_zt.
Read table gt_zt with key belnr = gt_data-belnr.
append gt_zt.
ENDLOOP.