热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

SAP小技巧简化多值输入

一前言先举个例子解释一下多值输入.比如盘点通知单:总部创建的通知特定门店执行盘点操作的单据.主从结构主表-盘点通知抬头,从表-盘点通知明细商品信息需要指定参与盘点的门店范围.一个常

前言

先举个例子解释一下多值输入.

比如盘点通知单:总部创建的通知特定门店执行盘点操作的单据.

主从结构

主表-盘点通知抬头,

从表-盘点通知明细商品信息

需要指定参与盘点的门店范围. 一个常规做法是把参与的门店创建一个子表,记录所有参与的门店. 但这个子表实际只需要一个有用字段.感觉为了这个字段单独创建一个子表很麻烦,整个单据也从主从表变成一主多从表.维护界面也会复杂很多.

可以考虑把参与的门店编码放在一个字段中,通过逗号分割多个门店编码. 这样既满足了记录,又没有附加从表,原逻辑无需太多改变.

唯一的问题是:怎么简化多个门店的输入和查看.这是本文的话题

本文主要介绍怎么通过搜索帮助完成多值输入及查看

思维导图

3a789ccdd3f79e59c186e60addce8d69.png

输入方式

先看下实现的效果,对于需要多值输入的字段. 你可以手工输入

比如店类别范围, 可以直接输入10,20 .

也可以通过搜索帮助勾选输入(图一)

勾选确定后, 系统把多个勾选的关键字用逗号分割填写在字段中.

勾选屏幕中允许

  • 全选

  • 取消全选

  • 部分选择.(使用ALV的标准选择后,点击按钮完成部分选择)

勾选输入的结果和手工输入一致.(图二)

40c24ac7468b55ce48f2caa6577cd0d6.png

f704a83a6231ccf4acb7cf59e3074348.png

图一

00dcd53edf2e65b3353e039731f43f51.png

图二

查看方式

对于已经存在内容的字段. 如果想知道这些编号的描述信息, 可以通过点击搜索帮助,查看编码对应的描述. 复选框自动填写. (如果字段非编辑状态, 调整勾选的内容不会回写到字段内容,所以复选框未做只读处理)

04dceb911c9329e8e8421478553ba184.png

实现方式

实现非常简单.只需要定义字段,数据元素,关联搜索帮助即可. 

对于需要多值输入的字段,字段名命名规则

<原字段名>_MULTI(图三)

示例:

地点多选, 可以定义成 WERKS_MULTI

商品多选, 可以定义成 MATNR_MULTI

定义一个长度255的域值,

设置通用搜索帮助 ZSH_MABIAO_MULTI .(图四)

2fc094d8f724a5509baed4535c8e7bad.png

图三

1393cc96a0ef00c061104e160f70b545.png

图四

疑问及解决

看到这里, 聪明如你可能会问一个问题. 字段长度255 字段内容通过逗号分割. 如果编码长度10,那么最多填写 255 / 11 &#61; 22 个编码左右. 超过的部分怎么办?

系统会检查字段长度,计算出该字段最大存放的编码个数,

如果勾选的编码个数小于该数字, 则通过逗号分割存放多个编码.

如果勾选的编码个数大于该数字, 则把生成一个码表勾选ID,勾选的编码与该ID关联,记录在表ztmabiao_mul中. 原位置放码表勾选ID即可. 每次勾选都会生成一个新的码表勾选ID记录关系,如下图所示

码表勾选ID填充在测试客户字段中

337216c959683efc6d109e7e14a0cf35.png

点击搜索帮助可以看到所有勾选的客户编码

67282b6e0af5898d8d7afe99badf604a.png

表中存储的内容

037299b06026bf6979c7a37daeccc7af.png

底层逻辑

多值输入帮助是个通用搜索帮助, 

根据字段命名规则可以获取原字段名. 

通过查询码表获取编码,描述. 

呈现给用户勾选. 

根据勾选的结果. 判断直接记录或者产生码表勾选ID记录

码表机制详见链接

无峰&#xff0c;公众号&#xff1a;ABAP 技巧与实战SAP开发框架系列之 码表框架

涉及的代码调用层级太多. 就不贴出了. 大家了解这个处理的思路就好.

302139b41aa0a2de49848fdb3fbbfeed.png

搜索帮助

f99956714a385ce31f64730e83478a69.png

搜索帮助的增强函数

优化

写文章的过程中,发现多值输入有如下几个优化点,(这些细节后续有空处理)

  • 显示状态点击F4后, 复选框应该不允许勾选

  • 显示状态点击F4后, 应该默认过滤只显示勾选的行

  • 特定字段(比如商品,客户,根据字段域的转换例程转换),勾选界面及结果最好去掉前置0(这个细节可以放到码表功能中实现)

  • 如果勾选内容不变,无需分配新的码表勾选ID

总结

多值输入只是一个很简单的应用, 具体在设计程序时, 可以把这种需要记录多值需求放在一个长字段中. 避免因为记录多值创建一个从表(让程序设计更复杂).

同时这也是一个小的通用模块. 可以在所有需要多值输入的地方使用, 因为使用的标准搜索帮助功能. 可以在任意界面使用(屏幕,ALV等).

使用多值输入在一定程度上简化了程序及界面设计.

约定

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.       

    (如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)

 

 

 


推荐阅读
author-avatar
机智的树獭
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有