2009 Jul 15 7:40 AM
Dear,
On selection screen, there are two radio button, p_mode_d, and p_mode_m, and three selection option, s_bukrs, s_belnr, s_gjahr.
I want to realize that when p_mode_d is set, then, s_bukrs, s_belnr, s_gjahr are not mandatory. When p_mode_m is set, s_bukrs, s_belnr, s_gjahr are mandatory. Here p_mode_d is set 'X' by default.
Now run the program, at first, p_mode_d is set, and s_bukrs, s_belnr, s_gjahr are not mandatory. After select p_mode_m, s_bukrs, s_belnr, s_gjahr are mandatory. But when select p_mode_d again, then, s_bukrs, s_belnr, s_gjahr are still mandatory.
Could you please help me?
Look at my coding here:
SELECTION-SCREEN BEGIN OF BLOCK box1 WITH FRAME TITLE text-001. "Technical datas
SELECTION-SCREEN SKIP.
PARAMETERS: p_file TYPE filename-fileintern DEFAULT 'ZOU_FIN_0005'. "Logical file
SELECTION-SCREEN SKIP.
PARAMETERS: p_mode_d RADIOBUTTON GROUP rad1 USER-COMMAND rad1 DEFAULT 'X',
p_mode_m RADIOBUTTON GROUP rad1.
SELECTION-SCREEN END OF BLOCK box1.
SELECTION-SCREEN BEGIN OF BLOCK box2 WITH FRAME TITLE text-002. "Applicatif data
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs, "Company code:
s_belnr FOR bkpf-belnr, "Accounting document:
s_gjahr FOR bkpf-gjahr, "Fiscal year:
s_budat FOR bkpf-budat, "Posting date:
s_blart FOR bkpf-blart. "Document type:
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK box2.
AT SELECTION-SCREEN OUTPUT.
IF p_mode_m = c_x.
REFRESH: s_bukrs,
s_belnr,
s_budat.
LOOP AT SCREEN.
IF screen-name = 'S_BUKRS-LOW'.
screen-required = 1.
ENDIF.
IF screen-name = 'S_BELNR-LOW'.
screen-required = 1.
ENDIF.
IF screen-name = 'S_GJAHR-LOW'.
screen-required = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
Hi Maggie,
that functionality is not possible, bcoz next time cursor will not go to At selection screen.
you can code for the error message in AT SELECTION SCREEN. I mean instead of standard default option, u have to give error message with manual code.
Thanks,
Ajay
2009 Jul 15 7:48 AM
Hi,
Write an ELSE part in your AT SELECTION-SCREEN OUTPUT (when your p_mode_m is not checked i.e your p_mode_d is checked) and make your select options not mandatory by saying screen-required = 0.
AT SELECTION-SCREEN OUTPUT.
IF p_mode_m = c_x.
REFRESH: s_bukrs,
s_belnr,
s_budat.
LOOP AT SCREEN.
IF screen-name = 'S_BUKRS-LOW'.
screen-required = 1.
ENDIF.
IF screen-name = 'S_BELNR-LOW'.
screen-required = 1.
ENDIF.
IF screen-name = 'S_GJAHR-LOW'.
screen-required = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSEIF p_mode_d = c_x.
REFRESH: s_bukrs,
s_belnr,
s_budat.
LOOP AT SCREEN.
IF screen-name = 'S_BUKRS-LOW'.
screen-required = 0.
ENDIF.
IF screen-name = 'S_BELNR-LOW'.
screen-required = 0.
ENDIF.
IF screen-name = 'S_GJAHR-LOW'.
screen-required = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
Edited by: Nitwick on Jul 15, 2009 12:22 PM
Edited by: Nitwick on Jul 15, 2009 12:24 PM
2009 Jul 15 7:49 AM
hi,
in the AT SELECTION-SCREEN OUTPUT EVENT you have to again assign screen-required is deactivate. see this one,
AT SELECTION-SCREEN OUTPUT.
IF p_mode_m = c_x.
REFRESH: s_bukrs,
s_belnr,
s_budat.
LOOP AT SCREEN.
IF screen-name = 'S_BUKRS-LOW'.
screen-required = 1.
ENDIF.
IF screen-name = 'S_BELNR-LOW'.
screen-required = 1.
ENDIF.
IF screen-name = 'S_GJAHR-LOW'.
screen-required = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSEIF p_mode_d = C_X.
REFRESH: s_bukrs,
s_belnr,
s_budat.
LOOP AT SCREEN.
IF screen-name = 'S_BUKRS-LOW'.
screen-required = 0.
ENDIF.
IF screen-name = 'S_BELNR-LOW'.
screen-required = 0.
ENDIF.
IF screen-name = 'S_GJAHR-LOW'.
screen-required = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
2009 Jul 15 7:49 AM
Hi ,
the problem is that u hav written code for when u select mode_d ....where is the else part....
try to write else part...
like,,..
else if p-mode_m = 'X'.
REFRESH: s_bukrs,
s_belnr,
s_budat.
LOOP AT SCREEN.
IF screen-name = 'S_BUKRS-LOW'.
screen-required = 0.
ENDIF.
IF screen-name = 'S_BELNR-LOW'.
screen-required = 0
ENDIF.
IF screen-name = 'S_GJAHR-LOW'.
screen-required = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
Please Try ....
thn x
Rahul
2009 Jul 15 8:01 AM
Hi Maggie,
that functionality is not possible, bcoz next time cursor will not go to At selection screen.
you can code for the error message in AT SELECTION SCREEN. I mean instead of standard default option, u have to give error message with manual code.
Thanks,
Ajay
2009 Jul 15 8:07 AM
Hi, Ajay kumar ,
I don't understand your meaning. Could you explain it in detail?
2009 Jul 15 8:30 AM
Hi Maggie,
Instead of using screen-required = 1 or 0 in your AT SELECTION-SCREEN, you need to do the validation manually like this.
AT SELECTION-SCREEN OUTPUT.
IF p_mode_d EQ 'X'.
IF s_bukrs IS INITIAL.
" show error message here.
ELSEIF s_belnr IS INITIAL.
" show error message here.
ELSEIF s_gjahr IS INITIAL.
" show error message here.
ENDIF.
ENDIF.
regards,
Peter
2009 Jul 15 8:05 AM
Dear All,
Thank you for your answer.
The method you said I have done, but s_bukrs, s_gjahr, s_belnr are still mandatory when the p_mode_d is set again.
I set debug on 'IF p_mode_m = c_x.', it will run here only the first time to select radio button, then, it will not run here, whatever p_mode_m or p_mode_d is set.
2009 Jul 15 8:55 AM
Hi Maggie,
Try this code and give default values
SELECTION-SCREEN BEGIN OF BLOCK box1 WITH FRAME TITLE text-001. "Technical datas
SELECTION-SCREEN SKIP.
PARAMETERS: p_file TYPE filename-fileintern DEFAULT 'ZOU_FIN_0005'. "Logical file
SELECTION-SCREEN SKIP.
PARAMETERS: p_mode_d RADIOBUTTON GROUP rad1 DEFAULT 'X' USER-COMMAND rad1 ,
p_mode_m RADIOBUTTON GROUP rad1 .
SELECTION-SCREEN END OF BLOCK box1.
SELECTION-SCREEN BEGIN OF BLOCK box2 WITH FRAME TITLE text-002. "Applicatif data
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs DEFAULT val1 TO val2 MODIF ID abc, "Company code:
s_belnr FOR bkpf-belnr DEFAULT val3 TO val4 MODIF ID abc , "Accounting document:
s_gjahr FOR bkpf-gjahr DEFAULT val5 TO val6 MODIF ID abc, "Fiscal year:
s_budat FOR bkpf-budat, "Posting date:
s_blart FOR bkpf-blart. "Document type:
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK box2.
----
At Selection Screen *
----
AT SELECTION-SCREEN OUTPUT .
PERFORM change_selection_screen.
&----
*& Form change_selection_screen
&----
text
----
--> p1 text
<-- p2 text
----
form change_selection_screen .
IF p_mode_m = 'X'.
REFRESH: s_bukrs,
s_belnr,
s_budat.
LOOP AT SCREEN.
IF screen-group1 EQ 'ABC'.
screen-required = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
IF p_mode_d = 'X'.
REFRESH: s_bukrs,
s_belnr,
s_budat.
LOOP AT SCREEN.
IF screen-group1 EQ 'ABC'.
screen-required = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
endform. " change_selection_screen
You will need to give values for mandatory fields once you select Radiobutton P_MODE_M.
Since there are no values in Mandatory fields, flow does not go to the program again.
Regards
Milan
Edited by: Milan Shah on Jul 15, 2009 10:00 AM
Edited by: Milan Shah on Jul 15, 2009 10:03 AM
2009 Jul 15 9:08 AM
Dear Milan Shah ,
In your method, it still not solve my problem. Thank you for your help.
2009 Jul 15 9:18 AM
Hi Maggie,
This code will work .....
SELECTION-SCREEN BEGIN OF BLOCK box1 WITH FRAME TITLE text-001. "Technical datas
SELECTION-SCREEN SKIP.
PARAMETERS: p_file TYPE filename-fileintern DEFAULT 'ZOU_FIN_0005'. "Logical file
SELECTION-SCREEN SKIP.
PARAMETERS: p_mode_d RADIOBUTTON GROUP rad1 DEFAULT 'X' USER-COMMAND rad1,
p_mode_m RADIOBUTTON GROUP rad1.
SELECTION-SCREEN END OF BLOCK box1.
SELECTION-SCREEN BEGIN OF BLOCK box2 WITH FRAME TITLE text-002. "Applicatif data
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs DEFAULT '1000' TO '1001' MODIF ID abc, "Company code:
s_belnr FOR bkpf-belnr DEFAULT '0100000000' TO '010000000000' MODIF ID abc , "Accounting document:
s_gjahr FOR bkpf-gjahr DEFAULT '2007' TO '2009' MODIF ID abc, "Fiscal year:
s_budat FOR bkpf-budat, "Posting date:
s_blart FOR bkpf-blart. "Document type:
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK box2.
----
At Selection Screen *
----
AT SELECTION-SCREEN OUTPUT .
*--> Change Selection Screen
PERFORM change_selection_screen.
&----
*& Form change_selection_screen
&----
form change_selection_screen .
IF p_mode_m = 'X'.
LOOP AT SCREEN.
IF screen-group1 EQ 'ABC'.
screen-required = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
IF p_mode_d = 'X'.
LOOP AT SCREEN.
IF screen-group1 EQ 'ABC'.
screen-required = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
endform.
2009 Jul 15 9:22 AM
2009 Jul 15 9:38 AM
Dear Milan Shah ,
I have no default value for s_bukrs, s_belnr, s_gjahr. So I can't realize it with your code.
Thank you for your help.
2009 Jul 15 9:50 AM
Hi Maggie,
Try like this...
Tables: bkpf.
SELECTION-SCREEN BEGIN OF BLOCK box1 WITH FRAME TITLE text-001. "Technical datas
SELECTION-SCREEN SKIP.
PARAMETERS: p_file TYPE filename-fileintern DEFAULT 'ZOU_FIN_0005'. "Logical file
SELECTION-SCREEN SKIP.
PARAMETERS: p_mode_d RADIOBUTTON GROUP rad1 USER-COMMAND rad1 DEFAULT 'X',
p_mode_m RADIOBUTTON GROUP rad1.
SELECTION-SCREEN END OF BLOCK box1.
SELECTION-SCREEN BEGIN OF BLOCK box2 WITH FRAME TITLE text-002. "Applicatif data
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs, "Company code:
s_belnr FOR bkpf-belnr, "Accounting document:
s_gjahr FOR bkpf-gjahr, "Fiscal year:
s_budat FOR bkpf-budat, "Posting date:
s_blart FOR bkpf-blart. "Document type:
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK box2.
START-OF-SELECTION.
if p_mode_m = 'X'.
IF s_belnr-LOW IS INITIAL.
MESSAGE S398(00) with 'fill s_belnr' .
leave LIST-PROCESSING.
ENDIF.
IF s_bukrs-LOW IS INITIAL.
MESSAGE S398(00) with 'fill s_bukrs'.
leave LIST-PROCESSING.
ENDIF.
IF s_gjahr-LOW IS INITIAL.
MESSAGE S398(00) with 'fill s_gjahr'.
leave LIST-PROCESSING.
ENDIF.
ENDIF.
Regards
Debarshi
2009 Jul 15 10:03 AM
Dear Roy,
I think maybe your method is the only way to realize. Like others said it only can realize by manually with message, not realize in function.
Thank you
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |