是否可以在END AT语句中对多个列进行分组

  • 本文关键字:END 语句 AT 是否 abap
  • 更新时间 :
  • 英文 :


我有一个内部表lt_stock,包含以下行:

WERKS
LGORT
MATNR
QUANTITY

我想对WERKS LGORT和MATNR进行分组,并添加数量。

我使用了两个循环:

LOOP AT lt_stock INTO ls_stock.
MOVE-CORRESPONDING ls_stock TO ls_stock_key.
CONCATENATE ls_stock-werks ls_stock-lgort ls_stock-matnr INTO ls_stock_key-key.
APPEND ls_stock_key TO lt_stock_key.
ENDLOOP.
LOOP AT lt_stock_key INTO ls_stock_key.
AT END OF key.
SUM.
APPEND ls_stock_key TO lt_stock_calculated.
ENDAT.
ENDLOOP.

是否可以使用单个LOOP进行此操作?(示例:AT END OF werks, lgort, matnr(

基于LOOP...GROUP BY:的简单示例

TYPES: BEGIN OF ty_stock,
werks TYPE werks_d,
lgort TYPE lgort_d,
matnr TYPE matnr,
qty  TYPE volum,
END OF ty_stock,
tty_stock TYPE STANDARD TABLE OF ty_stock WITH NON-UNIQUE KEY primary_key COMPONENTS werks lgort matnr.
DATA: lt_input TYPE tty_stock.
DATA(out) = cl_demo_output=>new( ).
lt_input = VALUE #( ( werks = 1000 lgort = 100 matnr = '10130101'  qty = 40 )
( werks = 1000 lgort = 120 matnr = '10140101'  qty = 150 )
( werks = 1000 lgort = 130 matnr = '10150101'  qty = 300 )
( werks = 1000 lgort = 130 matnr = '10150101'  qty = 100 )
( werks = 1000 lgort = 140 matnr = '10140101'  qty = 200 )
( werks = 1000 lgort = 140 matnr = '10140101'  qty = 180 )
( werks = 1000 lgort = 150 matnr = '10190101'  qty = 120 )
( werks = 1000 lgort = 130 matnr = '10190101'  qty = 200 )
( werks = 1000 lgort = 120 matnr = '10140101'  qty = 300 )
( werks = 1000 lgort = 200 matnr = '10170101'  qty = 500 )
).
DATA: qty TYPE volum.
LOOP AT lt_input ASSIGNING FIELD-SYMBOL(<fs_inp>) USING KEY primary_key GROUP BY ( werks = <fs_inp>-werks lgort = <fs_inp>-lgort matnr = <fs_inp>-matnr ) REFERENCE INTO DATA(stock).
LOOP AT GROUP stock ASSIGNING FIELD-SYMBOL(<fs_member>).
qty =  qty + <fs_member>-qty.
ENDLOOP.
out->write( stock->lgort && '/' && stock->matnr && ` qty:  ` && qty ).
CLEAR qty.
ENDLOOP.
out->display( ).

通过用APPEND替换out->write( ),您可以构建新的汇总内部表,而不是显示它

这实际上是可能的,但直接使用三个字段的标准方式(来自您的示例(:

AT END OF matnr.
SUM.
...
ENDAT.

先决条件是werks、lgort和matnr是内部表的三个第一字段,并且该表是SORTed。

如果您想使用一个单独的字段(如您的示例(,则新定义的字段(键(必须是内部表中的第一个字段(这是LOOP…AT…ENDAT操作的先决条件(,并且表也必须是SORTed。

最新更新