MODULE user_command_0100 INPUT.
save_code = ok_code.
CLEAR ok_code.
CASE save_code.
when 'SAVE'.
"실제 itab에서 DB로 저장 되는 sql을 사용 해야한다
WHEN 'TOGGLE'.
LOOP AT flights-cols INTO cols WHERE index GT 2.
IF cols-screen-input = '0'.
cols-screen-input = '1'.
ELSEIF cols-screen-input = '1'.
cols-screen-input = '0'.
ENDIF.
MODIFY flights-cols FROM cols INDEX sy-tabix.
ENDLOOP.
WHEN 'SORT_UP'.
READ TABLE flights-cols INTO cols WITH KEY selected = 'X'.
IF sy-subrc = 0.
SORT itab STABLE BY (cols-screen-name+10) ASCENDING.
cols-selected = ' '.
MODIFY flights-cols FROM cols INDEX sy-tabix.
ENDIF.
WHEN 'SORT_DOWN'.
READ TABLE flights-cols INTO cols WITH KEY selected = 'X'.
IF sy-subrc = 0.
SORT itab STABLE BY (cols-screen-name+10) DESCENDING.
cols-selected = ' '.
MODIFY flights-cols FROM cols INDEX sy-tabix.
ENDIF.
WHEN 'DELETE'.
READ TABLE flights-cols INTO cols WITH KEY screen-input = '1'.
IF sy-subrc = 0.
LOOP AT itab INTO demo_conn WHERE mark = 'X'.
DELETE itab.
ENDLOOP.
ENDIF.
ENDCASE.
ENDMODULE.
flights 콘트롤에 연결된 itab의 컬륨이 4개 있다고 가정할때
컬륨이 itab-c1 itab-c2 itab-c3 itab-c4 라고 할때 토글 소팅 삭제를 하는 프로그램입니다.
그런데 위의 소스에서 WHERE index GT 2./ (cols-screen-name+10) /screen-input = '1'.
이게 이해가 가지 않습니다. 왜 10을 붙였는지도 모르겠고
screen-name도 이해가 가지 않습니다. 물론 콘트롤의 참조하는 구조체라고는 알고있는데
정확한 의미를 쫌 해석 해주십시요. 책을 보아도 자세히는 나와있지 않네요.
고수님들 부탁드립니다. 제발요
댓글 2
-
구준표
2009.02.27 22:13
-
SAYA
2009.02.27 22:19
★ cols-screen-name+10 : 테이블 컨트롤에 추가한 필드명이 demo_conn-field1 이라면 field1 을 가져오겠죠
★ flights-cols 의 스트럭쳐로 cols 를 선언한 거구요 . cols 에 필드가 screen, index, selected, vislength, invisible
필드가 있습니다. 여기서 screen 구조체 안에 name, group1~ 등의 필드가 있습니다.
★ screen-input = '1' : 입력 가능하게...
소트구문에서 by 뒤에는 필드명만 와야 합니다.
위에서는 소트를 동적으로 처리하기 위해 (필드명) 을 사용하였구요,
화면상에서 그려진 변수명에서 필드명만을 가져오기 위해서 +10 을 사용한겁니다.
예) 화면변수명이 sflight-carrid 이고, 여기서 carrid만 가져오려면 screen-name+8 을 해줘야 합니다.
여기서 +8은 앞에서 8자리 이후부터 라는 말이죠. 보통 offset 이라고 하죠. 변수중 일부분만을 가져올때 사용합니다.