ABAP 省市县级联搜索帮助
在展示ABAP代码之前,先建立自建表ZCHENH006,表中包含两个关键字段 BELNR(地区编码),SDESC(地区描述)。
编码规则参考:身份证前六位地区编码规则,可参考我另外一篇Blog导入系统:ABAP自动生成身份证及校验。

在导入配置之后,可以参考以下ABAP代码。
*&---------------------------------------------------------------------*
*& REPORT ZCHENH014
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------* REPORT zchenh014.
TABLES:zchenh006.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_sdesc TYPE zchenh006-sdesc DEFAULT '请选择省份信息'.
PARAMETERS:p_belnr TYPE zchenh006-belnr. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_sdesc1 TYPE zchenh006-sdesc DEFAULT '请选择市信息'.
PARAMETERS:p_belnr1 TYPE zchenh006-belnr. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_sdesc2 TYPE zchenh006-sdesc DEFAULT '请选择县/区信息'.
PARAMETERS:p_belnr2 TYPE zchenh006-belnr.
SELECTION-SCREEN END OF LINE. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_belnr.
PERFORM frm_f4_get_belnr USING '省' CHANGING p_belnr p_sdesc. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_belnr1.
PERFORM frm_f4_get_belnr USING '市' CHANGING p_belnr1 p_sdesc1. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_belnr2.
PERFORM frm_f4_get_belnr USING '县' CHANGING p_belnr2 p_sdesc2. AT SELECTION-SCREEN OUTPUT.
PERFORM frm_modify_screen. INITIALIZATION.
*&---------------------------------------------------------------------*
*& Form frm_f4_get_belnr
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_f4_get_belnr USING p_in CHANGING p_out1 p_out2.
DATA:lt_field TYPE dfies OCCURS WITH HEADER LINE,
lt_ret TYPE ddshretval OCCURS WITH HEADER LINE,
lt_dyn TYPE dselc OCCURS WITH HEADER LINE.
DATA:BEGIN OF lt_zchenh006 OCCURS ,
sdesc TYPE zchenh006-sdesc, " 省市县代码
belnr TYPE zchenh006-belnr, " 省市县描述
END OF lt_zchenh006.
DATA:lv_belnr().
IF p_in = '省'.
SELECT sdesc belnr
INTO TABLE lt_zchenh006
FROM zchenh006
WHERE belnr LIKE '%0000'.
ENDIF. IF p_in = '市'.
lv_belnr = p_belnr+() && '%'.
SELECT sdesc belnr
INTO TABLE lt_zchenh006
FROM zchenh006
WHERE belnr LIKE lv_belnr
AND belnr LIKE '%00'
AND belnr NE p_in
AND sdesc NE '县'.
ENDIF. IF p_in = '县'.
lv_belnr = p_belnr1+() && '%'.
SELECT sdesc belnr
INTO TABLE lt_zchenh006
FROM zchenh006
WHERE belnr NOT LIKE '%00'
* AND belnr NOT LIKE '%01'
AND belnr LIKE lv_belnr
AND belnr NE p_belnr1.
ENDIF. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZCHENH006-BELNR'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_BELNR'
window_title = '自定义搜索帮助'
value_org = 'S'
callback_program = sy-repid
TABLES
value_tab = lt_zchenh006
field_tab = lt_field
return_tab = lt_ret
dynpfld_mapping = lt_dyn
EXCEPTIONS
parameter_error =
no_values_found =
OTHERS = .
LOOP AT lt_ret.
p_out1 = lt_ret-fieldval.
SELECT SINGLE sdesc INTO p_out2 FROM zchenh006 WHERE belnr = p_out1.
IF sy-subrc NE .
p_out2 = '无效编号'.
ENDIF.
ENDLOOP.
ENDFORM. " frm_f4_get_belnr
*&---------------------------------------------------------------------*
*& Form FRM_MODIFY_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_modify_screen .
LOOP AT SCREEN.
CASE screen-name.
WHEN 'P_SDESC'.
screen-input = .
IF p_sdesc IS INITIAL.
screen-active = .
ENDIF.
WHEN 'P_SDESC1'.
screen-input = .
IF p_sdesc1 IS INITIAL.
screen-active = .
ENDIF.
WHEN 'P_SDESC2'.
screen-input = .
IF p_sdesc2 IS INITIAL.
screen-active = .
ENDIF.
ENDCASE.
MODIFY SCREEN.
ENDLOOP. ENDFORM. " FRM_MODIFY_SCREEN
但是该代码有个瑕疵,每次选择完毕后,需要按下"回车",才能显示完整的地区描述信息。
ABAP 省市县级联搜索帮助的更多相关文章
- distpicker 省市县级联
一.前言:想着每次写项目都要遇到省市县级联,就想找一个比较简单好用的插件来...感觉挺不错~~~ 二.例子: html : 效果: 还有很多种用法,我这里只放一种,插件文件里index.html有介绍 ...
- [SAP ABAP开发技术总结]搜索帮助Search Help (F4)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- ABAP DEMO 年月的搜索帮助
效果图: *&---------------------------------------------------------------------* *& Report YCX_ ...
- extjs 省市县级联
Ext.define('State', { extend: 'Ext.data.Model', fields: [ {type: 'string', name: 'nevalue'}, {type: ...
- 【前端】Element-UI 省市县级联选择器 JSON数据
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/element_cascader.html 不想自己处理的就直接下载吧 http://shamoyuu.bj.bce ...
- postgresql 10 ltree 使用说明
官方文档 https://www.postgresql.org/docs/10/static/ltree.html ltree是俄罗斯Teodor Sigaev和Oleg Bartunov共同开发的P ...
- 基于MVC设计模式的两种软件架构简介
第一种模式,可处理组合命令,具有撤销(Undo)和重做(Redo)功能,支持多种数据库类型 1.Action采用组合模式,既可以代表一个简单的动作,也可以代表一组动作组合.List<Ac ...
- mobile plugin
http://fronteed.com/iCheck/ http://spritely.net/documentation/ http://www.mobilexweb.com/blog/mobile ...
- Select2使用方法汇总
引用: <script src="~/Content/plugins/select2/select2.min.js"></script> 1.简单使用 $. ...
随机推荐
- s21day12 python笔记
s21day12 python笔记 一.函数中高级 1.1 函数可以做返回值 #示例: def func(): print(123) def bar(): return func v = bar() ...
- 《从Lucene到Elasticsearch:全文检索实战》学习笔记三
今天我给大家讲讲倒排索引. 索引是构成搜索引擎的核心技术之一,它在日常生活中是非常常见的,比如我看一本书的时候,我首先会看书的目录,通过目录可以快速定位到具体章节的页码,加快对内容的查询速度. 文档通 ...
- 机器学习算法中如何选取超参数:学习速率、正则项系数、minibatch size
机器学习算法中如何选取超参数:学习速率.正则项系数.minibatch size 本文是<Neural networks and deep learning>概览 中第三章的一部分,讲机器 ...
- Git 2.x 中git push时遇到 push.default 警告的解决方法
近在学习使用 git&GitHub,然后今天遇到了一个问题.在执行 git add 和 git commit 操作之后,再进行 git push 操作,出现了如下提示: $ git push ...
- mysql:设置字符集utf8mb4 支持emoji字符
为什么要把数据库的字符集设置成utf8mb4呢?以前一直用的都是utf8啊? 答案在这里:utf8适用于不使用移动设备的互联网交互,utf8mb4适用于当前的移动设备互联网开发,因为移动设备中常常会有 ...
- Bootstrap格式转换代码
网址:http://www.w3cschool.cc/bootstrap/bootstrap-responsive-utilities.html <div class="contain ...
- Win10下JDK环境变量的设置
1.找到jdk正确的安装路径 2.打开环境变量设置 打开"资管管理器"后,右击"此电脑",点击"属性" 然后点击"高级系统设置&q ...
- Python撰写mail
版本1 指定邮箱进行发送 """ 说明:指定账户密码进行邮件发送 由312051952@qq.com-->c4kaichen@163.com "&qu ...
- 模拟SQL用户 EXECUTE AS USER
EXECUTE AS USER= @domain SELECT SUSER_NAME(), USER_NAME(); REVERT 以下语句可以模拟SQL用户,具体使用场景自行脑补.
- JAVA中循环删除list中元素的方法总结(同上篇)
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末 ...