新的ABAP语法代替了COLLECT

新的ABAP语法代替了COLLECT,abap,Abap,目前,我有这个编码,它工作得非常好: TYPES: BEGIN OF tty_ekpo, ebeln TYPE ebeln, ebelp TYPE ebelp, END OF tty_ekpo. DATA: lt_ekpo TYPE TABLE OF tty_ekpo, ls_ekpo LIKE LINE OF lt_ekpo. LOOP AT gt_

目前,我有这个编码,它工作得非常好:

      TYPES: BEGIN OF tty_ekpo,
               ebeln TYPE ebeln,
               ebelp TYPE ebelp,
             END OF tty_ekpo.
      DATA: lt_ekpo TYPE TABLE OF tty_ekpo,
            ls_ekpo LIKE LINE OF lt_ekpo.
      LOOP AT gt_lopdata ASSIGNING FIELD-SYMBOL(<fs_collect>).
        ls_ekpo-ebeln = <fs_collect>-ebeln.
        ls_ekpo-ebelp = <fs_collect>-ebelp.
        COLLECT ls_ekpo INTO lt_ekpo.
      ENDLOOP.
类型:从tty_ekpo开始,
ebeln型ebeln,
ebelp类型ebelp,
结束tty_ekpo。
数据:tty_ekpo的lt_ekpo类型表,
像lt_ekpo的ls_ekpo线。
循环gt_lopdata赋值字段-SYMBOL()。
ls_ekpo-ebeln=-ebeln。
ls_ekpo-ebelp=-ebelp。
将ls_ekpo收集到lt_ekpo。
结束循环。
我想对新语法也这样做,可能吗?
如果是,如何使用?

我使用这个:

lt_ekpo = VALUE #( FOR GROUPS ebelnebelp OF <ls_collect> IN gt_lopdata
                   GROUP BY ( ebeln = <ls_collect>-ebeln
                              ebelp = <ls_collect>-ebelp )
                   ASCENDING WITHOUT MEMBERS ( ebelnebelp ) ).
lt_ekpo=VALUE#(对于gt_数据中的组ebelnebelp
分组依据(ebeln=-ebeln)
ebelp=-ebelp)
无成员升序(ebelnebelp))。

好吧,我不同意Joszsef变量,因为没有成员的加法
会生成所有组键值,它不会自动对数值字段进行求和
收集
。您需要为此执行其他操作

以下是增强型Joszef变体,可满足您的需要并收集NETWR字段:

  TYPES: BEGIN OF ty_ekpo,
             ebeln TYPE ebeln,
             ebelp TYPE ebelp,
             netwr TYPE ekpo-netwr,
           END OF ty_ekpo,
           tty_ekpo TYPE STANDARD TABLE OF ty_ekpo WITH EMPTY KEY.
  DATA: it_ekpo TYPE SORTED TABLE OF ty_ekpo WITH UNIQUE KEY ebeln ebelp.

DATA(lt1_ekpo) = VALUE tty_ekpo(
                 FOR GROUPS <group_key> OF <g> IN it_ekpo GROUP BY ( ebeln = <g>-ebeln ebelp = <g>-ebelp )
                 LET coll_line = REDUCE #( INIT line TYPE ty_ekpo FOR <m> IN GROUP <group_key>
                                           NEXT line-ebeln = <m>-ebeln line-ebelp = <m>-ebelp line-netwr = line-netwr + <m>-netwr )
                                 IN ( coll_line ) ) .
类型:从ty_ekpo开始,
ebeln型ebeln,
ebelp类型ebelp,
网络类型ekpo网络,
蒂埃克波的尽头,
tty_ekpo类型带有空键的ty_ekpo标准表。
数据:具有唯一键ebeln ebelp的ty_ekpo的it_ekpo类型排序表。
数据(lt1_ekpo)=值tty_ekpo(
对于it_ekpo GROUP BY中的组(ebeln=-ebeln ebelp=-ebelp)
让coll_line=REDUCE#(IN组的初始线型为ty_ekpo
下一行ebeln=-ebeln行ebelp=-ebelp行netwr=行netwr+-netwr)
在(coll_线)中)。
另一种口味基于两种口味:

DATA(lt2_ekpo) = REDUCE tty_ekpo( INIT cline = VALUE tty_ekpo( )
                 FOR GROUPS <group_key> OF <g> IN it_ekpo GROUP BY ( ebeln = <g>-ebeln ebelp = <g>-ebelp )
                 NEXT cline = VALUE #( BASE cline ( ebeln = <group_key>-ebeln ebelp = <group_key>-ebelp
                                                    netwr = REDUCE netwr( INIT val TYPE netwr
                                                                          FOR wa IN
                                                                          FILTER #( it_ekpo WHERE ebeln = <group_key>-ebeln AND ebelp = <group_key>-ebelp )
                                                                          NEXT val = val + wa-netwr ) ) ) ).
DATA(lt2_ekpo)=减少tty_ekpo(初始值=tty_ekpo()
对于it_ekpo GROUP BY中的组(ebeln=-ebeln ebelp=-ebelp)
下一个cline=VALUE#(基本cline(ebeln=-ebeln-ebelp=-ebelp
netwr=减少netwr(初始值类型netwr
为华安
过滤器#(它是ekpo,其中ebeln=-ebeln和ebelp=-ebelp)
下一个val=val+wa netwr)))。

我看到,在您最初的帖子中,您也并没有进行总结,只是将关键字段收集到表中。如果这是您需要的,那么Joszef代码段就可以了。请注意,
COLLECT
的作用远不止于此。

要回答我自己的问题,结果如下:

TYPES: BEGIN OF ty_ekpo,
         ebeln TYPE ebeln,
         ebelp TYPE ebelp,
         netwr TYPE ekpo-netwr,
         matnr type ekpo-matnr,
       END OF ty_ekpo,
       tty_ekpo TYPE STANDARD TABLE OF ty_ekpo WITH EMPTY KEY.


DATA: it_ekpo TYPE SORTED TABLE OF ty_ekpo WITH UNIQUE KEY ebeln ebelp.
DATA(lt1_ekpo) = VALUE tty_ekpo(
             FOR GROUPS <group_key> OF <g> IN it_ekpo GROUP BY ( ebeln = <g>-ebeln ebelp = <g>-ebelp )
             LET coll_line = REDUCE #( INIT line TYPE ty_ekpo FOR <m> IN GROUP <group_key>
                                       NEXT line-ebeln = <m>-ebeln 
                                            line-ebelp = <m>-ebelp 
                                            line-netwr = line-netwr + <m>-netwr
                                            line-matnr = <m>-matnr )
                             IN ( coll_line ) ) .
类型:从ty_ekpo开始,
ebeln型ebeln,
ebelp类型ebelp,
网络类型ekpo网络,
材料类型ekpo材料,
蒂埃克波的尽头,
tty_ekpo类型带有空键的ty_ekpo标准表。
数据:具有唯一键ebeln ebelp的ty_ekpo的it_ekpo类型排序表。
数据(lt1_ekpo)=值tty_ekpo(
对于it_ekpo GROUP BY中的组(ebeln=-ebeln ebelp=-ebelp)
让coll_line=REDUCE#(IN组的初始线型为ty_ekpo
下一行ebeln=-ebeln
行ebelp=-ebelp
line netwr=line netwr+-netwr
行材料编号=-材料编号)
在(coll_线)中)。

ABAP文档:。我只需要对所有条目使用
ebeln
ebelp
。那么,如果此表中有一个MATNR字段,那么Joszef的变体是OK的,并且对于由ebeln和ebelp组合在一起的所有行都是一样的,那么如何在结果表中传输它呢?当前该字段仍然为空。@kdobrev对于第1个变量,您应该扩展
ty_ekpo
类型,并在下一个语句中从itab传输它,如下所示
NEXT line matnr=-matnr line ebeln=-ebeln line ebelp=