2013 Sep 12 3:21 AM
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.
2013 Sep 12 10:30 AM
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.
2013 Sep 12 5:04 AM
2013 Sep 12 6:33 AM
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
2013 Sep 12 7:29 AM
hi,
Check the following link ...
http://wiki.scn.sap.com/wiki/display/Snippets/Dynamic+selection+screen+with+list+box
Regards
Shravan
2013 Sep 12 8:48 AM
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
2013 Sep 12 10:30 AM
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.