select-options으로 값을 입력받으려고 합니다.
근데 제한값을 주려고 하는데요
possible entry로만 입력할수있고 화면에선 바로 입력 불가하도록 하려면 어케해야 하나요?
그리고 이것은 필수항목입니다.
select-options 옵션에는 안보이는것같고
화면상에서 input불가를 하니 필수항목에 위배가 되고요 ㅠㅠ
댓글 5
-
남군
2009.06.26 20:15
-
ID
2009.06.26 22:42
남군님 생각이랑 비슷한데요..
이렇게 하는건 어떤가요...
더 좋은 방법있음 올려주세요...
REPORT ZSEAHELP.
PARAMETERS : pa_vbeln LIKE vbak-vbeln OBLIGATORY MODIF ID SC,
PA_BBB,
PA_AAA.
AT SELECTION-SCREEN.
IF pa_vbeln IS INITIAL.
MESSAGE E000(0K) WITH 'F4로 데이터 입력 바랍니다.'.
STOP.
ENDIF.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-GROUP1 EQ 'SC'.
SCREEN-INPUT = '0'. "파라메터에 값 못넣도록
MODIFY SCREEN.
ENDIF.
ENDLOOP.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_vbeln .
PERFORM HELP_FNAME USING 'PA_VBELN' .
*&---------------------------------------------------------------------*
*& Form HELP_FNAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0039 text
*----------------------------------------------------------------------*
FORM HELP_FNAME USING P_FNAME.
TYPES : BEGIN OF VTAB.
TYPES : CODE TYPE QAVE-VCODE,
TEXT TYPE QPCT-KURZTEXT.
TYPES : END OF VTAB.
DATA : LT_VTAB TYPE VTAB OCCURS 0 WITH HEADER LINE,
LT_RTAB TYPE DDSHRETVAL OCCURS 0 WITH HEADER LINE.
DATA : l_retfield(30).
CLEAR : LT_RTAB, LT_RTAB[], LT_VTAB, LT_VTAB[].
LOOP AT SCREEN.
IF SCREEN-GROUP1 EQ 'SC'.
SCREEN-INPUT = '1'. "파라메터에 값 넣도록
MODIFY SCREEN.
ENDIF.
ENDLOOP.
* .. possbile entry에 보여질 값
LT_VTAB-CODE = '1'.
LT_VTAB-TEXT = 'TEST1'.
APPEND LT_VTAB. CLEAR LT_VTAB.
LT_VTAB-CODE = '2'.
LT_VTAB-TEXT = 'TEST4'.
APPEND LT_VTAB. CLEAR LT_VTAB.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'CODE'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = P_FNAME
VALUE_ORG = 'S'
TABLES
VALUE_TAB = LT_VTAB
RETURN_TAB = LT_RTAB
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
LOOP AT SCREEN.
IF SCREEN-GROUP1 EQ 'SC'.
SCREEN-INPUT = '0'. "파라메터에 값 못넣도록
MODIFY SCREEN.
ENDIF.
ENDLOOP.
CLEAR : LT_VTAB, LT_VTAB[], LT_RTAB, LT_RTAB[].
ENDFORM. " HELP_FNAME
-
진
2009.06.27 00:40
좋은 방법이 아닙니다.
필드값을 입력할 때마다 꼭 탐색도움말을 열고 선택해야 한다면 유저가 짜증낼 것이 뻔합니다.
그나마 탐색도움말의 리스트가 적으면 찾는데 시간이 덜 걸리겠지만, 수십건이 넘어간다면...
입력필드에는 자동완성처럼 한번 입력된 값을 쉽게 다시 입력가능한 기능이 존재하는데,
이런 훌륭한 기능을 못쓰게 하고 굳이 꼭 탐색도움말로만 입력가능게 하는 이유가 뭔지 궁금하네요.
AT SELECTION-SCREEN OUTPUT에서 입력된 필드값이 올바르지 않으면
에러메시지를 출력하도록 하는 것이 올바른 방식이라 생각됩니다.
-
남군
2009.06.27 02:48
별건 아니지만 ID 님의 로직에 약간 의문점이 있네요.
AT SELECTION-SCREEN.
IF pa_vbeln IS INITIAL.
MESSAGE E000(0K) WITH 'F4로 데이터 입력 바랍니다.'.
STOP.
ENDIF.
이 부분에서 pa_vbeln에 값이 있다는 것은 user가 직접 입력 한 경우와 F4로 입력한 경우가 있는데
메세지 처리가 f4에 대한 것 밖에 없네요..
원천적으로는 실무에서 이런 경우는 잘 사용을 안하겠지만요..
그럼 수고하세요~
-
참살마루
2009.07.06 18:26
^^ 여러분들의 답변 정말 감사합니다~~~
너무 많은 도움이 되었습니다 ㅎㅎ
하기 로직 활용해 보세요~ 임의의 변수를 AT SELECTION-SCREEN ON VALUE-REQUEST 구문에서 'X'로 받고 X가 아니면 실행이 안되게 하면 될것 같네요..
DATA : g_chk.
PARAMETERS : pa_vbeln LIKE vbak-vbeln OBLIGATORY.
AT SELECTION-SCREEN.
IF g_chk IS INITIAL.
MESSAGE s000 WITH 'F4로 데이터 입력 바랍니다.'.
STOP.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_vbeln.
MOVE 'X' TO g_chk .
....
....
START-OF-SELECTION.
WRITE :/ pa_vbeln.