AT NEW 和AT END OF的用法
SAP ABAP小結
=========================================================== 作者: qiujun(http://qiujun.itpub.net)
出處:http://qiujun.itpub.net/post/24006/298614
---------------------------------------------------------------
1 使用binary search之前,需要sort,並且sort by ascending(系統預設的順序也是ascending)。而且read table with key的順序同sort的順序相同,否則出錯,常會找不到紀錄。Delete adjacent duplicates之前一定要sort。
2 關於內部表示和外部表示:呼叫BAPI和Update DB的時候,一定要使用內部形式(物料號有前導零的時候被認為是內部形式;單位一般也有內部形式外部形式之分)。在se11瀏覽資料的時候,顯示資料的畫面是使用內部形式,當detail overview的時候,則是外部形式。
3 使用at new, at first, at last, at end of的時候要注意:loop的時候不能加條件;at和endat之間不能使用loop into的working area。手動實現at new, at end of的時候,需要注意,容易出錯,尤其是在at end of的時候。
4 一般情況下,更新資料庫需要commit,但debug會自動commit,程式結束也會自動commit。
5 對於選擇介面上的select-options,clear s_lifnr[]是指clear body part,clear s_lifnr是指clear header part。一般不直接編輯介面上的select-options。
---------------------------------------------------------------
come from : http://blog.csdn.net/CompassButton/archive/2007/03/08/1524491.aspx
---------------------------------------------------------------
1、AT New事件觸發說明
如 AT New f.
f 是內表的一個欄位,當f欄位或者f欄位左邊的欄位內容發生變化是該事件後面的語句都會執行。
TYPES: BEGIN OF COMPANIES_TYPE,
NAME(30),
PRODUCT(20),
SALES TYPE I,
END OF COMPANIES_TYPE.
DATA: COMPANIES TYPE STANDARD TABLE OF COMPANIES_TYPE WITH
NON-UNIQUE DEFAULT KEY INITIAL SIZE 20,
WA_COMPANIES TYPE COMPANIES_TYPE.
...
LOOP AT COMPANIES INTO WA_COMPANIES.
AT NEW PRODUCT.
NEW-PAGE.
WRITE / WA_COMPANIES-NAME WA_COMPANIES-PRODUCT.
ENDAT.
WRITE: / WA_COMPANIES-PRODUCT, WA_COMPANIES-SALES.
AT END OF NAME.
SUM.
WRITE: / WA_COMPANIES-NAME, WA_COMPANIES-SALES.
ENDAT.
ENDLOOP.
這個樣例當name變化時,AT new事件也會執行。
2、AT New 發生時工作區的欄位的值
All character type fields (on the right) are filled with "*" after the current control level key.
All other fields (on the right) are set to their initial values after the current control level key.
AT NEW 和AT END OF的用法
http://www.sapclub.org/blog/nyf425/archive/2008/01/07/67689.html
-------------------------------------------------------------------
使用 AT NEW f. 和 .AT END OF f 時需要注意:
1,f 必須是內表的第一個欄位。
2,內表中f 之後的欄位的值都會變成 *。
例:
REPORT Z_TEST.
DATA: BEGIN OF TH_LIFNR,
LIFNR TYPE LFA1-LIFNR,
ITEM TYPE C,
END OF TH_LIFNR.
DATA: TD_LIFNR LIKE TABLE OF TH_LIFNR.
SELECT LIFNR FROM EKKO
INTO TABLE TD_LIFNR
WHERE EBELN > 4500006374
AND EBELN < 4500006390.
SORT TD_LIFNR ASCENDING BY LIFNR.
LOOP AT TD_LIFNR INTO TH_LIFNR.
AT NEW LIFNR.
WRITE:/10 TH_LIFNR-LIFNR.
WRITE:/ 'The next is new lifnr.'.
ENDAT.
ENDLOOP.
----------------------------------------------------------------
在寫abap 的過程中,可能需要統計,求和等那麼如何實現呢?其實在loop ... endloop 中間,有個AT
FIRST 內 表的第一行
LAST 內 表的最後一 行
NEW
END Of
AT - ENDAT 塊中的語句 塊使用這些 行條件代表 預定義的控 制結構。用 戶可以使用 它們處理內 表中的控制 斷點,而不 必使用 程式設計分支和迴圈 中所述的控 制語句自己 程式設計。
在 AT - ENDAT 語句塊中, 工作區域沒 有用當前表 格行進行填 充。初始化 所有不是標 準關鍵字部 件的欄位( 參見
標識表格行 )。對於行 條件 FIRST 和 LAST, 系統用星號 (*) 改寫所有標 準關鍵欄位 。對於行條 件 NEW
DATA: BEGIN OF LINE,
COL1 TYPE C,
COL2 TYPE I,
COL3 TYPE I,
END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
LINE-COL1 = A.
DO 3 TIMES.
LINE-COL2 = SY-INDEX.
LINE-COL3 = SY-INDEX ** 2.
APPEND LINE TO ITAB.
ENDDO.
LINE-COL1 = B.
DO 3 TIMES.
LINE-COL2 = 2 * SY-INDEX.
LINE-COL3 = ( 2 * SY-INDEX ) ** 2.
APPEND LINE TO ITAB.
ENDDO.
LOOP AT ITAB INTO LINE.
WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
AT END OF COL1.
SUM."按Col1 求和.
ULINE.
WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
SKIP.
ENDAT.
AT LAST.
SUM."總求和.
ULINE.
WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
ENDAT.
ENDLOOP.
其輸出為:
A 1 1
A 2 4
A 3 9
________________________________
A 6 14
B 2 4
B 4 16
B 6 36
________________________________
B 12 56
________________________________
* 18 70
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/132884/viewspace-1004187/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JSON.parse()與JSON.stringify()的用法,以及eval()和new FunctionJSONFunction
- C++ new用法的個人見解C++
- JavaScript中的new map()和new set()使用詳細(new map()和new set()的區別)JavaScript
- SQL中的case when then else end用法 【詳細】轉載SQL
- PHP new self()和new static()的區別PHP
- c#—OpenFileDialog(開啟檔案對話方塊)和new關鍵字的用法C#
- 理解new和實現一個new
- PHP 的 new static 和 new self 具體有什麼?PHP
- end-to-end delay proof
- node中的response.write()和response.end()
- Golang make和new的區別Golang
- 認識 Express 的 res.send() 和 res.end()Express
- for (auto it = _list.begin(); it != _list.end(); )關於在for迴圈中使用std::vector中的begin和end
- new 和 malloc 的區別 及使用
- 如何理解端到端(end-to-end)?
- 如何理解深度學習領域中的端到端 (end to end)深度學習
- HttpWebRequest和WebClient的用法HTTPWebclient
- @Async的用法和示例
- Python __new__ 和 __init__ 的區別Python
- <七>深入理解new和delete的原理delete
- [轉帖]Spring事務傳播屬性之REQUIRES_NEW用法SpringUI
- TC - front end
- Laravel 模型的 scope 普通用法和全域性用法Laravel模型
- Object.create(..)和new(..)的內部實現Object
- javascript的call apply和new原理剖析 [手寫]JavaScriptAPP
- Java 中的 clone( ) 和 new,哪個效率更高?Java
- python中__init__ 和__new__的對比Python
- ()和{}初始化的用法
- react useMemo 和 useCallBack 的用法React
- 面向1-類和物件-方法、new的定義和使用物件
- 《REBEL Relation Extraction By End-to-end Language generation》閱讀筆記筆記
- 論文閱讀:End to End Chinese Lexical Fusion Recognition with Sememe Knowledge
- 一問搞懂python的__init__和__new__方法Python
- 深入理解 Go 中的 new() 和 make() 函式Go函式
- 細說new和malloc的十大區別
- JS中的!=、== 、!==、=== 的用法和區別JS
- CSS裡的BFC和IFC的用法CSS
- oracle中的CURRVAL和NEXTVAL用法Oracle
- Promise && async/await的理解和用法PromiseAI