SAP小技巧 字段的复杂数据限定

前言

SAP中有一种特殊定义的内表.

通过SELECT-OPTION 或者 RANGES 定义的内表.

这种内表可以表达丰富的数据限定逻辑.

本文主要介绍怎么通过单字段内容维护并使用这种复杂的数据限制

特殊内表结构

包含字段  SIGN / OPTION / LOW / HIGH

其中SIGN值 :

  • I 包含

  • E 排除

OPTION值:

  • EQ Equal 等于

  • BT BeTween 区间

  • LE Less Equal 小于等于

  • GE Greater Equal 大于等于

  • CP Contains Pattern 包含

  • GT  Greater  大于

  • LT   less 小于

  • NE  not equal 不等于

LOW:

    放单值或区间的低值

HIGH:

    放区间的高值

业务应用示例

合作伙伴的唯一性检查配置. 如果指定的业务伙伴分组需要检查唯一性(比如用名称检查), 需要限定一个检查范围(也用业务伙伴分组限定). 

用户可能需要灵活的范围限定,如下:

  • 单值限定

  • 多值限定

  • 通配符限定

  • 单值排除

  • 区间限定

  • 区间限定+单值排除

  • ......

BP唯一性检查配置表(图一),其中字段ZBU_GROUP 用来限定唯一性检查的BU_GROUP范围.

(当然,我们也可以用一个从表去维护这个复杂数据限定. 但是就会从之前的单表维护变成主从表维护(可以用视图簇实现), 维护方式变得更复杂.)

为了实现这种复杂的数据限定. 引入了字段内容的复杂数据限定,如图二.

  • 单值

  • 多值

  • 通配符

  • 复杂设置

286cdf3dacd46b83d5ecbc4345a7c570.png

图一

d75499b35ad9fe8a812c9bd78d4f6f6b.png

图二

实现

要实现一个配置字段限定复杂的数据内容, 需要考虑如下两个方面的逻辑

  • 转换

  • 输入帮助

01

转换

单值转换成特殊内表

特殊内表转换成单值

通过SELECT-OPTION 或 RANGES 定义内表.

如下示例程序完成了单值<->内表的互相转换. 在实际使用配置表内容时会用到. 

9a25d3d4baa4925f77d78b021c626dfe.png

2b114c605f502cc8f2eb4b9160bc4314.png

02

输入帮助

在示例表中ZTMM_BP_C1中, 正确维护字段内容是比较麻烦的, 虽然字段帮助中给出了样例, 但实际使用还是比较麻烦并且容易出错,因此考虑使用动态选择创建一个搜索帮助,实现这一类的字段的数据输入帮助,避免出现错误.

为了维护简单,最好使用一个通用搜索帮助实现数据输入帮助. 

如下图,在SE16N中,可以通过搜索帮助把维护的内容放到一个选择屏幕中,用来校验复杂限制条件是否输入正确. 

同时在选择屏幕中填写的内容, 也会转换成单一字段内容,填入该字段. 

a36ca5ee38e9d06e1e6068d0566aac95.png

74e74916547e07f1bc6239b24e46288e.png

确认选择条件后, 通过搜索帮助输出这个拼接的字符串.双击后覆盖原字段内容

e1cda714e5467fd5d18c70fdca5647b2.png

缺陷

目前搜索帮助没有识别字段的显示/修改模式, 呈现的动态选择屏幕都允许修改. 但是通过搜索帮助的机制限定了显示模式无法最终更新数据.

实现方式

如果字段有特定的业务含义 (比如示例的字段ZBU_GROUP,表达了合作伙伴分组的复杂限制 ),可以通过下述方式简单实现搜索帮助功能

01

建立参考关系

设置字段与参考表/参考字段的关系

需维护配置表ZTBC_FIELD_REF, 建立改字段与系统表/字段的关系. 以便后续动态生成选择屏幕

157908c6f426e893af379a1f7ff3e4b3.png

02

设置搜索帮助

特定字段的数据元素分配通用搜索帮助ZSH_RANGES

因为搜索帮助的参数需要限定类型. 目前固定为CHAR 200. 因此此类字段的类型需要限定为 CHAR 200. 

b2724a2d09568ecbd9045a7e0390abc3.png

03

通用搜索帮助

通用搜索帮助ZSH_RANGES,使用了搜索帮助出口实现上述功能

ca23e7b8dddcfa36f1a0bdcb90a4b5c5.png

更复杂的场景

在动态报表中使用的场景中.

详见链接

无峰,公众号:ABAP 技巧与实战动态报表D-Query简介

允许用户设置选择字段的默认选择条件

默认选择内容字段没有具体的业务含义(无法直接关联到一个参考表/参考字段),需要通过当前行的表名/字段名建立参考关系

6c46a0ddefee0792331902b42d016c21.png

此时需要为它单独创建一个搜索帮助

添加参考表/参考字段 ,勾选IMP标记(改标记表示同一行中关联字段内容自动输入)

fb13d1d2c21f145c0b8e10ea09c2aac7.png

给结构中的字段分配搜索帮助

这里可以把包含当前结构的上层结构作为表名,如下图

e7f78add2265f4ead2353d31b676f88f.png

实现效果

f3bdc7efd93af2f352540a5fde1c3b63.png

执行后,可以看到搜索帮助生成的复杂数据限定字符串, 双击回写到默认选择内容字段中

81347fb95d3b3587c7679fa3aae54b86.png

代码实现

有偿获取源代码.

对源码感兴趣的朋友可以给文章打赏(200微信豆)后,联系微信号392077索取

总结

通过在单个字段中维护复杂的数据限定条件,可以简化配置表结构(主从->单表). 当多字段都需要这种复杂数据限定时,极大的简化了配置表.

通过搜索帮助辅助实现复杂数据限定的内容,提供了一个良好的界面给用户使用.避免用户维护错误.

搜索帮助设定在数据元素或表字段层级. 会自动带入相应的屏幕界面及ALV字段中.

THE

END

约定

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

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

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 

申请进入公众号讨论群提问或者参与话题讨论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值