FORM GET_ZBIGO .
LOOP AT GT_BKPF.
CLEAR GT_LIST.
READ TABLE GT_LIST WITH KEY belnr = gt_bkpf-belnr.
IF sy-subrc = 0.
GT_LIST-SGTXT = GT_BKPF-ZBIGO.
ELSEIF sy-subrc <> 0.
GT_LIST-SGTXT = GT_LIST-SGTXT.
ENDIF.
MODIFY GT_LIST.
ENDLOOP.
ENDFORM. " GET_ZBIGO
디버깅하면 루프돌면서 GT_LIST의 전표값에 해당하는거 잘 찾아서 SGTXT값까지 들어는가요
그런데MODIFY하고서 -------> ENDLOOP 시점에서 딱 DUMP.......ㅠㅠ
뭐가 문제죠?
댓글 6
-
테라스
2010.10.28 22:09
-
기쁨
2010.10.28 22:21
DATA : LV_INDEX LIKE SY-TABIX. <= 변수선언
...
READ TABLE GT_LIST WITH KEY belnr = gt_bkpf-belnr.
IF sy-subrc = 0.
LV_INDEX = sy-tabix. <= 추가
GT_LIST-SGTXT = GT_BKPF-ZBIGO.
MODIFY GT_LIST INDEX LV_INDEX. <= 추가
* 아래 문구는 필요없어요.
* ELSEIF sy-subrc <> 0.
* GT_LIST-SGTXT = GT_LIST-SGTXT.
ENDIF.
* MODIFY GT_LIST. => 위에서 처리하므로 제거
...
위에 소스만 보고 수정한다면 위와 같이 하면 될것 같은데요.
-
야생이
2010.10.29 00:08
기쁨님처럼 하시던가 아니면
if sy-subrc = 0.
MODIFY GT_LIST TRANSPORTINGSGTXT
WHERE belnr = gt_bkpf-belnr.
endif.
처럼 해주시면 될꺼에요.
loop 를 돌리다 그안에서 modify 를 할 경우
정확히 modify 를 해야하는 인덱스 정보를 이미 가지고 있어
해당 부분의 데이터를 고칠수 있지만
현재 님의 경우에는 read 로 데이터만 읽었을뿐
modify gt_list. << 로 정확히 gt_list 어느 부분을 고쳐야하는지 명시가 안돼어있기 때문에
덤프가 떨어지는 걸꺼에요.
그러니 기쁨님처럼 인덱스를 명시해 고치시던가
제가 알려드린 방법처럼 gt_list의 어느 조건인 라인을 고치라는등 정확한 명시를 해주셔야 할꺼에요.
-
도라에멍
2010.10.29 02:49
잘 이해하였습니다. 모두 감사합니다.
그런데 그냥 궁금한건데..
LOOP AT 다은에 나오는 internal table이랑
루프안에서 MODIFY 하는 Internal table이랑 달라도 상관은 없나요?
꼭 같을필욘 없는지 궁금해요..
전 그래서 에러가낫다고 생각했거든요;;^^:
LOOP AT GT_BKPF.
CLEAR GT_LIST.
READ TABLE GT_LIST WITH KEY belnr = gt_bkpf-belnr.
IF SY-SUBRC EQ 0.
MOVE GT_LIST-SGTXT TO GT_BKPF-SGTXT.
ENDIF.
ENDLOOP.
이렇게 처리했더니 원하는 결과가나와서 완료되었습니다.
위의구문에서 MODIFY도 없는데 적용된건 왜그럴까요?
-
지크
2010.10.29 06:29
LOOP AT 다음에 나오는 internal table이랑
루프안에서 MODIFY 하는 Internal table이랑 달라도 상관은 없나요?
=> 네, 상관 없습니다.
LOOP AT GT_BKPF.
CLEAR GT_LIST.
READ TABLE GT_LIST WITH KEY belnr = gt_bkpf-belnr.
IF SY-SUBRC EQ 0.
MOVE GT_LIST-SGTXT TO GT_BKPF-SGTXT.
ENDIF.
ENDLOOP.
이렇게 처리했더니 원하는 결과가나와서 완료되었습니다.
위의구문에서 MODIFY도 없는데 적용된건 왜그럴까요?
=> modify도 없는데 적용되었다는 건 무슨 의미인가요?
구문만 봐서는 gt_list를 읽었을 경우 working area 필드(gt_bkpf-sgtxt)에 값을 올려 놓았을 뿐,
internal table 값 자체를 바꾼게 아닙니다.
그리고, 기왕이면 loop at~ 위에서 sort ~ by belnr을 하신 후 read table ~ binary search 하시는게 더 낫겠네요...
-
도라에멍
2010.11.01 19:30
위에 답변주신분들 모두 감사드립니다 ^-^*
modify 에서 문제가 발생한거 같습니다.
현제 덤프 내용을 못보는 관계로 정확한 원인을 알수는 없지만
짐작으로는
GT_BKPF 에 있는 전표번호(BELNR)에 해당하는 데이터가
GT_LIST 에 없어서 MODIFY 할때 잘못된 라인을 MODIFY 하려고 해서
에러가 발생했을 가능성이 높습니다.
READ TABLE 해서 못읽는경우에는 MODIFY 가 아닌 INSERT 나 APPEND를 해주는게 맞을거 같습니다.