一
前言
先举个例子解释一下多值输入.
比如盘点通知单:总部创建的通知特定门店执行盘点操作的单据.
主从结构
主表-盘点通知抬头,
从表-盘点通知明细商品信息
需要指定参与盘点的门店范围. 一个常规做法是把参与的门店创建一个子表,记录所有参与的门店. 但这个子表实际只需要一个有用字段.感觉为了这个字段单独创建一个子表很麻烦,整个单据也从主从表变成一主多从表.维护界面也会复杂很多.
可以考虑把参与的门店编码放在一个字段中,通过逗号分割多个门店编码. 这样既满足了记录,又没有附加从表,原逻辑无需太多改变.
唯一的问题是:怎么简化多个门店的输入和查看.这是本文的话题
本文主要介绍怎么通过搜索帮助完成多值输入及查看
二
思维导图
三
输入方式
先看下实现的效果,对于需要多值输入的字段. 你可以手工输入
比如店类别范围, 可以直接输入10,20 .
也可以通过搜索帮助勾选输入(图一)
勾选确定后, 系统把多个勾选的关键字用逗号分割填写在字段中.
勾选屏幕中允许
全选
取消全选
部分选择.(使用ALV的标准选择后,点击按钮完成部分选择)
勾选输入的结果和手工输入一致.(图二)
图一
图二
四
查看方式
对于已经存在内容的字段. 如果想知道这些编号的描述信息, 可以通过点击搜索帮助,查看编码对应的描述. 复选框自动填写. (如果字段非编辑状态, 调整勾选的内容不会回写到字段内容,所以复选框未做只读处理)
五
实现方式
实现非常简单.只需要定义字段,数据元素,关联搜索帮助即可.
对于需要多值输入的字段,字段名命名规则
<原字段名>_MULTI(图三)
示例:
地点多选, 可以定义成 WERKS_MULTI
商品多选, 可以定义成 MATNR_MULTI
定义一个长度255的域值,
设置通用搜索帮助 ZSH_MABIAO_MULTI .(图四)
图三
图四
六
疑问及解决
问
看到这里, 聪明如你可能会问一个问题. 字段长度255 字段内容通过逗号分割. 如果编码长度10,那么最多填写 255 / 11 &#61; 22 个编码左右. 超过的部分怎么办?
系统会检查字段长度,计算出该字段最大存放的编码个数,
如果勾选的编码个数小于该数字, 则通过逗号分割存放多个编码.
如果勾选的编码个数大于该数字, 则把生成一个码表勾选ID,勾选的编码与该ID关联,记录在表ztmabiao_mul中. 原位置放码表勾选ID即可. 每次勾选都会生成一个新的码表勾选ID记录关系,如下图所示
答
码表勾选ID填充在测试客户字段中
点击搜索帮助可以看到所有勾选的客户编码
表中存储的内容
七
底层逻辑
多值输入帮助是个通用搜索帮助,
根据字段命名规则可以获取原字段名.
通过查询码表获取编码,描述.
呈现给用户勾选.
根据勾选的结果. 判断直接记录或者产生码表勾选ID记录
码表机制详见链接
无峰&#xff0c;公众号&#xff1a;ABAP 技巧与实战SAP开发框架系列之 码表框架
涉及的代码调用层级太多. 就不贴出了. 大家了解这个处理的思路就好.
搜索帮助
搜索帮助的增强函数
八
优化
写文章的过程中,发现多值输入有如下几个优化点,(这些细节后续有空处理)
显示状态点击F4后, 复选框应该不允许勾选
显示状态点击F4后, 应该默认过滤只显示勾选的行
特定字段(比如商品,客户,根据字段域的转换例程转换),勾选界面及结果最好去掉前置0(这个细节可以放到码表功能中实现)
如果勾选内容不变,无需分配新的码表勾选ID
九
总结
多值输入只是一个很简单的应用, 具体在设计程序时, 可以把这种需要记录多值需求放在一个长字段中. 避免因为记录多值创建一个从表(让程序设计更复杂).
同时这也是一个小的通用模块. 可以在所有需要多值输入的地方使用, 因为使用的标准搜索帮助功能. 可以在任意界面使用(屏幕,ALV等).
使用多值输入在一定程度上简化了程序及界面设计.
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
(如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)