Abap 按客户组、开票单和物料组对内部表进行分组2

Abap 按客户组、开票单和物料组对内部表进行分组2,abap,internal-tables,Abap,Internal Tables,​嗨,专家们。我只想问一下你在这个问题背后的逻辑,如何在ABAP中做到这一点。我刚刚在ABAP,我需要这作为我的报告的要求。 ​例如,我有一个包含ff结构的内部表 SO Customer Materialno Materialgroup2 Liters 001 James 1 GroupA 5 001 James 2 GroupA 10 001 James 3

​嗨,专家们。我只想问一下你在这个问题背后的逻辑,如何在ABAP中做到这一点。我刚刚在ABAP,我需要这作为我的报告的要求。 ​例如,我有一个包含ff结构的内部表

 SO   Customer  Materialno  Materialgroup2  Liters
 001  James     1           GroupA          5
 001  James     2           GroupA          10
 001  James     3           GroupB          20
 002  John      2           GroupA          10
 002  John      3           GroupA          10
 002  John      4           GroupB          20
 002  John      5           GroupB          5
​ 我需要按客户、账单单据和他们的物料组2添加它。​现在,内部表的最终输出应该是这样的

SO   Customer  MaterialGroup2  Liters
001  James     GroupA          15
001  James     GroupB          20
002  John      GroupA          20
002  John      GroupB          25

报告ztest。
类型:
开始ts_输入,
所以输入char3,
客户类型char5,
材料无i型,
材料组类型char6,
第一类,
ts_输入结束,
开始ts_输出,
所以输入char3,
客户类型char5,
材料组类型char6,
第一类,
ts_输出结束。
数据:
lv_升i型,
gt_输入类型ts_输入标准表,
gs_输入类型ts_输入,
gt_温度类型ts_输出标准表,
gs_温度类型ts_输出,
gt_输出类型ts_输出的标准表,
gs_输出类型ts_输出。
开始选择。
gs_输入-so='001'。
gs_输入-客户='james'。
gs_输入材料编号=1。
gs_input-materialgroup='GroupA'。
gs_输入升=5。
将gs_输入附加到gt_输入。
gs_输入-so='001'。
gs U input-customer='james'。
gs_输入材料编号=2。
gs_input-materialgroup='GroupA'。
gs_输入升=10。
将gs_输入附加到gt_输入。
gs_输入-so='001'。
gs_输入-客户='james'。
gs_输入材料编号=3。
gs_input-materialgroup='GroupB'。
gs_输入升=20。
将gs_输入附加到gt_输入。
gs_输入-so='002'。
gs_输入-客户='john'。
gs_输入材料编号=2。
gs_input-materialgroup='GroupA'。
gs_输入升=10。
将gs_输入附加到gt_输入。
gs_输入-so='002'。
gs_输入-客户='john'。
gs_输入材料编号=3。
gs_input-materialgroup='GroupA'。
gs_输入升=10。
将gs_输入附加到gt_输入。
gs_输入-so='002'。
gs_输入-客户='john'。
gs_输入材料编号=4。
gs_input-materialgroup='GroupB'。
gs_输入升=20。
将gs_输入附加到gt_输入。
gs_输入-so='002'。
gs_输入-客户='john'。
gs_输入材料编号=5。
gs_input-materialgroup='GroupB'。
gs_输入升=5。
将gs_输入附加到gt_输入。
“移至温度表,跳过材料编号
在gt_输入处循环到gs_输入。
gs_温度-so=gs_输入-so。
gs_临时客户=gs_输入客户。
gs_临时材料组=gs_输入材料组。
gs_温度升=gs_输入升。
将gs_temp附加到gt_temp。
结束循环。
按so客户物料组对GTU温度进行升序排序。
将gt_温度循环至gs_温度。
在新材料集团。
净升。
恩达。
lv_升=lv_升+gs_温度升。
在材料组的末尾。
gs_输出-so=gs_温度-so。
gs_输出客户=gs_临时客户。
gs_输出材料组=gs_温度材料组。
gs_输出升=lv_升。
将gs_输出附加到gt_输出。
恩达。
结束循环。
报告ztest。
类型:
开始ts_输入,
所以输入char3,
客户类型char5,
材料无i型,
材料组类型char6,
第一类,
ts_输入结束,
开始ts_输出,
所以输入char3,
客户类型char5,
材料组类型char6,
第一类,
ts_输出结束。
数据:
lv_升i型,
gt_输入类型ts_输入标准表,
gs_输入类型ts_输入,
gt_温度类型ts_输出标准表,
gs_温度类型ts_输出,
gt_输出类型ts_输出的标准表,
gs_输出类型ts_输出。
开始选择。
gs_输入-so='001'。
gs_输入-客户='james'。
gs_输入材料编号=1。
gs_input-materialgroup='GroupA'。
gs_输入升=5。
将gs_输入附加到gt_输入。
gs_输入-so='001'。
gs_输入-客户='james'。
gs_输入材料编号=2。
gs_input-materialgroup='GroupA'。
gs_输入升=10。
将gs_输入附加到gt_输入。
gs_输入-so='001'。
gs_输入-客户='james'。
gs_输入材料编号=3。
gs_input-materialgroup='GroupB'。
gs_输入升=20。
将gs_输入附加到gt_输入。
gs_输入-so='002'。
gs_输入-客户='john'。
gs_输入材料编号=2。
gs_input-materialgroup='GroupA'。
gs_输入升=10。
将gs_输入附加到gt_输入。
gs_输入-so='002'。
gs_输入-客户='john'。
gs_输入材料编号=3。
gs_input-materialgroup='GroupA'。
gs_输入升=10。
将gs_输入附加到gt_输入。
gs_输入-so='002'。
gs_输入-客户='john'。
gs_输入材料编号=4。
gs_input-materialgroup='GroupB'。
gs_输入升=20。
将gs_输入附加到gt_输入。
gs_输入-so='002'。
gs_输入-客户='john'。
gs_输入材料编号=5。
gs_input-materialgroup='GroupB'。
gs_输入升=5。
将gs_输入附加到gt_输入。
“转到临时工。表,跳过材料编号
在gt_输入处循环到gs_输入。
gs_温度-so=gs_输入-so。
gs_临时客户=gs_输入客户。
gs_临时材料组=gs_输入材料组。
gs_温度升=gs_输入升。
将gs_temp附加到gt_temp。
结束循环。
按so客户物料组对GTU温度进行升序排序。
将gt_温度循环至gs_温度。
在新材料集团。
净升。
恩达。
lv_升=lv_升+gs_温度升。
在材料组的末尾。
gs_输出-so=gs_温度-so。
gs_输出客户=gs_临时客户。
gs_输出材料组=gs_温度材料组。
gs_输出升
rt_result = VALUE #( FOR GROUPS group OF ls_source IN it_source
                     GROUP BY ( so             = ls_source-so
                                customer       = ls_source-customer
                                material_group = ls_source-material_group )
                     ( so             = group-so
                       customer       = group-customer
                       material_group = group-material_group
                       liters         = REDUCE #( INIT lv_liters = 0
                                                  FOR ls_member IN GROUP group
                                                  NEXT lv_liters = lv_liters + ls_member-liters ) ) ).