一
前言
SAP的搜索帮助是一个非常有用的功能.
常规情况下搜索帮助可以帮助用户选择内容填入字段中.
本文介绍几种特殊的搜索帮助功能,用来添加一些特殊的字段内容
二
特殊的搜索帮助
RANGE类
码表类
表的字段名类
表的多字段类
层级选择类
指定表,字段的RANGE
三
RANGE类
搜索帮助界面类似选择屏幕,包含所有标准选择屏幕中的功能.
添加的选择条件合并成字符串的返回到目标字段.
01
表现形式
如下图, 对订单号限制 字段点击搜索帮助,会弹出一个动态选择屏幕,
输入复杂的选择条件,确认后.
把复杂选择条件的所有行通过逗号分割填写到字段中.
存在内容的情况下,点击搜索帮助,可以看到动态选择屏幕中的内容. 此时可以修改
在复杂选择内容中,可以通过多项选择,进入下一级搜索帮助多选内容.
多选确定的内容进入选择单值
当选择内容太多. ALV的字段无法显示(最多128个字符). 使用 MU <NUM10>替代
可以通过搜索帮助重现内容
02
实现方式
对表的字段分配特殊搜索帮助ZSH_RANGES_VBELN, 或 ZSH_RANGES_ALL_FIELDS
分配时指定参考表,参考字段即可.
注意,字段名建议命名规则 <参考字段名>_MUL . 字段长度限定为128位 (域ZDB_FIELDS_MUL)
03
搜索帮助
四
码表类
把字段的编码,描述通过弹窗显示,勾选结构组合成字符串返回到字段内容
码表的概念详见链接
01
表现形式
点击字段的搜索帮助,会显示该字段对应码表的所有编码,描述内容.
勾选后,所有编码通过英文逗号分割返回到字段内容中
如果勾选生成的字符串超过128位, 则使用<NUM10> 替代字段内容. 此时可以通过搜索帮助查看实际勾选内容
02
实现方式
为表字段分配通用搜索帮助 ZSH_MABIAO_MULTI
字段名命名规则 <码表字段>_MULTI
<码表字段> 在ZTMD006R中维护码表信息(获取编码,描述的方式)
03
搜索帮助
五
表的字段名类
同一行需要一个表名字段,添加表名. 然后搜索帮助中显示该表的所有字段, 双击把字段名选中到字段内容中
01
表现形式
显示指定表的所有字段,以便输入,这是一个最基础的搜索帮助形式
02
实现方式
03
搜索帮助
这是个最基础的搜索帮助. 通过传输参数传入表名,传出选择的字段名
六
表的多字段类
指定表后, 允许勾选多个字段.把勾选的结果组合成字符串返回到字段内容中
01
表现形式
输入表名后, 字段名的搜索帮助显示该表的所有字段, 通过勾选选中多字段
选中的多字段通过英文逗号分割生成字符串放到内容中
如果选中字段组合的字符串超过128位, 替换成 MU<NUM10>,此时只能通过搜索帮助查看实际勾选字段
02
实现方式
表的字段分配搜索帮助 ZSH_TABLE_FIELDS_MULTI . 字段名命名没有什么限制
03
搜索帮助
七
层级选择类
选用了一个标准字段 物料的产品层次PRDHA
01
表现形式
选中后,把多层选择的内容组合放到字段内容中
产品层次在标准界面的搜索帮助表现形式(树状结构选择)
通过屏幕中指定VALUE-REQUEST实现
02
实现方式
03
搜索帮助
八
指定表,字段的RANGE
行中给定表名,字段名. 条件值内容通过搜索帮助的动态选择设置,选择内容合并到字符串输出
01
表现形式
参考RANGE类. 需要在行中先输入表名,字段名,值的搜索帮助按输入的表名,字段名生成动态选择屏幕.
02
实现方式
表中包含参考表,字段名 .字段值. 字段值的搜索帮助分配ZSH_RANGES_ALL_FIELDS. 同时指定表中的参考表,字段名
03
搜索帮助
九
特殊搜索帮助的应用
特殊搜索帮助在多个场景中使用, 这里列出几个示例
01
配置自动单据过滤条件
配置自动单据的保存过滤条件,符合过滤条件的单据保存时会写入自动产生后续单据的表中.
比如,交货单保存时,如果满足自动过账DN_POST的条件, 则写入ZTA_DN_POST. 后台定时执行ZA_DN_POST完成交货单的过账动作
其中同一个条件分组中的条件之间是AND关系, 不同的条件分组之间是OR关系
这种配置方式兼具简洁性和灵活性. 可以指定任意抬头/明细表字段内容作为条件,通过RANGE形式简化了条件值得输入.
一个配置表替代了之前的多个配置表.
02
动态报表的默认选择内容
动态报表的默认选择内容有复杂的填写规则,通过搜索帮助简化填写
03
自动清账程序的多条件配置
自动清账程序允许配置多个限制条件,这些限制条件通过特殊搜索帮助辅助维护.
04
数据同步平台配置
数据同步平台配置默认选择条件,分组字段
十
特殊配置内容的使用
CALL METHOD zcl_zorder_comm=>get_value_of_range( EXPORTING iv_range = lv_fieldvalue IMPORTING et_r = lr_range2 ).
详见示例程序 ZTS_COMM_GET_RANGE
*&---------------------------------------------------------------------*
*& Report ZTS_COMM_GET_RANGE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zts_comm_get_range.
DATA lr_range LIKE RANGE OF t001w-kunnr .
DATA lr_range2 LIKE RANGE OF t001w-kunnr .
DATA: lv_range_value TYPE string.
"一段RANGE字符
lv_range_value = 'E/EQ/W001,I/CP/W*,W002,I/BT/1000000000/1999999999'.
cl_demo_output=>next_section( '原始字符串,包换RANGE信息' ).
cl_demo_output=>write( lv_range_value ).
"RANGE字符获取RANGE ID
DATA: lv_always_range_id TYPE zeb_always_range_id.
lv_always_range_id = 'X'. "强制获取RANGE_ID . 如果不强制转换, 转换逻辑根据字符长度>128才转换
EXPORT lv_always_range_id = lv_always_range_id TO MEMORY ID 'ZALWAYS_RANGE_ID'.
DATA: lv_fieldvalue TYPE string.
CALL FUNCTION 'Z_BC_GET_RANGE_VALUE_OUT'
EXPORTING
iv_str = lv_range_value
* iv_same = lv_same
* iv_range_id = lv_ori_tmp
IMPORTING
ev_str = lv_fieldvalue.
cl_demo_output=>next_section( '原始字符串转换成RANGE ID' ).
cl_demo_output=>write( lv_fieldvalue ).
"获取range , 考虑range id 和 字符传的情况
CALL METHOD zcl_zorder_comm=>get_value_of_range( EXPORTING iv_range = lv_fieldvalue IMPORTING et_r = lr_range2 ).
cl_demo_output=>next_section( 'range id获取range' ).
cl_demo_output=>write( lr_range2 ).
"
CALL METHOD zcl_zorder_comm=>get_value_of_range( EXPORTING iv_range = lv_range_value IMPORTING et_r = lr_range ).
cl_demo_output=>next_section( 'range 字符传获取range' ).
cl_demo_output=>write( lr_range ).
CL_DEMO_OUTPUT=>DISPLAY( ).
十一
总结
搜索帮助在表字段中分配后, 可以在所有应用到该字段的屏幕,ALV显示中使用. 上述特殊搜索帮助简化了一些特殊字段内容的输入.
这些特殊内容可以简化配置表的形式. 友好的输入帮助则简化了特殊内容的配置.
同时通过替代串让ALV类的程序(比如SE16N)可以维护更多的内容. 替代串对应的内容保存在表
ZTBC_SH_RANGES 保存通过特殊搜索帮助ZSH_RANGES_ALL_FIELDS获取的结果
ZTMABIAO_MUL 存放码表多选的内容
上述特殊搜索帮助通过简单的搜索帮助分配就能实现.
THE
END
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论