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

Problem with a selection-screen.

Former Member
0 Likes
1,175

HI, I want to make a screen at execution time.

Depending of a flag variable, it´s the way that i made the layout of the screen at execution time.

Here's a code example.

SELECTION-SCREEN BEGIN OF SCREEN 0200 .

if pasos-descripcion = '01 DERIVACION BANORTE'.

SELECTION-SCREEN SKIP 1.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME title text-T03

NO INTERVALS.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN POSITION 5.

SELECTION-SCREEN COMMENT 5(3) TEXT-T01 for field cc1.

parameters cc1(10) type c.

SELECTION-SCREEN POSITION 25.

SELECTION-SCREEN COMMENT 25(2) TEXT-T02 for field cc2.

parameters cc2(10) type c.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN SKIP 1.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME title text-T04

NO INTERVALS.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN POSITION 5.

SELECTION-SCREEN COMMENT 5(3) TEXT-T01 for field cc3.

parameters cc3(10) type c.

SELECTION-SCREEN POSITION 25.

SELECTION-SCREEN COMMENT 25(2) TEXT-T02 for field cc4.

parameters cc4(10) type c.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK B2.

SELECTION-SCREEN END OF SCREEN 0200.

elseif pasos-descripcion = '02 DERIVACION BANORTE'.

SELECTION-SCREEN SKIP 1.

SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME title text-T05

NO INTERVALS.

parameters cc5 type n.

parameters cc6 type n.

SELECTION-SCREEN END OF BLOCK B3.

endif.

SELECTION-SCREEN END OF SCREEN 0200.

call selection-screen '0200'.

I tried to do this, but causes an error.

How can i try to solve this?, Is it possible to do?

Thanks.

Reward points for helpful answers.

1 ACCEPTED SOLUTION
Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
868

For example, copy and paste this code into a test program, execute it and keep hitting enter and watch the screen change.



REPORT zrich_001.

DATA: pasos-descripcion TYPE string.

*SELECTION-SCREEN BEGIN OF SCREEN 0200 .
*IF pasos-descripcion = '01 DERIVACION BANORTE'.

SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t03
NO INTERVALS.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
SELECTION-SCREEN COMMENT 5(3) text-t01 FOR FIELD cc1 MODIF ID ss1.
PARAMETERS cc1(10) TYPE c MODIF ID ss1.
SELECTION-SCREEN POSITION 25.
SELECTION-SCREEN COMMENT 25(2) text-t02 FOR FIELD cc2 MODIF ID ss1.
PARAMETERS cc2(10) TYPE c MODIF ID ss1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t04
NO INTERVALS.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
SELECTION-SCREEN COMMENT 5(3) text-t01 FOR FIELD cc3 MODIF ID ss1.
PARAMETERS cc3(10) TYPE c MODIF ID ss1.
SELECTION-SCREEN POSITION 25.
SELECTION-SCREEN COMMENT 25(2) text-t02 FOR FIELD cc4 MODIF ID ss1.
PARAMETERS cc4(10) TYPE c MODIF ID ss1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b2.
*SELECTION-SCREEN END OF SCREEN 0200.


*ELSEIF pasos-descripcion = '02 DERIVACION BANORTE'.


SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t05
NO INTERVALS.
PARAMETERS cc5 TYPE n MODIF ID ss2.
PARAMETERS cc6 TYPE n MODIF ID ss2.
SELECTION-SCREEN END OF BLOCK b3.
*ENDIF.

*SELECTION-SCREEN END OF SCREEN 0200.



*CALL SELECTION-SCREEN '0200'.

INITIALIZATION.

  pasos-descripcion =  '01 DERIVACION BANORTE'.

AT SELECTION-SCREEN.
  IF pasos-descripcion = '01 DERIVACION BANORTE'.
    pasos-descripcion = '02 DERIVACION BANORTE'.
  ELSEIF pasos-descripcion = '02 DERIVACION BANORTE'.
    pasos-descripcion = '01 DERIVACION BANORTE'.
  ENDIF.

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.
    IF pasos-descripcion = '01 DERIVACION BANORTE'.
      IF screen-group1 = 'SS2'.
        screen-active = '0'.
      ENDIF.
    ELSEIF  pasos-descripcion = '02 DERIVACION BANORTE'.
      IF screen-group1 = 'SS1'.
        screen-active = '0'.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.

Regards,

Rich Heilman

5 REPLIES 5
Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
868

It is possible, but you can not use an IF statement in your selection defintion. You must define all fields and turn them on/off in the AT SELECTION-SCREEN OUTPUT event using the LOOP AT SCREEN construct. Below is an example, but you may want to use MODIF IDs in your selection-screen code.

Loop at screen.
   if some_value = 'X'.
     if screen-name = 'P_FIELD'.
        screen-active = '0'.
        modify screen.
     endif.
   endif.
endloop.

Regards,

RIch Heilman

Read only

Former Member
0 Likes
868

Hi,

WHere are getting this text pasos-descripcion = '01 DERIVACION BANORTE'???

Also you can use the event AT SELECTION-SCREEN OUTPUT to hide the fields that you don't want by checking the value..

Ex.

AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.

if pasos-descripcion = '01 DERIVACION BANORTE'.

IF SCREEN-NAME = ' CC5'.

  • Make it invisible..

SCREEN-ACTIVE = 0.

MODIFY SCREEN.

ENDIF.

ENDIF.

ENDLOOP.

Thanks,

Naren

Read only

Former Member
0 Likes
868

Thanks for the answers.

If pasos-descripcion = '01 DERIVACION BANORTE'.

In the screen 200 , i want to make a layout for the screen.

If pasos-descripcion = '02 DERIVACION BANORTE'.

At the same position in the screen 200, i want to make the layout

So, if i turn off/on a field in the screen to desactive it, it's possible to define a new field in the same position?

Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
869

For example, copy and paste this code into a test program, execute it and keep hitting enter and watch the screen change.



REPORT zrich_001.

DATA: pasos-descripcion TYPE string.

*SELECTION-SCREEN BEGIN OF SCREEN 0200 .
*IF pasos-descripcion = '01 DERIVACION BANORTE'.

SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t03
NO INTERVALS.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
SELECTION-SCREEN COMMENT 5(3) text-t01 FOR FIELD cc1 MODIF ID ss1.
PARAMETERS cc1(10) TYPE c MODIF ID ss1.
SELECTION-SCREEN POSITION 25.
SELECTION-SCREEN COMMENT 25(2) text-t02 FOR FIELD cc2 MODIF ID ss1.
PARAMETERS cc2(10) TYPE c MODIF ID ss1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t04
NO INTERVALS.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
SELECTION-SCREEN COMMENT 5(3) text-t01 FOR FIELD cc3 MODIF ID ss1.
PARAMETERS cc3(10) TYPE c MODIF ID ss1.
SELECTION-SCREEN POSITION 25.
SELECTION-SCREEN COMMENT 25(2) text-t02 FOR FIELD cc4 MODIF ID ss1.
PARAMETERS cc4(10) TYPE c MODIF ID ss1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b2.
*SELECTION-SCREEN END OF SCREEN 0200.


*ELSEIF pasos-descripcion = '02 DERIVACION BANORTE'.


SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t05
NO INTERVALS.
PARAMETERS cc5 TYPE n MODIF ID ss2.
PARAMETERS cc6 TYPE n MODIF ID ss2.
SELECTION-SCREEN END OF BLOCK b3.
*ENDIF.

*SELECTION-SCREEN END OF SCREEN 0200.



*CALL SELECTION-SCREEN '0200'.

INITIALIZATION.

  pasos-descripcion =  '01 DERIVACION BANORTE'.

AT SELECTION-SCREEN.
  IF pasos-descripcion = '01 DERIVACION BANORTE'.
    pasos-descripcion = '02 DERIVACION BANORTE'.
  ELSEIF pasos-descripcion = '02 DERIVACION BANORTE'.
    pasos-descripcion = '01 DERIVACION BANORTE'.
  ENDIF.

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.
    IF pasos-descripcion = '01 DERIVACION BANORTE'.
      IF screen-group1 = 'SS2'.
        screen-active = '0'.
      ENDIF.
    ELSEIF  pasos-descripcion = '02 DERIVACION BANORTE'.
      IF screen-group1 = 'SS1'.
        screen-active = '0'.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.

Regards,

Rich Heilman

Read only

0 Likes
868

This example was implemented using the standard selection screen which you should use if that is the only selection screen in your program, no need to define selection screen 0200. But if you do want to define it this way, your code would be like this.


REPORT zrich_001.

DATA: pasos-descripcion TYPE string.

SELECTION-SCREEN BEGIN OF SCREEN 0200 .
*IF pasos-descripcion = '01 DERIVACION BANORTE'.

SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t03
NO INTERVALS.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
SELECTION-SCREEN COMMENT 5(3) text-t01 FOR FIELD cc1 MODIF ID ss1.
PARAMETERS cc1(10) TYPE c MODIF ID ss1.
SELECTION-SCREEN POSITION 25.
SELECTION-SCREEN COMMENT 25(2) text-t02 FOR FIELD cc2 MODIF ID ss1.
PARAMETERS cc2(10) TYPE c MODIF ID ss1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t04
NO INTERVALS.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
SELECTION-SCREEN COMMENT 5(3) text-t01 FOR FIELD cc3 MODIF ID ss1.
PARAMETERS cc3(10) TYPE c MODIF ID ss1.
SELECTION-SCREEN POSITION 25.
SELECTION-SCREEN COMMENT 25(2) text-t02 FOR FIELD cc4 MODIF ID ss1.
PARAMETERS cc4(10) TYPE c MODIF ID ss1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b2.
*SELECTION-SCREEN END OF SCREEN 0200.


*ELSEIF pasos-descripcion = '02 DERIVACION BANORTE'.


SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t05
NO INTERVALS.
PARAMETERS cc5 TYPE n MODIF ID ss2.
PARAMETERS cc6 TYPE n MODIF ID ss2.
SELECTION-SCREEN END OF BLOCK b3.
*ENDIF.

SELECTION-SCREEN END OF SCREEN 0200.





INITIALIZATION.

  pasos-descripcion =  '01 DERIVACION BANORTE'.
  CALL SELECTION-SCREEN '0200'.

AT SELECTION-SCREEN.
  IF pasos-descripcion = '01 DERIVACION BANORTE'.
    pasos-descripcion = '02 DERIVACION BANORTE'.
  ELSEIF pasos-descripcion = '02 DERIVACION BANORTE'.
    pasos-descripcion = '01 DERIVACION BANORTE'.
  ENDIF.

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.
    IF pasos-descripcion = '01 DERIVACION BANORTE'.
      IF screen-group1 = 'SS2'.
        screen-active = '0'.
      ENDIF.
    ELSEIF  pasos-descripcion = '02 DERIVACION BANORTE'.
      IF screen-group1 = 'SS1'.
        screen-active = '0'.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.

Regards,

Rich Heilman