ABAP中Collect的用法

2021-07-14 04:34:10 字數 2018 閱讀 6659

簡單來說:collect在非數值字段相同的情況下,起到了數值字段彙總作用。語法:

collect w_table into i_table .
舉個簡單的栗子:

**如下:

report ztest no standard page heading.

types:begin of ty_test,

id(3) type c,

menge type i,

end of ty_test.

data:i_test type table of ty_test,

w_test type ty_test.

data:i_test2 type table of ty_test.

w_test-id

='001'

.w_test-menge

=10.

w_test-id

='001'

.w_test-menge

=70.

w_test-id

='002'

.w_test-menge

=20.

w_test-id

='002'

.w_test-menge

=50.

w_test-id

='002'

.w_test-menge

=80.

w_test-id

='003'

.w_test-menge

=30.

w_test-id

='003'

.w_test-menge

=90.

loop at i_test into w_test.

collect w_test into i_test2.

"關鍵一步。。。"

clear:w_test.

endloop.

write:/

'collect前的內容:'

.write:/1(12) '編號' , '數量'

.loop at i_test into w_test.

write:/ w_test-id, ' ',w_test-menge

. clear:w_test.

endloop.

write:/

.write:/

'collect後的結果:'

.write:/1(12) '編號' , '數量'

.loop at i_test2 into w_test.

write:/ w_test-id , ' ',w_test-menge

. clear:w_test.

endloop.

根據上面的**,不難看出,我們的基礎資料內錶i_test經過collect之後,提交到i_test2中,完成了數值字段的彙總。

collect一般在loop中使用,但是不同於之前博文提到的at end of,at new的用法,使用collect不需要對內表排序,對內表也沒有其他限制條件,使用起來非常方便。

這裡為了方便,我們的內錶結構只設了乙個非數值字段和乙個數值字段,同時兩個內錶結構完全一致,但是也能看出效果,經過彙總後,非數值型字段值相同的幾行彙總成了一行,數值字段完成累計。

當然,在實際程式開發過程中,可以更靈活多變的使用collect,這樣在統計數值字段時就可以節省許多**量,甚至可以避免loop巢狀之類的耗費時間的寫法。希望大家能活學活用,將簡單的乙個小語法的作用發揮到極致。

1.

2.modify i_table from w_table.

3.collect w_table into i_table.

4.insert w_table into i_table index

1.

ABAP中COLLECT的用法

要填充內錶 既可逐行 新增資料,也可複製另 乙個 的 內容。要計算數 字字段之和 或要確保內 表中沒有出 現重複條目 請使用 collect 語句,它根 據標準關鍵 字處理行。要在內表 現有行之前 插入新行,請使用 insert 語句。要將內錶 行插入另一 個內錶中,請使用 insert 語句的變式...

abap 中內表處理collect的用法

1說明及 collect是用於內錶去掉重複的行,然後還有數字求和.loop at lt mseg.itab bukrs lt mseg bukrs.itab werks lt mseg werks.itab lifnr lt mseg lifnr.itab matnr lt mseg matnr.i...

Stream中collect方法在業務中的使用

背景 在實際業務中,可能需要把資料庫查詢出來資料的某乙個字段 例如 id等唯一值 新增到集合中 data class person 先查詢資料庫記錄集合 listpersonlist db.querybycond 需要將person中的id全部儲存到新的list,也就是要實現如下功能 把id新增到l...