【ABAP学习笔记】
ABAP學習筆記
記錄實習培訓的學習記錄
文章目錄
- ABAP學習筆記
- 前言
- 一、ABAP是什么?
- 二、使用步驟
- 1.先建立鏈接:
- 2.輸入應用服務器 IP 地址,實例編號,系統(tǒng)標識等信息
- 正文
- day1
- 1.常用的指令功能鍵
- 2.數(shù)據(jù)類型
- 3.數(shù)據(jù)對象
- 4.數(shù)據(jù)輸出
- 5.數(shù)據(jù)處理
- 6.數(shù)據(jù)處理(字符串)
- 7.流程控制
- day2
- 1.內(nèi)表定義
- 2.內(nèi)表賦值
- day3
- 1.SQL
- 2.OpenSQL
- 3.NativeSQL
- day4
- 1.Alv
- 2.Smartforms
前言
一、ABAP是什么?
SAP是一套ERP系統(tǒng),SAP( Systems Applications and Products in Data Processing) 是一種企業(yè)管理軟件,SAP使用的程序語言就是用ABAP,ABAP是種先進經(jīng)營應用編程語言(Advanced Business Application ProgrammingLanguage)。ABAP/4是SAP自己的第四代編程語言。從4.0版本開始,它簡稱為ABAP;是經(jīng)技術改進的編程語言,主要添加了新特性以成為面向對象的語言。ABAP/4支持封裝性和繼承性,封裝性是面向對象的基礎,而繼承性是建立在封裝性基礎上的重要特性。它適合生成報表,支持對數(shù)據(jù)庫的操作,如:Sqlserver,Oracle,DB2等主流數(shù)據(jù)庫系統(tǒng)。
二、使用步驟
1.先建立鏈接:
2.輸入應用服務器 IP 地址,實例編號,系統(tǒng)標識等信息
正文
day1
1.常用的指令功能鍵
常用的T-Code:
se21——開發(fā)類的建立
se80——ABAP工作臺
se38——程序建立過程
se11——dictionary 可以查看到Tcode的底表和相關自建表
se37——function 封裝相關的功能信息,達到代碼功能的復用;RFC接口可 以和第三方平臺進行數(shù)據(jù)交互
請求傳送 se01 se09 se10
重要編輯功能鍵
在SE38 屏右下角,點“optins ”圖標,然后選“代碼完成”,在右側
窗最下面一行選中“建議文本中的非關鍵字”,一路確認。
快速調整字體大小 Ctrl + 鼠標滾輪
剪切一行 Ctrl + Shift + X
刪除一行 Ctrl + Shift + L
復制一行 Ctrl + Shift + T
轉成小寫 Ctrl + L
轉成大寫 Ctrl + U
大小寫相互轉換 Ctrl + K
取消 Ctrl + Z
重做 Ctrl + Y
原地復制一行 Ctrl + D
2.數(shù)據(jù)類型
常用預定義數(shù)據(jù)類型:
1.默認的定義數(shù)據(jù)類型是CHAR。
2.取值的時候C型默認從左取,N型從右取,超過定義長度則截斷。
3.C類型,可以賦值數(shù)值,也可以賦值字符,還可以混合,不過取值時如果是數(shù)值類
型靠右取值。
4.日期和時間類型的變量可進行加減乘除運算。
5.P類型.小數(shù)點要使用DECIMAL聲明
自定義數(shù)據(jù)類型:
定義數(shù)據(jù)類型——TYPES
? 在程序中用types聲明局部數(shù)據(jù)類型
? 語法格式與變量類似
? 用Types定義的類型在程序中用于聲明常量或者變量
? Types定義的是類型,不是變量,所以不能直接賦值
? ABAP數(shù)據(jù)類型可以是預定義數(shù)據(jù)類型,可以是數(shù)據(jù)字典里的全局數(shù)據(jù)類型,或者用戶在程序中自定義的數(shù)據(jù)類型。
eg:
3.數(shù)據(jù)對象
變量
變量定義包含name, length, type等,語法如下:
DATA < name> [< length>] type < type>[ value < value>] [ decimal < decimals>]
其中: [] 里的內(nèi)容表示可選項。<>表示名稱
< name>: 變量名稱, 最長30個字符, 不可含有 + . , : ( ) 等字符
< length>長度,要用圓括號括起來 如 LINE(20) TYPE C.
< type>:數(shù)據(jù)類型
< value>: 初始值
< decimals>: 小數(shù)位
變量定義也可以用關鍵字LIKE
DATA < name> [< length>] like< object>|< type>[ value
< value>] [ decimal < decimals>]
? TYPE 與LIKE的區(qū)別:
LIKE 用在已有值的數(shù)據(jù)類型, 如系統(tǒng)變量, 而TYPE則是用在
定義數(shù)據(jù)類型。
常量
常量定義使用CONSTANTS
CONSTANTS<常量名>[<長度> ] TYPE <數(shù)據(jù)類型> VALUE <默認值>
? 常量值一旦被定義,即被長期保存在內(nèi)存,其值無法改變
系統(tǒng)變量
以下是常用的系統(tǒng)變量:
SY-SUBRC : 系統(tǒng)執(zhí)行某指令后,表示執(zhí)行成功與否的變量,‘0’ 表示成功
SY-UNAME: 當前使用者登入SAP的USERNAME;
SY-DATUM: 當前系統(tǒng)日期;
SY-UZEIT: 當前系統(tǒng)時間;
SY-TCODE: 當前執(zhí)行程序的Transaction code
SY-INDEX : 當前LOOP循環(huán)過的次數(shù)
SY-TABIX: 當前處理的是internal table 的第幾筆
SY-MANDT: CLIENT(客戶端編號) NUMBER
SY-VLINE: 畫豎線
SY-ULINE: 畫橫線
結構體
定義:
? 有結構的變量
? 程序中用DATA定義的局部變量
DATA: BEGIN OF < name>
< field1>……
< field2>……
END OF< name>.
賦值:
? 可對結構體直接賦值
? 相同結構體之間可以使用等號來實現(xiàn)數(shù)據(jù)的復制
? WRITE Structure Name可輸出所有字段,或使用< Structure>-< field name>輸出指定字段
? 相同結構體之間使用Move……To……進行賦值;
有差異的結構體,可使用MOVE-CORRESSPONDING匹配及賦值相同的字段
繼承:
? 參考已存在的結構體創(chuàng)建一個屬性相同的新結構體
? 可在新結構體中增加字段
? 定義語句:INCLUDE STRUCTURE
4.數(shù)據(jù)輸出
基本輸出:
? 使用Write語句進行數(shù)據(jù)對象的輸出
? 可在輸出時控制對象的長度、輸出位置及格式等
屬性的控制
? 可同時輸出多個數(shù)據(jù)對象
? 不同對象可通過反斜杠“/”換行輸出
Write AT [/] [< pos>] [(< len>)] 資料項
/ : 換行
pos : 屏幕X軸坐標
(len): 顯示輸出的長度
? 產(chǎn)生 n 個空白行
SKIP [< n>]
顏色輸出:
語法:
FORMAT [COLOR {{{color [ON]}|OFF}|{= col}}] "使用顏色
[INTENSIFIED [{ON|OFF}|{= flag}]] "背景顏色
[INVERSE [{ON|OFF}|{= flag}]] "字體顏色
練習代碼:
DATA col TYPE i VALUE 0.
DO 8 TIMES.
col = sy-index - 1.
FORMAT COLOR = col.
WRITE: / col COLOR OFF,
‘INTENSIFIED ON’ INTENSIFIED ON,
‘INTENSIFIED OFF’ INTENSIFIED OFF,
‘INVERSE ON’ INVERSE ON.
ENDDO.
5.數(shù)據(jù)處理
賦值
1.MOVE < F1> TO < F2>
將F1的值存至變量 F2 中,F1與F2可以是不同類
型的變量,但有一定限制
2.WRITE < value> TO < field>.帶有格式的賦值
?這里的WRITE用于賦值,不是用于輸出
偏移
在源字段中取偏移量賦值給目標變量:
MOVE [+<偏移量>][(<取數(shù)位>)] TO [+<偏移量>][(<取數(shù)位>)
WRITE [+<偏移量>][(<取數(shù)位>)] TO [+<偏移量>][(<取數(shù)位>)
[+<偏移量>][(<取數(shù)位>) = + [+<偏移量>][(<取數(shù)位>)]
用于結構體的賦值,將Strings1中的field組件的數(shù)據(jù)復制至String2中, 僅復制相同名稱的字段:
MOVE –CORRESPONDING < Strings1> TO < String2>.
指針對象,通過語句FIELD-SYMBOLS加上將括號“<>”來定義。
FIELD-SYMBOLS < fs>.
ASSIGN < value> TO < field>.
? 可以不指定參考類型,用語句ASSIGN來分配給它變量.
? < FS>并不是變量,存放的是變量的地址,而非變量本身。
? 如果修改了field symbol的值,則相應的變量的值也隨之更改。
類型轉換
? 在不同類型的數(shù)據(jù)對象之間賦值,會自動進行類型的轉換;
? 轉換過程遵照固定的規(guī)則,如C類型數(shù)據(jù)賦值給N類型,只有數(shù)字字符被傳遞,其他忽略;
? C不能直接賦值給I,需要C→N→I;
? 可以使用MOVE TO或WRITE TO語句。
算數(shù)運算符
算術運算符號:
*乘
/ 除 + 加 - 減
DIV 整數(shù)除法
MOD 余數(shù)除法
? 運算符與變量之間必須有空格。
比較邏輯運算符
比較運算符:
= 或 EQ : 等于
<> 或 >< 或 NE: 不等于
< 或 LT: 小于
<= 或 LE: 小于等于
GT 或 >: 大于
= 或 GE : 大于等于
邏輯運算符:
AND: 且
OR : 或
NOT : 非
算術運算函數(shù)
6.數(shù)據(jù)處理(字符串)
字符串移位
將字符串整體或者子串進行位移:
SHIFT < c> [BY < n> PLACES] [< modes>]
< modes> :
(1).空白, 字符串往左移一位
(2).LEFT, 字符串往左移 n 位
(3).RIGHT, 字符串往右移 n 位
指定字符串c從子串c1進行位移:
SHIFT c UP TO c1
執(zhí)行結果返回系統(tǒng)參數(shù)SY-SUBRC
執(zhí)行成功,返回0,不匹配,返回4
移除字符串c左邊/右邊的子字符串c1:
SHIFT c LEFT/RIGHT DELETING
LEADING/ TRAILING c1
執(zhí)行結果返回系統(tǒng)參數(shù)SY-SUBRC
執(zhí)行成功,返回0,不匹配,返回4
替換字符串
REPLACE < string1> WITH < string2> INTO < c>
將字符串 中的 < string1> 以 < string2> 來取代
字符串轉換
TRANSLATE < c> TO UPPER/LOWER CASE.
將全部字符轉成大寫/小寫
尋找字符串
從字符串f/表itab中搜索字符串g
SEARCH f/itabFOR g
…ABBREVIATED
從指定字符串中/內(nèi)表中按順序/逐行搜索相匹配字符串,
搜索單詞第一個需與字符串中包含的單詞第一個匹配
…STARTING AT n1/line1
從字符串n1個字符/內(nèi)表中具體某行開始搜索匹配字符串
…ENDING AT n2/line2
搜索到字符串第n2個字符止/最大范圍到內(nèi)表中具體某行
…AND MARK:
從指定字符串/內(nèi)表中模糊搜索相匹配字符串
? 會回存至兩個變數(shù),SY-SUBRC 和 SY-FDPOS:
若找到則 SY-SUBRC 為 0,SY-FDPOS 存開始位置
若找不到則 SY-SUBRC為 4, SY-FDPOS為 0
? 對于一些特殊符號,如“ * ”、“@”、“.”等,需要在其兩
邊加上句號作為修飾。如某字符串為"AAABBB",查找符號""
的位置
? 若內(nèi)表有多行,那么字符串查找位置默認為從某行數(shù)據(jù)第一
位開始
字符串的合并
將多個字符串合并成一個字符串:
CONCATENATE f1…fn INTO g [SEPARATED BY h]
SPARATED BY表示在連接字符串中加入分隔符號
? SPARATED BY表示在連接字符串中加入分隔符號
字符串的拆分
將一個字符串拆分并賦值給多個變量:
SPLIT f AT g INTO h1…h(huán)n
將一個字符串拆分并分配給一個內(nèi)表:
SPLIT f AT g INTO TABLE itab
去除字符串的空格
去除字符串的空格:
CONDENSE c
?字符串前置空格被刪除
?NO-GAPS——前置空格以及中間所有空格被刪除
7.流程控制
條件語句
IF語句:
IF < condition1>.
< statement block>.
ELSEIF < condition2>.
< statement block>.
ELSE.
< statement block>
ENDIF.
CASE語句:
CASE < f>.
WHEN < f1>.
< statement block>.
WHEN < f2>.
< statement block>.
WHEN …
WHEN OTHERS.
< statement block>.
ENDCASE.
循環(huán)語句
(計數(shù)循環(huán))使用DO指定循環(huán)次數(shù):
DO [< n> TIMES]
< statement block>
ENDDO.
? n:可以是數(shù)字或者變量,如果n是0或者負數(shù),系統(tǒng)
不執(zhí)行該循環(huán)
? TIMES:循環(huán)次數(shù)
?使用DO語句時要避免死循環(huán),如果不使用TIMES選項,則在語句塊中至少包含一個EXIT、STOP語句,以使系統(tǒng)能退出循環(huán)
?系統(tǒng)變量SY-INDEX記錄循環(huán)的次數(shù)
? DO語句內(nèi)部還可以實現(xiàn)多層嵌套,為了保證程序可讀性,建議嵌套最多不要超過6層
(條件循環(huán))使用WHILE指定循環(huán)條件:
WHILE < condition>
< statement block>
ENDWHILE.
滿足條件< condition>時候執(zhí)行,不滿足,退出
LOOP循環(huán)常用于實現(xiàn)內(nèi)表數(shù)據(jù)的循環(huán)讀取和操作
LOOP AT ITAB.
WRITE: ITAB.
ENDLOOP.
內(nèi)表是僅在程序運行過程中存在的表,內(nèi)表用來存放多條相同結構的數(shù)據(jù),可以對其插入,修改或者刪除行操作。
循環(huán)控制語句
day2
1.內(nèi)表定義
概念
內(nèi)表是內(nèi)存中建立的一個臨時表,你可以在程序運行時對表中的數(shù)據(jù)進行,插入,修改,刪除等操作,程序跑完了,就會被釋放
分類
1.Standard:標準表
2.Sorted:排序表
3.Hashed:哈希表,一般用的比較少
工作區(qū):內(nèi)表按照行進行訪問,必須使用某個區(qū)域作為與表格互相傳輸?shù)慕涌凇?br /> ? 從內(nèi)表中讀取數(shù)據(jù)時,已定址的行內(nèi)容覆蓋工作區(qū)的內(nèi)容。講數(shù)據(jù)寫入內(nèi)表時,必須首先在工作區(qū)中輸入數(shù)據(jù)。
定義
TYPES自定義的表類型來定義內(nèi)表
TYPES < t> TYPE < type> OCCURS < n>
TYPES < T> TYPE TABLE OF < type>
DATA直接定義內(nèi)表:
DATA: BEGIN OF OCCURS
……
END OF itab.
參照內(nèi)表或數(shù)據(jù)庫表結構定義內(nèi)表,內(nèi)表結構與所參照數(shù)據(jù)庫表完全相同:
DATA < f> LIKE <內(nèi)表或數(shù)據(jù)庫表> OCCURS n WITH HEADER LINE
? WITH參數(shù)指定是否帶工作區(qū)
使用INCLUDE STRUCTURE包括已存在的結構體的所有字段
獲取
通過DESCRIBE獲得內(nèi)表的行
DESCRIBE TABLE < itab> LINES n
2.內(nèi)表賦值
增加數(shù)據(jù)
INSERT可以按內(nèi)表的具體字段向表中插入一行
或者多行數(shù)據(jù):
INSERT [wa INTO|INITIAL LINE INTO] itab
[INDEX idx].
INSERT [wa INTO|INITIAL LINE INTO] TABLE
itab.
INSERT LINES OF itab1 [FROM idx] [TO idx2]
INTO itab2 [INDEX idx3].
增加內(nèi)表
要增加內(nèi)表,既可逐行添加數(shù)據(jù),也可復制另一個表格的內(nèi)容。要逐行填充內(nèi)表,
可以使用APPEND、 COLLECT或 INSERT 語句。
1.1 要將內(nèi)表僅用于存儲數(shù)據(jù),出于性能方面的考慮,建議使用 APPEND。
1.2 要計算數(shù)字字段之和或要確保內(nèi)表中沒有出現(xiàn)重復條目,請使用 COLLECT
語句。
1.3 要在內(nèi)表現(xiàn)有行之前插入新行,請使用INSERT語句。
語法:
APPEND [< wa> TO|INITIAL LINE TO] < itab>.
COLLECT [< wa> INTO] < itab>.
INSERT [< wa> INTO|INITIAL LINE INTO] < itab> [INDEX < idx>].
2.1 要將內(nèi)表行附加到另一個內(nèi)表中,請使用APPEND語句。
2.2 要將內(nèi)表行插入另一個內(nèi)表中,請使用INSERT語句。
2.3 要將內(nèi)表條目內(nèi)容復制到另一個內(nèi)表中,并且覆蓋該目標表格,請使用
MOVE語句。
語法:
附加內(nèi)表行:
APPEND LINES OF < itab1> [FROM < n1>] [TO ] TO < itab2>.
插入內(nèi)表:
INSERT LINES OF < itab1> [FROM < n1>] [TO ]
INTO < itab2> [INDEX < idx>].
復制內(nèi)表:
MOVE < itab1> TO < itab2>.
< itab2> = < itab1>.
的具體用法,將在后面介紹
SELECT … INTO TABLE < itab>
SELECT … APPENDING TABLE < itab>
更改數(shù)據(jù)
MODIFY(直接修改內(nèi)表數(shù)據(jù))按內(nèi)表位置或者具體內(nèi)表字段值相等條件修改內(nèi)表數(shù)據(jù):
MODIFY itab [FROM wa] [INDEX idx]
[TRANSPORTING f1…fn] WHERE cond.
刪除數(shù)據(jù)
DELETE(刪除內(nèi)表數(shù)據(jù)) :
DELETE TABLE itab WITH TABLE KEY
k1=v1…kn=vn.
按具體值刪除
DELETE TABLE itab [FROM wa].
參照其它內(nèi)表值刪除
DELETE itab INDEX idx.
刪除具體行數(shù)據(jù)
DELETE itab FROM idx1 TO idx2.
刪除具體行數(shù)范圍間數(shù)據(jù)
DELETE ADJACENT DUPLICATES FROM itab.
刪除重復數(shù)據(jù),執(zhí)行此條件前必須先排序
讀取數(shù)據(jù)
READ依據(jù)具體行數(shù)或字段值等條件讀取某一內(nèi)表的數(shù)據(jù):
READ TABLE itab FROM wa.
READ TABLE itab WITH [TABLE] KEY
k1=v1…kn=vn [BINARY SEARCH].
READ TABLE itab INDEX i.
? 使用READ操作的表必須得HEADER LINE作為查找出的數(shù)據(jù)存儲窗口
? BINARY SEARCH可以提高內(nèi)表數(shù)據(jù)查找的速度,但是使用前必須先對內(nèi)表進行排序
LOOP循環(huán)常用于實現(xiàn)內(nèi)表數(shù)據(jù)的循環(huán)讀取
和操作
LOOP AT ITAB.
WRITE: ITAB.
ENDLOOP.
排序與匯總
對內(nèi)表進行排序,可以指定具體的排序字段、
排序方式(升/降),語法如下:
SORT itab [BY f2 f2…fn]
[ASCENDING/DESCENDING]
? < f2>:為指定的字段
? 遞減(DESCENDING)和遞增(ASCENDING)
將內(nèi)表中相同的字段合并,若有類型為I的字段,則將其值加總:
COLLECT [wa INTO] itab.
? < f2>:為指定的字段
? 遞減(DESCENDING)和遞增(ASCENDING)
day3
1.SQL
SQL( Structured Query Language )
? 結構化查詢語言
? 用于定義、創(chuàng)建、讀取數(shù)據(jù)庫表數(shù)據(jù)
Native SQL(本地SQL)
? 每種關系型數(shù)據(jù)庫都有其對應的 SQL,是數(shù)據(jù)庫相關的
? 不同的SAP 系統(tǒng)可能使用各種不同的數(shù)據(jù)庫,使用本地SQL 的 ABAP 程序無法適應所
有的 SAP 系統(tǒng)
? 可直接對數(shù)據(jù)庫表進行修改刪除等,有一定安全風險
? 能實現(xiàn)一些OpenSQL無法實現(xiàn)的功能
Open SQL(開放SQL)
? SAP 為 ABAP 定義的數(shù)據(jù)庫無關的SQL 標準
? 在ABAP程序運行時由系統(tǒng)動態(tài)的轉化成當前數(shù)據(jù)庫使用的本地SQL
? 在編寫程序時不需要考慮SAP 系統(tǒng)使用的數(shù)據(jù)庫差異
2.OpenSQL
? 對數(shù)據(jù)庫主要操作語法包括:
SELECT\UPDATE\INSERT\DELETE\MODIFY
? 執(zhí)行狀態(tài)通過系統(tǒng)變量SY-SUBRC表現(xiàn)
等于0,表示執(zhí)行成功
不為0,表示執(zhí)行失敗
使用OpenSQL注意事項:
句抽取數(shù)據(jù)到內(nèi)表中
聯(lián)順序為:小表-大表
內(nèi)表處理優(yōu)化:
①.盡量少用多重循環(huán)
②.read時,可以先sort 然后用read binary search,會快很多
③.對內(nèi)表做批量修改時,可以用modify transporting where 語句進行替
換,而不用循環(huán)修改
環(huán)中用at end of之類的進行求和,collect直接求和在數(shù)據(jù)量很大時,效
率會比較低。
語句)或者COLLECT(ABAP語句)。
****,endloop.
SELECT語法(讀取數(shù)據(jù))
SELECT語法結構:
SELECT < result> FROM < dbtab>
INTO < target>
WHERE < condition>
GROUP BY < fields> ORDER BY < fields>
其中各關鍵字的屬性描述如下:
SELECT < result>:具體的查詢字段。
SELECT SINGLE:定義單行查詢。
FROM < dbtab>:所查詢的透明表。
INTO < target>:查詢結果賦值對象,賦值到具體
表或結構體。
INTO (< f1>…< fn>):將查詢結果賦值到具體字段。
INTO CORRESPONDING FILES OF < itab>:將查詢
結果按字段匹配賦值給具體的內(nèi)表或者結構體。
WHERE < condition>:查詢條件。
GROUP BY < fileds>:分組查詢條件。
ORDER BY < fields>:排序條件。
? WHERE中多個字段為查詢條件時:表名和字段用“~”符號連接
多個表數(shù)據(jù)連接查詢,可以用兩種方法實現(xiàn)表連接:
① INNER JOIN:查詢結果包含兩個連接表中彼此相對應的數(shù)據(jù)
記錄
② LEFT OUTER JOIN:查詢結果集中包含左表中的所有數(shù)據(jù)記錄,
右表中僅查詢出包含相對應的匹配條件的數(shù)據(jù)
③ FULL OUTER JOIN:包含左右表所有的記錄
限制Open SQL獲取數(shù)據(jù)條數(shù):
?使用 UP TO n ROWS語法來限制讀取數(shù)據(jù)的條數(shù),
語法如下:
SELECT * INTO … UP TO N ROWS.
使用PACKAGE SIZE N連續(xù)讀取數(shù)據(jù):
?使用 UP TO n ROWS可讀取前n條,但不能繼續(xù)讀取數(shù)據(jù)
?使用使用PACKAGE SIZE N可連續(xù)讀取數(shù)據(jù),每次讀取指定
條數(shù)
?必須應用于SELECT……ENDSELECT語句中
常用標準函數(shù)
? COUNT():統(tǒng)計查詢總數(shù)
? SUM():統(tǒng)計表中某個數(shù)值字段的總和
? AVG():統(tǒng)計表中某個數(shù)值字段的平均值
? MAX():統(tǒng)計表中某個字段的最大值
? MIN() :統(tǒng)計表中某個字段的最小值。
UPDATE語法(更新數(shù)據(jù))
UPDATE實現(xiàn)對數(shù)據(jù)的更新操作,語法如下:
UPDATE < dbtab> SET f1…fn (WHERE < condition>).
UPDATE < dbtab> FROM TABLE < itab> (WHERE < condition>).
UPDATE < dbtab> FROM < wa>.
INSERT語法(新增數(shù)據(jù))
INSERT語句用于對數(shù)據(jù)的新增操作,語法如下:
INSERT < dbtab> FROM TABLE < itab>.
INSERT < dbtab> FROM < wa>.
DELETE語法(刪除數(shù)據(jù))
DELETE 語句用于刪除表中的數(shù)據(jù),語法如下:
DELETE FROM < dbtab> WHERE < condition>.
DELETE FROM < dbtab>.
DELETE < dbtab> FROM TABLE < itab>.
MODIFY語法(修改數(shù)據(jù))
MODIFY操作是用于修改數(shù)據(jù)庫中的數(shù)據(jù):
MODIFY < dbtab> FROM < wa>.
MODIFY < dbtab> FROM TABLE < itab>.
?如表中不存在符合條件的數(shù)據(jù)時會添加新數(shù)據(jù)
?MODIFY擁有 INSERT 和 UPDATE的操作動作
?通過MODIFY修改的數(shù)據(jù)效率比較低下
3.NativeSQL
使用Natie SQL:
? Open SQL存在局限
? 如Oracle字段名是區(qū)分大小寫的,而在Oracle中是將字段都轉為大寫或小寫以固定查詢
? Open SQL無法實現(xiàn)此,需要使用NativeSQL
? Native SQL不能直接向內(nèi)表直接傳遞所有值,需要通過調用SubRouting方式進行APPEND操作
?查詢字段和條件字段都要以逗號分開
?查詢條件前需要加上冒號
?SQL語句結尾不需要句號
day4
1.Alv
在R/3 4.6C之前ALV全稱為ABAP List Viewer,在其后的版本中,已經(jīng)正式更名為SAP List Viewer。ALV是SAP系統(tǒng)中心的列表標準,可以在ABAP程序中進行報表輸出。除去列表的顯示和少量交互功能之外,ALV還提供給系統(tǒng)用戶多種其它豐富的交互功能。
1.Alv分類:salv和ooalv。
Salv就是我們正常使用的調用function的alv。Ooalv是面對對象的alv,在屏幕對象上畫alv。
Ooalv參考網(wǎng)址:https://www.cnblogs.com/jiangzhengjun/p/4291373.html
2.Alv事件
Alv事件可以籠統(tǒng)的分為兩種,一種是提供回調函數(shù)的事件,例如菜單欄的設置,表頭的設置,用戶點擊事件的設置,這些都是提供了導入?yún)?shù)的。另一種是通過it_events傳參進去。
2.1回調函數(shù)的事件
i_callback_pf_status_set菜單欄,最簡單的。前面講過se41復制和slvc(應該是叫這個錯誤了提醒我改)復制標準的菜單欄到目標程序。細節(jié)不講了。
i_callback_top_of_page表頭,測試放在下面了,這個有點問題。無法實現(xiàn)。
i_callback_user_command用戶鍵盤事件。最經(jīng)常用的,幾乎所有alv展示后的處理都可以通過這個回調函數(shù)完成。
2.2 It_events事件
結構如下圖所示,內(nèi)表,包含兩個字段name和form。系統(tǒng)預存了17個
這里包括了前文提到的三個回調函數(shù),name分別是USER_COMMAND,TOP_OF_PAGE,PF_STATUS_SET,但是事件的form為空。
在參考資料之后,可以認為,it_events里面預存的事件name,可以認為是對應的form執(zhí)行的時間。
17種event的name放在下面:CALLER_EXIT,USER_COMMAND,TOP_OF_PAGE,TOP_OF_COVERPAGE,END_OF_COVERPAGE,FOREIGN_TOP_OF_PAGE,FOREIGN_END_OF_PAGE,PF_STATUS_SET,LIST_MODIFY,TOP_OF_LIST,END_OF_PAGE,END_OF_LIST,AFTER_LINE_OUTPUT,BEFORE_LINE_OUTPUT,REPREP_SEL_MODIFY,SUBTOTAL_TEXT,GROUPLEVEL_CHANGE。
3.事件的使用
3.1菜單欄
3.2用戶鍵盤事件
3.3表頭(測試部分失敗)
3.4新建event
3.5建立event
4.開發(fā)ALV的基本流程
1.定義一些數(shù)據(jù)結構,主要是用于存數(shù)和顯示的內(nèi)表和alv的一些參數(shù)變量。
2.制作屏幕(界面).
3.獲取屏幕輸入的數(shù)據(jù),用該數(shù)據(jù)從數(shù)據(jù)庫中獲取所需的數(shù)據(jù)放到前面定義的內(nèi)表中。
4.調用ALV生成函數(shù)。其中還要為ALV定義表結構,布局等信息,主要是layout和fieldcat。其中定義報表字段fieldcat的時候可以用子程序便捷的賦值。
4.1 聲明變量
- 數(shù)據(jù)變量(Data Area)定義
- 聲明類型組SLIS
TYPE-POOLS: slis.
DATA:
fieldcat TYPE slis_t_fieldcat_alv, “字段清單內(nèi)表
fieldcat_ln LIKE LINE OF fieldcat,
layout TYPE slis_layout_alv, “ALV格式
sortcat TYPE slis_t_sortinfo_alv, “ALV排序字段清單內(nèi)表
sortcat_ln LIKE LINE OF sortcat,
eventcat TYPE slis_t_event, “ALV事件
eventcat_ln LIKE LINE OF eventcat.
DATA: col_pos TYPE i.
4.2 定義內(nèi)表
- 定義要展示的數(shù)據(jù)的內(nèi)表
DATA: BEGIN OF ivbap OCCURS 0,
vbeln LIKE vbap-vbeln,
matnr LIKE vbap-matnr,
matkl LIKE vbap-matkl,
END OF ivbap.
4.3 讀取數(shù)據(jù)
- 獲取數(shù)據(jù)
SELECT vbeln posnr matnr matkl kwmeng vrkme
INTO CORRESPONDING FIELDS OF TABLE ivbap
FROM vbap
WHERE vbeln NE space.
4.4 ALV格式控制
- 字段目錄是用來控制ALV顯示的網(wǎng)格中每個字段的屬性的,比如字段的順序,對齊方式,可編輯狀態(tài),顏色,等等
ADD 1 TO col_pos.fieldcat_ln-ref_tabname = ‘VBAP’.
fieldcat_ln-fieldname = ‘VBELN’.
fieldcat_ln-key = ‘X’.
fieldcat_ln-do_sum = space.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-no_out = space.
fieldcat_ln-qfieldname = space.
fieldcat_ln-hotspot = ‘X’.
APPEND fieldcat_ln TO fieldcat.
4.5 定義事件
- 建立事件清單(Event Catalogs)
- 需定義事件塊,否則出錯
eventcat_ln-name = ‘TOP_OF_PAGE’.
eventcat_ln-form = ‘PAGE_HEADER’.
APPEND eventcat_ln TO eventcat.
事件塊:
FORM PAGE_HEADER.
ENDFORM.
4.6 調用ALV
- ALV顯示
DATA: pgm LIKE sy-repid.
pgm = sy-repid.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
i_callback_program = pgm*
i_callback_pf_status_set = ‘SET_STATUS’
i_callback_user_command = ‘USER_COMMAND’
is_layout = layout
it_fieldcat = fieldcat[]
it_sort = sortcat[]
i_save = ‘A’
”it_event = eventcat[]
TABLES
t_outtab = ivbap
EXCEPTIONS
program_error = 1
OTHERS = 2.
4.7 用戶事件
- USER-COMMAND子例程
FORM user_command USING ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
READ TABLE ivbap INDEX selfield-tabindex.
CHECK sy-subrc = 0.
CASE ucomm.
WHEN ‘&IC1’.
CASE selfield-sel_tab_field.
WHEN ‘IVBAP-VBELN’.
SET PARAMETER ID ‘AUN’ FIELD ivbap-vbeln.
CALL TRANSACTION ‘VA03’ AND SKIP FIRST SCREEN.
WHEN ‘IVBAP-MATNR’.
SET PARAMETER ID ‘MAT’ FIELD ivbap-matnr.
CALL TRANSACTION ‘MM03’ AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM. - 設置工具欄
FORM set_status USING rt_extab TYPE
slis_t_extab.
SET PF-STATUS ‘STANDARD’.
ENDFORM. "set_status
2.Smartforms
總結
以上是生活随笔為你收集整理的【ABAP学习笔记】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 批量将很多文件打包压缩成多个ZIP和7z
- 下一篇: c语言产生随机数不变怎么办,用C语言产生