如何解决使用归约语法 ABAP 求和
我有这个内部表
与“总价”列中的列价格相同。 这是针对每个采购订单的。
我现在有这个代码
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 举报,一经查实,本站将立刻删除。