使用字段符号创建动态范围表

2020-09-10 08:49发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好团队,

我正在寻找如何在运行时使用字段符号创建动态范围表的方法。

假设我有一个表GT_SELECT,其中包含所有字段名称符号 < strong> option。我的要求是我必须遍历GT_SELECT表并为每个唯一字段名称形成动态范围表。

如果有人对此有任何想法,请提出建议。

谢谢

RP

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好团队,

我正在寻找如何在运行时使用字段符号创建动态范围表的方法。

假设我有一个表GT_SELECT,其中包含所有字段名称符号 < strong> option。我的要求是我必须遍历GT_SELECT表并为每个唯一字段名称形成动态范围表。

如果有人对此有任何想法,请提出建议。

谢谢

RP

付费偷看设置
发送
5条回答
打个大熊猫
1楼-- · 2020-09-10 09:36

最简单的方法是使用通用范围结构。 标准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。

我已经写了这个盲注,所以可能需要一些调整,但是我认为您可以看到基本概念。

四川大学会员
2楼-- · 2020-09-10 09:39
马修你好,

谢谢您的回答。我还尝试了上述要求的逻辑。我想我是通过这种方式实现的。

请提出必要的评论。

 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:。
   结局。

 

再次感谢

RP

奄奄一息的小鱼
3楼-- · 2020-09-10 09:30

动态内部表构建概念本身可以使用,并且可以动态创建范围。 检查如何创建动态内部表。 许多职位可用。

ZJXianG
4楼-- · 2020-09-10 09:37

Matthew Billingham 当然,但是数字字段呢? 无论如何,我是说代码的以下部分具有误导性,可能初始化LV_DATENELEMENT的目的是使TYPES声明"动态",但它当然不起作用:

 lv_datenelement  = ls_select-tabname &&`-` && ls_select-fieldname。
类型:tyt_range喜欢lv_datenelement的范围。 创建数据lr_range类型tyt_range。
Doze时光
5楼-- · 2020-09-10 09:31

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。

一周热门 更多>