繁体   English   中英

使用归约语法 ABAP 求和

[英]Sum Using Reduce Syntax ABAP

我遇到了一个我想用 REDUCE 语法解决的问题。

我有这个这个内部表订单

我需要对“数量”列的值求和并更新名为“总数量”的列

与“总价”列中的列价格相同。 这适用于每个采购订单。

我现在有这个代码

    Loop at it_numpos Into Data(ls_numpos).
     lv_valort = lv_valort + ls_numpos-netpr. " Purchase Order Total Price 
     lv_cantt  = lv_cantt  + ls_numpos-menge. " Purchase Total Quantity
    At end of ebeln.
     ls_numpos-zmenge3 = lv_cantt.
     ls_numpos-znetpr6 = lv_valort.
     Modify it_numpos From ls_numpos Transporting zmenge3 znetpr6 Where ebeln = ls_numpos-ebeln.
     Clear:  lv_cantt, ls_numpos, lv_valort.
    Endat.
EndLoop.

可以将此代码转换为abap新语法吗?

我不认为REDUCE是适合这里工作的工具,因为它旨在将表的值减少为一个值。 在您的情况下,没有一个值,因为您正在为每个销售订单计算新值。 因此,您需要以某种方式循环遍历将项目分组在一起的表,然后使用 reduce,然后再次循环以将值分配回表中。 那宁愿使代码复杂化,而且仅仅为了使用新的语法可能不值得麻烦。 我认为LOOP AT在这里是更好的选择,尽管我会使用LOOP AT... GROUP BY然后使用两个LOOP AT GROUP循环,这使得整个处理过程非常易读:

LOOP AT order_items ASSIGNING FIELD-SYMBOL(<order_item>) GROUP BY <order_item>-id INTO DATA(order).
  DATA(total_price) = 0.

  LOOP AT GROUP order ASSIGNING <order_item>.
    total_price = total_price + <order_item>-price.
  ENDLOOP.

  LOOP AT GROUP order ASSIGNING <order_item>.
    <order_item>-total_price = total_price.
  ENDLOOP.
ENDLOOP.

但是,这是否比组级处理更好取决于您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM