如何使用 AT END OF 和 SUM 聚合负值?

How do I aggregate negative values with AT END OF and SUM?

我正在开发一个 ABAP 程序,我必须在其中对特定字段进行验证,如下面的代码:

  SORT t_prcd BY knumh kschl.
  LOOP AT t_prcd INTO wa_prcd WHERE knumh = wa_wcocoh-knumh AND kschl = wa_wcocoh-kschl.

    IF wa_prcd-vbtyp = 'C'.

      wa_prcd-netwr = wa_prcd-netwr * ( -1 ).

      wa_prcd-kwmeng = wa_prcd-kwmeng * ( -1 ).

    ENDIF.

    AT END OF knumh.
      SUM. 
      " SUBTRACT wa_prcd-netwr FROM wa_prcd-netwr.
      MOVE EXACT wa_prcd-netwr TO wa_talv-val_vendido.
      MOVE wa_prcd-kwmeng TO wa_talv-quant_vendido.
    ENDAT.
  ENDLOOP.

我需要做的是:如果wa_prcd-vbtypC,那么wa_prcd-netwr的值必须是负数。

在调试中我看到条件工作正常,但是当涉及到 SUM 时,它只是没有符号地执行,这意味着它不是求和 (-A + -B),而是 [=16] =]

有人可以帮我吗?谢谢。

当你乘以-1时,你只更新了局部变量wa_prcd,而不是原来的table t_prcdSUM 但是只考虑了 t_prcd.

中的内容

因此,修复方法只是将更新与求和步骤分开:

SORT t_prcd BY knumh kschl.

" use a reference or field-symbol to update the table in-place
LOOP AT t_prcd REFERENCE INTO DATA(ref_prcd)
    WHERE knumh = wa_wcocoh-knumh AND kschl = wa_wcocoh-kschl
      AND vbtyp = 'C'.
  ref_prcd->netwr = ref_prcd->netwr * ( -1 ).
  ref_prcd->kwmeng = ref_prcd->kwmeng * ( -1 ).
ENDLOOP.

LOOP AT t_prcd INTO DATA(wa_prcd)
    WHERE knumh = wa_wcocoh-knumh AND kschl = wa_wcocoh-kschl.
  AT END OF knumh.
    SUM.
    MOVE EXACT wa_prcd-netwr TO wa_talv-val_vendido.
    MOVE wa_prcd-kwmeng TO wa_talv-quant_vendido.
  ENDAT.
ENDLOOP.