嵌套循环未知数量或时间

2020-08-30 21:10发布

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

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


专家们,

在这种情况下,我有一个包含2个字段的表IT_DIM_MEMBER。

DIMENSION(C20):尺寸ID

T_MEMBER(内部表):维的选定成员

示例:

此表的行数和行中的值是在运行时根据系统配置确定的。

我要填写的结果表(ET_RESULT)的结构是动态的,并且IT_DIM_MEMBER表中列出的尺寸显示为列。 最后,应使用T_MEMBER表的值的所有可能组合填充它。

有没有一种方法可以动态嵌套未知数量的循环(取决于IT_DIM_MEMBER表中的维数),以便我可以遍历所有T_MEMBER组合?

或者我们怎么能做到这一点?

谢谢

穆罕默德。

(12.4 kB)

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

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


专家们,

在这种情况下,我有一个包含2个字段的表IT_DIM_MEMBER。

DIMENSION(C20):尺寸ID

T_MEMBER(内部表):维的选定成员

示例:

此表的行数和行中的值是在运行时根据系统配置确定的。

我要填写的结果表(ET_RESULT)的结构是动态的,并且IT_DIM_MEMBER表中列出的尺寸显示为列。 最后,应使用T_MEMBER表的值的所有可能组合填充它。

有没有一种方法可以动态嵌套未知数量的循环(取决于IT_DIM_MEMBER表中的维数),以便我可以遍历所有T_MEMBER组合?

或者我们怎么能做到这一点?

谢谢

穆罕默德。

(12.4 kB)
付费偷看设置
发送
5条回答
小灯塔
1楼-- · 2020-08-30 21:33

首先,您必须找出结果表的字段列表。 您可以按照以下步骤进行操作

 FIELD-SYMBOLS:键入任何类型。
 数据:lt_comp TYPE abap_component_tab。
 数据:lo_ref_wa类型参考cl_abap_structdescr。

 "将单行附加到结果
 在et_result ASSIGNING 上附加初始行。

 "获取工作区域的参考
 lo_ref_wa?= cl_abap_tabledescr => describe_by_data(p_data = )。

 "获取工作区的组件列表-et_result
 lt_comp = lo_ref_wa-> get_components()。

一旦找到了字段列表,就可以如下填充结果表

数据:
    lv_index TYPE sy-tabix。

 字段符号:
      TYPE任意。

 v_index = 1。

 "为ET_Result内部表的所有列循环
 循环到lt_comp INTO ls_comp。
   读取表it_​​dim_member的INTO数据(ls_dim_member),其键维= ls_comp-name。
  
   如果sy-subrc eq 0。
     "分配结果表的相应列
     将结构的COMPONENT ls_comp-name分配给。
    
     如果已分配。
       "读取尺寸类型的特定行
       读取表ls_dim_member-t_member INTO数据(dim_member)INDEX lv_index。
       如果sy-subrc eq 0。
          = dim_member。
       万一。
     万一。

   万一。
 ENDLOOP。

上面的代码将读取每个维值的t_member的第一行。

希望这有助于您找到完整的解决方案。

谢谢

古拉布

Violet凡
2楼-- · 2020-08-30 21:40

我不明白这个问题。 我了解的是您有以下代码:

在it_dim_result上循环引用到DATA(dim_result)。
   循环进入dim_result-> t_member引用到DATA(成员)。
     "在这里,您想要做什么

您还需要什么?

Tong__Ming
3楼-- · 2020-08-30 21:13
哎,真难
4楼-- · 2020-08-30 21:13

嗨,桑德拉,

否,您提供的代码将在单独的T_MEMBER表中循环。

我的要求是获取T_MEMBER表的所有笛卡尔组合,这些组合在IT_DIM_MEMBER中可用。 在上面的示例中,我有5个,但它是在运行时确定的。

我希望这可以澄清。

谢谢,
穆罕默德。

SAP砖家
5楼-- · 2020-08-30 21:29

我认为您可以通过递归来实现它,例如:

在it_dim_result处循环引用到DATA(dim_result)中。
   循环进入dim_result-> t_member引用到DATA(成员)。
    final_wa =对应#(成员)。
    PERFORM get_next使用dim_result-> dimension
                            sy-tabix。
   结局。
 结局。
 FORM get_next使用维度next_indx。
   如果尺寸= final_dimension。  "使用RTTI获得
     APPEND final_wa到final_tab。
     出口。
   万一。
    
   从it_dim_result循环引用next_indx + 1到DATA(dim_result)中。
     循环进入dim_result-> t_member引用到DATA(成员)。
      final_wa =对应#(成员)。
      PERFORM get_next使用dim_result-> dimension
                              sy-tabix。
     结局。
   结局。
 结束格式
 

一周热门 更多>