简单来说:collect在非数值字段相同的情况下,起到了 数值或者金额字段 汇总的作用。
如果非数据字段值相等,那么数值字段值相加,其实这种描述不准确。
非数值字段不同的情况下,效果和append相同执行插入内表操作,当非数值字段相同的时候,则相当于modify的效果,只不过是将数值字段进行汇总相加后更新。
要点一:COLLECT实际运用中loop的内表不需要排序,直接loop累加计算。
要点二:只有在 COLLECT 命令的所有非关键字段均为数字(类型 I、P 或F)时才可在表中使用该命令。numeric (type I, P, or F)
使用collect就要求所有的非key fields均是I,P或者F数据类型,另外要注意的是对于standard table 而言,如果不指定key fields那么它的key fields就那些非I, P,F数据类型的fields,sorted table 和 hash table均必须指定key fields。
注意:货币类型CURR实际类型是P,所以也可以使用collect累加
*对ALV 展示的数据进行合计整理
sort gt_out by matnr1 ktext aedat ascending.
loop at gt_out assigning <fs_out> . "保证只有主键和数量字段有值
gw_alv1-matnr1 = <fs_out>-matnr1.
gw_alv1-ktext = <fs_out>-ktext.
gw_alv1-kwmeng = <fs_out>-kwmeng.
append gw_alv1 to gt_alv1.
endloop.
loop at gt_alv1 into gw_alv1 . "collect 累加求和
collect gw_alv1 into gt_alv.
endloop.
loop at gt_alv into gw_alv. "将其余日期、描述等字段在赋给汇总表
read table gt_out into gw_out with key matnr1 = gw_alv-matnr1 ktext = gw_alv-ktext.
if sy-subrc = 0.
gw_alv-maktx = gw_out-maktx.
gw_alv-aufnr = gw_out-aufnr.
gw_alv-aedat = gw_out-aedat.
gw_alv-bukrs = gw_out-bukrs.
modify gt_alv from gw_alv.
endif.
endloop.