ABAP 选择屏幕 实现三级地

实现效果

在这里插入图片描述

不足与反思

  1. 我这里是把三级地址做了三个选项,其实可以做在一起,选择一次,带出省市县
  2. 未做值检查,用户如果不通过选择帮助,直接输入,就可能存在问题
  3. 选择帮助两个文本列显示还存在问题,未显示对应的文本
    在这里插入图片描述

实现步骤

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值