‎2005 Sep 08 11:52 PM
I need to create 2 bolcks of selection screens. Only one of this should be visible at a particular time.
If a radiobutton 1 is selected then block1 has to visible and if radio button 2 is selected then block 2 should be visible. Both blocks have select-options and parameters.
Can anyone give me ideas how to do this.thanks in advance.
‎2005 Sep 09 12:46 AM
Hi
try this piece of code, i think it should help you:
TABLES BKPF.
DATA: GROUP_ID(3).
PARAMETER: P1 RADIOBUTTON GROUP R1 DEFAULT 'X' USER-COMMAND RAD1.
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME.
PARAMETER: P_BUKRS LIKE T001-BUKRS MODIF ID AAA,
P_GJAHR LIKE BKPF-GJAHR MODIF ID AAA.
SELECT-OPTIONS: S_BELNR FOR BKPF-BELNR MODIF ID AAA.
SELECTION-SCREEN END OF BLOCK BL1.
PARAMETER: P2 RADIOBUTTON GROUP R1.
SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME.
PARAMETER: P_BUKRS2 LIKE T001-BUKRS MODIF ID BBB,
P_GJAHR3 LIKE BKPF-GJAHR MODIF ID BBB.
SELECT-OPTIONS: S_BELNR2 FOR BKPF-BELNR MODIF ID BBB.
SELECTION-SCREEN END OF BLOCK BL2.
AT SELECTION-SCREEN OUTPUT.
CASE 'X'.
WHEN P1. GROUP_ID = 'BBB'.
WHEN P2. GROUP_ID = 'AAA'.
ENDCASE.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = GROUP_ID.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
Max
‎2005 Sep 09 12:46 AM
Hi
try this piece of code, i think it should help you:
TABLES BKPF.
DATA: GROUP_ID(3).
PARAMETER: P1 RADIOBUTTON GROUP R1 DEFAULT 'X' USER-COMMAND RAD1.
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME.
PARAMETER: P_BUKRS LIKE T001-BUKRS MODIF ID AAA,
P_GJAHR LIKE BKPF-GJAHR MODIF ID AAA.
SELECT-OPTIONS: S_BELNR FOR BKPF-BELNR MODIF ID AAA.
SELECTION-SCREEN END OF BLOCK BL1.
PARAMETER: P2 RADIOBUTTON GROUP R1.
SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME.
PARAMETER: P_BUKRS2 LIKE T001-BUKRS MODIF ID BBB,
P_GJAHR3 LIKE BKPF-GJAHR MODIF ID BBB.
SELECT-OPTIONS: S_BELNR2 FOR BKPF-BELNR MODIF ID BBB.
SELECTION-SCREEN END OF BLOCK BL2.
AT SELECTION-SCREEN OUTPUT.
CASE 'X'.
WHEN P1. GROUP_ID = 'BBB'.
WHEN P2. GROUP_ID = 'AAA'.
ENDCASE.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = GROUP_ID.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
Max
‎2005 Sep 09 2:44 AM
Max has given a very good example. U can use that.
If you have any obligatory fields in ur screen then this will not work without entering obligatory fields values eventhough if u r not using that block. So please keep this in mind while coding.
Regards
gv
‎2005 Sep 09 12:48 AM
You will want to do a LOOP AT SCREEN in the AT SELECTION-SCREEN OUTPUT event.
In order to trigger an event when the user clicks either radiobutton, you will have to assign a FCODE to the parameter.
Parameters: p_rad1 radiobutton group grp1 user-command 'CHECK'.
Parameters: p_rad2 radiobutton group grp1.
Put the following code in your program, in debug, look at the values of SCREEN during each loop. Check the screen-group1 value for all screen elements within a block. This is the value that you will want to check against.
AT SELECTION-SCREEN OUTPUT
LOOP AT SCREEN.
IF p_RAD1 = 'X'.
If SCREEN-GROUP1 = 'BLK1'. "whatever the value is
SCREEN-INVISIBLE = '0'.
ELSE.
SCREEN-INVISIBLE = '1'.
ENDIF.
Elseif p_rad2 = 'X'
If SCREEN-GROUP1 = 'BLK2'. "whatever the value is
SCREEN-INVISIBLE = '0'.
ELSE.
SCREEN-INVISIBLE = '1'.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
I don't have an R/3 system available to me right now, so this isn't tested. But you get the idea.
Regards,
Rich Heilman
‎2005 Sep 09 3:09 AM
Hi
This can achieved using tabbed blocks on selection screen. Check command "Selection screen begin of tabbed block....".
Cheers
‎2005 Sep 09 3:15 AM
Hi
Check this out
REPORT demo_sel_screen_with_tabstrip.
DATA flag(1) TYPE c.
SUBSCREEN 1
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p1(10) TYPE c,
p2(10) TYPE c,
p3(10) TYPE c.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 100.
SUBSCREEN 2
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
PARAMETERS: q1(10) TYPE c OBLIGATORY,
q2(10) TYPE c OBLIGATORY,
q3(10) TYPE c OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF SCREEN 200.
STANDARD SELECTION SCREEN
SELECTION-SCREEN: BEGIN OF TABBED BLOCK mytab FOR 10 LINES,
TAB (20) button1 USER-COMMAND push1,
TAB (20) button2 USER-COMMAND push2,
TAB (20) button3 USER-COMMAND push3
DEFAULT SCREEN 300,
END OF BLOCK mytab.
INITIALIZATION.
button1 = text-010.
button2 = text-020.
button3 = text-030.
mytab-prog = sy-repid.
mytab-dynnr = 100.
mytab-activetab = 'BUTTON1'.
AT SELECTION-SCREEN.
CASE sy-dynnr.
WHEN 1000.
CASE sy-ucomm.
WHEN 'PUSH1'.
mytab-dynnr = 100.
mytab-activetab = 'BUTTON1'.
WHEN 'PUSH2'.
mytab-dynnr = 200.
mytab-activetab = 'BUTTON2'.
ENDCASE.
WHEN 100.
MESSAGE s888(sabapdocu) WITH text-040 sy-dynnr.
WHEN 200.
MESSAGE s888(sabapdocu) WITH text-040 sy-dynnr.
ENDCASE.
MODULE init_0100 OUTPUT.
LOOP AT SCREEN.
IF screen-group1 = 'MOD'.
CASE flag.
WHEN 'X'.
screen-input = '1'.
WHEN ' '.
screen-input = '0'.
ENDCASE.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMODULE.
MODULE user_command_0100 INPUT.
MESSAGE s888(sabapdocu) WITH text-050 sy-dynnr.
CASE sy-ucomm.
WHEN 'TOGGLE'.
IF flag = ' '.
flag = 'X'.
ELSEIF flag = 'X'.
flag = ' '.
ENDIF.
ENDCASE.
ENDMODULE.
START-OF-SELECTION.
WRITE: / 'P1:', p1,'Q1:', q1,
/ 'P2:', p2,'Q2:', q2,
/ 'P3:', p3,'Q3:', q3.
You will have to adjust text elements.
Cheers.
‎2005 Sep 09 3:51 AM
thanks for the replies. this forum has been very helpful and solution oriented. Thanks again.
‎2005 Sep 09 3:53 AM
hi, you also can hide the unused select-screen as following code, the achieve way is not same with former reply.
REPORT ZGZL_SDNTEST18 .
TABLES: USR02, "Logon data
SSCRFIELDS. "FIELDS ON SELECTION SCREENS
*---------------------------------------------------------------
* SUBSCREEN 1
*---------------------------------------------------------------
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-010.
SELECT-OPTIONS: USERNAME FOR USR02-BNAME.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN END OF SCREEN 100.
*---------------------------------------------------------------
* SUBSCREEN 2
*---------------------------------------------------------------
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-020.
SELECT-OPTIONS: LASTLOGI FOR USR02-TRDAT.
SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN END OF SCREEN 200.
* STANDARD SELECTION SCREEN FOR SCROLLING LEFT AND RIGHT
SELECTION-SCREEN: FUNCTION KEY 1,
FUNCTION KEY 2.
SELECTION-SCREEN: BEGIN OF TABBED BLOCK SUB FOR 15 LINES,
END OF BLOCK SUB.
START-OF-SELECTION.
SELECT * FROM USR02 WHERE BNAME IN USERNAME
AND ERDAT IN LASTLOGI.
WRITE: / 'User ', USR02-BNAME,
'Last Login Date ', USR02-TRDAT,
'Last Login Time ', USR02-LTIME,
'CLASS ', USR02-CLASS.
ENDSELECT.
END-OF-SELECTION.
INITIALIZATION.
* SCREEN ICON LEFT AND RIGHT
SSCRFIELDS-FUNCTXT_01 = '@0D@'.
SSCRFIELDS-FUNCTXT_02 = '@0E@'.
SUB-PROG = SY-REPID.
SUB-DYNNR = 100.
AT SELECTION-SCREEN.
CASE SY-DYNNR.
WHEN 100.
IF SSCRFIELDS-UCOMM = 'FC02'.
SUB-DYNNR = 200.
ENDIF.
WHEN 200.
IF SSCRFIELDS-UCOMM = 'FC01'.
SUB-DYNNR = 100.
ENDIF.
ENDCASE.
Hope it will be helpful