微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用归约语法 ABAP 求和

如何解决使用归约语法 ABAP 求和

我想用 REDUCE 语法解决一个问题。

我有这个内部表

Purchase Orders

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

与“总价”列中的列价格相同。 这是针对每个采购订单的。

我现在有这个代码

    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,然后再次循环以将值分配回表中。那会使代码复杂化,仅仅为了使用新的 Synax 可能不值得麻烦。我认为 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.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。