list ALV 프로그램 입니다
application toolbar에 필요한 버튼들을 만들었구요..(standard말고, 필요한 버튼만듬)
ALV 프로그램 실행을 하고 툴바의 버튼들을 몇번 눌러봤습니다. ( 1번, 2번, 3번 )
그 후 exit, back, canc...버튼을 누르니 바로 프로그램 종료가 되는 것이 아니라..
아까 눌렀떤 버튼들이 하나씩 뒤로 진행되고 나서야 (2번 1번) 프로그램 종료가 됩니다.
(물론 at user-command에 screen 0 코딩 되어 있구요..)
어캐 해야 바로 한번에 종료가 될까요?
REUSE_ALV_LIST_DISPLAY
에 이벤트를 걸어야 하는건지..아님 sy-' '를 사용하여 값을 0으로 만들어야 하는건지..
모르겠네요
답변 부탁드립니다. ㅜㅠ
댓글 9
-
요요
2009.10.14 19:48
-
츄리닝
2009.10.14 20:40
요요님 감사합니다. 버튼 비활성화를 위해 ALV 화면을 다시 뿌려주는 코딩이 들어가 있습니다.
이를 위해 코딩을 빼서는 안될꺼 같은데요..
일단, BACK, EXIT의 버튼 FUNCTION CODE 를 스탠다드 이름에서 > 새로운 이름으로 변경하였더니.
LEAVE PROGRAM은 먹힙니다. 근데 SCREEN 0은 먹히지 않네요..
코딩 빼지 않고 해결 할 수 있는 방법 없을까요?
아님, 툴바 버튼 비활성화를 위해 alv 화면을 다시 뿌려지지 않고 할 수 있는 방법 부탁드립니다!!
-
페리
2009.10.14 20:56
WHEN 'BACK'.
SY-LISTI = '1'.
LEAVE TO SCREEN 0.
이렇게 함 해보심이 ㅎㅎ
-
츄리닝
2009.10.14 21:00
페리님 답변 갑사합니다!!
해봤는데 안되네요! ㅜㅜ -
jm^^
2009.10.14 23:32
user-commandt를 아래와 같이 쓰셨다면 refresh, col_Stable, row_stable 속성 적용하시면 됩니다.
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
rs_selfield-refresh = 'X'.
rs_selfield-row_stable = 'X'.
rs_selfield-col_stable = 'X'.
ENDFORM.
-
츄리닝
2009.10.14 23:57
JM 님 답변 감사합니다.
SLIS_SEFIELD는 ALV에서 클릭한 필드의 정보등을 수집하는걸로 알고 있는데요..
(ALV화면뿌려지는 것과 별로 관련이 없지 않을까요?^^)
무튼 위와 같이 해보았으나 변화 없습니다. ㅜㅠ !!
-
요요
2009.10.15 00:25
jm^^ 님 처럼 하시고 alv 뿌리는 부분을 빼보세요.
alv 뿌리는 부분이 없어지지 않는한 해결은 안될 것 같네요. ^^;;
alv 다시 뿌리면서 container가 계속 생성되기 때문에 leave to screen 0 를
하게 되도 처음으로 가는 것이 아니라 이전에 있던 alv 로 이동하게 되는 거예요.
refresh 하시게 되면 alv 에 변경된 값이 반영이 되기 때문에 툴바등 변경사항이
적용되어지게 될 거예요.
-
츄리닝
2009.10.15 00:44
답변해주신 많은 님들 정말 감사드립니다.!!
특히 요요님의 정곡을 찔러주시는 답변과, jm님의 소스!!! 너무너무 감사드립니다~~!
말씀대로, alv 뿌리는 코딩들을 지우고, jm님의 말씀대로 ..SELFIELD-REFRESH = 'X' 해주니
LEAVE TO SCREEN 0 됩니다!!
너무나 감사드립니다~~!히히히~~~^^
-
페리
2009.10.15 04:41
테스트 해보니깐.. 신기한걸 발견했네요 =ㅂ=
DATA : COUNT TYPE I.
...
FORM ALV_GRID_DISPLAY11
TABLES FIELDCAT TYPE SLIS_T_FIELDCAT_ALV
SORTCAT TYPE SLIS_T_SORTINFO_ALV
EVENTCAT TYPE SLIS_T_EVENT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = PGM
I_CALLBACK_USER_COMMAND = 'USER_COMMAND1'
I_CALLBACK_PF_STATUS_SET = 'STATUS_SET'
IT_FIELDCAT = FIELDCAT[]
IT_SORT = SORTCAT[]
IT_EVENTS = EVENTCAT[]
I_SAVE = 'A'
TABLES
T_OUTTAB = <ITAB>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
WHILE COUNT NE 1.
COUNT = COUNT - 1.
LEAVE TO SCREEN 0.
ENDWHILE.
CLEAR COUNT.
ENDFORM.
FORM USER_COMMAND1 USING R_UCOMM TYPE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN '1'.
ADD 1 TO COUNT.
PERFORM ALV_GRID_DISPLAY11 " 테스트를 위해 똑같은 창 호출
TABLES FIELDCAT
SORTCAT
EVENTCAT.
WHEN '2'.
ADD 1 TO COUNT.
PERFORM ALV_GRID_DISPLAY11 " 테스트를 위해 똑같은 창 호출
TABLES FIELDCAT
SORTCAT
EVENTCAT.
WHEN 'BAK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDFORM.
LEAVE TO SCREEN 0. 을 만나게되면
'REUSE_ALV_GRID_DISPLAY' 이 펑션을 타게 되고..
WHILE COUNT NE 1.
COUNT = COUNT - 1.
LEAVE TO SCREEN 0.
ENDWHILE.
도 같이 타게 되네요.. 그렇다면 COUNT 변수 하나를 줘서 화면을 뿌려줄때마다 1씩 증가시키고..
BACK 버튼 클릭시 처음으로 가게 될때까지 LEAVE TO SCREEN 0을 WHILE문으로 묶어줬더니.. 되네요 -0-;
참고하세요.. 허접한 테스트 결과지만요 ㅎㅎ
제 느낌에는 해당 툴바의 버튼을 눌렀을 때 alv 가 다시 그려진것 같네요.
그래서 back 할 때 이전 alv, 이전 alv, ...로 이동한 것 같습니다.
확인해보시고 툴바 버튼 누른후에 alv 를 다시 실행하는 부분이 있으면
빼시면 되지 않을까 생각됩니다.