안녕하십니까. 오늘도 열심히 야근을 위해 준비하고 있는 사람일인중 한면입니다.
ALV 그리드에서요 값중에서 체크박스(ZZCHECK)를 누르면 아래와 같은 이벤트가 발생하도록 설정을 해두었습니다.
값이 바끼면 해당 날짜를 어떤 필드에 입력하는 것인데요.. 그러면 체크 박스랑 날짜 필드에 새로운 값들이 화면에
나와야하는데
PERFORM alv_grid_display TABLES itab. 은 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'이게 들어가있는 화면이거든요
전 화면을 리프레쉬 시키고 싶으면 저 함수를 다시 부르거든요 그런데 CLASS에는 REFRESH라고 있자나요
그냥 평션은 저 함수를 계속 호출하는 수 밖에 없나요?
그리고 저 함수를 부르는곳을 주석을 치면 체크 박스는 표시되나 날짜를 셋팅한 값이 필드엔 안보이고(ITAB에 있음)
주석을 풀면 체크박스가 체크가 안되고 화면이 깜빡거림이 심하면서 날짜는 보이는데 체크 박스가 안보이고
미치겠습니다. 클래스로 짜진것을 보니 체크 박스 클릭하니 클릭도 잘되고 화면도 안깜빡거리고 날짜도 셋팅되어 나오고
평션이 절 미치게 하네요.. 고수님들 도와주세요
*** SOUCE CODE *****
FORM data_changed USING fp_data_changed TYPE REF TO
cl_alv_changed_data_protocol.
DATA: ls_mod_cells TYPE lvc_s_modi.
LOOP AT fp_data_changed->mt_good_cells INTO ls_mod_cells.
CASE ls_mod_cells-fieldname.
WHEN 'ZZCHECK'.
PERFORM change_value1 USING fp_data_changed ls_mod_cells.
ENDCASE.
ENDLOOP.
PERFORM alv_grid_display TABLES itab. <----- 요부분 ***주석을 치면 저 날짜 넣은 필드의 값이 안보이고
ENDFORM. "data_changed
---------------------------------------------------------
FORM change_value1 USING p_fp_data_changed type ref to
cl_alv_changed_data_protocol
p_ls_mod_cells type lvc_s_modi.
IF p_ls_mod_cells-value EQ 'X'.
READ TABLE itab INDEX p_ls_mod_cells-row_id.
IF sy-subrc = 0.
itab-zck_date = sy-datum.
itab-zcr_date = sy-datum.
MODIFY itab INDEX p_ls_mod_cells-row_id.
ENDIF.
ELSE.
READ TABLE itab INDEX p_ls_mod_cells-row_id.
IF sy-subrc = 0.
itab-zcc_date = sy-datum.
MODIFY itab INDEX p_ls_mod_cells-row_id.
ENDIF.
ENDIF.
ENDFORM. " CHANGE_VALUE1
댓글 8
-
처서련
2009.12.03 18:03
-
MadMax
2009.12.03 18:58
SE38 에 가셔서 BALV_* 로 검색 하시면 (200개 넘음) Check Box 사용 예제가 있습니다. 그 Source 안에 보시면 checkbox 선택시 특정 Field Read 해서 Update 하는 부문이 있는데 이를 참고 하시면 될것 같습니다.
(지금 SAP 접속이 되지 않아 정확한 프로그램과 위치 지정으로 못해드립니다. 죄송...)
-
아밥고지를 찾아서
2009.12.03 21:56
두분 답변 감사합니다. 그런데 저희 회사에는BALV_*에 관한 예제가 없네요.
그리고 처서련님이 말씀 하신것은 class이고 저는 평션에 대해서 알고 싶네요ㅜㅜ
-
금은돌
2009.12.03 22:01
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN '??'
RS_SELFIELD-REFRESH = 'X'. ALV 값을 리프레쉬
ENDCASE.
ENDFORM.
이걸 이용해 보세요..
-
아밥고지를 찾아서
2009.12.04 02:12
디버깅 확인하니까. alv 필드의 값을 변경할시에는 user_command를 타지 않는것 같은데요
-
금은돌
2009.12.04 18:30
데이터 체인지드 하고 강제로 유저커맨드로 넘어가면....
-
아밥고지를 찾아서
2009.12.07 22:52
alv 강제 유저커맨드는 어떻게 발생시키죠? -
JG
2010.02.10 04:23
event를 진행하신 후 CALL METHOD cl_gui_cfw=>set_new_ok_code EXPORTING new_code = '이곳'. 을 하시면 됩니다.
저역시 초보라서 정확하진 않지만 제 생각엔 리플레쉬 문제인것 같습니다.
PERFORM alv_grid_display <<<<이구문 써져있는곳에 주석처리 하시고
DATA: ls_stable TYPE lvc_s_stbl.
* 커서위치 유지 설정
ls_stable-row = 'X'.
ls_stable-col = 'X'.
* Refresh
lcl_grid->refresh_table_display( is_stable = ls_stable ). 이구문을 써서
리플레쉬를 한번 해보십시요 제생각엔 될것 같은데... 안되도 절 원망하진 마시구요
그럼 오늘하루도 좋은하루 되십시요