汇总内表数据:at end of方法和collect方法
生活随笔
收集整理的這篇文章主要介紹了
汇总内表数据:at end of方法和collect方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ABAP開發中經常會遇到需要匯總內表中數據的情況,下面介紹兩種方法:at end of和collect。
1、at end of方法
???在使用loop循環讀取已排序的內表時,可以訪問兩個自動生成的字段 CNT(<f>) 和SUM(<g>) ,系統在循環到不同值之前以及讀取內表最后一個紀錄后填充這兩個字段。
????CNT(<f>)?:如果?<f>?是非數字字段,并且系統是根據?<f>?給內表排序的,則?CNT(<f>) 包含了不同值<f>的序號。
???SUM(<g>)?:如果?<g>?是內表的數字字段,?SUM(<g>)?將包含?<g>?的值的合計。
注意:a、只能在給內表排序后才能訪問以上兩個字段,否則會產生運行時錯誤。
?????b、使用at end of,需要另外定義內表的工作區,否則直接使用表頭,得到的數據會變成一串*。
2、collect方法
???collect [<wa> into] <itab>.使用該語句,系統會檢查內表條目的標準關鍵字(所有非數字字段)是否相同,如果不同,collect語句的作用與append語句相似,將新行添至內表中;如果相同,collect語句不附加新航,但將工作區中的數字字段內容添加到現有條目中數字字段的內容中。使用該語句前,同樣需要先對內表進行排序。
以下面的例子來說明具體用法:
DATA:?BEGIN?OF?i_data?OCCURS?0,
???zlabst?LIKE?mard-labst,"匯總的良品庫存
??maktx??LIKE?makt-maktx,"物料描述
???matnr??LIKE?afpo-matnr,"物料號
??zpsmng?LIKE?afpo-psmng,"總的工單數量
??zwemng?LIKE?afpo-wemng,"總的已交貨數量
??zqty???LIKE?afpo-psmng,"總的欠單數量
END?OF?i_data.
DATA:?w_data?LIKE?TABLE?OF?i_data?WITH?HEADER?LINE.
DATA:?w_line?LIKE?LINE?OF?i_data.?
*根據物料號匯總工單總量/總入庫量/總欠工單數 ???SORT w_data BY matnr. *?AT?END?OF?方法:
????LOOP?AT?w_data?INTO?w_line.
??????AT?END?OF?matnr.
????????SUM.
????????i_data-matnr?=?w_line-matnr.
????????i_data-maktx?=?w_line-maktx.
????????i_data-zlabst?=?w_line-zlabst.
????????i_data-zpsmng?=?w_line-zpsmng.
????????i_data-zwemng?=?w_line-zwemng.
????????i_data-zqty?=?w_line-zqty.
????????APPEND?i_data.
????????CLEAR?i_data.
????????CLEAR?w_line.
??????ENDAT.
????ENDLOOP. *collect 方法 ??LOOP?AT?w_data.
????MOVE-CORRESPONDING?w_data?TO?i_data.
????COLLECT i_data.
????CLEAR?w_data. ????CLEAR?i_data.
??ENDLOOP.
????內表w_data中包含matnr/maktx/zlabst/zpsmng/zwemng/zqty六個字段,其中前兩個為非數字字段,后四個為數字字段,需要匯總的字段為最后三個。 ????at end of <f>方法,只匯總內表中f字段之后的字段,因此定義內表時要把不需要匯總的數字字段以及非數字字段(此處為zlabst/maktx)放在f字段(此處為matnr)前面,需要匯總的字段放在后面。 ????collect會把內表中所有數字字段匯總起來,所以此例中的zlabst字段也會被匯總,需要另行處理,另外還需注意內表標準關鍵字的問題。
與50位技術專家面對面20年技術見證,附贈技術全景圖
以下面的例子來說明具體用法:
DATA:?BEGIN?OF?i_data?OCCURS?0,
???zlabst?LIKE?mard-labst,"匯總的良品庫存
??maktx??LIKE?makt-maktx,"物料描述
???matnr??LIKE?afpo-matnr,"物料號
??zpsmng?LIKE?afpo-psmng,"總的工單數量
??zwemng?LIKE?afpo-wemng,"總的已交貨數量
??zqty???LIKE?afpo-psmng,"總的欠單數量
END?OF?i_data.
DATA:?w_data?LIKE?TABLE?OF?i_data?WITH?HEADER?LINE.
DATA:?w_line?LIKE?LINE?OF?i_data.?
*根據物料號匯總工單總量/總入庫量/總欠工單數 ???SORT w_data BY matnr. *?AT?END?OF?方法:
????LOOP?AT?w_data?INTO?w_line.
??????AT?END?OF?matnr.
????????SUM.
????????i_data-matnr?=?w_line-matnr.
????????i_data-maktx?=?w_line-maktx.
????????i_data-zlabst?=?w_line-zlabst.
????????i_data-zpsmng?=?w_line-zpsmng.
????????i_data-zwemng?=?w_line-zwemng.
????????i_data-zqty?=?w_line-zqty.
????????APPEND?i_data.
????????CLEAR?i_data.
????????CLEAR?w_line.
??????ENDAT.
????ENDLOOP. *collect 方法 ??LOOP?AT?w_data.
????MOVE-CORRESPONDING?w_data?TO?i_data.
????COLLECT i_data.
????CLEAR?w_data. ????CLEAR?i_data.
??ENDLOOP.
????內表w_data中包含matnr/maktx/zlabst/zpsmng/zwemng/zqty六個字段,其中前兩個為非數字字段,后四個為數字字段,需要匯總的字段為最后三個。 ????at end of <f>方法,只匯總內表中f字段之后的字段,因此定義內表時要把不需要匯總的數字字段以及非數字字段(此處為zlabst/maktx)放在f字段(此處為matnr)前面,需要匯總的字段放在后面。 ????collect會把內表中所有數字字段匯總起來,所以此例中的zlabst字段也會被匯總,需要另行處理,另外還需注意內表標準關鍵字的問題。
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的汇总内表数据:at end of方法和collect方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汽车需要镀晶吗?镀晶是起什么作用的?
- 下一篇: SAP SD销售收入科目确定VKOA