‎2009 Apr 16 5:41 PM
Hi All,
This is Rajani. I need help on LOOP AT SCREEN statement.
I have 3 selection blocks in the selection screen.
First block contains two radio buttions, the second block contains 6 parameters and the third block contains 3 parameters.
If the first radiobutton is selected, then the parameters in the third block should be grayed out.
In the similar way for the second radiobutton.
Please let me know my mistake from the following code :
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS : P_SALES TYPE C RADIOBUTTON GROUP G1 MODIF ID R1,
P_OPS TYPE C RADIOBUTTON GROUP G1 MODIF ID R1,
P_MONTH TYPE SPMON OBLIGATORY MODIF ID R1.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
PARAMETERS : P_SADIS TYPE BZIRK MODIF ID M1,
P_CUGRP TYPE KDGRP MODIF ID M1,
P_SADCH TYPE VTWEG MODIF ID M1,
P_SADIV TYPE SPART MODIF ID M1,
P_CUPAR TYPE HIEZU04 MODIF ID M1,
P_MAGRP TYPE MVGR1 MODIF ID M1,
P_PRHIE TYPE PRODH1 MODIF ID M1.
SELECT-OPTIONS: S_MATNR FOR S889-MATNR.
PARAMETERS : P_PLANT TYPE WERKS_EXT.
SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003.
PARAMETERS : P_WERKS TYPE WERKS_EXT MODIF ID M2,
P_MATGR TYPE PMNUX MODIF ID M2,
P_MRPCN TYPE DISPO MODIF ID M2.
SELECTION-SCREEN END OF BLOCK B3.
*INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'M1'.
IF P_OPS = 'X'.
SCREEN-INPUT = '0'.
ENDIF.
MODIFY SCREEN.
ENDIF.
IF SCREEN-GROUP1 = 'M2'.
IF P_SALES = 'X'.
SCREEN-INPUT = '0'.
ENDIF.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
‎2009 Apr 16 5:51 PM
Hi Rajani,
When you change the radiobutton selection you need to trigger the AT SELECTION-SCREEN OUTPUT event for the radiobutton selection to take effect.
To do that assign a user command to the radiobutton as follows:
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS : P_SALES TYPE C RADIOBUTTON GROUP G1 MODIF ID R1 USER-COMMAND radb,
P_OPS TYPE C RADIOBUTTON GROUP G1 MODIF ID R1 ,
P_MONTH TYPE SPMON OBLIGATORY MODIF ID R1 .
SELECTION-SCREEN END OF BLOCK B1.
Also, while setting SCREEN-INPUT = 0 for condition met , remember to turn it back on if condition is not met i.e. SCREEN-INPUT = 1 . SCREEN-ACTIVE = 1.
Else the fields once greyed out will remain greyed out.
Cheers,
Aditya
‎2009 Apr 16 5:51 PM
Hi Rajani,
When you change the radiobutton selection you need to trigger the AT SELECTION-SCREEN OUTPUT event for the radiobutton selection to take effect.
To do that assign a user command to the radiobutton as follows:
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS : P_SALES TYPE C RADIOBUTTON GROUP G1 MODIF ID R1 USER-COMMAND radb,
P_OPS TYPE C RADIOBUTTON GROUP G1 MODIF ID R1 ,
P_MONTH TYPE SPMON OBLIGATORY MODIF ID R1 .
SELECTION-SCREEN END OF BLOCK B1.
Also, while setting SCREEN-INPUT = 0 for condition met , remember to turn it back on if condition is not met i.e. SCREEN-INPUT = 1 . SCREEN-ACTIVE = 1.
Else the fields once greyed out will remain greyed out.
Cheers,
Aditya
‎2009 Apr 16 5:56 PM
Hi.
You nedd to change the SELECTION-SCREEN OUTPUT with AT SELECTION-SCREEN ON RADIOBUTTON GROUP g1 .
Grettings.
‎2009 Apr 16 6:14 PM
Hi Rajini,
By using AT SELECTION-SCREEN OUTPUT and creating the MOdif id for the selection screen parameter you can achieve the dynamic selection scree..
PARAMETERS : P_SALES TYPE C RADIOBUTTON GROUP G1 MODIF ID R1 default, "<,add default
P_OPS TYPE C RADIOBUTTON GROUP G1 MODIF ID R2,
P_MONTH TYPE SPMON OBLIGATORY MODIF ID R3.
AT SELECTION-SCREEN OUTPUT.
* Modify selection screen as per the radio buttons selected.
PERFORM modify_sel-screen.
FORM modify_sel-screen .
* If radio button - process in range of STR's selected, display STR
* range and Date range as input
IF p_rb1 EQ c_x.
LOOP AT SCREEN.
IF screen-group1 = c_ir2.
screen-active = c_0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
* If radio button - process from excel is selected, give option for
* user to upload file
ELSEIF p_rb2 EQ c_x.
LOOP AT SCREEN.
IF screen-group1 = c_ir1.
screen-active = c_0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
elseif p_rb3 EQ c_x.
LOOP AT SCREEN.
IF screen-group1 = c_ir1.
screen-active = c_0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " MODIFY_SEL-SCREEN
‎2009 Apr 16 6:19 PM
Hi,
This is your expected solution.
TABLES: mara.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS : p_sales TYPE c RADIOBUTTON GROUP g1 USER-COMMAND ucom DEFAULT 'X', "MODIF ID r1
p_ops TYPE c RADIOBUTTON GROUP g1 . "MODIF ID r1
PARAMETERS: p_month TYPE spmon OBLIGATORY ." MODIF ID r1
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS : p_sadis TYPE bzirk MODIF ID m1,
p_cugrp TYPE kdgrp MODIF ID m1,
p_sadch TYPE vtweg MODIF ID m1,
p_sadiv TYPE spart MODIF ID m1,
p_cupar TYPE hiezu04 MODIF ID m1,
p_magrp TYPE mvgr1 MODIF ID m1,
p_prhie TYPE prodh1 MODIF ID m1.
SELECT-OPTIONS: s_matnr FOR mara-matnr.
PARAMETERS : p_plant TYPE werks_ext.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
PARAMETERS : p_werks TYPE werks_ext MODIF ID m2,
p_matgr TYPE pmnux MODIF ID m2,
p_mrpcn TYPE dispo MODIF ID m2.
SELECTION-SCREEN END OF BLOCK b3.
AT SELECTION-SCREEN.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF p_sales = 'X'.
IF screen-group1 = 'M2'.
screen-input = '0'.
ENDIF.
ENDIF.
IF p_ops IS NOT INITIAL.
IF screen-group1 = 'M1'.
screen-input = '0'.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
Close this thread if you got soloution.
Regards,
Peranandam