안녕하세요.
아래와 같이 파라미터가 두 개가 있는데 구매처는 파서블엔트리로 입력을 받고 싶습니다.
다른 프로그램처럼 read only 기능이 있는지요?
알려주시면 감사하겠습니다.
selection-screen begin of block b1 with frame title text-001.
parameters : p_werks like marc-werks obligatory. "플랜트
parameters : p_lifnr like lfa1-lifnr obligatory. "구매처
댓글 7
-
홀로서는나비
2010.05.18 02:05
-
mlrs0128
2010.05.18 19:23
네 parameters : p_lifnr like lfa1-lifnr obligatory. "구매처 요 필드를 f4로만 입력받게 하고 싶습니다.
나비님께서 알려주신 내용에서
1. AT SELECTION-SCREEN OUTPUT 에서 LOOP AT SCREEN 하셔서 구매처 필드에 INPUT = 0 속성을 부여하십시오.
=> 이걸 어떤 식으로 해야하는지요?
-
홀로서는나비
2010.05.18 23:04
parameters : p_lifnr like lfa1-lifnr obligatory modif id mod.
AT SELECTION-SCREEN OUTPUT .
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'MOD'.
SCREEN-INPUT = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
-
정호아빠
2010.05.19 01:46
구매처 필드를 READ ONLY로 하면 불편하지 않을까요.
READ ONLY로 하시려는 목적이 구매처 마스터이외의 값을 받지 않을려고 하시는 의도인지요..?
위의 목적이라면 VALUE CHECK를 쓰시면 될것같은데요?
PARAMETERS : P_LIFNR LIKE LFA1-LIFNR OBLIGATORY. -> LFA1을 LFB1으로 변경.
PARAMETERS : P_LIFNR LIKE LFB1-LIFNR OBLIGATORY VALUE CHECK . -
mlrs0128
2010.05.19 22:58
홀서서는 나비님 감사합니다.
알려주신대로 하니 READ ONLY가 됩니다.
그런데 두번째 내용도 제가 잘 모르겠습니다.
(2. AT SELECTION-SCREEN ON VALUE-REQUEST 에서 f4 를 로직으로 구현하십시오. 이 때 INPUT = 0 이므로 일반적인 방법으로는 값이 입력되지 않습니다. 여러가지 방법이 있지만 DYNP_VALUES_UPDATE 를 사용하시면 됩니다.)
=> 이 부분도 같이 알려주시면 감사하겠습니다.
정호아빠님 답변감사다릅니다.
READ ONLY로 하려는 이유는 구매처 코드가 비슷한 것들에 대해 사용자 오류를 방지하기 위함입니다.
그래서 F4를 통해서만 입력받으려 하는 것입니다.
-
홀로서는나비
2010.05.20 18:37
이것은 예시입니다.
데이터 가져오는 부분이라든가, 혹은 F4 띄우는 방법 등은 적절히 조절하십시오.
PARAMETERS : P_LIFNR LIKE LFA1-LIFNR OBLIGATORY MODIF ID MOD.
AT SELECTION-SCREEN OUTPUT.
PERFORM SCREEN_CONTROL.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LIFNR.
PERFORM LIFNR_F4 USING P_LIFNR.
*&---------------------------------------------------------------------*
*& Form SCREEN_CONTROL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM SCREEN_CONTROL .
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'MOD'.
SCREEN-INPUT = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDFORM. " SCREEN_CONTROL
*&---------------------------------------------------------------------*
*& Form LIFNR_F4
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM LIFNR_F4 USING P_OBJECT.
DATA: BEGIN OF IT_OBJECT OCCURS 0,
LIFNR TYPE LFA1-LIFNR,
NAME1 TYPE LFA1-NAME1,
END OF IT_OBJECT.
DATA: I_FIELDS LIKE HELP_VALUE OCCURS 0 WITH HEADER LINE,
I_SELECTFIELD LIKE HELP_INFO-FIELDNAME,
I_SELECT_VALUE LIKE HELP_INFO-FLDVALUE,
I_IND LIKE SY-TABIX.
CONSTANTS: C_TAB1 TYPE TABNAME VALUE 'LFA1',
C_TAB2 TYPE TABNAME VALUE 'LFA1',
C_FIELD1 TYPE FIELDNAME VALUE 'LIFNR',
C_FIELD2 TYPE FIELDNAME VALUE 'NAME1',
C_F4X TYPE FLAG VALUE 'X',
C_F4SPACE TYPE FLAG VALUE ' '.
SELECT A~LIFNR A~NAME1
INTO CORRESPONDING FIELDS OF TABLE IT_OBJECT
FROM LFA1 AS A INNER JOIN LFB1 AS B
ON A~LIFNR = B~LIFNR
UP TO 500 ROWS
WHERE B~BUKRS = '1000'.
IF SY-SUBRC <> 0.
MESSAGE S000(TEST) WITH '데이터가 없습니다' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
SORT IT_OBJECT BY LIFNR.
CHECK IT_OBJECT[] IS NOT INITIAL.
I_FIELDS-TABNAME = C_TAB1.
I_FIELDS-FIELDNAME = C_FIELD1.
I_FIELDS-SELECTFLAG = C_F4X.
APPEND I_FIELDS.
I_FIELDS-TABNAME = C_TAB2.
I_FIELDS-FIELDNAME = C_FIELD2.
I_FIELDS-SELECTFLAG = C_F4SPACE.
APPEND I_FIELDS.
CLEAR P_OBJECT.
CALL FUNCTION 'HELP_VALUES_GET_NO_DD_NAME'
EXPORTING
SELECTFIELD = I_SELECTFIELD
IMPORTING
IND = I_IND
SELECT_VALUE = I_SELECT_VALUE
TABLES
FIELDS = I_FIELDS
FULL_TABLE = IT_OBJECT.
CHECK NOT I_IND IS INITIAL.
P_OBJECT = I_SELECT_VALUE.
DATA: G_DYNAME LIKE D020S-PROG,
G_DYNUMB LIKE D020S-DNUM.
DATA: G_DYNPFIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE.
G_DYNAME = SY-REPID.
G_DYNUMB = SY-DYNNR.
G_DYNPFIELDS-FIELDNAME = 'P_LIFNR'.
G_DYNPFIELDS-FIELDVALUE = I_SELECT_VALUE.
APPEND G_DYNPFIELDS.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
DYNAME = G_DYNAME
DYNUMB = G_DYNUMB
TABLES
DYNPFIELDS = G_DYNPFIELDS
* EXCEPTIONS
* INVALID_ABAPWORKAREA = 1
* INVALID_DYNPROFIELD = 2
* INVALID_DYNPRONAME = 3
* INVALID_DYNPRONUMMER = 4
* INVALID_REQUEST = 5
* NO_FIELDDESCRIPTION = 6
* UNDEFIND_ERROR = 7
* OTHERS = 8
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " LIFNR_F4
-
mlrs0128
2010.05.20 23:27
홀로서는 나비님. 정말 감사드립니다.
해보니 잘 돌아갑니다.
덕분에 빨리 해결했습니다.
다시 한 번 감사드립니다.
말씀하신 내용이 구매처 필드에 대해 직접 입력은 못하고, f4로만 입력받게 하고 싶으시다는 건가요?
만일 그렇다면 다음과 같이 하십시오.
1. AT SELECTION-SCREEN OUTPUT 에서 LOOP AT SCREEN 하셔서 구매처 필드에 INPUT = 0 속성을 부여하십시오.
2. AT SELECTION-SCREEN ON VALUE-REQUEST 에서 f4 를 로직으로 구현하십시오. 이 때 INPUT = 0 이므로 일반적인 방법으로는 값이 입력되지 않습니다. 여러가지 방법이 있지만 DYNP_VALUES_UPDATE 를 사용하시면 됩니다.