如何使用 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-vbtyp
是C
,那么wa_prcd-netwr
的值必须是负数。
在调试中我看到条件工作正常,但是当涉及到 SUM
时,它只是没有符号地执行,这意味着它不是求和 (-A + -B)
,而是 [=16] =]
有人可以帮我吗?谢谢。
当你乘以-1时,你只更新了局部变量wa_prcd
,而不是原来的table t_prcd
。 SUM
但是只考虑了 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.
我正在开发一个 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-vbtyp
是C
,那么wa_prcd-netwr
的值必须是负数。
在调试中我看到条件工作正常,但是当涉及到 SUM
时,它只是没有符号地执行,这意味着它不是求和 (-A + -B)
,而是 [=16] =]
有人可以帮我吗?谢谢。
当你乘以-1时,你只更新了局部变量wa_prcd
,而不是原来的table t_prcd
。 SUM
但是只考虑了 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.