2020-09-10 08:49发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
你好团队,
我正在寻找如何在运行时使用字段符号创建动态范围表的方法。
假设我有一个表GT_SELECT,其中包含所有字段名称,低,高,符号 < strong> option。我的要求是我必须遍历GT_SELECT表并为每个唯一字段名称形成动态范围表。
如果有人对此有任何想法,请提出建议。
谢谢
RP
最简单的方法是使用通用范围结构。 标准SAP中有几种可用的-您只需要搜索它们。 另外,您也可以根据 RSLOW日期元素-或STRING或其他足以容纳所有值的类型。
DATA: range1 rslow的类型范围, range2 rslow的类型范围, ... rangeN rslow的类型范围。 DATA where_clause TYPE字符串。 数据计数类型n长度1。 按fname排序gt_select。 在gt_select INTO DATA(select_line)中循环。 字段符号类型标准表。 分配(| range {count} |)到。 DATA range_line TYPE rslow。 移动对应的select_line到range_line。 插入range_line INTO TABLE <范围>。 在fname的末尾。 加1要计数。 如果where_clause不是INITIAL。 where_clause = where_clause && | AND {select_line-fname} IN range {count} |。 其他。 where_clause = | {select_line-fname} IN range {count} |。 万一。 ENDAT。 ENDLOOP。
我已经写了这个盲注,所以可能需要一些调整,但是我认为您可以看到基本概念。
马修你好,
谢谢您的回答。我还尝试了上述要求的逻辑。我想我是通过这种方式实现的。
请提出必要的评论。
TYPE-POOLS:abap。 数据: gr_structdescr类型参考cl_abap_structdescr, gr_tabledescr类型参考cl_abap_tabledescr, gr_datadescr类型参考cl_abap_datadescr, gr_typedescr类型参考cl_abap_typedescr, gt_components TYPE abap_component_tab, gw_component abap_component_tab的类型行, gr_wa TYPE REF TO数据, gr_tab TYPE REF TO数据。 FIELD-SYMBOLS: TYPE任意, TYPE任意。 FIELD-SYMBOLS: TYPE表, TYPE表, TYPE表, TYPE表。 循环至gt_select INTO wa_select。 *确定结构的组件-> GT_COMPONENTS 移动"签名"到gw_component-name。 gw_component-type?= cl_abap_elemdescr => get_c(p_length = 1)。 将gw_component插入表gt_components中。 将"选项"移动到gw_component-name。 gw_component-type?= cl_abap_elemdescr => get_c(p_length = 2)。 将gw_component插入表gt_components中。 将" LOW"移到gw_component-name。 gw_component-type?= cl_abap_elemdescr => describe_by_name(wa_select-fieldnm)。 将gw_component插入表gt_components中。 移动"高"到gw_component-name。 gw_component-type?= cl_abap_elemdescr => describe_by_name(wa_select-fieldnm)。 将gw_component插入表gt_components中。 *获取结构描述符-> GR_STRUCTDESCR gr_structdescr?= cl_abap_structdescr => create(gt_components)。 *创建结构为GR_STRUCTDESCR-> GR_WA的工作区 创建数据gr_wa类型句柄gr_structdescr。 ASSIGN gr_wa-> *至。 *将值移动到字段符号工作区 移动对应的wa_select到。 gr_datadescr?= gr_structdescr。 gr_tabledescr?= cl_abap_tabledescr => create(gr_datadescr)。 *为每个范围创建动态内部表 创建数据gr_tab类型句柄gr_tabledescr。 ASSIGN gr_tab-> *至。 ASSIGN gr_tab-> *至。 ASSIGN gr_tab-> *至。 ASSIGN gr_tab-> *至。 案例wa_select-fieldnm。 当" field1"。 将附加到。 当" field2"。 将附加到。 *- *- *- * *像他在多个领域中一样。 结束。 刷新:gt_components。 UNASSIGN:。 结局。
再次感谢
动态内部表构建概念本身可以使用,并且可以动态创建范围。 检查如何创建动态内部表。 许多职位可用。
Matthew Billingham 当然,但是数字字段呢? 无论如何,我是说代码的以下部分具有误导性,可能初始化LV_DATENELEMENT的目的是使TYPES声明"动态",但它当然不起作用:
lv_datenelement = ls_select-tabname &&`-` && ls_select-fieldname。类型:tyt_range喜欢lv_datenelement的范围。 创建数据lr_range类型tyt_range。
Ich hatte gerade auch eineähnlicheAufgabefürden Aufbau einer dynamische RangefüreinePrüfung。 Mein Ansatz战争大战
他的面是福斯拉格。
数据: lv_datenelement TYPE字符串, lr_range TYPE REF TO data。字段符号: **在gt_select INTO DATA(ls_select)中循环。 lv_datenelement = ls_select-tabname &&`-` && ls_select-fieldname。
类型:tyt_range类似于lv_datenelement的范围。字段符号:类型tyt_range。
创建数据lr_range类型tyt_range。分配lr_range-> *到。在分配字段符号()处添加初始行。
-sign = ls_select-low。 -option = ls_select-option -low = ls_select-low。
-high = ls_select-high。
如果中的ls_select-check_value。
*处理检查
ENDIF。
UNASSIGN 。
** ENDLOOP。
最多设置5个标签!
最简单的方法是使用通用范围结构。 标准SAP中有几种可用的-您只需要搜索它们。 另外,您也可以根据 RSLOW日期元素-或STRING或其他足以容纳所有值的类型。
我已经写了这个盲注,所以可能需要一些调整,但是我认为您可以看到基本概念。
谢谢您的回答。我还尝试了上述要求的逻辑。我想我是通过这种方式实现的。
请提出必要的评论。
再次感谢
RP
动态内部表构建概念本身可以使用,并且可以动态创建范围。 检查如何创建动态内部表。 许多职位可用。
Matthew Billingham 当然,但是数字字段呢? 无论如何,我是说代码的以下部分具有误导性,可能初始化LV_DATENELEMENT的目的是使TYPES声明"动态",但它当然不起作用:
Ich hatte gerade auch eineähnlicheAufgabefürden Aufbau einer dynamische RangefüreinePrüfung。 Mein Ansatz战争大战
他的面是福斯拉格。
数据:
lv_datenelement TYPE字符串,
lr_range TYPE REF TO data。
字段符号:
**在gt_select INTO DATA(ls_select)中循环。
lv_datenelement = ls_select-tabname &&`-` && ls_select-fieldname。
类型:tyt_range类似于lv_datenelement的范围。类型tyt_range。
字段符号:
创建数据lr_range类型tyt_range。。分配字段符号()处添加初始行。
分配lr_range-> *到
在
如果中的ls_select-check_value。
*处理检查
ENDIF。
UNASSIGN。
** ENDLOOP。
一周热门 更多>