Abap 按客户组、开票单和物料组对内部表进行分组2
嗨,专家们。我只想问一下你在这个问题背后的逻辑,如何在ABAP中做到这一点。我刚刚在ABAP,我需要这作为我的报告的要求。 例如,我有一个包含ff结构的内部表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
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 ) ) ).