안녕하세요.
Funtion ALV 를 사용중, 다음에 문제에 대해서 질문을 드리고자 합니다.
1. 개요.
1) 특정 입력 조건에 의해, 출력의 결과를 ALV 로 화면에 뿌림.
2) 유저는 ALV 를 보고 원하는 아이템의 목록을 체크박스에 체크
3) 체크 박스에 체크된 아이템에 대해서 인쇄 버튼을 누르면 Form printing 으로 인쇄.
2. 세부
1) 사용자 PF_STATUS 를 별도 작성하여 인쇄 버튼을 추가 한다. -> &FORMPRN
혹은 기존의 표준 PF_STATUS 를 카피, 수정하여 인쇄 버튼의 명칭을 변경한다 -> &FORMPRN
2) 이벤트 USER_COMMAND 가 발생하는 순간 FORM ALVEVENT_USER_COMMAND 를 호출한다.
3) ALVEVENT_USER_COMMAND에서는, PARAMETER SY-UCOMM 으로 부터 값 &FORMPRN 이 들어오면
FORM PRINTING 을 수행한다.
3. 문제
위의 1-2) 에서 ALV 체크박스에 체크를 하고, 인쇄 버튼을 눌렀을때의 시점에서
크 박스의 체크 결과가 내부 테이블에 반영이 안 되어 있습니다.
1) 타이밍?
- 체크박스에 체크를 한 뒤, refresh 버튼을 누르면 체크가 내부 테이블에 반영이 되어, 그 후에 인쇄 하면 정상 출력 됩니다.
2) 기능?
- 인쇄 버튼이 아니고, 저장 버튼을 눌러서 처리를 하면 체크가 내부 테이블에 반영이 되어, 그 후에 인쇄 하면 정상 출력 됩니다.
4. 질문
위 문제를 해결 하기 위해서는 , 폼 프린팅 로직이 수행되기전, 내부 테이블에 체크 박스의 수정 상태가 반영이 되어야 하는데요. 저장(&DATA_SAVE) 버튼을 눌렀 을 때 처럼, 내용이 내부 테이블에 옮겨 진 뒤 로직을 수행 할 수 있는 방법은 없을까요 ?
게시물 검색 결과 발견한 SELFIELD-REFRESH = 'X'. 은 통하지 않았습니다.
사족 : 안 되면 써본 적은 없지만 오늘 중으로 CLASS 로 전부 갈아 엎어 보려고 하고 있습니다..
댓글 3
-
woong
2009.09.14 20:32
-
JiruMi
2009.09.14 20:52
woong 님. 답변 감사합니다.
이렇게 간단한 방법이 있었군요.
방금 아래의 방법으로 스스로 해결 했습니다만,
IF REF_GUID IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF_GUID.
ENDIF.
IF NOT REF_GUID IS INITIAL.
CALL METHOD REF_GUID->CHECK_CHANGED_DATA.
ENDIF.
woong 님의 방법이 간단하므로 이쪽을 사용하겠습니다. 감사합니다.
-
요요
2009.09.14 21:59
REUSE 펑션을 쓰셨을 경우에는 woong 님처럼 하시면 될거구요. cl_gui_alv_grid 를 사용하셨다면 JiruMi 님처럼
하시는 것이 좋을 것 같네요.
g_grid-edt_cll_cb = 'X'. <=== 수정내용반영
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_bypassing_buffer = 'X'
i_callback_program = sy-cprog
i_callback_pf_status_set = slis_ev_pf_status_set2
i_callback_user_command = slis_ev_user_command
is_layout = desc_layout_alv
it_fieldcat = desc_fieldcat_alv_it
it_sort = l_sort_it
i_grid_settings = g_grid
TABLES
t_outtab = g_display2_it.
보통 이렇게만 써줘도 체크박스 체크라던지 수정내용 반영이 되던데...