日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ABAP学习笔记】

發(fā)布時間:2024/1/1 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ABAP学习笔记】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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 語句。

  • 逐行填充內(nèi)表
    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>].
  • 將內(nèi)表內(nèi)容復制到另一個內(nèi)表中
    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>.
  • 通過OPEN SQL將數(shù)據(jù)表中的數(shù)據(jù)按條件查詢后放入內(nèi)表中,對于OPEN SQL
    的具體用法,將在后面介紹
    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ù)條目數(shù)量
  • 減少數(shù)據(jù)的傳輸量,以減少網(wǎng)絡流量,有時寧愿一次多返回一些數(shù)據(jù),也不要增加訪問次數(shù)
  • 減少訪問的數(shù)據(jù)庫表量
  • 減少查詢難度,可以通過整理選擇標準來實現(xiàn)
  • 減少數(shù)據(jù)庫負載
  • 避免在循環(huán)語句中,使用SELECT語句,而是通過FOR ALL ENTRIES IN 語
    句抽取數(shù)據(jù)到內(nèi)表中
  • inner join獲取數(shù)據(jù)時,盡量不要用太多的表關聯(lián),特別是大表關聯(lián),關
    聯(lián)順序為:小表-大表
  • 查詢結果應該只需要自己關系的字段,盡量少用select *
  • where 條件里面多用索引、主鍵,順序也要遵循小表-大表
  • 不要使用select end-select 語句,可以取出來后再處理
  • 不要用<> ,這樣會不使用索引,可以用> or < 來替代
  • 不要用sort by進行排序,取出來后在內(nèi)表中處理
    內(nèi)表處理優(yōu)化:
    ①.盡量少用多重循環(huán)
    ②.read時,可以先sort 然后用read binary search,會快很多
    ③.對內(nèi)表做批量修改時,可以用modify transporting where 語句進行替
    換,而不用循環(huán)修改
  • 內(nèi)表求和,能夠在sql層次上實現(xiàn)就用sql實現(xiàn),不能實現(xiàn)的,在內(nèi)表循
    環(huán)中用at end of之類的進行求和,collect直接求和在數(shù)據(jù)量很大時,效
    率會比較低。
  • CPU的負載可以通過優(yōu)化程序來改善,在程序中盡量使用諸如SUM(SQL
    語句)或者COLLECT(ABAP語句)。
  • 用append lines of *** to ****,代替 loop at ***,append *** to
    ****,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)表連接:

  • 在 ABAP 字典中創(chuàng)建視圖,查詢時用這個視圖作為數(shù)據(jù)源
  • 使用JOIN語句,跟平常數(shù)據(jù)庫中用到的連接查詢基本上相同
    ① INNER JOIN:查詢結果包含兩個連接表中彼此相對應的數(shù)據(jù)
    記錄
    ② LEFT OUTER JOIN:查詢結果集中包含左表中的所有數(shù)據(jù)記錄,
    右表中僅查詢出包含相對應的匹配條件的數(shù)據(jù)
    ③ FULL OUTER JOIN:包含左右表所有的記錄
  • 在一個表連接中可以連接三個甚至更多的表
  • 關鍵字ON:連接條件

    限制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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。