实现效果
不足与反思
- 我这里是把三级地址做了三个选项,其实可以做在一起,选择一次,带出省市县
- 未做值检查,用户如果不通过选择帮助,直接输入,就可能存在问题
- 选择帮助两个文本列显示还存在问题,未显示对应的文本
实现步骤
1.建配置表
2.选择屏幕元素
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (28) text-064 MODIF ID m2.
SELECT-OPTIONS:s_area FOR zmmt036-zarea NO-EXTENSION NO INTERVALS MODIF ID m2.
SELECTION-SCREEN POSITION 38.
SELECT-OPTIONS:s_city FOR zmmt036-zcity NO-EXTENSION NO INTERVALS MODIF ID m2.
SELECTION-SCREEN POSITION 46.
SELECT-OPTIONS:s_coun FOR zmmt036-zcountry NO-EXTENSION NO INTERVALS MODIF ID m2.
SELECTION-SCREEN END OF LINE.
3.事件块中添加VALUE-REQUEST
这里有一个点,遇到多次了,当无法直接获取屏幕上的值时,可以通过DYNP_VALUES_READ这个函数获取。
INITIALIZATION.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_area-low.
PERFORM frm_set_area.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_city-low.
PERFORM frm_set_city.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_coun-low.
PERFORM frm_set_coun.
FORM frm_get_file .
CALL FUNCTION 'TB_LIMIT_WS_FILENAME_GET'
EXPORTING
mask = 'EXCEL FILES,*.XLS,ALL FILES,*.*. '
mode = 'O'
IMPORTING
filename = p_file
EXCEPTIONS
selection_cancel = 1
selection_error = 2
OTHERS = 3.
CASE sy-subrc.
WHEN 0.
WHEN 2.
MESSAGE 'CANCEL.' TYPE 'S'.
WHEN OTHERS.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDCASE.
ENDFORM. " FRM_GET_FILE
FORM frm_set_city .
DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE.
CLEAR: dynpfields, dynpfields[].
dynpfields-fieldname = 'S_AREA-LOW'.
APPEND dynpfields.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
translate_to_upper = 'X'
TABLES
dynpfields = dynpfields
EXCEPTIONS
OTHERS = 9.
IF sy-subrc = 0.
READ TABLE dynpfields WITH KEY fieldname = 'S_AREA-LOW'.
s_area-low = dynpfields-fieldvalue. "备注
CONDENSE s_area-low.
APPEND s_area.
ENDIF.
IF s_area[] IS INITIAL .
CLEAR:s_city[],s_coun[].
RETURN.
ENDIF.
REFRESH gt_sel_city.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_sel_city FROM zsdt010 WHERE zarea = s_area-low.
SORT gt_sel_city BY zcity.
DELETE ADJACENT DUPLICATES FROM gt_sel_city COMPARING zcity.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZCITY'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_CITY-LOW'
value_org = 'S'
TABLES
value_tab = gt_sel_city
return_tab = out_cassd
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
ENDFORM. " FRM_SET_CITY
FORM frm_set_coun .
DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE.
CLEAR: dynpfields, dynpfields[].
dynpfields-fieldname = 'S_AREA-LOW'.
APPEND dynpfields.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
translate_to_upper = 'X'
TABLES
dynpfields = dynpfields
EXCEPTIONS
OTHERS = 9.
IF sy-subrc = 0.
READ TABLE dynpfields WITH KEY fieldname = 'S_AREA-LOW'.
s_area-low = dynpfields-fieldvalue. "备注
CONDENSE s_area-low.
APPEND s_area.
ENDIF.
CLEAR: dynpfields, dynpfields[].
dynpfields-fieldname = 'S_CITY-LOW'.
APPEND dynpfields.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
translate_to_upper = 'X'
TABLES
dynpfields = dynpfields
EXCEPTIONS
OTHERS = 9.
IF sy-subrc = 0.
READ TABLE dynpfields WITH KEY fieldname = 'S_CITY-LOW'.
s_city-low = dynpfields-fieldvalue. "备注
CONDENSE s_city-low.
APPEND s_city.
ENDIF.
IF s_city[] IS INITIAL .
CLEAR:s_coun[].
RETURN.
ENDIF.
REFRESH gt_sel_coun.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_sel_coun FROM zsdt010 WHERE zarea = s_area-low AND zcity = s_city-low.
SORT gt_sel_coun BY zcounty.
DELETE ADJACENT DUPLICATES FROM gt_sel_coun COMPARING zcounty.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZCOUNTY'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_COUN-LOW'
value_org = 'S'
TABLES
value_tab = gt_sel_coun
return_tab = out_cassd
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
ENDFORM. " FRM_SET_COUN