‎2013 Jan 30 3:54 PM
Hello,
I used the following code to populate date for a listbox on a selection screen. The first FORM module gets distinct bom level of a bom input. The second FORM module sets values to the listbox. After I input a bom number, press 'Enter', and choose a bom level, the ALV displays and everything goes well so far. When I go back, all values in the listbox disappeared except the number I choose. That is to say, previously, there are 5 values, after an execution of the program, I go back, and there are only one number in the list. But I wanna the original list to be displayed.
My second question is how to trigger the code of populating listbox other than by pressing Enter. If the user input a new bom number, I wanna the listbox populated automatically without pressing Enter.
Best regards,
-------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
IF rd_bom = 'X'.
ASSIGN s_matnum-low TO <matnum>.
PERFORM EXPLODE_BOM USING <matnum>.
PERFORM GET_BOM_LEVEL USING 'lb_lev'.
ENDIF.
-------------------------------------------------------------------
FORM EXPLODE_BOM USING MATNUM TYPE MATNR.
DATA: id_name TYPE VRM_ID VALUE 'lb_lev',
lt_values TYPE VRM_VALUES,
ls_values LIKE LINE OF lt_values.
CLEAR: gt_bom[], gt_bom_lvl[].
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
STLAL = '01' " Alternative BOM
CAPID = 'PP01' " Application ID
DATUV = SY-DATUM " Validity date
MTNRV = MATNUM " Material
WERKS = p_plant " Plant
STLAN = '1'
MEHRS = 'X' " Multi-level explosion
TABLES
STB = gt_bom
EXCEPTIONS
ALT_NOT_FOUND = 1
CALL_INVALID = 2
MATERIAL_NOT_FOUND = 3
MISSING_AUTHORIZATION = 4
NO_BOM_FOUND = 5
NO_PLANT_DATA = 6
NO_SUITABLE_BOM_FOUND = 7.
IF NOT MATNUM IS INITIAL.
gs_bom-stufe = 0.
gs_bom-idnrk = MATNUM.
INSERT gs_bom INTO gt_bom INDEX 1.
CLEAR gs_bom.
APPEND LINES OF gt_bom TO gt_bom_lvl.
ENDIF.
ENDFORM.
-------------------------------------------------------------------
FORM GET_BOM_LEVEL USING IDNAME TYPE VRM_ID.
DATA: lt_values TYPE VRM_VALUES,
ls_values TYPE VRM_VALUE,
lv_lb_lns TYPE I,
lv_bt_lns TYPE I.
CLEAR: lt_values[], lv_lb_lns, lv_bt_lns.
SORT gt_bom_lvl ASCENDING BY STUFE.
DELETE ADJACENT DUPLICATES FROM gt_bom_lvl COMPARING STUFE.
LOOP AT gt_bom_lvl INTO gs_bom_lvl.
ls_values-text = ls_values-key = gs_bom_lvl-stufe.
APPEND ls_values TO lt_values.
CLEAR: gs_bom_lvl,
ls_values.
ENDLOOP.
DESCRIBE TABLE gt_bom_lvl LINES lv_bt_lns.
DESCRIBE TABLE lt_values LINES lv_lb_lns.
IF lv_bt_lns > 1 AND lv_lb_lns > 1.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = IDNAME
VALUES = lt_values
EXCEPTIONS
ID_ILLEGAL_NAME = 1
OTHERS = 2
.
ENDIF.
ENDFORM.
‎2013 Jan 31 1:26 AM
Hi ts,
It is not the case, Check are you clearing any data while displaying alv or which pressing back from alv.
Regards,
Vikram