‎2007 Jul 23 4:25 AM
Hi,
In my selection screen i have 2 list boxes(drop down boxes) A & B. I want to populate the values into the list boxes from Table A & B. Table B have forign key relation with table A. Once i executed my report at first i want to display the values into list box A from table A and list box B will be empty. Once after selection of a value into list box A, then i want to display the correspinding values into list box B from table B.
Any one can send me the code to do this......
Thanks
Rao
‎2007 Jul 23 5:09 AM
im pasting a code below ...it suits u r requirement.....it wont be so precise...coz it was a test program...just go through it....first listbox a will be filled with plants and after selecting plan the second list box gets filled with mrp controller respective to that plant..
if helpful plz reward..
REPORT YKES_LIST_TEST MESSAGE-ID ZPP .
TYPE-POOLS: VRM, SLIS.
DATA: LIFNR LIKE LFA1-LIFNR.
DATA: V_REPID LIKE SY-REPID .
DATA: PLNT(10) TYPE N, FLG TYPE I.
DATA: NAME TYPE VRM_ID,
MRP(55) TYPE C,
LIST TYPE VRM_VALUES,
VAR1(10) TYPE C,
VAR2(30) TYPE C,
VALUE LIKE LINE OF LIST.
DATA:BEGIN OF ITABT024D OCCURS 0,
DISPO LIKE T024D-DISPO,
DSNAM LIKE T024D-DSNAM,
CONC(55) TYPE N,
END OF ITABT024D.
DATA:BEGIN OF STRUMARC,
MATNR LIKE MARC-MATNR,
MAKTX LIKE MAKT-MAKTX,
END OF STRUMARC.
DATA: I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
DATA: ITABMARC LIKE STRUMARC OCCURS 0 WITH HEADER LINE.
DATA:ITABT001W LIKE TABLE OF T001W WITH HEADER LINE.
RANGES: R_WERKS FOR T001W-WERKS,
R_MRPDESC FOR ITABT024D-DISPO .
R_WERKS-OPTION = 'EQ'.
R_WERKS-SIGN = 'I'.
R_MRPDESC-OPTION = 'EQ'.
R_MRPDESC-SIGN = 'I'.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS: PLANT LIKE R_WERKS AS LISTBOX VISIBLE LENGTH 10
USER-COMMAND
C1 MODIF ID PLN.
PARAMETERS: VENDOR LIKE R_MRPDESC AS LISTBOX VISIBLE LENGTH 50 MODIF ID
DET USER-COMMAND C1.
SELECTION-SCREEN END OF BLOCK B1.
INITIALIZATION.
FLG = 1.
IF FLG = 1.
CLEAR VENDOR.
CLEAR PLANT.
ENDIF.
AT SELECTION-SCREEN.
AT SELECTION-SCREEN OUTPUT.
PERFORM FETCH_PLANT.
AT SELECTION-SCREEN ON PLANT.
PERFORM FETCH_MRP.
AT SELECTION-SCREEN ON VENDOR.
PERFORM MATERIALS.
START-OF-SELECTION.
REFRESH I_FIELDCAT.
I_FIELDCAT-COL_POS = 1 .
I_FIELDCAT-FIELDNAME = 'MATNR'.
I_FIELDCAT-SELTEXT_M = 'Part No'.
I_FIELDCAT-OUTPUTLEN = 30.
I_FIELDCAT-FIX_COLUMN = 'X'.
APPEND I_FIELDCAT.
CLEAR I_FIELDCAT.
I_FIELDCAT-COL_POS = 2 .
I_FIELDCAT-FIELDNAME = 'MAKTX'.
I_FIELDCAT-SELTEXT_M = 'Part Description'.
I_FIELDCAT-OUTPUTLEN = 30.
I_FIELDCAT-FIX_COLUMN = 'X'.
APPEND I_FIELDCAT .
CLEAR I_FIELDCAT.
V_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
I_GRID_TITLE = 'Parts Under Selected MRP Controller'
IT_FIELDCAT = I_FIELDCAT[]
TABLES
T_OUTTAB = ITABMARC.
FORM ASSIGN_LISTBOX_VALUES .
REFRESH LIST.
IF FLG = 1.
LOOP AT R_WERKS.
NAME = 'PLANT'.
VALUE-KEY = R_WERKS-LOW.
VALUE-TEXT = R_WERKS-LOW.
APPEND VALUE TO LIST.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = NAME
VALUES = LIST.
CLEAR PLANT.
ELSEIF FLG = 0.
CLEAR ITABT024D-CONC.
LOOP AT ITABT024D.
NAME = 'VENDOR'.
VALUE-KEY = ITABT024D-DISPO.
VALUE-TEXT = ITABT024D-CONC.
APPEND VALUE TO LIST.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = NAME
VALUES = LIST.
ENDIF.
ENDFORM. " ASSIGN_LISTBOX_VALUES
FORM GET_LIST_DATA .
REFRESH LIST.
IF FLG = 1.
SELECT DISTINCT WERKS FROM T001W INTO R_WERKS-LOW
WHERE KUNNR EQ 'TSL' OR KUNNR EQ '0000050001'.
APPEND R_WERKS.
ENDSELECT.
CLEAR R_WERKS.
SORT R_WERKS ASCENDING.
DELETE ADJACENT DUPLICATES FROM R_WERKS.
CLEAR R_WERKS.
ELSEIF FLG = 0.
CLEAR ITABT024D.
CLEAR ITABT024D-CONC.
SELECT DISPO DSNAM INTO TABLE ITABT024D FROM T024D
WHERE WERKS EQ PLANT.
CLEAR ITABT024D.
SORT ITABT024D ASCENDING.
DELETE ADJACENT DUPLICATES FROM ITABT024D.
CLEAR ITABT024D.
LOOP AT ITABT024D.
CONCATENATE ITABT024D-DISPO ' - ' ITABT024D-DSNAM INTO ITABT024D-CONC.
MODIFY ITABT024D.
ENDLOOP.
ENDIF.
ENDFORM. " get_list_data
FORM FETCH_PLANT .
REFRESH LIST.
IF FLG = 1.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'DET'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
PERFORM GET_LIST_DATA.
PERFORM ASSIGN_LISTBOX_VALUES.
FLG = 0.
ENDIF.
ENDFORM. " fetch_plant
FORM FETCH_MRP .
REFRESH LIST.
CLEAR VENDOR.
IF FLG = 0 .
CONDENSE PLANT.
IF PLANT NE ' '.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'DET'.
SCREEN-ACTIVE = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
PERFORM GET_LIST_DATA.
PERFORM ASSIGN_LISTBOX_VALUES.
ENDIF.
FLG = 2.
ENDIF.
ENDFORM. " fetch_mrp
FORM MATERIALS .
IF FLG = 2.
IF VENDOR NE ' '.
CONDENSE VENDOR.
SELECT MATNR INTO CORRESPONDING FIELDS OF
TABLE ITABMARC FROM MARC WHERE WERKS EQ PLANT
AND DISPO EQ VENDOR.
CLEAR ITABMARC.
LOOP AT ITABMARC.
SELECT MAKTX FROM MAKT INTO (ITABMARC-MAKTX) WHERE MATNR =
ITABMARC-MATNR.
MODIFY ITABMARC.
ENDSELECT.
ENDLOOP.
CLEAR ITABMARC.
ENDIF.
ENDIF.
ENDFORM. " materials
‎2007 Jul 23 5:09 AM
im pasting a code below ...it suits u r requirement.....it wont be so precise...coz it was a test program...just go through it....first listbox a will be filled with plants and after selecting plan the second list box gets filled with mrp controller respective to that plant..
if helpful plz reward..
REPORT YKES_LIST_TEST MESSAGE-ID ZPP .
TYPE-POOLS: VRM, SLIS.
DATA: LIFNR LIKE LFA1-LIFNR.
DATA: V_REPID LIKE SY-REPID .
DATA: PLNT(10) TYPE N, FLG TYPE I.
DATA: NAME TYPE VRM_ID,
MRP(55) TYPE C,
LIST TYPE VRM_VALUES,
VAR1(10) TYPE C,
VAR2(30) TYPE C,
VALUE LIKE LINE OF LIST.
DATA:BEGIN OF ITABT024D OCCURS 0,
DISPO LIKE T024D-DISPO,
DSNAM LIKE T024D-DSNAM,
CONC(55) TYPE N,
END OF ITABT024D.
DATA:BEGIN OF STRUMARC,
MATNR LIKE MARC-MATNR,
MAKTX LIKE MAKT-MAKTX,
END OF STRUMARC.
DATA: I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
DATA: ITABMARC LIKE STRUMARC OCCURS 0 WITH HEADER LINE.
DATA:ITABT001W LIKE TABLE OF T001W WITH HEADER LINE.
RANGES: R_WERKS FOR T001W-WERKS,
R_MRPDESC FOR ITABT024D-DISPO .
R_WERKS-OPTION = 'EQ'.
R_WERKS-SIGN = 'I'.
R_MRPDESC-OPTION = 'EQ'.
R_MRPDESC-SIGN = 'I'.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS: PLANT LIKE R_WERKS AS LISTBOX VISIBLE LENGTH 10
USER-COMMAND
C1 MODIF ID PLN.
PARAMETERS: VENDOR LIKE R_MRPDESC AS LISTBOX VISIBLE LENGTH 50 MODIF ID
DET USER-COMMAND C1.
SELECTION-SCREEN END OF BLOCK B1.
INITIALIZATION.
FLG = 1.
IF FLG = 1.
CLEAR VENDOR.
CLEAR PLANT.
ENDIF.
AT SELECTION-SCREEN.
AT SELECTION-SCREEN OUTPUT.
PERFORM FETCH_PLANT.
AT SELECTION-SCREEN ON PLANT.
PERFORM FETCH_MRP.
AT SELECTION-SCREEN ON VENDOR.
PERFORM MATERIALS.
START-OF-SELECTION.
REFRESH I_FIELDCAT.
I_FIELDCAT-COL_POS = 1 .
I_FIELDCAT-FIELDNAME = 'MATNR'.
I_FIELDCAT-SELTEXT_M = 'Part No'.
I_FIELDCAT-OUTPUTLEN = 30.
I_FIELDCAT-FIX_COLUMN = 'X'.
APPEND I_FIELDCAT.
CLEAR I_FIELDCAT.
I_FIELDCAT-COL_POS = 2 .
I_FIELDCAT-FIELDNAME = 'MAKTX'.
I_FIELDCAT-SELTEXT_M = 'Part Description'.
I_FIELDCAT-OUTPUTLEN = 30.
I_FIELDCAT-FIX_COLUMN = 'X'.
APPEND I_FIELDCAT .
CLEAR I_FIELDCAT.
V_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
I_GRID_TITLE = 'Parts Under Selected MRP Controller'
IT_FIELDCAT = I_FIELDCAT[]
TABLES
T_OUTTAB = ITABMARC.
FORM ASSIGN_LISTBOX_VALUES .
REFRESH LIST.
IF FLG = 1.
LOOP AT R_WERKS.
NAME = 'PLANT'.
VALUE-KEY = R_WERKS-LOW.
VALUE-TEXT = R_WERKS-LOW.
APPEND VALUE TO LIST.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = NAME
VALUES = LIST.
CLEAR PLANT.
ELSEIF FLG = 0.
CLEAR ITABT024D-CONC.
LOOP AT ITABT024D.
NAME = 'VENDOR'.
VALUE-KEY = ITABT024D-DISPO.
VALUE-TEXT = ITABT024D-CONC.
APPEND VALUE TO LIST.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = NAME
VALUES = LIST.
ENDIF.
ENDFORM. " ASSIGN_LISTBOX_VALUES
FORM GET_LIST_DATA .
REFRESH LIST.
IF FLG = 1.
SELECT DISTINCT WERKS FROM T001W INTO R_WERKS-LOW
WHERE KUNNR EQ 'TSL' OR KUNNR EQ '0000050001'.
APPEND R_WERKS.
ENDSELECT.
CLEAR R_WERKS.
SORT R_WERKS ASCENDING.
DELETE ADJACENT DUPLICATES FROM R_WERKS.
CLEAR R_WERKS.
ELSEIF FLG = 0.
CLEAR ITABT024D.
CLEAR ITABT024D-CONC.
SELECT DISPO DSNAM INTO TABLE ITABT024D FROM T024D
WHERE WERKS EQ PLANT.
CLEAR ITABT024D.
SORT ITABT024D ASCENDING.
DELETE ADJACENT DUPLICATES FROM ITABT024D.
CLEAR ITABT024D.
LOOP AT ITABT024D.
CONCATENATE ITABT024D-DISPO ' - ' ITABT024D-DSNAM INTO ITABT024D-CONC.
MODIFY ITABT024D.
ENDLOOP.
ENDIF.
ENDFORM. " get_list_data
FORM FETCH_PLANT .
REFRESH LIST.
IF FLG = 1.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'DET'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
PERFORM GET_LIST_DATA.
PERFORM ASSIGN_LISTBOX_VALUES.
FLG = 0.
ENDIF.
ENDFORM. " fetch_plant
FORM FETCH_MRP .
REFRESH LIST.
CLEAR VENDOR.
IF FLG = 0 .
CONDENSE PLANT.
IF PLANT NE ' '.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'DET'.
SCREEN-ACTIVE = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
PERFORM GET_LIST_DATA.
PERFORM ASSIGN_LISTBOX_VALUES.
ENDIF.
FLG = 2.
ENDIF.
ENDFORM. " fetch_mrp
FORM MATERIALS .
IF FLG = 2.
IF VENDOR NE ' '.
CONDENSE VENDOR.
SELECT MATNR INTO CORRESPONDING FIELDS OF
TABLE ITABMARC FROM MARC WHERE WERKS EQ PLANT
AND DISPO EQ VENDOR.
CLEAR ITABMARC.
LOOP AT ITABMARC.
SELECT MAKTX FROM MAKT INTO (ITABMARC-MAKTX) WHERE MATNR =
ITABMARC-MATNR.
MODIFY ITABMARC.
ENDSELECT.
ENDLOOP.
CLEAR ITABMARC.
ENDIF.
ENDIF.
ENDFORM. " materials
‎2007 Jul 23 5:29 AM
try this
type-pools : vrm.
tables : afko,afpo,sscrfields.
data : begin of iafko occurs 0,
aufnr like afko-aufnr,
end of iafko.
data : begin of iafpo occurs 0,
matnr like afpo-matnr,
end of iafpo.
data : itab type VRM_VALUE.
data : vid type vrm_id.
data : itab1 type VRM_VALUEs ,
itab2 type VRM_VALUEs .
data : flag.
parameters : p_aufnr like afko-aufnr as listbox visible length 15 user-command ucom,
p_matnr like afpo-matnr as listbox visible length 18.
initialization.
select aufnr from afko up to 10 rows into table iafko WHERE AUFNR LIKE '%704%'.
loop at iafko.
itab-key = iafko-aufnr.
itab-text = iafko-aufnr.
append itab to itab1.
endloop.
vid = 'P_AUFNR'.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = vid
values = itab1
EXCEPTIONS
ID_ILLEGAL_NAME = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
at selection-screen output.
if flag = 'X'.
REFRESH ITAB2.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = P_AUFNR
IMPORTING
OUTPUT = P_AUFNR
.
select matnr from afpo into table iafpo where aufnr = p_aufnr.
loop at iafpo.
itab-key = iafpo-matnr.
itab-text = iafpo-matnr.
append itab to itab2.
endloop.
vid = 'P_MATNR'.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = vid
values = itab2
EXCEPTIONS
ID_ILLEGAL_NAME = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
clear flag.
endif.
at selection-screen.
case sy-ucomm.
when 'UCOM'.
flag = 'X'.
endcase.
regards
shiba dutta
‎2007 Jul 24 4:19 PM
Thanks SHIBA DUTTA. it is working and giving some other problem. Once after selection of value in the listbox, i am getting another value is added into the list box. What i mean is for eg: the list box A contains the values from table A. for eg: the table A structure is
ID Name
0001 A1
0002 A2
0003 A3
0004 A4
at first time i am getting A1,A2,A3,A4 into my list box. Once after selection of value eg: A1 then my list box contains A1,A2,A3,A4 and 0001(this is ID of A1).
Can u help me how to remove additional values.
Thanks
Rao
‎2007 Jul 23 5:33 AM
" List Boxes on Selection Screens
"Here is a short example of using list boxes on selection screens:
PROGRAM ztest.
TYPE-POOLS: vrm.
DATA: name TYPE vrm_id, list TYPE vrm_values, value LIKE LINE OF list.
PARAMETERS: ps_parm(10) AS LISTBOX VISIBLE LENGTH 10.
AT SELECTION-SCREEN OUTPUT.
name = 'PS_PARM'.
value-key = '1'. value-text = 'Line 1'. APPEND value TO list.
value-key = '2'. value-text = 'Line 2'. APPEND value TO list.
CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = name values = list.
START-OF-SELECTION.
WRITE: / 'Parameter:', ps_parm.
‎2007 Jul 23 5:49 AM
Hi Rao,
try the following code.
Regards,
Niyaz.
TYPE-POOLS: vrm.
PARAMETERS: lst_vbak TYPE vbak-vbeln AS LISTBOX VISIBLE LENGTH 20,
lst_vbap TYPE vbap-posnr AS LISTBOX VISIBLE LENGTH 20.
TYPES: BEGIN OF ty_vbak,
vbeln TYPE vbeln,
END OF ty_vbak.
TYPES: BEGIN OF ty_vbap,
posnr TYPE vbap-posnr,
END OF ty_vbap.
DATA: lt_vbak TYPE STANDARD TABLE OF ty_vbak,
ls_vbak TYPE ty_vbak.
DATA: lt_vbap TYPE STANDARD TABLE OF ty_vbap,
ls_vbap TYPE ty_vbap.
DATA: lt_list TYPE vrm_values,
ls_list LIKE LINE OF lt_list.
&----
*& At selection - on value request *
&----
AT SELECTION-SCREEN ON VALUE-REQUEST FOR lst_vbak.
REFRESH lt_list[].
CLEAR ls_list.
SELECT vbeln INTO TABLE lt_vbak UP TO 10 ROWS FROM vbak.
LOOP AT lt_vbak INTO ls_vbak.
ls_list-key = ls_vbak-vbeln.
APPEND ls_list TO lt_list.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'LST_VBAK'
values = lt_list
EXCEPTIONS
id_illegal_name = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
&----
*& At selection - on value request *
&----
AT SELECTION-SCREEN ON VALUE-REQUEST FOR lst_vbap.
SELECT posnr INTO TABLE lt_vbap FROM vbap WHERE vbeln = lst_vbak.
REFRESH lt_list[].
CLEAR ls_list.
LOOP AT lt_vbap INTO ls_vbap.
ls_list-key = ls_vbap-posnr.
APPEND ls_list TO lt_list.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'LST_VBAP'
values = lt_list
EXCEPTIONS
id_illegal_name = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
‎2007 Jul 23 5:59 AM
Hi,
Calling the following form from your main program will populate the drop down listbox...
FORM build_user_drop_down_list .
data: name type vrm_id,
name1 type vrm_id,
list type vrm_values,
list1 type vrm_values,
value like line of list,
value1 like line of list1.
clear list. refresh list.
name = 'OBJ_NAM'. " Name of the listbox control on the screen
clear value.
value-key = 'SEL'. " fuction code returned when the value is selected
value-text = 'Select Here'. "Text to be displayed on the screen in listbox
append value to list.
..........
..........
<b> *** In your case jus loop at the internal table to fill these values ***</b>
..........
clear value.
value-key = 'SEL1'.
value-text = 'Value1'.
append value to list.
call function 'VRM_SET_VALUES'
EXPORTING
id = name
values = list.
ENDFORM. " build_user_drop_down_list
<b>Pass the internal table name to the form and call this form for the two...</b>
Hope it helps!
<b>**Reward helpful answers</b>
regards,
Naveenan.
Message was edited by:
Naveenan