ABAP開發
目標:ABAP編輯器、報表程序創建語法檢查修改執行等基本操作、ABAP數據字典、SQL的使用
大體介紹
ABAP:Advanced Business Application Programming
ABAP第四代的語言(ABAP/4),到後期會有JAVA的東西引進來,PI有自己的JAVA端,但ERP/R3還是主要用ABAP開發
報表(Reports)不會改變業務(主要關注報表開發);對話(Dialogs)可能會改變業務、功能增強的開發
ABAP程序組成要素:關鍵字Keywords;選項Options(字體界面等);Parameters(參數)
關鍵詞,選項和參數是用至少一個空格分開
Eg:WRITE Figure CURRENCY ‘TWD’.
每寫完一句代碼是用.號結束的,每句是用關鍵字開始的,每個語句可能用到很多行,關鍵字選項參數等是用空格隔開的
註釋:如果是用*註釋,*號前面是註釋,”號是後面都都是註釋
Report ZFRLFA01 //程序名
程序類型:1、M、F、I
應用(哪個模塊的):Z(F、K、M、S、C、V…….)001
開發類:如果不需要傳輸那麼就放在本地 $TMP-Local object
需要傳輸的就放到一個開發類中(按照模塊保存數據)
編輯鎖(Editor Lock)鎖住編輯權限
做開發事務代碼:se38
ZC001(成本控制)ZF001(FI)。。。。。。。。。。。。。。。。。
程序名,保存地,請求號命名等都是有規範的,爲後期查找等提供了方便。
程序開發時用到的數據類型,定義一些變量(P大型數據、I整型數據、F浮點型、N數字文本、C文本、D日期、T時間、X16進制)
Initial value 是各變量默認的初始值
定義變量最大隻能30個字符,不能使用的特殊符號:()+.,:
空格是一個定義好的值了
用已經定義好了的變量去定義兩一個變量
DATA:
Company like T001-BUKRS *在這個公司代碼下
String1(30) type C *這樣string1是30位的 C類型的
String2 like string1 * string 2和string1數據是一致的
String3 like string1
可以用一個結構定義多個變量
TYPES:BEGIN OF ADDRESS
恢復初始化CLEAR<FIELD>
給一個變量賦值(用=即可)
通過位移的方式來賦值,在保存一個字符串是有位的,可定義從第幾個字符開始取,從第0位開始算
2個結構的相同字段可以直接賦值,不用一一用=號賦值
定義文本編號:標題文本、編碼文本,選擇文本
ULINE 隔一行
SKIP 跳過
NEW-PAGE 新起一頁
Write一種格式、值等直接在打印機以這種形式打印
zm024
se93
zp*
語句if else
Range變量 in <range>
A co B A盡包含B
IF A >= B.
C = A - B.
ELSE.
C = B - A.
ENDIF.
Write:/ ‘|A-B|=’,C.
‘ ’表示不顯示值,而是直接顯示字符串
,後的C顯示的C的值
REPORT test.
TABLES LFB1.
SELECT * FROM LFB1.
CASE LFB1-BUKRS.
WHEN ‘TW00’.
WRITE: / ‘DELTA’.
WHEN ‘TW02’.
WRITE: / ‘NETWORKING’.
ENDCASE.
ENDSELECT.
On change操作
REPORT test.
TABLES LFB1.
SELECT * FROM LFB1.
ON CHANGE OF LFB1 - LIFNR.
NEW - PAGE.
ENDON.
WRITE: / LFB1 - LIFNR, LFB1 - BUKRS .......
ENDSELECT.
循環LOOP的操作
LOOP AT WT_TABLE. //表名
INTO WS_TABLE_LINE. //從第一行開始拿到定義的結構中
WS_LINE-PRICE= WS_LINE-PRICE-100.
ENDLOOP. //結束LOOP
ONCHANG 是用在LOOP裏的,在LOOP數據裏對比兩個字段有什麼變化、區別,LOOP是在內表循環時用的,對比當前數據和上一個數據在某個字段的是否一致。
DO varying<field>from<field1>. //從第幾行到第幾行
DO.
寫一段IF的條件退出語句,不然會無限循環
ENDDO.
DO<n>TIMES. //做幾次
<>
ENDDO
WHILE A=<10.
WRITE:/’A=’,A.
A=A+1.
ENDWHILE.
LOOP可以套LOOP,但儘量少用
CHECK判斷條件語句,做一個檢查,不符合檢查便跳出當前循環或報表
EXIT和CHECK差不多,看你寫的位置跳到哪一步
STOP無需檢查直接退出到最外
創建HELLO WORLD界面
Se38,輸入程序名,創建
點小筆更改報告(程序名)
Write後加:可顯示多個值,如果不加只顯示一個
右鍵----格式-----添加註釋/取消註釋
/是換行,wirte:/ 就是換行顯示的
輸完代碼,按激活對象,然後執行
REPORT XXXXXX
DATA:A TYPE I.
B TYPE I.
C TYPE I.
A=25.
B=12.
IF A>B.
C=A-B.
WRITE:/’A>B’.
ELSEIF A=B.
C=0.
WRITE:/’A=B’.
ELSE.
C=B-A.
WRITE:/’A<B’.
ENDIF.
WRITE:/’|A-B|=’,C.
REPORT XXXXXX
DATA:A TYPE I.
B TYPE I.
C TYPE I.
A=12.
B=11.
IF A>B.
C=A-B.
WRITE:/’A>B’.
IF A=12.
WRITE:/’A=12’.
ENDIF.
ELSE.
C=B-A.
WRITE:/’A<B’.
ENDIF.
WRITE:/’|A-B|=’,C.
ABAPDOCU進入各命令用法的例子,解釋
每查一個按ABAP EDIT可以直接把代碼拷到編輯器中
//查看是否匹配
CASE.
WHEN.
WRITE.
ENDCASE.
循環(DO LOOP)例子
REPORT xxxxxx
DATA:CNTR TYPE I.
CNTR=1.
DO.
WRITE:/CNTR.
CNTR=CNTR+1.
IF CNTR GT 10.
EXIT.
ENDIF.
ENDDO.
UNLINE. //顯示一條分隔線
//CLEAR CNTR.
CNTR=1.
DO 9 TIMES.
WRITE:/CNTR.
CNTR=CNTR+1.
ENDDO.
循環(WHILE LOOP)例子
REPORT xxxxxx
DATA:CNTR TYPE I.
CNTR=1.
WHILE CNTR>9.
WRITE:/CNTR.
CNTR=CNTR+1.
ENDWHILE.
REPORT xxxxxx
DATA:CNTR TYPE I.
CNTR=1.
WHILE CNTR>10.
CNTR=CNTR+1.
WRITE:/CNTR.
IF CNTR=5.
CONTINUE.
ENDIF.
WRITE:/CNTR.
ENDWHILE.
CONTINUE只跳出本次循環繼續執行下次循環,如果是exit、stop,就全部跳出,WHILE就不執行了。
Insert into
APPEND:APPEND….TO,往表裏增加一行,先掃描表裏是否有該行,如果有,那麼進行加和操作(只對比非數字的字段項),如果沒有,就直接加入。
COLLECT:收集彙總,相同的關鍵字,其數字部分(例如金額)是自己加和的
SORT:排序,升序降序
例如:sort itab descenging by age.
READ TABLE. //讀表的一條數據
WITH KEY<key>. //按條件讀取
INDEX<idx>. //按索引讀取
INSERT:插到當前索引的位置
APPEND:插到表的最後的位置
DELETE:刪除一行
MODIFY:修改
例子:
REPORT XXXXXXX
TABLES:T001.
DATA:
BEGIN OF IntTab OCCURS 15.
BUKRS LIKE T001-BUKRS. //公司代碼
BUTXT LIKE T001-BUTXT. // 公司名稱
END OF IntTab.
DATA:ws_int like inttab.
SELECT * FROM T001.
CLEAR inttab.
Inttab-bukrs=t001-bukrs.
Inttab-butxt=t001-butxt.
Insert ws_int into table inttab.
APPEND inttab.
ENDSELECT.
LOOP AT INTTAB.
WRITE:/INTTAB-BUKRS,’ ’,INTTAB-BUTXT.
ENDLOOP.
Se11,查看數據庫
TABLES:T001.
DATA:WS_T001 LIKE T001.
DATA:WT_T001 LIKE TABLE OF T001. //table定義一個內表
SELECT * FROM T001.
WS_T001-BUKRS=T001-bukrs. //BUKRS公司代碼
WS_T001-BUTXT=T001-butxt. //BUTXT公司名稱
ENDSELECT.
LOOP AT WT_T001 INTO WS_T001.
WRITE:/WS_T001-BUKRS, WS_T001-BUTXT.
ENDLOOP.
TABLES:T001.
DATA:WS_T001 LIKE T001.
DATA:WT_T001 LIKE TABLE OF T001. //table定義一個內表
SELECT SINGLE * FORM T001 WHERE BUKRS=’5640’.
WRITE:/T001-BUKRS,T001-BUTXT.
TABLES:T001.
DATA:WS_T001 LIKE T001.
DATA:WT_T001 LIKE TABLE OF T001. //table定義一個內表
SELECT * INTO CORRESPONDING FIELDS OF TABLE WT_001 FROM T001 WHERE BUKRS=’5640’. // 對比WT_001和T001,
所有字段一致的選擇出來
LOOP AT WT_T001 INTO WS_T001.
WRITE:/ WS_T001-BUKRS,WS_T001-BUTXT.
ENDLOOP.
LOOP AT 表 INTO 行
LOOP AT itab INTO line FROM 2 TO 5.
//一般在制定一頁顯示幾行時用
NUM=1.
LOOP AT itab TRANSPORTING NO FIELDS WHERE land=’USA’ .
WRITE:/NUM.
NUM=NUM+1.
WRITE:/itab-land,itab-name,itab-age,itab-weight.
ENDLOOP.
//不給itab賦任何值,
At first 顯示在最前面的東西,放在at first裏
At new字段關鍵字是否是第一次出現,第一次出現執行at new
Select options做選擇屏幕用的,可調出標準查詢的選項
Paramenters 做選擇屏幕用的,
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME title text-020.
SELECTION-SCREEN COMMENT/1(30) text-020.
PARAMENT p_vkorg type TVKO-vkorg DEFAULT’0005’.
SELECT-OPTIONS S_vkorg FOR TVKO-vkorg.
SELECTION-SCREEN END OF BLOCK B1.
Se37裏可查Function Modules系統已經寫好了一些標準的功能,可以直接調用,也可以自己寫Function Modules,然後再寫程序即可調用。
程序先調用Function Modules,然後定義一些參數,Function Modules會去數據庫取數,不用自己去數據庫取數,然後程序可直接接調用。
程序調用Function Modules,直接處理我給你文本的值,處理完了返回給程序即可。
Macro宏
Include直接調用其他地方的程序,include 程序名
開發人員要註冊SAP用戶名,還要申請開發KEY,第一次用的時候只要輸入一次開發KEY即可,以後都不用了
Include,引用了其他地方的程序等,可以寫在該程序前面
DATA:數據定義,內表變量等都在這定義
Initialization初始化
Perform check 權限檢查,一上來基本都是要做權限檢查的
End of
At end of
At last
Sap分三個過程: 開發系統——>測試系統——>生產系統(正式的日常業務)
開發一個程序後可以分配一個TCODE,類似於事務代碼,但是是z打頭的
表、數據元素、域(數據元素依賴的基礎)
依靠已經創建的域來創建數據元素,數據元素組成表描述描述描描述新建沙箱
ECC_Sandbox_erp ides
10.8.5.167
00
SND
用戶名:abap01 密碼:chem123 新密碼:chem1234
商務智能(BI)
商務智能將數據進行整理規範
後勤數據統計分析
BW的報表是由各模塊的數據經過抽取到數據倉庫,然後以一定的規範做報表
ABAP直接從ERP中做報表
ETL:數據的導入傳輸
多維分析是給管理層的決策用的,綜合的
多維數據集(CUBE)
度量值:數量、金額;組成了事實表
維度:從哪個方面分析數據(時間維度、業務分類維度等,除了量金額的都叫維度)
多維數據集的結構
上卷(聚合、合併):1.各個季度合併成年,從圖上看,是第一季度和第二季度合併成上半年,第三季度第四季度合併成下半年。
2.消除維度,變成平面圖看
下鑽:將季度分開成月
切片:立體正方形切成單面
切塊:立體正方形切成塊
轉軸:立體正方形轉個
Cube是BW的常見的操作
統計表的組成,列、行、自由特性
數據倉庫,ETL抽取、轉換、裝載
BW中的,OLAP在線分析;R/3中的,OLTP
BW數據倉庫中開發時常用的詞:第一層就是PSA(一個存儲的空間,選擇性的過濾一些數據放到PSA中比如選擇某個公司下的)、然後是DSO(抽取加工轉換,進行運算,合併數據提高性能)、Info Cubes(加載到多維立方體中)再通過多個工具轉換
Eg.要看三年的營業收入的數據,關注每一個月(DSO)
處理鏈:安排好任務的先後順序,到點會做處理
Cube是最重要的*******
切片、切塊:在日曆年、物料等上點右鍵,過濾器——選擇篩選值,填入篩選的值
很少用到轉軸功能,一般都是關鍵值在列上
打開一個報表
全局變量下:日曆日 2009.01.01 – 2009.12.31(之間用空格隔開)
物料 //可不輸
公司代碼 //可不輸
變量前面帶*號的是必輸的,不輸的是默認的當前權限下可看的報表信息。
物料可選擇多個物料,並存入可用變式裏,那麼就自動保存了,每次進去直接選擇原來保存的可用變式即可。
過濾報表:右上角過濾器
下溯跟下鑽差不多,在列裏的日曆月右鍵更改下溯-下溯曲(垂直、水平曲線),可以刪除,恢復原來的顯示
行上面是維度,列是關鍵值
數據倉庫
聯機事務處理(OLTP)
ABAP報表更新快,隨時可查
數據倉庫的四個特點要記住:面向主題、集成的、數據不可更改、隨時間變化的
數據倉庫,數據具有不同的細節級
粒度這個詞很重要
分割。。。。。。。。。。。。
事實表只記錄業務的量和金額,事實表的列(指標)少,但是記錄行數缺相當大
BW中做了擴展的星形結構
在BW中的信息對象的概念:特性、指標
信息立方體
事實表最多可以有16個維度表
BW報表操作,三範式,數據倉庫,
BW開發工具------Query Designer
關鍵值、特徵、變量、例外條件
開始----程序
進入主界面後,查詢(新建、打開)
試圖
最右邊的技術名稱,[關鍵]文本,關鍵字有且唯一的標識
打開查詢;選擇查詢:查找
歷史
收藏夾
角色(還沒用到)
信息範圍:將所有的報表按照模塊分類
過濾器中,紅色=,就是不等於,例如合同編號 =[#],就是將帶着些符號的都過濾掉
描述是表頭名字
屬性----顯示----小數位數(數量3位的,金額2位的)
屬性-----轉換(統一單位,kg、t等進行統一,目標單位統一爲一個單位)
任務=---查詢----另存爲,可對相似的報表直接複製,在修改即可
禁止用零,一般規定行爲零就禁止,不會啓用列爲零禁止。
新選擇是CUBE裏已存在的關鍵值,新公式
NDIV0(X):被0除時等於0,否則爲X
例如:銷售數量爲0,收入不是0,
技術名稱,唯一的標識每張報表
保存時的技術名稱是有規範的
技術名稱:X表示三級企業開發的,RCSCCCA01是該報表基於的CUBE的編號
限制關鍵值、計算關鍵值
信息立方體:一個信息立方體只能有一個事實表和最多16個維度表,有3個維度是SAP自動維護的(時間、單位、信息包),剩下只有最多13個維度表能我們自己設計。
三個倉庫:目標(信息對象、信息立方體、DSO)
PSA
數據源
兩個車:信息包:把外部的數據源抽取到PSA裏
DTP:數據傳輸過程
一個轉換:容器---容器間進行加工,這之間要用到轉換
Rsa1-----數據倉庫工作臺(建模)
數據源裏提供的字段對應下一個數據目標,就叫轉換
總結:ERP——>PSA——>DSO數據存儲對象——>DSO——>信息立方體——>query designer——>BO——>儀表盤
PI培訓
IR ——>ID——>IE