아밥 초보입니다.
현재 컨트롤 테이블의 내용을 저장하는 로직을 작성중인데요..
key값을 입력안했을시 저장이 되지않으면서 커서의 위치를
key값이 비어있는 필드로 이동시키고 싶습니다.
DATA : FIELDNAME(20) TYPE C VALUE 'IT_LIST-CARRID',
CNT TYPE I VALUE 1.
PBO
MODULE SET_CURSOR OUTPUT.
SET CURSOR FIELD FIELDNAME LINE CNT.
ENDMODULE.
PAI
MODULE USER_COMMAND_0100 INPUT.
G_CODE = OK_CODE.
CLEAR OK_CODE.
CASE G_CODE.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'CANC' OR 'EXIT'.
LEAVE PROGRAM.
WHEN 'SAV'.
LOOP AT IT_LIST WHERE CARRID IS INITIAL OR
CONNID IS INITIAL OR
FLDATE IS INITIAL.
MESSAGE S001 WITH 'KEY값을 입력하세요.'.
IF IT_LIST-CARRID IS INITIAL.
FIELDNAME = 'IT_LIST-CARRID'.
ELSEIF IT_LIST-CONNID IS INITIAL.
FIELDNAME = 'IT_LIST-CONNID'.
ELSE.
FIELDNAME = 'IT_LIST-FLDATE'.
ENDIF.
CNT = FLIGHT-CURRENT_LINE. <----이렇게 하니깐 안되네요..
EXIT.
ENDLOOP.
...
커서가 제자리에서 움직이질 않네요...ㅋ
CNT의 값을 어떻게 주면 될까요?????ㅋ
댓글 5
-
윤뚱
2010.12.24 06:40
-
밥~~
2010.12.24 17:24
CNT = sy-tabix. -
언제나1등
2010.12.24 18:28
답변감사드립니다.
sy-tabix로바꿔도 움직이질 않네요...ㅋ
다른방법 없을까요?
-
모순
2010.12.24 19:25
internal table 크기와 table control 의 크기가 다르기 때문에
현재 internal table 의 sy-tabix 로 table control 의 tc-top_line 과 tc-current_line 을
지정하고 cnt 값을 tc-current_line 로 지정하셔야 합니다.
그러기 위해서는 현재 table control 의 line 수를 알아야 하죠
풀스크린으로 계속사용하신다면 고정값을 가지게 되겠지만 세션이
변경가능할 경우(전체화면이 아니경우) 현재 tc의 line 수를 알기위해서는
좀 어려움이 있을 겁니다. 전체화면일 경우 커서 설정하기 위한 cnt 계산방법은
tc의 라인수를 10이라고 가정하고 현재 internal table 의 sy-tabix 가 25라고 하면
tc-top_line = ( sy-tabix div 10 ) * 10. => 20.
tc_current_line = sy-tabix - tc-top_line. => 5
따라서 tc-top_line = 20. tc-current_line = 5.
cnt 값은 5가 될 겁니다.
가변상태 tc일 경우 로직은 고민을 좀 하셔야 할 것 같네요. 수고하세요.
-
언제나1등
2010.12.25 00:01
모순님 답변감사드립니다.
모순님의 로직이 잘되기는한데 단지, 제가만든 tc는 31인데 sy-tabix가 30까지는 잘옮겨다니는데
31이상은 실제 LINE보다 한행적게 설정되더라고요
TOP_LINE이 설정되면서 2페이지부터는 TOP_LINE이 32행이 아니라 31행부터 설정되면서
한행 전으로 설정 되는거 같았습니다.
그래서 그냥 if문으로 sy-tabix조건줘서 1더하는걸로 해결했습니다.
저장 시점보다는 필드 값을 필수로 하심이 어떨런지요