| |
1. program structure | |
ABAP的program structure可大約分為變數宣告/initialization/start-of-selection/end-of-selection四個大階段 | |
1.1 變數宣告 | |
此階段為程式或報表做變數宣告(data)或是自定義變數形態(types)的區塊 | |
1.2 initalization | |
此階段主要是要將一些變數或是畫面上的欄位給定初始值;如將變數a指定初始值為10 此階段要定義好下條件的畫面layout,即用selection screen 語法 Initalization階段完成后,就會出現和user互動的畫面 | |
1.3 start-of-selection | |
出現下條件畫面后,開始要設定下完條件后,如何捉取資料;即按下執行(f8)后要做的動作 此階段可以用at-selection-screen來驗証,輸入條件畫面的資料是否符合邏輯,如應是輸入數字欄位則不應輸文字 請留意此階段是在輸入條件畫面之后,且開始執行捉取資料的邏輯,所以此階段不會有畫面輸出 | |
1.4 end-of-selection | |
此階段主要是在執行捉取資料后(start-of-selection)且在輸出結果畫面前,再做一些運算。主要是應用在一些執行結果的檢驗或是再輸出資料前再排除部份資料等等 此階段后面可以放一些子程式即FORM語法,可以讓前面的start-of-selection/end-of-selection呼叫 | |
範例 | |
REPORT ZSCREEN_TEST12. |
我的網誌清單
20120321
ABAP-03 Program Structure
20120316
20120313
ABAP_常用icon
| |
1.ICON | SAP會有一些常用的ICON圖形,可以在自行開發的程式中使用 |
TX:SA38 程式名:RSTXICON | |
選ICONS as ABAP list | |
若要使用就是用code 這欄,並前后用@包夾;如@2J@。 | |
Code的前后要用@包夾 | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
20120312
ABAP-01 BASIS CONCEPT
| |
1. Repository & dictionary的差異 | |
All programs are stored in the R/3 Repository =>A program is simply an object. | |
All definitions are kept in the data dictionary =>.e.g. variable descriptions and parameters of fields. | |
1.1 The ABAP/4 Dictionary is the central facility in the system where you can create and maintain data declarations, tables, structures and aggregated objects. | |
1.2 Since it is integrated into the ABAP/4 Development Workbench as an active component, any change made in the ABAP/4 Dictionary takes immediate effect in programs affected. | |
1.3分為三大type filed type=>data element/transparent field structure type=>structure/transparent table table type=>internal table | |
2. An ABAP/4 program consists of individual statements | |
2.1 Each statement must end with a period(.) | |
2.2 The first word of a statement is known as the key word. | |
2.3 Words are separated from each other by at least one blank. | |
2.4 Statements can be indented. | |
2.5 Statements can extend over several lines. | |
3. You can concatenate several consecutive statements with an identical key word (e.g. WRITE: ). | |
3.1 Follow the key word with a colon(:) | |
3.2 Separate each concatenated part with a comma. | |
3.3 End the lines of the concatenated statements with a period. | |
4.You can insert comments into a program in two ways: | |
An asterisk (*) in column 1 flags the whole line as a comment. A quotation mark (“) within a line flags the remainder of the line as a comment. | |
5. A quotation mark (“) within a line flags the remainder of the line as a comment. | |
Double-clicking on the Tables: statement in the editor will display how the table is defined in the data dictionary. | |
6. ABAP 數據類型及定義 | |
C=>字元型態,預設長度1,最大長度無限制,預設值是空白 (所以下sql語法進db拉資料時需轉為=' ') N=>數字型態,預設長度1,最大長度無限制,不可進行運算,如電話 F=>Floatiog Point P=>Packed,相似於數字型態,預設長度1,預設值為零,最大長度為16位,如金額 I=>整數型態,預設長度1,預設值是零,此類型的數字才可進行數值運算 D=>日期型態,標準長度固定為8位,格式為YYYYMMDD T=>時間型態,標準長度固定為6位,格式為HHMMSS X=>16進位,預設長度為2,預設值為零零,最大長度無限制 | |
7.OTHER | |
DAILOG 就算你是Z/Y開頭 但是SAP會加前置SAP SA38可直接執行PROGRAM 不能修改 data **** WITH HEADER LINE ==>INTAB+ WA tables ==>wa funcation group==>??? update==> 單純update modify==>找不到就insert cs_bOM_EXPL_MAT_V2==>EXP BOM | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
ABAP-02 DATA/TYPE/WA/ITAB
ABAP-02 DATA/TYPE/WA/ITAB | |
1. 概論 | |
ABAP語法的結尾為 . 備註為"或* | |
| |
2. 變數的宣告(data) | DATA : <變數名>(<長度>) TYPE <數據類型> VALUE <預設給定值> . DATA后的':'為宣告多個變數時用的,若只是宣告一個變數可以不用 |
範例:宣告一變數名為CHAR1長度20/型態為字元/預設值為'我愛地球' | DATA : CHAR1(20) TYPE C VALUE '我愛地球' . |
範例:宣告一變數名為CHAR1長度20/型態為字元/預設值為'蔚然天空',並宣告另一變數CHAR2,其相關宣告皆同CHAR1 | DATA : CHAR1(20) TYPE C VALUE '我愛地球' , CHAR2 LIKE CHAR1 . |
3. 常數的宣告(CONSTANT) | |
常數是指程式一但於執行期間,此數值皆不能被改變,並於后續可被引用 | |
範例:宣告一變數名為CON長度20/型態為I/預設值為'3' | DATA : CON(20) TYPE I VALUE 3 . |
4. 自行定義變數型態(TYPES) | |
ABAP預設定義的變數型態有8種,若不符使用時可自行定義,甚至可以自行定義一串變數型態的組合,稱為STRUCTURE(結構) | |
範例:自定二個變數型態,一為NAME,一為TEAMS,宣告二個變數名為PLAYER及NICKNAME/型態為先前自定義的變數型態NAME/預設值為'蔚然天空' ,宣告二個常數名為TEAM1及TEAM2/型態為先前自定義的變數型態TEAMS/預設值為'蔚然天空' | TYPES : NAME(10) TYPE C, TEAMS(20) TYPE C . DATA : PLAYER TYPE NAME VALUE '蔚然天空', NICKNAME LIKE PLAYER . CONSTANT : TEAM1 TYPE TEAMS VALUE '甲組' , TEAM2 TYPE TEAMS VALUE '乙組' . |
範例:定義一結構型態EMP,各欄位型態同USER21的相對應欄位 | TABLES : USER21 . TYPES : BEGIN OF EMP, NAME LIKE USER21-BNAME, TELNUM LIKE USER21-PERSNUMBER, ADDR LIKE USER21-ADDRNUMBER, END OF EMP. |
5. WORKING AREA的宣告 | |
WORKING AREA是屬於STRUCTURE的一種,其只有存單一筆RECORD,其宣告同一般變數宣告方式 | |
DATA : BEGIN OF <WA名稱>, TYPE <數據類型> VALUE <預設值> , TYPE <數據類型> VALUE <預設值> , END OF <WA名稱> . | |
範例:宣告一WA名為USERINF,其包含三個欄位工號型態C/姓名型態為C/電話型態N | DATA : BEGIN OF USERINF, SID(10) TYPE C, "工號 NAME(10) TYPE C, "姓名 TEL(10) TYPE N, "電話 END OF USERINF . |
範例:WA也可以用LIKE的方式 | DATA : USER2 LIKE USERINF . |
範例:宣告一WA名為EMP,其繼承了USERINF的三個欄位,並再加入了生日型態D/地址型態為C | DATA : BEGIN OF EMP, INCLUDE STRUCTURE USERINF, BIRDATE TYPE D, ADDR(300) TYPE C, END OF EMP. |
6. INTERNAL TABLE的宣告 | |
INTERNAL TABLE亦是屬於STRUCTURE的一種,其存有多筆RECORD(WA是存有單一筆record的structure) 可分類為STANDARD/SORTED/HASHED三種類型 UNIQUE/NON-UNIQUE=>指定key值,只能用於SORTED及HUSHED的TABLE上 WITH HEADER LINE=>此INTERNAL TABLE包含了一個WA INITIAL SIZE n=>指定一開始的internal table的大小 宣告的語法非常彈性,所以很容易形成WA及ITAB的混淆(原則上wa只有一筆資料) | |
以下的範例是具有連貫性 | |
範例:自行定義一個結構型態,其可能為WA或ITAB | TABLES : USER21 . *如下定義了一個結構型態叫EMP,這個結構有可能是WA或是ITAB TYPES : BEGIN OF EMP, "此型態為WA NAME LIKE USER21-BNAME, TELNUM LIKE USER21-PERSNUMBER, ADDR LIKE USER21-ADDRNUMBER, END OF EMP. TYPES : BEGIN OF EMP OCCURS 0, "此型態為ITAB NAME LIKE USER21-BNAME, TELNUM LIKE USER21-PERSNUMBER, ADDR LIKE USER21-ADDRNUMBER, END OF EMP. |
範例:如下宣告一個STNADARD 的ITAB名叫EMPTAB,起始大小為10,並且具有HEADER LINE,其意義為先將ITAB的結構先定義為一個型態,之后用宣告變數的方式,將某個變數的型態等同於此自行定義的結構,以省掉用宣告去指定每一個ITAB中欄位的定義 | DATA : EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH HEADER LINE . |
範例:如下宣告一個STANDARD的ITAB名叫EMPTAB2,其架構相似於EMPTAB(此為ITAB),且不具有HEADER LINE | DATA : EMPTAB2 LIKE STANDARD TABLE OF EMPTAB . |
範例:如下宣告一個ITAB名叫EMPTAB3,其架構相似於EMPTAB,因EMPTAB為STANDARD,故EMPTAB3會承接此屬性,並其指定起始大小為10且具有HEADER LINE(OCCURS 等於指定了INITIAL SIZE及WITH HEADER LINE) | DATA : EMPTAB3 LIKE EMPTAB OCCURS 10 . |
範例:如下宣告一個SORTED的ITAB名叫EMPTAB4,其key值為NAME這個欄位,並指定起始大小為10及具有HEADER LINE | DATA : EMPTAB4 LIKE SORTED TABLE OF EMPTAB WITH UNIQUE KEY NAME INITIAL SIZE 10 WITH HEADER LINE. |
範例:如下宣告一個HUSHED TABLE名叫EMPTAB5,其架構相似於EMPTAB,其沒有指定key值並具有HEADER LINE | DATA : EMPTAB5 LIKE HUSHED TABLE OF EMPTAB WITH NON-UNIQUE WITH HEADER LINE. |
| |
7. WA/ITAB給值的方式 | WA可直接給值 ITAB若有HEADER LINE(可當做一個WA)可直接把值給WA,再APPEND到ITAB的最后一筆,若沒有HEADER LINE,則需借用其他的WA,把值給這個WA,再APPEND到ITAB的最后一筆,或是用OPENSQL直接INTO到ITAB中 |
範例:定義一個WA后,直接給定值 | DATA : BEGIN OF USERINF, SID(10) TYPE C, NAME(20) TYPE C, TEL(20) TYPE N, END OF USERINF . DATA : USER2 LIKE USERINF . USERINF-SID = '10913060'. USERINF-NAME = 'SKYSTUDIO'. USERINF-TEL = ' 04-22223333 '. USER2 = USERINF . WRITE : USER2, USERINF-SID . *輸出結果 10913060 SKYSTUDIO 04-22223333 10913060 |
範例:APPEND INTO ITAB宣告一個ITAB WITH HEADER LINE,故可以直接給值並放到ITAB的最后一筆 | TABLES : USER21 . DATA : BEGIN OF EMP OCCURS 0, NAME LIKE USER21-BNAME, TELNUM LIKE USER21-PERSONNUMBER, ADDR LIKE USER21-ADDRNUMBER, END OF EMP. EMP-NAME='SKYSTUDIO' . EMP-TELNUM='04-22223333' . EMP-ADDR='HSINCHI' . APPEND EMP. |
範例:ITAB沒有HEADER LINE所以需靠一個外部的WA把值並放到ITAB的最后一筆 | TABLES : USER21 . DATA : BEGIN OF EMPTAB, "此為WA NAME LIKE USER21-BNAME, TELNUM LIKE USER21-PERSONNUMBER, ADDR LIKE USER21-ADDRNUMBER, END OF EMPTAB. DATA : EMP LIKE STANDARD TABLE OF EMPTAB. "此為ITAB並可改寫為 EMP TYPE STANDARD TABLE OF EMPTAB EMPTAB-NAME='SKYSTUDIO' . EMPTAB-TELNUM='04-22223333' . EMPTAB-ADDR='HSINCHI' . APPEND EMPTAB INTO EMP . "將WA的值寫到ITAB |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|