ABAP-7.4 LOOP和READ的新语法

2020-08-22 17:41发布

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

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


专家们,

您能否为循环和读取共享ABAP 7.4新语法?

我在for循环的迭代中使用过。 但是如何在循环中包含read?

预先感谢

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

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


专家们,

您能否为循环和读取共享ABAP 7.4新语法?

我在for循环的迭代中使用过。 但是如何在循环中包含read?

预先感谢

付费偷看设置
发送
7条回答
骆驼绵羊
1楼 · 2020-08-22 18:01.采纳回答

您提到的错误是因为您的代码完全没有意义。 让我解释一下您应该指出的内容。

 gt_fin = VALUE tt_fin(
          在lt_join中输入lw_j
          (要添加的行,必须类似于tt_fin的行类型)。)

可能,您需要这样的内容:

 TYPES:Bygin of ty_fin,
           sernr TYPE字符串,
           matnr TYPE字符串,
         结束于ty_fin,
         带有空键的ty_fin的tt_fin类型标准表。
 DATA(lt_join)=值tt_fin(())。
 DATA(lt_ser)= VALUE tt_fin()。
 DATA(gt_fin)=值tt_fin(
          在lt_join中输入lw_j
          (matnr = VALUE#(lt_ser [sernr = lw_j-sernr] -matnr可选)
            sernr = lw_j-sernr
          ))。
 

您必须为lt_ser的行定义一个独立的类型(我假设它的名称为ty_ser)。 如果lt_ser被声明为内联,则可以在lt_ser内联声明之后执行以下操作:

 TYPES ty_ser喜欢lt_ser的行。
Nir深蓝
2楼-- · 2020-08-22 17:55

非常感谢Sandra,感谢您耐心等待 我。

只是一个疑问。

这里我定义了tt_Fin。 但是lt_Ser是内联的,因此具有不同的类型。 仅当两者属于同一类型时,此方法才有效吗?

 DATA(gt_fin)=值tt_fin(FOR lw_j IN lt_join
          (matnr = VALUE#(lt_ser [sernr = lw_j-sernr] -matnr可选)
            sernr = lw_j-sernr))。
Aaron 3364
3楼-- · 2020-08-22 17:54

您可以像下面那样尝试使用新的构造函数表达式(FLTER和CORRESPONDING)

类型进行检查:
       从第1行开始,
         field1 TYPE i,
         field2 TYPE C LENGTH 1,
       第1行的结尾,
       tt_line1第1行的类型排序表,具有非唯一键field1,
       从第2行开始,
         field1 TYPE i,
         field3 TYPE i,
       第2行的结尾,
       tt_line2第2行的类型排序表,具有非唯一键字段1,
       从第3行开始,
         field1 TYPE i,
         field2 TYPE C LENGTH 1,
         field3 TYPE i,
       第3行的结尾,
       tt_line3带有DEFAULT KEY的line3的标准类型表。


     DATA(itab1)= VALUE tt_line1(
       (field1 = 1 field2 ='')
       (field1 = 3 field2 ='X')
       (field1 = 12 field2 ='4')
       (field1 = 11 field2 ='X'))。


     DATA(itab2)= VALUE tt_line2(
       (field1 = 1 field3 = 1)
       (field1 = 1 field3 = 3)
       (field1 = 3 field3 = 4))。


     DATA(itab3)=对应的tt_line3(过滤器tt_line1(itab1除了itab2外
                         其中field1 = field1))。
 

您正在使用的内部表应该是FILTER中排序表的类型。

-Mahesh

一只江湖小虾
4楼-- · 2020-08-22 17:57

感谢sandra .. lt_Ser是否应始终为同一类型?

SAP小黑
5楼-- · 2020-08-22 17:55

如果您需要加入连接 假设有一个匹配的行(否则来自tabl2的值是初始值),则通过table1将表从表1循环出并与table2联接,您可以按以下方式进行操作:

 DATA(itab3)= VALUE ty_itab(
       在itab1中
         (键= wa键
           valx = wa-valx
           valy = VALUE#(itab2 [key = wa-key] -valy OPTIONAL))))。
Cikesha
6楼-- · 2020-08-22 18:14

DATA(gt_fin)= VALUE tt_fin(FOR lw_j IN lt_join

(matnr = VALUE#(lt_ser [sernr = lw_j-sernr] -matnr可选)
            sernr = lw_j-sernr))。

 令我困惑的是,如果您能告诉我这是怎么回事,那将非常有帮助。 这样我就可以在其他情况下自己使用它。 谢谢
haha101010
7楼-- · 2020-08-22 18:00

您应该自己尝试。 您会学得更快。

现在,关于:

 VALUE#(lt_ser [sernr = lw_j-sernr] -matnr OPTIONAL)

与 :

 lt_ser [sernr = lw_j-sernr] -matnr 

,除了不会发生CX_SY_ITAB_LINE_NOT_FOUND之外,它被替换为初始值。

如迈克尔所说, 查看文档:

https://help.sap。 com/doc/abapdocu_740_index_htm/7.40/zh-CN/index.html

尤其是表表达式:https://help.sap.com/doc/abapdocu_753_index_htm/7.53/zh-CN/index.htm?file=abentable_expressions.htm

一周热门 更多>