1. AT LINE-SELECTION.
GET CURSOR FIELD l_field VALUE l_value.
IF l_value EQ space.
EXIT.
ENDIF.
MESSAGE i398(00) WITH l_value 'GET CURSOR FIELD.'.
위 문장은 더블클릭한 곳의 필드명(l_field)를 l_value에 저장하고
저장한 값인 l_value값이 공백(space)이면 exit를 한다
공백이 아니면 message를 띄운다로 이해하면 되죠?
그리고 EXIT는 뭔 역활을 하나요? 빈곳에 더블해도 효과가 없던데..
2.
1) LOOP AT itab_spfli.
MOVE-CORRESPONDING itab_spfli TO itab.
CLEAR itab_scarr.
READ TABLE itab_scarr WITH KEY carrid = itab_spfli-carrid.
itab-carrname = itab_scarr-carrname.
APPEND itab.
CLEAR itab.
ENDLOOP.
2) LOOP AT gt_display.
READ TABLE gt_scarr WITH KEY carrid = gt_display-carrid.
IF sy-subrc EQ 0.
gt_display-carrname = gt_scarr-carrname.
ENDIF.
MODIFY gt_display.
ENDLOOP.
위 두문장 모두 carrname를 다른 인터널데이블에 옮기기 위해 사용하는 소스로 알고 잇는데
맞나요? 그리고 위 두문장의 차이점은 뭔가요?
댓글 2
-
SAYA
2009.03.11 17:14
-
dami
2009.03.11 17:22
저도 잘은 모르지만 아는 범위에서 답변드립니다.
1. l_field의 value를 l_value에 저장하고 저장한 값인 l_value값이 공백(space)이면 exit를 하고요
EXIT는 보통 LOOP문안에 있는 경우 LOOP를 끝내는 역활을 하고 LOOP 밖에서는 해당 processing block 을 종료합니다.
위 소스의 경우는 공백인 경우 메세지 없이 끝내려고 사용한것으로 보입니다.
2. 1)과 2) 소스의 차이는 1)은 APPEND문 즉 ITAB에 새로운 row를 추가하면서 carrname필드 값을 itab_scarr-carrname로
넣어주나 2)의 경우 기존 gt_display 인터널 테이블에 있는 값 중 carrname필드 값을 gt_scarr-carrname로 지정해 줌니다.
결국 두 소스의 차이는 신규행을 삽이하는냐 아니냐의 차이입니다.
이상 허접한 답변이었습니다.
1. exit : 위의 경우는 at line-selection 이벤트를 종료
loop 문 내에서 사용되면 해당 loop 문을 종료
2. 1)은 itab 이라는 인터널테이블에 자료를 추가하는 것이고 (append)
2)는 gt_display 라는 인터널테이블의 자료를 수정하는 것이죠 (modify)