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.简单使用 $. ...
随机推荐
- 24. dfs数的路径查找
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径. 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. (注意: 在返回值的list中,数组长度大的数组 ...
- PC timeline
https://news.microsoft.com/facts-about-microsoft/ 日期 事件 1975年 微软成立 1981年 ...
- vs+qt 运行过程出现cannot run rc.exe
刚开始,我按照网上的一堆教程在qt creator中设置了各种东西,设置完以后,运行时出现cannot run rc.exe,根据百度,将C:\Program Files (x86)\Windows ...
- psql的安装与数据库创建(ubuntu)
来自阮一峰日志 http://www.ruanyifeng.com/blog/2013/12/getting_started_with_postgresql --------------------- ...
- linux下查询java进程以及杀掉其进程
1.使用命令: ps -ef|grep java 查询到到自己想要kill掉的进程id 2.使用命令: kill -9 id(这里的id为你上一步查找到的id)
- java多线程同步器
Java中多线程开发时,离不开线程的分工协作,常用的多线程的同步器有如下几种: 1.CountDownLatch 应用场景:等待一组线程任务完成后在继续执行当前线程. 用法:定义一个CountDown ...
- laravel 路由分組
laravel 路由分組 Route::group(['prefix' => 'admin'], function () { $namespacePrefix="\\App\\Http ...
- [转]Python如何引入自定义模块?
转自 http://www.cnblogs.com/JoshuaMK/p/5205398.html Python运行环境在查找库文件时是对 sys.path 列表进行遍历,如果我们想在运行环境中注册新 ...
- 由override 和 overload 引发的学习感悟
工作已三年的我,竟然面试的时候去裸考了.想当然的认为有很多东西会在工作中不知不觉积累下来,现在想想,真是扯淡... 我的三年的工作经验是开发测试的工作,主要负责测试用例的自动化实现,稍深一些的是自动化 ...
- 3、PHP中常用的数据库操作函数解析
mysql_connect 连接数据库 mysql_select_db 选择需要操作的数据库 mysql_query 执行数据库操作语句 mysql_fetch_array 以数组的形式返回每行查询 ...