안녕하세요. 초보 개발자 입니다.
Selection Screen으로 조건 검색 후 Table Contorl을 이용해서 결과를 출력하고 있습니다.
이때, 다수의 결과값이 출력 되었을때
특정 라인을 선택할 시에 Index를 올바르게 받아오질 못하는 것 같습니다.(스크롤을 이용해서 확인할 때)
그리고 선택한 라인에 대한 수정/삭제가 이루어 지는데 단일 결과값에 대해서 발생하지 않던,
해당 라인 선택 여부에 대해서 오류가 있는데.. 조언 부탁드릴게요.
(단일 결과 일 경우에 선택하지 않으면 '한 라인 이상 선택하세요'.라는 오류메시지가 정상 출력되고,
선택 후에 수정을 하게 되면 정상적인 흐름이 진행되지만,
다수의 결과일 경우 한 라인을 선택을 한후에도 '한 라인 이상 선택하세요'라는 메시지가 출력되면서,
흐름을 타질 못합니다.)
tc_01은 조회 조건에 대한 결과값, tc_02는 이 결과값에 대한 세부사항입니다.
그리고 'CHANGE'버튼을 누르게 되면 입력필드값이 수정가능한 상태로 바뀌게 됩니다.
소스 부분 첨부하겠습니다.
-->라인을 선택하고 'CHANGE' 버튼을 누를시 발생하는 이벤트.
----------------------------------------------------------------------------------
FORM change_data.
IF wa-mark NE 'X'.
MESSAGE i001 WITH '한 라인 이상 선택하세요.'.
ELSE.
LOOP AT it_01 INTO wa WHERE mark = 'X'.
wa-change_flag = 'C'.
MODIFY it_01 FROM wa.
change_plnum = wa-plnum.
ENDLOOP.
ENDIF.
ENDFORM.
----------------------------------------------------------------------------------
-->PBO
----------------------------------------------------------------------------------
PROCESS BEFORE OUTPUT.
MODULE status_0100.
MODULE init_0100.
LOOP AT it_01 INTO wa WITH CONTROL tc_01 CURSOR tc_01-current_line.
MODULE mark_send.
MODULE change_screen.
ENDLOOP.
LOOP AT it_02 INTO wa1 WITH CONTROL tc_02 CURSOR tc_02-current_line.
MODULE detail_screen.
* MODULE rsnum_screen.
ENDLOOP.
----------------------------------------------------------------------------------
--> MODULE init_0100.
MODULE init_0100 OUTPUT.
DESCRIBE TABLE it_01 LINES tc_01-lines.
* DESCRIBE TABLE it_02 LINES tc_02-lines.
ENDMODULE. " init_0100 OUTPUT
-->MODULE mark_send.
MODULE mark_send OUTPUT.
mark = wa-mark.
ENDMODULE. " mark_send OUTPUT
-->MODULE change_screen.
MODULE change_screen OUTPUT.
DESCRIBE TABLE it_01 LINES tc_01-lines.
LOOP AT SCREEN.
READ TABLE it_01 into wa INDEX tc_01-current_line.
IF wa-change_flag = 'C'.
IF screen-group1 = 'G1'.
screen-input = '1'.
MODIFY SCREEN.
ENDIF.
ELSEIF wa-change_flag = 'D'.
IF screen-group1 = 'G1'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
ENDMODULE. " change_screen OUTPUT
----------------------------------------------------------------------------------
--> PAI
PROCESS AFTER INPUT.
MODULE exit AT EXIT-COMMAND.
LOOP AT it_01.
FIELD mark MODULE modify_info.
CHAIN.
FIELD : wa-pertr,
wa-psttr,
wa-pedtr,
wa-gsmng.
MODULE vend_chk ON CHAIN-REQUEST.
ENDCHAIN.
FIELD wa-rsnum MODULE rsnum_change.
ENDLOOP.
LOOP AT it_02.
ENDLOOP.
MODULE user_command_0100.
----------------------------------------------------------------------------------
--> Module modify_info.
MODULE modify_info INPUT.
wa-mark = mark.
ENDMODULE. " modify_info INPUT
-->Module vend_chk.
MODULE vend_chk INPUT.
MODIFY it_01 FROM wa INDEX tc_01-current_line.
ENDMODULE. " vend_chk INPUT
change_data 부분에서 제일 위의 if문을 지우시고 loop문을 조건으로 sy-subrc = 0 일때 동작 수행하고
sy-subrc = 4 일때 메시지 출력하는게 맞지 않나 싶은데요...