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

Dynamic List Box

former_member207873
Participant
0 Likes
2,579

Hi Experts,

I need a dynamic list box. There are two values on list box. Upon selection of one list box item fields in a selection block(say B1) have to be shown. When selecting the other list box item fields in another selection block (B2) have to be shown and fields in B1 has to be hid and vice versa. This is the code I am writing.

SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-T01.

SELECT-OPTIONS SO_FKDAT FOR W_AUX_FKDAT MODIF ID RA.

SELECTION-SCREEN SKIP.

PARAMETERS: PS_PARM AS LISTBOX VISIBLE LENGTH 12 USER-COMMAND ABC.

*SELECTION-SCREEN: END OF BLOCK B1.

SELECTION-SCREEN SKIP.

PARAMETERS : R1 RADIOBUTTON GROUP G1 USER-COMMAND UC1 MODIF ID RA, "DEFAULT 'x',

              R2 RADIOBUTTON GROUP G1 MODIF ID RA.

SELECTION-SCREEN: END OF BLOCK B1.

SELECTION-SCREEN: BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-T02.

SELECT-OPTIONS: SO_KUNNR FOR W_KUNNR MODIF ID SEL ,

                 SO_BUKRS FOR W_BUKRS MODIF ID SEL,

                 SO_VKBUR FOR W_VKBUR MODIF ID SEL,

                 SO_MONAT FOR W_RE_PERIOD MODIF ID SEL OBLIGATORY.

PARAMETER: P_GJAHR TYPE KNC1-GJAHR MODIF ID SEL DEFAULT '2013' OBLIGATORY.

SELECTION-SCREEN: END OF BLOCK B2.

*--------------------------------------------------------------*

*At Selection Screen Ouput

*--------------------------------------------------------------*

AT SELECTION-SCREEN OUTPUT.

   LOOP AT SCREEN.

     IF SCREEN-GROUP1 = 'SEL'.

       SCREEN-INPUT = '0'.

       MODIFY SCREEN.

     ENDIF.

   ENDLOOP.

*--------------------------------------------------------------*

*At Selection Screen Ouput ON List Box PS_PARM

*--------------------------------------------------------------*

AT SELECTION-SCREEN ON PS_PARM.

   CLEAR: GWA_VALUES, GT_VALUES.

   REFRESH GT_VALUES.

   GWA_VALUES-FIELDNAME = 'PS_PARM'.

   APPEND GWA_VALUES TO GT_VALUES.

   CALL FUNCTION 'DYNP_VALUES_READ'

     EXPORTING

       DYNAME             = SY-CPROG

       DYNUMB             = SY-DYNNR

       TRANSLATE_TO_UPPER = 'X'

     TABLES

       DYNPFIELDS         = GT_VALUES.

   READ TABLE GT_VALUES INDEX 1 INTO GWA_VALUES.

   IF SY-SUBRC = 0 AND GWA_VALUES-FIELDVALUE IS NOT INITIAL.

     READ TABLE GT_LIST INTO GWA_LIST

                       WITH KEY KEY = GWA_VALUES-FIELDVALUE.

     IF SY-SUBRC = 0.

       GV_SELECTED_VALUE = GWA_LIST-TEXT.

     ENDIF.

   ENDIF.

*  IF GV_SELECTED_VALUE = 'ACCOUNTBALANCES'.

   LOOP AT SCREEN.

     IF GWA_VALUES-FIELDVALUE = 1.

       IF SCREEN-GROUP1 = 'SEL'.

         SCREEN-INPUT = '0'.

         MODIFY SCREEN.

       ENDIF.

     ELSEIF GWA_VALUES-FIELDVALUE = 2.

       IF SCREEN-GROUP1 = 'SEL'.

         SCREEN-INPUT = '1'.

         MODIFY SCREEN.

         endif.

       ENDIF.

     ENDLOOP.

*--------------------------------------------------------------*

*Initialization

*--------------------------------------------------------------*

INITIALIZATION.

*

   GWA_LIST-KEY = '1'.

   GWA_LIST-TEXT = 'INVOICE'.

   APPEND GWA_LIST TO GT_LIST.

   CLEAR: GWA_LIST.

   GWA_LIST-KEY = '2'.

   GWA_LIST-TEXT = 'ACCOUNTBALANCES'.

   APPEND GWA_LIST TO GT_LIST.

   CLEAR: GWA_LIST.

   CALL FUNCTION 'VRM_SET_VALUES'

     EXPORTING

       ID              = 'PS_PARM'

       VALUES          = GT_LIST

     EXCEPTIONS

       ID_ILLEGAL_NAME = 1

       OTHERS          = 2.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,430

HI Marina,

1. In the at selection screen event, dont check the value of gw_values. Check directly the parameter ps_parm.

2. Also to hide, use both invisible and input attribute of the screen.

3. Dont make s_monat obligatory, since you will not be able to  hide it nor proceed further.

To make sure value is entered, enter the appropriate code in the at selection screen event.

4. Move the initial settings to INITIALIZATION event, and the other selection screen validations in AT SELECTION-SCREEN output event

SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-T01.

  PARAMETERS: PS_PARM AS LISTBOX VISIBLE LENGTH 12 USER-COMMAND ABC.

SELECT-OPTIONS SO_FKDAT FOr sy-datum MODIF ID RA.

SELECTION-SCREEN SKIP.

PARAMETERS : R1 RADIOBUTTON GROUP G1 USER-COMMAND UC1 MODIF ID RA, "DEFAULT 'x',

               R2 RADIOBUTTON GROUP G1 MODIF ID RA.

SELECTION-SCREEN: END OF BLOCK B1.


SELECTION-SCREEN: BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-T02.


SELECT-OPTIONS: SO_KUNNR FOR kna1-KUNNR MODIF ID SEL ,

                  SO_BUKRS FOR aufk-BUKRS MODIF ID SEL.

                 SO_VKBUR FOR W_VKBUR MODIF ID SEL,

                 SO_MONAT FOR W_RE_PERIOD MODIF ID SEL.


PARAMETER: P_GJAHR TYPE KNC1-GJAHR MODIF ID SEL DEFAULT '2013' OBLIGATORY.

 
SELECTION-SCREEN: END OF BLOCK B2.
  INITIALIZATION.

       LOOP AT SCREEN.
         if screen-group1 = 'SEL' .
                screen-invisible = 1.
                screen-input = 0.
*
         MODIFY SCREEN.
        endif.
      ENDLOOP.

   data: lv_name type vrm_id,
         gt_list type vrm_values,
         gwa_list like line of gt_list.

    GWA_LIST-KEY = '1'.
    GWA_LIST-TEXT = 'INVOICE'.
    APPEND GWA_LIST TO GT_LIST.
    CLEAR: GWA_LIST.

     GWA_LIST-KEY = '2'.
    GWA_LIST-TEXT = 'ACCOUNTBALANCES'.
    APPEND GWA_LIST TO GT_LIST.
    CLEAR: GWA_LIST.

     CALL FUNCTION 'VRM_SET_VALUES'
      EXPORTING
        ID              = 'PS_PARM'
        VALUES          = GT_LIST
      EXCEPTIONS
        ID_ILLEGAL_NAME = 1
        OTHERS          = 2.

AT SELECTION-SCREEN output.

       if ps_parm = '1'.
       LOOP AT SCREEN.
        CASE screen-group1.
          WHEN 'SEL'.
           screen-input = 0.
           screen-invisible = 1.
         WHEN 'RA'.
            screen-input = 1.
            screen-invisible = 0.
        ENDCASE.
       MODIFY SCREEN.
      ENDLOOP.
      elseif ps_parm = '2'.
       LOOP AT SCREEN.
        CASE screen-group1.
          WHEN 'SEL'.
           screen-invisible = 0.
           screen-input = 1.
         WHEN 'RA'.
            screen-invisible = 1.
            screen-input = 0.
        ENDCASE.
       MODIFY SCREEN.
      ENDLOOP.
     endif.

      if ps_parm = '2' and so_monat is INITIAL.
        message 'Enter valid value for monat' type 'I'.
        exit.
     endif.

5 REPLIES 5
Read only

Former Member
0 Likes
1,430

Hi,

Check Out The Link.

http://scn.sap.com/thread/1617761

Regards,

Alenlee

Read only

former_member220538
Active Participant
0 Likes
1,430

Hi Marina,

Try this

AT SELECTION-SCREEN OUTPUT .
  LOOP AT SCREEN.
    IF ps_parm = '1'.
      IF screen-group1 = 'RA'.
        screen-active = 0.
      ENDIF.
    ELSEIF ps_parm = '2'.
      IF screen-group1 = 'SEL'.
        screen-active = 0.
      ENDIF.
    ENDIF.
   MODIFY SCREEN.
  ENDLOOP.

    Upon selecting one item the selection block b1 will show and when selecting another selection block b2 will show.

Regards

Jeffin

Read only

0 Likes
1,430
Read only

0 Likes
1,430

Hello Marina,

Write the following code in the event "At Selection Screen Output".

  

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.

        IF GWA_VALUES-FIELDVALUE = 1.
          if SCREEN-GROUP1 = 'SEL' .

            SCREEN-INPUT = 0.
            SCREEN-INVISIBLE = 1.
            SCREEN-ACTIVE = 0.

          elseif SCREEN-GROUP1 = 'RA' .

            SCREEN-INPUT = '1'.
            SCREEN-INVISIBLE = '0'.
            SCREEN-ACTIVE = '1'.

          endif.
        ELSEIF GWA_VALUES-FIELDVALUE = 2.
           if SCREEN-GROUP1 = 'SEL'.

            SCREEN-INPUT = '1'.
            SCREEN-INVISIBLE = '0'.
            SCREEN-ACTIVE = '1'.

           elseif SCREEN-GROUP1 = 'RA'.

            SCREEN-INPUT = 0.
            SCREEN-INVISIBLE = 1.
            SCREEN-ACTIVE = 0.

           endif.


        ENDIF.
      MODIFY SCREEN.
   ENDLOOP.

Regards,

Shashank Shekhar

Read only

Former Member
0 Likes
1,431

HI Marina,

1. In the at selection screen event, dont check the value of gw_values. Check directly the parameter ps_parm.

2. Also to hide, use both invisible and input attribute of the screen.

3. Dont make s_monat obligatory, since you will not be able to  hide it nor proceed further.

To make sure value is entered, enter the appropriate code in the at selection screen event.

4. Move the initial settings to INITIALIZATION event, and the other selection screen validations in AT SELECTION-SCREEN output event

SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-T01.

  PARAMETERS: PS_PARM AS LISTBOX VISIBLE LENGTH 12 USER-COMMAND ABC.

SELECT-OPTIONS SO_FKDAT FOr sy-datum MODIF ID RA.

SELECTION-SCREEN SKIP.

PARAMETERS : R1 RADIOBUTTON GROUP G1 USER-COMMAND UC1 MODIF ID RA, "DEFAULT 'x',

               R2 RADIOBUTTON GROUP G1 MODIF ID RA.

SELECTION-SCREEN: END OF BLOCK B1.


SELECTION-SCREEN: BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-T02.


SELECT-OPTIONS: SO_KUNNR FOR kna1-KUNNR MODIF ID SEL ,

                  SO_BUKRS FOR aufk-BUKRS MODIF ID SEL.

                 SO_VKBUR FOR W_VKBUR MODIF ID SEL,

                 SO_MONAT FOR W_RE_PERIOD MODIF ID SEL.


PARAMETER: P_GJAHR TYPE KNC1-GJAHR MODIF ID SEL DEFAULT '2013' OBLIGATORY.

 
SELECTION-SCREEN: END OF BLOCK B2.
  INITIALIZATION.

       LOOP AT SCREEN.
         if screen-group1 = 'SEL' .
                screen-invisible = 1.
                screen-input = 0.
*
         MODIFY SCREEN.
        endif.
      ENDLOOP.

   data: lv_name type vrm_id,
         gt_list type vrm_values,
         gwa_list like line of gt_list.

    GWA_LIST-KEY = '1'.
    GWA_LIST-TEXT = 'INVOICE'.
    APPEND GWA_LIST TO GT_LIST.
    CLEAR: GWA_LIST.

     GWA_LIST-KEY = '2'.
    GWA_LIST-TEXT = 'ACCOUNTBALANCES'.
    APPEND GWA_LIST TO GT_LIST.
    CLEAR: GWA_LIST.

     CALL FUNCTION 'VRM_SET_VALUES'
      EXPORTING
        ID              = 'PS_PARM'
        VALUES          = GT_LIST
      EXCEPTIONS
        ID_ILLEGAL_NAME = 1
        OTHERS          = 2.

AT SELECTION-SCREEN output.

       if ps_parm = '1'.
       LOOP AT SCREEN.
        CASE screen-group1.
          WHEN 'SEL'.
           screen-input = 0.
           screen-invisible = 1.
         WHEN 'RA'.
            screen-input = 1.
            screen-invisible = 0.
        ENDCASE.
       MODIFY SCREEN.
      ENDLOOP.
      elseif ps_parm = '2'.
       LOOP AT SCREEN.
        CASE screen-group1.
          WHEN 'SEL'.
           screen-invisible = 0.
           screen-input = 1.
         WHEN 'RA'.
            screen-invisible = 1.
            screen-input = 0.
        ENDCASE.
       MODIFY SCREEN.
      ENDLOOP.
     endif.

      if ps_parm = '2' and so_monat is INITIAL.
        message 'Enter valid value for monat' type 'I'.
        exit.
     endif.