Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

selection-screen

Former Member
0 Likes
735

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.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
696

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

7 REPLIES 7
Read only

Former Member
0 Likes
697

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

Read only

0 Likes
696

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

Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
696

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

Read only

Former Member
0 Likes
696

Hi

This can achieved using tabbed blocks on selection screen. Check command "Selection screen begin of tabbed block....".

Cheers

Read only

Former Member
0 Likes
696

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.

Read only

Former Member
0 Likes
696

thanks for the replies. this forum has been very helpful and solution oriented. Thanks again.

Read only

Former Member
0 Likes
696

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