조회화면에서 상단 Back 버튼 클릭하면 보통의 경우 조건선택 초기화면으로 넘어가잖아요.
그런데...
예를 들어 A,B,C 조건 중 B나 C를 선택해서 조회하면...(A가 디폴트로 잡혀있습니다.)
조회화면까지는 잘나오는데..
상단 Back 버튼 클릭시 화면이 하얗게 변하고..다시 Back 버튼 클릭해야 초기화면으로 갑니다.
어차피 조회화면은 PERFORM display_data. 공통으로 돌거든요.
그렇기 때문에.....
이런 경우 어떻게 해결해야되나요???
조회화면에서 Back 버튼 클릭시 디버깅해보면...
-조건 B, C 선택시 (비정상)
PERFORM display_data. 탄 후에 끝
-조건 A 선택시 (정상)
PERFORM display_data. 탄 후에 PERFORM initialization. 타서 초기화면으로 돌아갑니다.
완전 환장하겠네요. ㅠㅠ
========================================
내용 추가 (2010.04.09)
개발에서는 정상적으로 초기화면으로 돌아오고 있으나, QA에서는 아직도 비정상으로 작동하고 있습니다.
소스는
SELECTION-SCREEN COMMENT /1(79) text-011 MODIF ID rb2 . "※ 수량 기준
PARAMETERS: r_ex01 RADIOBUTTON GROUP rb3 DEFAULT 'X' MODIF ID rb2, "기본단위
r_ex02 RADIOBUTTON GROUP rb3 MODIF ID rb2, "박스
r_ex03 RADIOBUTTON GROUP rb3 MODIF ID rb2. "중량(Kg)
PERFORM CHANGE_UNIT. "수량기준으로 환산단위 변경
PERFORM display_data. "화면 출력
FORM CHANGE_UNIT.
*수량기준으로 환산처
IF R_EX01 = 'X'.
CLEAR p_unit.
ENDIF.
IF R_EX02 = 'X'.
P_UNIT = 'BOX'.
PERFORM convert_to_conv_unit. "BOX 환산 단위로 환산 처리
ENDIF.
IF R_EX03 = 'X'.
P_UNIT = 'KG'.
PERFORM convert_to_KG. "KG 환산 단위로 환산 처리
ENDIF.
ENDFORM. " CHANGE_UNIT
*&---------------------------------------------------------------------*
*& Form convert_to_KG
*&---------------------------------------------------------------------*
* KG으로 환산 처리
*----------------------------------------------------------------------*
FORM convert_to_KG.
CLEAR : GT_MARA.
SELECT MATNR
NTGEW
GEWEI
INTO CORRESPONDING FIELDS OF TABLE GT_MARA
FROM MARA
FOR ALL ENTRIES IN GT_MAIN
WHERE MATNR = GT_MAIN-MATNR.
LOOP AT GT_MARA.
IF GT_MARA-GEWEI = 'KG'.
GT_MARA-L_NTGEW = GT_MARA-NTGEW .
ENDIF.
IF GT_MARA-GEWEI = 'G'.
GT_MARA-L_NTGEW = GT_MARA-NTGEW / 1000 .
ENDIF.
MODIFY GT_MARA.
ENDLOOP.
LOOP AT GT_MAIN.
IF GT_MAIN-MEINS = 'KG'.
SKIP.
ELSE.
READ TABLE GT_MARA WITH KEY MATNR = GT_MAIN-MATNR.
IF SY-SUBRC = 0.
GT_MAIN-MEINS = 'KG'.
IF GT_MAIN-BGNME <> 0.
GT_MAIN-BGNME = GT_MAIN-BGNME * GT_MARA-L_NTGEW.
ENDIF.
IF GT_MAIN-PUR_IN <> 0.
GT_MAIN-PUR_IN = GT_MAIN-PUR_IN * GT_MARA-L_NTGEW.
ENDIF.
IF GT_MAIN-PRD_IN <> 0.
GT_MAIN-PRD_IN = GT_MAIN-PRD_IN * GT_MARA-L_NTGEW.
ENDIF.
IF GT_MAIN-ETC_IN <> 0.
GT_MAIN-ETC_IN = GT_MAIN-ETC_IN * GT_MARA-L_NTGEW.
ENDIF.
IF GT_MAIN-LGO_IN <> 0.
GT_MAIN-LGO_IN = GT_MAIN-LGO_IN * GT_MARA-L_NTGEW.
ENDIF.
IF GT_MAIN-SAL_OUT <> 0.
GT_MAIN-SAL_OUT = GT_MAIN-SAL_OUT * GT_MARA-L_NTGEW.
ENDIF.
IF GT_MAIN-PRD_OUT <> 0.
GT_MAIN-PRD_OUT = GT_MAIN-PRD_OUT * GT_MARA-L_NTGEW.
ENDIF.
IF GT_MAIN-ETC_OUT <> 0.
GT_MAIN-ETC_OUT = GT_MAIN-ETC_OUT * GT_MARA-L_NTGEW.
ENDIF.
IF GT_MAIN-LGO_OUT <> 0.
GT_MAIN-LGO_OUT = GT_MAIN-LGO_OUT * GT_MARA-L_NTGEW.
ENDIF.
IF GT_MAIN-ENDME <> 0.
GT_MAIN-ENDME = GT_MAIN-ENDME * GT_MARA-L_NTGEW.
ENDIF.
MODIFY GT_MAIN.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " convert_to_KG
FORM display_data .
DATA: lv_lines TYPE i,
lv_text(60).
* data 정렬
SORT gt_main BY lfgja lfmon werks lgort matnr.
* 조회 건수 출력
DESCRIBE TABLE gt_main LINES lv_lines.
lv_text = lv_lines.
CONDENSE lv_text.
CONCATENATE lv_text '건이 조회 되었습니다.' INTO lv_text.
MESSAGE s001 WITH lv_text.
CALL METHOD cl_gui_cfw=>flush.
* alv default값 설정 및 변수 초기화
PERFORM alv_set_defualt_variant USING sy-repid 'A' 'GT_MAIN' ''.
PERFORM alv_set_layout USING 'X' 'X' ''.
* field catalog 설정
PERFORM alv_set_field_catalog.
* sort field 설정
* PERFORM alv_set_sort_field USING : 'MATNR' 1 'X' '' ''.
* Event handler 등록
PERFORM alv_set_event_handler USING : 'TOP_OF_PAGE',
'PF_STATUS_SET'.
* List Comment 설정
PERFORM alv_set_list_comment.
* ALV 호출
* if rb_grid = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid "g_repid
* i_callback_user_command = 'USER_COMMAND'
it_events = gt_events[]
is_layout = gs_layout
* i_save = g_save
is_variant = g_variant
it_fieldcat = gt_fieldcat[]
it_sort = gt_sort[]
TABLES
t_outtab = gt_main.
ENDFORM. " display_data
댓글 8
-
페리
2010.04.09 04:13
-
無念군
2010.04.09 11:41
일반 리포트 프로그램에서 말씀하시는건가요???
perform 구문 형태로 유추해 본다면..
대략 alv나 write 문 출력이후에 .. 상단 버튼이 먹지 않는 경우 같습니다만.. ㅡ_ㅡ;;;
강제로 screen 1000 으로 보내면 되지 않을까요???
-
맨날초보
2010.04.09 20:31
PERFORM display_data한 후에 강제로 1000으로 보내는걸 넣었더니 초기화면(조건선택화면) 실행 버튼을 두번 클릭해야되며, 선택했던 조건이 아닌 기본 디폴트로 조회가 되네요. ㅠㅠ
CALL SELECTION-SCREEN 1000
아직도 해결이 안되고 있어요. 증상은 위에 적은 거 그대로에요. 강제실행은 그냥 주석처리함.
-
Test
2010.04.10 00:43
쪽지 읽어 보시기바랍니다...보내놨어요..^^ -
래피드
2010.04.10 00:43
음. 아니면 DISPLAY 에 USER_COMMAND 와 PF_STATUS 를 주시고 STATUS 에 BACK EXIT CANC버튼추가하셔서여
USER-COMMAND 에 세개의 버튼 모두 눌러도 LEAVE TO SCREEN 0하는 로직을 추가해보세요~
만약 이렇게 로직을 구성하면 3개의 아이콘 밖에 안보이는데 다른 버튼 기능을 요구하는 경우에는
아이콘 템플릿으로 추가해주시면되여~ -
無念군
2010.04.10 00:48
SLECTION-SCREEN COMMENT /1(79) text-011. "MODIF ID rb2 . <<<
modif id 의 경우
at selection-screen 으로 화면을 변경할때 사용하는데요..
쓰시는 부분이 아니시라면 삭제.. ;;
래피드님도 답변 다셨는데..
-------- 해당 구문중 -------------------------------------------
* Event handler 등록
PERFORM alv_set_event_handler USING : 'TOP_OF_PAGE',
'PF_STATUS_SET'. <<<<
: alv 화면상단에 그림이나 TEXT header 정보 다신건 아닌지..
se80 코드로 해당 프로그램 들어 가셔서 확인하시면 ..
**GUI 상태 ..
즉.. 1000번 화면에 GUI 상태 이름확인.
standard 로 구성 된건지 신규로 구현한건지..
i_callback_program = sy-repid "g_repid
* i_callback_user_command = 'USER_COMMAND'
i_callback_pf_status_set = 'PF_STATUS_SET' <<< 구문추가..
기능키 > 표준툴바 .. back 버튼들에 명령어들을 확인해 주시구요 ..
*&---------------------------------------------------------------------*
*& FORM PF_STATUS_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM pf_status_set TYPE slis_t_extab .
IF A = 'X'. "이런식으로 되어 있지는 않는지요??
SET PF-STATUS-SET '1000'.
ENDIF.
아니라면..
*&F03 = 녹색 ← 화살표
*&f15 = 노랑색 ↑ 화살표
*&f12 = 빨강색 X
case SY-UCOMM.
when '&F03' or '&F15'.
LEAVE TO SCREEN '1000'.
when '&F12'.
LEAVE PROGRAM.
endcase.
ENDFORM. "pf_status
-
맨날초보
2010.04.10 08:20
Test 님 : 쪽지 잘 봤습니다. 그런데 그건 라디오버튼 선택에 따라 조건들이 변경되게 하는 방법이라 제 문제와는 다른네요. 여튼 감사합니다. ^^
래피드 & 무념군님 : 두 분이 달아주신 내용은 이미 이래저래 적용해봤던 내용이에요. ㅠㅠ 안될 이유가 없는거 같은데....저런 문제가 생기니..정말 환장할 노릇입니다.
오늘 하루종일 이거저거 적용만 하다 보냈네요.(완전 하루종일 삽질 했어요.) 그런데도 아직 해결 안됐어요. ㅠㅠㅠㅠㅠㅠ
-
맨날초보
2010.04.13 01:23
이래저래 해봤는데도 안되서...
PERFORM display_data. 밑에.
IF R_EX03 = 'X' OR R_EX06 = 'X'.
CALL TRANSACTION 'ZMMR0370'. <===자신의 tcode를 썼습니다.
ENDIF.
생각해도 완전 꼼수 =.=
여튼 해결 ^^
A일때 로직 좀 올려주실 수 있나요? 저도 궁금하네요.