FOR表迭代

2020-08-22 17:49发布

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

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


我想使用FOR Operand进行表迭代并遇到障碍。 这是我的要求:

数据结构-

ITAB1具有两个包含10条记录的FIELD1和FIELD2字段。

ITAB2具有两个具有6条记录的字段FIELD1和FIELD 3。

ITAB3具有4个字段FIELD1、2和3。

要求:

将itab1循环放入ls_itab1 WHERE field2 ='X'。

将表itab2读入具有键field1 = ls_itab1-field1的ls_itab2

如果sy-subrc = 0。

从LS_ITAB1和LS_ITAB2填充表ITAB3映射FIELD1、2和3。

ELSE。

带有LS_ITAB1-FIELD1的消息i000。

ENDIF。

ENDLOOP。

需要帮助完成以下代码:

DATA(ITAB3)= VALUE TY_TAB3(FOR its1itab1在itab1中(field2 ='X')....

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

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


我想使用FOR Operand进行表迭代并遇到障碍。 这是我的要求:

数据结构-

ITAB1具有两个包含10条记录的FIELD1和FIELD2字段。

ITAB2具有两个具有6条记录的字段FIELD1和FIELD 3。

ITAB3具有4个字段FIELD1、2和3。

要求:

将itab1循环放入ls_itab1 WHERE field2 ='X'。

将表itab2读入具有键field1 = ls_itab1-field1的ls_itab2

如果sy-subrc = 0。

从LS_ITAB1和LS_ITAB2填充表ITAB3映射FIELD1、2和3。

ELSE。

带有LS_ITAB1-FIELD1的消息i000。

ENDIF。

ENDLOOP。

需要帮助完成以下代码:

DATA(ITAB3)= VALUE TY_TAB3(FOR its1itab1在itab1中(field2 ='X')....

付费偷看设置
发送
2条回答
愤怒的猪头君
1楼 · 2020-08-22 17:58.采纳回答
  • 您能举一些带有ITAB1、2和3表值的示例吗? FIELD1在ITAB1和2中是否唯一?
  • " 填充表ITAB3映射LS_ITAB1和LS_ITAB2的FIELD1、2和3"是什么意思。"
  • 是不是要使用具有嵌套READ TABLE的LOOP AT,而是要通过具有表迭代的表理解来创建itab3?

我只是重用了演示报告'DEMO_TABLE_COMPRH_JOIN',并添加了条件条件FIELD2 ='X'。 那也为您解决了这个问题。 该演示提供了两种替代方法,但是请注意,如果ITAB2中缺少行,则选项1(导致ITAB3)会导致转储,而选项2(导致ITAB4)不会出现此问题,但是它将 不会显示ITAB2中缺少的来自ITAB1的记录,并且,如果键不唯一,则这些记录将相乘。 如果您想将两者结合使用,则必须在FOR参数中实现条件。

 CLASS演示DEFINITION。
   公共部分。
     CLASS-METHODS主要。
 ENDCLASS。

 类演示实施。
   方法主要。
     类型:
       从第1行开始,
         field1 TYPE i,
         field2 TYPE C LENGTH 1,
       第1行的结尾,
       第1行的itab1型标准表,带空键,
       从第2行开始,
         field1 TYPE i,
         field3 TYPE i,
       第2行的结尾,
       第2行的itab2型标准表,带空键,
       从第3行开始,
         field1 TYPE i,
         field2 TYPE C LENGTH 1,
         field3 TYPE i,
       第3行的结尾,
       第3行的itab3型标准表,带空键。

     DATA(out)= cl_demo_output => new()。

     DATA(itab1)=值itab1(
       (field1 = 1 field2 ='')
       (field1 = 3 field2 ='X')
       (field1 = 5 field2 ='')
       (field1 = 11 field2 ='')
       (field1 = 12 field2 ='X')
       (field1 = 16 field2 ='X')
       (field1 = 17 field2 ='')
       (field1 = 18 field2 ='X')
       (field1 = 21 field2 ='')
       (field1 = 31 field2 ='X'))。
     out-> write(itab1)。

     DATA(itab2)=值itab2(
       (field1 = 1 field3 = 1)
       (field1 = 3 field3 = 4)
       (field1 = 12 field3 = 44)
       (field1 = 16 field3 = 14)
       (field1 = 18 field3 = 24)
       (field1 = 31 field3 = 34))。
     out-> write(itab2)。

     DATA(itab3)=值itab3(
       for it in itab1其中(field2 ='X')
         (field1 = wa-field1
           field2 = wa-field2
           field3 = itab2 [field1 = wa-field1] -field3))。
     out-> write(itab3)。

     DATA(itab4)=值itab3(
       FOR wa1在itab1索引到idx其中(field2 ='X')
       在itab2的FOR wa2中(field1 = wa1-field1)
         (field1 = wa1-field1
           field2 = wa1-field2
           field3 = wa2-field3))。
     out-> write(itab4)。

     out-> display()。
   终结法。
 ENDCLASS。

 选择开始。
   demo => main()。
clever101
2楼-- · 2020-08-22 17:52
Raj Ananthakrishnan , 您说您更喜欢第二个选项(itab4),但显示了第一个选项(itab3)的编码。 如果尝试访问该行的字段时该行不存在,则该版本实际上已经引发了错误。抛出错误" ITAB_LINE_NOT_FOUND"" CX_SY_ITAB_LINE_NOT_FOUND":
 DATA(itab3)=值itab3(
               for it in itab1其中(field2 ='X')
               (field1 = wa-field1
                 field2 = wa-field2
                 field3 = itab2 [field1 = wa-field1] -field3))。  "引发错误
不引发错误:
 DATA(itab3)= VALUE itab3(
               for it in itab1其中(field2 ='X')
               (field1 = wa-field1
                 field2 = wa-field2
                 field3 =值#(itab2 [field1 = wa-field1] -field3 OPTIONAL)))。  "不会引发错误

一周热门 更多>