*&---------------------------------------------------------------------*
*& Report ZLXF22
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zlxf22.
TYPES:BEGIN OF ty_test,
id(3) TYPE c,
id2(3) TYPE c,
menge TYPE i,
END OF ty_test.
DATA:i_test TYPE TABLE OF ty_test,
w_test TYPE ty_test,
w_test2 TYPE ty_test.
DATA:i_test2 TYPE TABLE OF ty_test.
w_test-id = '001'.
w_test-id2 = 'XX'.
w_test-menge = 10.
APPEND w_test TO i_test.
CLEAR w_test .
w_test-id = '001'.
w_test-menge = 70.
APPEND w_test TO i_test.
CLEAR w_test .
w_test-id = '002'.
w_test-menge = 20.
APPEND w_test TO i_test.
CLEAR w_test .
w_test-id = '002'.
w_test-menge = 50.
APPEND w_test TO i_test.
CLEAR w_test .
w_test-id = '002'.
w_test-menge = 80.
APPEND w_test TO i_test.
CLEAR w_test .
w_test-id = '003'.
w_test-menge = 30.
APPEND w_test TO i_test.
CLEAR w_test .
w_test-id = '003'.
w_test-menge = 90.
APPEND w_test TO i_test.
CLEAR w_test .
WRITE:/ 'Collect前的内容:' .
WRITE:/1(12) '编号' , '数量'.
LOOP AT i_test INTO w_test.
WRITE:/ w_test-id , ' ', w_test-id2 , ' ', w_test-menge.
CLEAR:w_test.
ENDLOOP.
WRITE:/ .
WRITE:/ 'Collect后的结果:' .
WRITE:/1(12) '编号' , '数量'.
LOOP AT i_test INTO w_test.
* COLLECT w_test INTO i_test2."关键一步。。。"
w_test2-id = w_test-id.
w_test2-menge = w_test-menge .
"虽然结构中有,但是是没有赋值,仍然不会以此条件分类汇总
COLLECT w_test2 INTO i_test2."关键一步。。。"
CLEAR:w_test,w_test2 .
ENDLOOP.
LOOP AT i_test2 INTO w_test.
WRITE:/ w_test-id , ' ',w_test-menge.
CLEAR:w_test.
ENDLOOP.
WRITE:/ 'Collect后的结果2:' .
WRITE:/1(12) '编号' , '数量'.
LOOP AT i_test INTO w_test.
COLLECT w_test INTO i_test2."关键一步。。。"
CLEAR:w_test.
EXIT . "运行了一次退出循环
ENDLOOP.
LOOP AT i_test2 INTO w_test.
WRITE:/ w_test-id , ' ',w_test-menge.
CLEAR:w_test.
ENDLOOP.
WRITE:/ 'Collect后的结果3:' .
WRITE:/1(12) '编号' , '数量'.
DATA: lv_i TYPE i .
lv_i = 0 ..
LOOP AT i_test INTO w_test.
lv_i = lv_i + 1 .
COLLECT w_test INTO i_test2."关键一步。。。"
CLEAR:w_test.
IF lv_i EQ 2.
EXIT . "运行了二次退出循环
ENDIF .
ENDLOOP.
LOOP AT i_test2 INTO w_test.
WRITE:/ w_test-id , ' ',w_test-menge.
CLEAR:w_test.
ENDLOOP.
结果1中虽然汇总前有001-空白和001-XX ,应该分两行的。但是在LOOP过程中没赋ID2没赋值,所以也显示一行
结果2中 有EXIT 所以只COLLECT 了一次,但恰好又是带XX的,所以与原来结果不汇总。
结果3中 有EXIT 所以只COLLECT 了二次,按正常汇总。
总之 汇总结果跟COLLECT 后面那个结构中是否有值 有关。
另:非字符类都是过滤条件,数值类都要汇总,如果过滤的条件是值需转换成字符。