SELECTION-SCREEN BEGIN OF BLOCK comm1 WITH FRAME TITLE text-001.
if P_APP1 = 'X'.
PARAMETERS: p_WERKS like ZMM0610T-WERKS MODIF ID MD2 OBLIGATORY. ">플랜트
PARAMETERS: p_MATNR like marc-MATNR MODIF ID MD2 OBLIGATORY.
">자재번호
elseif P_APP2 = 'X'.
SELECT-OPTIONS: s_WERKS for ZMM0610T-WERKS MODIF ID MD1. ">자재번호
SELECT-OPTIONS: s_MATNR for mara-MATNR MODIF ID MD1. ">자재번호
endif.
AT SELECTION-SCREEN OUTPUT.
if P_APP2 = 'X'.
loop at screen.
if screen-group1 = 'MD1'.
* SCREEN-INVISIBLE = 0.
screen-active = 1.
modify screen.
endif.
endloop.
else.
loop at screen.
if screen-group1 = 'MD1'.
* SCREEN-INVISIBLE = 0.
screen-active = 0.
modify screen.
endif.
endloop.
endif.
if P_APP1 = 'X'.
loop at screen.
if screen-group1 = 'MD2'.
* SCREEN-INVISIBLE = 0.
screen-active = 1.
modify screen.
endif.
endloop.
else.
loop at screen.
if screen-group1 = 'MD2'.
* SCREEN-INVISIBLE = 0.
screen-active = 0.
modify screen.
endif.
endloop.
endif.
이렇게 하니 P_APP2 로 '버튼을 클릭시 모든 필수 입력 필드에 값을 입력하십시오'라는 에러가 뿌려지던데요
저는 P_APP1일때는 필수값으로 파라미터로 뿌려주고 싶고
P_APP2 일때는 옵션값으로 뿌려주고 싶은건데요..
에러가 나오지 않게 하는 수는 없나요?
정말 감사합니다 ~잘되네용 ^^
screen-required 를 설정하시면 되는데요. 기본적으로 '1' 이 필수 '0'이 필수아님인데
'1'일 경우 at selection-output 보다 선행점검을 하기 때문에 필수값을 입력하지 않으면
필수입력하라고 계속해서 오류가 나게 될 거예요.
이럴경우 '1'대신 '2'를 쓰게되면 모양은 필수입력해야 하는 것 처럼 표시되지만
실제로 필수체크는 하지 않게 되는데, '2'로 설정하시고 내부적으로 필수점검로직을
추가로 넣으시면 원하시는 결과를 얻으실 수 있을 것 같습니다.
예를 들면 다음과 같은 방법으로 코딩하시면 될 것 같습니다.
PARAMETERS AA TYPE C.
PARAMETERS CC TYPE C.
PARAMETERS BB TYPE C AS CHECKBOX USER-COMMAND ZZZ.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-NAME CS 'AA'.
CASE BB.
WHEN SPACE. SCREEN-REQUIRED = '0'.
WHEN 'X'. SCREEN-REQUIRED = '2'.
ENDCASE.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
START-OF-SELECTION.
* 필수점검
IF AA IS INITIAL.
MESSAGE S208(00) WITH '모든 필수 입력 필드에 값을 입력하십시오.'
DISPLAY LIKE 'E'.
EXIT.
ENDIF.
WRITE 'aa'.