APAP4基本语法参考

更新时间:2024-04-09 14:48:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1. ABAP/4 Introduction

?Introduction

ABAP/4(Advanced Business Application Programming)是SAP/R3目前唯一的系統發展工具, 屬 4GL, 語法比較近似Visual Basic或JAVA, 和傳統third-generation 語言, 如C,PASCAL 有很大不同, 在程式模組(Program Structure Module)可分以 下三個部分:

1.Sequential coding within processing block

與一般語言語法近似, 如IF,WHILE等, 但並沒有GOTO敘述

2.Reports

呼叫一個獨立的事件(Depending Event), 讀取database 產生資料列表

3.Dialog

螢幕參數輸入的對話框, 專門處理database 讀取或異動的tranaction process

?Basic Languange Overview

1.data element 宣告方式, 如數值, 字元資料變數宣告 2.運算元(operate)使用, 如 + - * / 3.Control element使用, 如Boolean 值 4.特殊資料格式, 如日期與時間

5.字串字料處理function, 如部分字串的截取 6.副程式或自定函數的呼叫 7.SQL語法使用

8.資料結構的使用, 如process internal table的宣告與使用

?Reports Overview

1.Reports Task, 如報表螢幕預覽或印表機列印的選擇 2.Reports 模組是一個Stand-along 程式,

3.database讀取方式, 如可定義logical database(與磁碟的physical storage對映) 4.報表資料的計算與產生 5.報表的輸出

?Dialog Overview

1.專處理database 的讀取與異動, 如使用SQL 指令

2.Dialog 不是一個Stand-Along Progarm, 使用transaction code來產生螢幕對話框 3.由flow logic 控制, flow logic分成PBO(Process Before Output)與PAI(Process After Input)

1

2.Begin To Programming

2.1 ABAP/4 Editor

?Creating ABAP/4 Program

使用ABAP Workbench撰寫程式(Choose Tools->ABAP/4 Workbench, Transaction Code: S001), 螢 幕如下:

可分成:

1.ABAP/4 Editor :針對簡單的報表或程式, 僅使用幾個元件或不使用 2.Obiect Browser :針對複雜的報表或程式, 如Dialog Transaction Module 撰寫

?使用ABAP/4 Editor 撰寫程式

1.ABAP/4 Editor 畫面如下(Transaction Code:SE38):

2

2.輸入程式名稱, 如果是新程式, 按下”Create”, 如果修改已存在程式, 則按下”Change”或F6鍵 在命名規則上, Reports程式為 Yaxxxxxx或Zaxxxxxx, a表application module簡稱, 如s表SD Dialog程式為SAPMYxxx或SAPMZxxx

3.輸入程式Attribute

(1).Title:程式描述或功能說明

(2).Type:Execute mode: 1: Stand-along Program 如Reports I: Include Program M: Module Pool F: Function Group S: Subroutine Pool

(3).Status:Program development status: P: SAP standard production program K: Customer production program S: System program T: Test program

(4).Application: 程式所屬的application module, 如F表 Financeial acounting

(5).Development class: 用於同一系統中各個program, 如果不屬任一class, 可使用$TMP

3

4.撰寫Source Code

Program 之後接的是程式名稱, Write 是顯示的意思, 會將所接的字串在螢幕上顯示, 注意每一 行最後要有一個 . (點), 表示敘述的結束, 儲存後回ABAP/4 Editor畫面

5. 執行程式

按”Execute”或F8鍵, 螢幕可見執行所得的結果

?重要的編輯鍵 key F8 F5 F11 CTRL+F11 Function 執行程式 複製游標所在列的內容 儲存檔案 刪除游標所在列

4

2.2 ABAP/4 Data Element

?Data Type

ABAP/4 的資料型態可分成:

Type Length Range Initial Value Description

C 1 1-65535Byte Space 字串資料, 如?Program? D 8 8Byte ?00000000? 日期資料, 格式為YYYYMMDD F 8 8Byte 0 浮點數 I 4 -2^31至2^31-1 0 整數

N 1 1-65535Byte ?00…0? 數值所組成的字串 P 8 1-16Byte 0 Packed 數, 用在小數點數 T 6 6Byte ?000000? 時間資料, 格式為HHMMSS X 1 1-65535Byte X?00? 16進位數

?變數宣告

變數宣告包含 name, type, length 和 structure四個部分, 使用 DATA 指令, 如

DATA: S1 TYPE I, SUM TYPE I.

?常數宣告

常數宣告使用 CONSTANTS 指令, 如宣告 PI 是一個小數點5位的值 3.14159,

CONSTANTS PI TYPE P DECIMALS 5 VALUE ?3.14159?.

?系統所定義資料

這是由系統所定義的專有名辭, 如 SPACE 空白字串

SY-SUBRC 系統執行傳回值, 0 表示成功 SY-UNAME logon 帳號 SY-DATUM 系統日期 SY-UZEIT 系統時間

SY-TCODE 目前的transaction code

5

?TYPE 敘述

用來指定資料型態或宣告自定資料型態 Example:

TYPES: BEGIN OF MYLIST, NAME(10) TYPE C, NUMBER TYPE I, END OF MYLIST. DATA LIST TYPE MYLIST.

?LIKE 敘述

跟TYPE敘述使用格式相同, 如

DATA TRANSCODE LIKE SY-TCODE.

不同的是 LIKE 用在已有值的資料項, 如系統變數, 而TYPE敘述則是用 在指定資料型態。

?DATA 敘述

語法:

DATA [] [] []

: 變數名稱, 最長30個字元, 不可含有 + . , : ( ) 等字元

: 資料型態及長度, 如 LINE(20) TYPE C. MYNAME LIKE SY-UNAME. : 初值 : 小數位數

Example:

DATA: COUNTER TYPE P VALUE 1, FLAG TYPE C VALUE IS INITIAL,

WEIGHT TYPE P DECIMALS 2 VALUE ?1.25?.

欄位變數的宣告:

DATA: BEGIN OF ADDRESS, NAME(10) TYPE C , NUMBER TYPE P, END OF ADDRESS.

使用時用欄位變數加上元件名稱, 如 ADDRESS-NAME

6

?CONSTANTS 敘述

用來宣告常數 語法:

CONSTANTS [] [] []

Example:

CONSTANTS: CNAME(10) VALUE ?周慶日?,

BIRTH_DAY TYPE D VALUE ?19650201?.

?STATICS 敘述

宣告的變數僅在目前的程式中使用, 結束後會自動釋放 語法:

STATICS [] [] []

?TABLES 敘述

用來宣告 Table Work Area 的資料, 對映至 ABAP/4 資料檔(Dictionary Object), 由SQL 指令載入所需資料 語法:

TABLES

Example:

TABLES: SPFL.

SELECT * FROM SPFL.

WRITE: SPFL-MANDT, SPFL-CARRID,SPFL-CONNECTION. ENDSELECT.

從ABAP/4 Dictionary 的 SPFL 檔載入MANDT,CARRID,CONNECTION三個欄位至 SPFL 此Table Work Area

7

2.3 Outputting Data to Screen

?Write 敘述

ABAP/4 用來在螢幕上輸出資料的指令是 Write 指令

語法:

Write 資料項

資料項可以是常數或變數, 如: WRITE ?This is sample?.

WRITE: ?COMPANY:?,STFL-CARRID.

?指定螢幕位置顯示

語法:

Write AT [/] [] [()] 資料項 / : 先往下一列 pos : 螢幕X軸座標 (len): 顯示資料的長度

Example:

WRITE ?First Line ?. WRITE / 6 ?Second Line?. 輸出結果:

First Line Second Line

DATA: NUMBER TYPE I VALUE ?1234567890?. TEXT(10) VALUE ?ABCDEFGHIJ?. WRITE: (5) NUMBER, /(6) TEXT. 輸出結果: *7890 ABCDEF

?指定顯示格式

語法:

WRITE 資料項 <顯示格式參數> 顯示格式參數:

LEFT-JUSTIFIED 資料靠左顯示

8

CENTERED 資料靠中間顯示 RIGHT-JUSTIFIED 資料靠右顯示

UNDER 在資料項的X軸開始座標顯示 NO-GAP 緊接著顯示, 不留空格

USING EDIT MASK 使用內嵌字元顯示, 如 11:20:30 USING NO EDIT MASK 不使用內嵌字元

NO-ZERO 數字前面0 的部分不顯示 NO-SIGN 不顯示正負號 DECIMALS 顯示 d 位小數位數 EXPONENT F(浮點數) exponent 的值 ROUND 四捨五入至小數位數下 r 位 CURRENCY 幣別顯示 DD/MM/YY 日期顯示格式 MM/DD/YY DD/MM/YYYY MM/DD/YYYY DDMMYY MMDDYY YYMMDD Example:

DATA: X TYPE I VALUE ?112030?, A(5) VALUE ?ABCDE?.

WRITE X USING EDIT MASK ?__:__:__?. 輸出結果為 11:20:30

WRITE X USING EDIT MASK ?$___,___? 輸出結果為 $112,030

?產生空白列 產生 n 個空白列

語法:

SKIP [] Example:

WRITE ?PASS1?. SKIP.

WRITE ?PASS2?.

9

輸出結果為: PASS1

PASS2

?顯示圖示

可以顯示R/3 系統所提供的符號或圖示 語法:

WRITE AS SYMBOL WRITE AS ICON Example:

INCLUDE INCLUDE

WRITE: / ?Phone Symbol:? , SYM_PHONE AS SYMBOL. WRITE: / ?Alarm Icon:? , ICON_ALARM AS ICON. 執行結果:

要查看系統所提供有那些符號及圖示, 可選擇 “Edit” 下的 “Insert Statement”, 選擇 “WRITE”

接下來選擇要查的群組, 如SYMBOL 或 ICON, 按下 “Display” 即可.

?跳至指定列座標

將座標跳至指定的Y軸列座標 語法:

SKIP TO LINE []

Example:

SKIP TO LINE 5. WRITE ?PASS1?.

10

?顯示 CHECK BOX 資料

以字串資料內容的第一個字元為 CHECK BOX的輸出, 如果是空白, CHECK BOX 顯示 為空白, 相反則顯示 X , 可用在邏輯判斷檢查 語法:

WRITE <資料項> AS CHECKBOX.

Example:

DATA: FLAG1 VALUE ? ? . FLAG2 VALUE ?X?.

WRITE: / ?CHECK FLAG 1:? , FLAG1 AS WRITE: / ?CHECK FLAG 2:? , FLAG2 AS 執行結果:

11

CHECKBOX. CHECKBOX. 2.4 Processing Data

?Assign Value

語法:

MOVE TO

將F1的值存至變數 F2 中, 也可寫成 F2 = F1 Example:

M_NAME = ?CHER?.

?使用 Offset

語法:

MOVE [+] TO [+] Example:

DATA: F1(10) VALUE ?ABCDEFGHIJ?. F2(5).

F2 = F1+3(5). “自第4個位置開始取出5個字元 F2 的內容會變成 DEFGH

?Field String 元件的複製

語法:

MOVE –CORRESPONDING TO .

將Strings1中的field元件的資料複製至String2中, 僅複製相同名稱的元件 Example:

DATA: BEGIN OF ADDRESS,

FIRSTNAME(10) VALUE ?LULU?, LASTNAME(10) VALUE ?CHOU?, TEL(12) VALUE ?4660570?, END OF ADDRESS. DATA:BEGIN OF NAME, FIRSTNAME(10), LASTNAME(10), E_MAIL(30), END OF NAME.

MOVE-CORRESPONDING ADDRESS TO NAME.

NAME-FIRSTNAME 變成 ?LULU?, NAME-LASTNAME 變成 ?CHOU?,

12

而 NAME-E_MAIL 則不變

?變數 CALL BY VALUE 的使用

在變數的使用上, 可以使用類似Call By Value 的方法 語法:

WRITE () TO Example:

DATA: NAME(20) VALUE ?SOURCE?, SOURCE(10) VALUE ?LILY?, TARGET(10).

WRITE (NAME) TO TARGET. WRITE / TARGET. 螢幕可印出 LILY

?清除變數內容

語法:

CLEAR

清除變數現在內容, 恢復成初值 Example:

DATA N TYPE I VALUE 100. CLEAR N.

變數 N 的內容變成 0

?算術符號

** 乘冪 * 乘 / 除 + 加 - 減

DIV 整數除法 MOD 餘數除法

13

?數值函數

1.ABS(N): 傳回數值 N 的絕對值 2.SIGN(N): 1 if N > 0

0

if N = 0

-1 if N < 0

3.CEIL(N): 傳回大於數值N的最小整數 Example:

WRITE CEIL(-5.65) 印出 –5.00 WRITE CELL(4.54) 印出 5.00 4.FLOOR(N): 傳回小於數值N的最大整數 Example:

WRITE FLOOR(-5.65) 印出 –6.00 WRITE FLOOR(4.54) 印出 4.00 5.TRUNC(N): 傳回數值N的整數部分 Example:

WRITE TRUNC(5.65) 印出 5.00 6.FRAC(N): 傳回數值 N 的小數部分 Example:

WRITE FRAC(5.65) 印出 0.65

7.COS(A),SIN(A),TAN(A): 傳回三角函數 cos A, sin A, tan A 的值, A 為弳度量 8.EXP(N): 傳回 e^N 值 8.LOG(N): 傳回 log eN 值 9.LOG10(N): 傳回 log N值 10.SQRT(N): 傳回 N 的平方根值

?日期與時間運算

1.日期資料的運算

日期資料可以直接運算, 如加法與減法的運算 Example:

DATA: Mdata TYPE D.

Mdate = SY-DATUM. “ 如傳回 19971015 Mdate+6(2) = ?01? “ Mdate 變成 19971001 Mdate = Mdate - 1 “ Mdate 變成 19970931

14

2.時間資料的運算

時間格式為 ?hhmmss?, 如 ?212030? 表 ?21:20:30? Example:

DATA: HOURS TYPE I, MINUTES TYPE I,

T2 TYPE T VALUE ?200000?, T1 TYPE T VALUE ?183000?. HOURS = (T2 - T1) / 3600. “計算有幾小時 MINUTES = (T2 – T1) / 60. “計算幾分鐘

?字串資料處理

1.字串移位 語法:

SHIFT [BY PLACES] [] : (1).空白, 字串往左移一位 (2).LEFT, 字串往左移 n 位 (3).RIGHT, 字串往右移 n 位 (4).CIRCULAR: 字串以環狀方式移位 Example:

DATA STRING(10) VALUE ?ABCDEFGHIJ?. SHIFT STRING. “得到 BCDEFGHI?

SHIFT STRING BY 2 PLACES RIGHT. “得到 ABCDEFGH 2.取代字串內容 語法:

REPLACE WITH INTO 將字串 中的 來取代 Example:

DATA: STRING(10) VALUE ?ABCDEFGHI?, STR1(3) VALUE ?DEF?, STR2(3) VALUE ?123?.

REPLACE STR1 WITH STR2 INTO STRING. WRITE / STRING. “得到 ABC123GHI 3.大小寫的轉換 語法:

TRANSLATE TO UPPER CASE. “轉成大寫 TRANSLATE TO LOWER CASE. “轉成小寫

15

4.在字串中尋找部分字串 語法:

SEARCH FOR Example:

DATA STRING(10) VALUE ?ABCDEFGHIJ?.

會回存至兩個變數, SY-SUBRC 和 SY-FDPOS, 若找到則 SY-SUBRC 為 0 SY-FDPOS 存開始位疊, 若找不到則 SY-SUBRC為 4, SY-FDPOS為 0 5.字串長度 STRLEN() Example:

INT = STRLEN(?XYZABC?). “得到 6 INT = STRLEN(?ABC ? ). “得到 3 6.取部分字串 [+][] Example:

DATA T(10) VALUE ?ABCDEFGHIJ?. WRITE / T+2(4). “得到 CDEF

16

2.5 Flow Controlling

?比較符號

1. = 或 EQ : 等於 2. <> 或 >< 或 NE : 不等於 3. < 或 LT : 小於

4. <= 或 LE : 小於等於 5. > 或 GT : 大於 6. >= 或 GE : 大於等於 7. AND : 且 8. OR : 或 9. NOT : 非

?條件述敘

1. IF 述敘

語法:

IF . ELSEIF . ELSEIF . ….. ELSE.

ENDIF.

(1).在每個判斷敘述之後要加上 .

(2).在巢狀迥圈之中無法使用 ELSE 敘述, ELSE 敘述屬 IF 敘述 Example:

IF 3 > 8.

WRITE / ?3 is less than 8?. ENDIF.

17

2. CASE 敘述 語法:

CASE <變數f>. WHEN . WHEN . ….

WHEN OTHERS. ENDCASE. Example:

S = ?A?. CASE S. WHEN ?X?.

WRITE / ?String is X?. WHEN OTHERS.

WRITE / ?String is not X?. ENDCASE.

?迥圈敘述

1.計次迥圈 語法:

DO [n TIMES] [VARYING FROM TO . ENDDO. Example:

DO 2 TIMES. WRITE / ?X?. ENDDO. 執行結果: X X

DO VARYING I FROM 1 TO 10. S = S + I. ENDDO.

18

WRITE: / ,?1+2+3+…+10=?,S 執行結果: 1+2+3+…+10=55 2.條件迥圈

語法:

WHILE . ENDWHILE Example: I = 1. S=0.

WHILE I <= 10. S = S+I. I=I+1. ENDWHILE.

WRITE: / ? 1+2+3+…+10=?,S. 執行結果為: 1+2+3+…+10=55

?迥圈控制敘述

1.CONTINUE 跳至迥圈的下一次 Example:

DO 3 TIMES. IF SY-INDEX = 2. CONTINUE. WRITE / SY-INDEX. ENDDO. 執行結果: 1 3 2.CHECK

CHECK 之後條件成立才繼續往下執行迥圈 Example:

DO 5 TIMES.

CHECK SY-INDEX BETWEEN 2 AND WRITE / SY-INDEX. ENDDO.

19

4. 執行結果: 2 3 4 3.EXIT 跳離迥圈敘述 Example:

DO 10 TIMES. IF SY-INDEX = 4. EXIT. ENDIF

WRITE / SY-INDEX. ENDDO. 執行結果: 1 2 3

?無窮迥圈

DO .

ENDDO.

無窮迥圈必頇配合 EXIT 敘述來執行

20

2.6 Processing Internal Table

?Internal Table 的宣告

ABAP/4的 Internal Table 如同其它語言的陣列結構, 在操作上可以有複製,刪除,新增插入等功

能.

1.使用 TYPE 敘述

語法:

TYPES OCCURS 宣告一個陣列 , 型態為 , 長度為 Example:

TYPES A TYPE I OCCURS 10. A 是個10個元素的數值Internal Table Example:

TYPES: BEGIN OF LINE, COL1 TYPE I, COL3 TYPE I, END OF LINE.

TYPES ITAB TYPE LINE OCCURS 10.

宣告一個Internal Table ITAB, 總共有10個元素, 其WORK AREA 名稱 為 LINE 2.使用 DATA 敘述

若使用DATA敘述來宣告Internal Table, 可分成要不要有HEADER LINE, HEADER LINE 就 是所謂的 WORK AREA, 用在資料的存取上. 語法:

DATA OCCURS [WITH HEADER LINE] Example:

DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.

3.直接宣告, 不使用 WORK AREA 語法:

DATA: BEGIN OF OCCURS , END OF .

21

Example:

DATA: BEGIN OF ITAB OCCURS 10, COL1 TYPE I, COL2 TYPE I, END OF ITAB.

如此產生的Internal Table 不會有 Work Area, 也就是宣告時不會 Reference 其它的 Conponent 宣告

?Append Line

語法:

APPEND [] TO [Initial Line To] [Initial Line To] 為增加一預設初值的元素 Example: 使用 Work Area

DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE.

DATA ITAB LIKE LINE OCCURS 10. DO 2 TIMES.

LINE-COL1 = SY-INDEX. “SY-INDEX為迥圈的 Counter LINE-COL2 = SY-INDEX **2.

APPEND LINE INTO ITAB. “新增至 Internal Table中 ENDDO.

LOOP AT ITAB INTO LINE. “ITAB 總共有兩個元素 WRITE: / LINE-COL1,LINE-COL2. ENDLOOP. 執行結果為:

1 1

2 4

Example: 不使用 Work Area

DATA: BEGIN OF ITAB OCCURS 10, COL1 TYPE I, COL2 TYPE I, END OF ITAB. DO 2 TIMES.

22

ITAB-COL1 = SY-INDEX. ITAB-COL2 = SY-INDEX **2.

APPEND ITAB. “新增至 Internal Table中 ENDDO.

LOOP AT ITAB. “ITAB 總共有兩個元素 WRITE: / ITAB-COL1,ITAB-COL2. ENDLOOP. 執行結果為:

1 1

2 4

?加入另一Internal Table的元素 語法:

APPEND LINES OF [FROM ] [TO ] TO 將的元素加入至中, 可選取自的範圍 Example:

APPEND LINES OF ITAB TO JTAB. 將ITAB所有元素加入JTAB中

?Collect Line

在加入新元素時將有相同standard key(非數值欄位)的數值欄位匯總 語法:

COLLECT [ INTO]

Example:

DATA: BEGIN OF ITAB OCCURS 3, COL1(3) TYPE C, COL2 TYPE I, END OF ITAB.

ITAB-COL1 = ?ABC?. ITAB –COL2 = 10. COLLECT ITAB.

ITAB-COL1 = ?XYZ?. ITAB-COL2 = 20. COLLECT ITAB.

ITAB-COL1 = ?ABC?. ITAB-COL2 = 30.

23

COLLECT ITAB. “匯總COL2 至 COL1=ABC 的元素上 LOOP AT ITAB.

WRITE: / ITAB-COL1,ITAB-COL2. ENDLOOP. 執行結果: ABC 40 XYZ 20

?Insert Line

插入元素在指定的Internal Table位置之前 語法:

INSERT [ INTO] [INITIAL LINE INTO] [INDEX ] Example:

DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE.

DATA ITAB LIKE LINE OCCURS 10. DO 3 TIMES.

LINE-COL1 = SY-INDEX *10. LINE-COL2 = SY-INDEX *20. APPEND LINE INTO ITAB. ENDDO. LINE-COL1=100. LINE-COL2=200.

INSERT LINE INTO ITAB INDEX 2. “插入在位置2之前 LOOP AT ITAB INTO LINE.

WRITE: / SY-TABIX,LINE-COL1,LINE-COL2. “SY-TABIX為Table位置 ENDLOOP. 執行結果:

1 10 20

2 100 200 “插入的元素 3 20 40 4 30 60

24

?插入另一Internal Table元素

語法:

INSERT LINES OF [FROM TO ] TO INDEX

的元素插入至中, 位置在 之前, 可選取自的範圍

Example:

APPEND LINES OF ITAB TO JTAB INDEX 3. 將ITAB所有元素插入JTAB中, 位置在第三個元素之前

?Internal Table元素資料的讀取

語法:

LOOP AT [INTO ] [FROM TO ] [WHERE ] ENDLOOP.

根據設定的範圍選取原素資料, 讀完後自動移往下一筆 Example:

LOOP AT ITAB INTO LINE WHERE COL1 >100. WRITE: / SY-TABIX,LINE-COL1. ENDLOOP.

僅讀取 COL1 > 100 的元素

?讀取Internal Table指定位置的元素

語法:

READ TABLE [INTO ] INDEX 自指定位置 讀取元素資料 Example:

READ TABLE ITAB INTO LINE INDEX 5 讀取 ITAB的第5個元素資料, 放入 LINE的欄位中

?根據欄位內容尋找

語法:

READ TABLE INTO Example:

ITAB-COL1 = ?ABC?.

READ TABLE ITAB INTO LINE.

找出ITAB 中 COL1 欄位內容是 ABC 的元素, 找到的值放入 LINE 中 若找到 SY-SUBRC傳回0, 找不到則傳回 4, 必頇宣告有 work area

25

?異動元素內容

語法:

MODIFY [FROM ] [INDEX ] [TRANSPORTING ] [WHERE ]

TRANSPORTING .. : 指定異動的欄位名稱 Example:

LINE-COL1 = 4. LINE-COL2 = 100.

MODIFY ITAB FROM LINE. 將目前位置元素以LINE的內容異動 Example:

LINE-COL1 = 10.

MODIFY ITAB FROM LINE INDEX 3 TRANSPORTING COL1. 將第三個元素的COL1欄位異動為 10

?Delete Lines

刪除Internal Table 的元素 語法:

DELETE INDEX Example:

DELETE ITAB INDEX 4 刪除第四個元素 加上刪除條件:

DELETE [FROM TO ] [WHERE Example:

DELETE ITAB FROM 3 TO 10. 刪除第3至第10個元素

?Internal Table Sorting

語法:

SORT [] [BY ] ….

[] : 可分成遞減(DESCENDING)和遞增(ASCENDING), 空白表 ASCENDING :為指定的欄位 Example:

SORT ITAB DESCENDING BY COL2. 將 ITAB 根據 COL2欄位遞減排序

26

?計算數值欄位總和

語法: SUM

計算得總和存在work area 中, 但只能存在 LOOP 敘述中 Example:

LOOP AT ITAB INTO LINE. SUM. ENDLOOP.

WRITE: / LINE-COL1,LINE-COL2. LINE-COL1 和 LINE-COL2 存數值總和

?Initial Table

1.REFRESH

使用在沒有 HEADER LINE 的 Internal Table中, 清除所有元素 Example:

REFRESH ITAB.

2. CLEAR [ ]

使用在有 HEADER LINE 的 Internal Table中, 清除所有元素 Example:

CLEAR ITAB[ ].

3.FREE

釋放(Release) Internal Table所佔的記憶體空間, 用在 REFRESH和 CLEAR指令之後 Example:

FREE ITAB.

27

2.7 Processing Dictionary Table

R/3對於存放在Relation Database 的資料可使用 SQL 指令讀取或處理, 指令種類

可分成DDL(Data Definition Language)指令, 如CREATE, 及DML(Data Manipulation Language) , 如 SELECT及INSERT等, 處理方式分成 OPEN SQL 及 NATIVE SQL, 前者在處理時, Database 與Command Interpreter 間有一Buffer區, 如SELECT * FROM…, 後者則直接處理

資料庫, 如 EXCE SQL SELECT…等, 有兩個重要的系統變數: SY-SUBRC: 傳回 0 表成功執行指令, 4 表未找到符合條件資料 SY-DBCNT: 正處理的資料筆數

?TABLES 指令

用於宣告程式中所使用的tables 語法:

TABLES table

?SELECT 指令

自資料庫讀取記錄

語法:

SELECT FROM [INTO ] [WHERE ] [ GROUP BY ] [ORDER BY ]

1.以迥圈方式讀取所有記錄 語法:

SELECT [DISTINCT] * … ….. ENDSELECT.

加上[DISTINCT]會自動去除重覆的記錄 Example:

TABLES SPFLI.

SELECT * FROM SPFLI WHERE COMPANY=?DELTA?. WRITE: / PLANT,TEL. ENDSELECT.

會以迥圈的方式逐筆印出符合條件的記錄

2.讀取單筆記錄 語法:

SELECT SINGLE * FROM …. WHERE….

28

Example:

TABLES SPFLI.

SELECT SINGLE * FROM SPFLI

WHERE PLANT =?CHUNGLI? AND TEL=?4526174?. WRITE: / SPFLI-COMPANY,SPFLI-PLANT,SPFLI-TEL. 3.將讀取的記錄存放至 Work Area 語法:

SELECT ….. INTO Example:

TABLES SPFLI.

DATA WA LIKE TABLES.

SELECT * FROM SPFLI INTO WA. WRITE: / WA-COMPANY,WA-PLANT. ENDSELECT.

逐筆寫入WA 工作區中

4.將讀取的資料寫入 Initial Table 中 語法:

SELECT .. INTO TABLE Example: TABLES SPFLI.

DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. SELECT * FROM SPFLI INTO ITAB. 一次讀10筆(Initial Table的長度)記錄存入 ITAB 中

SELECT .. INTO TABLE PACKAGE SIZE 一次讀取 筆記錄至 中 Example:

TABLES SPFLI.

DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. SELECT * FROM SPFLI INTO ITAB PACKAGE SIZE 5. 一次讀取 5 筆記錄

5.條件敘述 語法:

WHERE

29

(1).BETWEEN AND 之間的條件範圍 Example:

WHERE YEAR BETWEEN 1995 AND 2000.

(2).LIKE

表示條件包含的字串 <1>._:表示一個字元 <2> % : 表示一個字串 Example:

..WHERE NAME LIKE ?LEE%?. 條件為NAME欄位前3個字元為 LEE ..WHERE MODEL LIKE ??%SPS%?. 條件為MODEL欄位包含 SPS的記錄

(3).IN (….) 包含在 的條件 Example:

..WHERE PLANT IN (?TAOYUAN?,?CHUNGLI?,?LIUTU?). 條件為 PLANT 是 TAOYUAN,CHUNGLI或LIUTU的記錄

6.ORDER BY 敘述 指定排序的欄位或順序

(1). ..ORDER BY PRIMARY KEY. 根據 PRIMARY KEY 遞增排序

(2)…ORDER BY [DESCENDING] [DESCENDING] Example:

SELECT * FROM IM ORDER BY PART .

?INSERT 指令

加入一筆記錄至資料庫

1.自 Work Area 工作區 語法:

INSERT INTO VALUES Example:

30

TABLES SPFLI.

DATA WA LIKE SPFLI. WA-NO = ?34051920?. WA-COMPANY=?DELTA?. INSERT SPFLI VALUES WA.

將 ITAB 資料加入 SPFLI中, 也可寫成 INSERT SPFLI FROM ITAB.

SPFLI-NO=?34299876?. SPFLI-COMPANY=?HP?.

INSERT SPFLI FROM SPFLI.

將Work Area SPFLI中的資料加入資料庫檔案 SPFLI中 因Work Area SPFLI的結構與資料檔 SPFLI一樣, 所以也可 寫成 INSERT SPFLI.

2.自 Internal Table 語法:

INSERT FROM TABLE [ACCEPTING DUPLICATE KEY] 將 中非 NULL的資料加入 中, 加上 [ACCEPTING DUPLICATE KEY]能檢查不加入有重覆primary key, 若有重覆則 SY-SUBRC 會傳回 4 Example:

TABLES SPFLI.

DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. ITAB-NO = ?34051920?. ITAB-COMPANY = ?DELTA?. APPEND ITAB. ….

INSERT SPFLI FROM TABLE ITAB ACCEPTING DUPLICATE KEY.

?UPDATE 指令

異動已存在的記錄內容

1.使用 Primary Key 語法:

UPDATE FROM Example:

31

TABLES SPFLI.

DATA WA LIKE SPFLI. WA-NO=?34051920?. WA-COMPANY=?DELTA?. UPDATE SPFLI FROM WA.

如 SPFLI 的 Primary Key是 NO, 則會找到 NO=?34051920? 的記錄, 將其 COMPANY欄位異動為 DELTA

2.使用條件式 語法:

UPDATE SET < f1>=… WHERE 根據條件式異動符合條件式的記錄 Example:

UPDATE SPFLI SET NO=?34051920? COMPANY = ?DELTA? WHERE TEL=?4526107?.

?MODIFY 指令

根據 Primary Key 尋找資料檔中符合的記錄, 若找到則更新異動, 若找不到則新增記錄 語法:

MODIFY FROM Example:

WA-NO=?34051920?. WA-COMPANY=?DELTA?. MODIFY SPFLI FROM WA.

?DELETE 指令

刪除資料檔的記錄

1.使用 Primary Key 語法:

DELETE FROM Example:

TABLES SPFLI.

DATA WA LIKE SPFLI. WA-NO=?34051920?.

32

WA-COMPANY=?DELTA?. DELETE SPFLI FROM WA.

如 SPFLI 的 Primary Key是 NO, 則會找到 NO=?34051920? 的記錄, 找到後將此筆刪除

2.使用條件式 語法:

DELETE FROM WHERE 根據條件式刪除符合條件式的記錄 Example:

DELETE FROM SPFLI WHERE AREA = ?AMERICAN?.

?DATABASE CURSOR

Database Cursor是一個資料庫暫存區, 將經SELECT指令讀取的記錄存放至此暫存區, 再由此暫存區放至Work Area中, 可見少資料庫讀取的次數.

1.開啟 Database Cursor 語法:

OPEN CURSOR FOR SELECT … WHERE Example:

TABLES SPFLI.

DATA: WA LIKE SPFLI, C1 TYPE CURSOR.

OPEN CURSOR C1 FOR SELECT * FROM SPFLI WHERE AREA =?TAIWAN?.

2.讀取 Database Cursor的資料存入 Work Area

語法:

FETCH NEXT CURSOR INTO Example:

FETCH NEXT CURSOR C1 INTO WA.

讀取下一筆Cursor位置的資料存入 WA, 如果已無資料可讀, SY-SUBRC 不傳回 0

4.關閉 Database Cursor 語法:

CLOSE CURSOR

33

Example:

CLOSE CURSOR C1.

?COMMIT WORK 與 ROLLBACK WORK

要確定資料成功寫入資料庫, 可使用 COMMIT WORK 指令, 如: COMMIT WORK.

相反的, 如果反悔要復原, 可使用 ROLLBACK WORK, 可復原在上個COMMIT WORK 指令之後的資料, 如: ROLLBACK WORK.

?使用 NATIVE SQL指令

語法:

EXEC SQL [PERFORMING

]. ] [;] ENDEXEC. Example:

DATA: BEGIN OF WA, NAME(8), AGE TYPE I, END OF WA. DATA F1 TYPE I. FI = 20.

EXEC SQL PERFORMING OUTPUT.

SELECT NAME,AGE INTO :WA FROM NAME_TABLE WHERE AGE >= :F1. ENDEXEC.. FORM OUTPUT.

WRITE: / WA-NAME,WA-AGE. ENDFORM.

34

2.8 ABAP/4 Program Module

ABAP/4中所謂的 Module 在一般語言稱之為Subroutine, 其資料傳遞方式皆相似, 如 CALL BY VALUE,CALL BY REFERENCE 等, 可分成以下幾個部分:

1.Macro Block 2.Include Program 3.Subroutine Program 4.Function Module

?Macro Block &1, &2 至 &9

1.巨集的定義 DEFINE .

<巨集敘述

END-OF-DEFINITION.

2.巨集的呼叫使用 [ ….]

為傳入巨集的參數值, 在參數間至少要給予一個空白

Example:利用巨集計算N次方 DATA RESULT TYPE I. DEFINE MULTI. RESULT = &1 ** &2.

WRITE: / ?&1 ^ &2 = ?,RESULT. END-OF-DEFINITION. MULTI 3 4.

執行結果為 3 ^ 4 = 81

在程式中可以定義一段巨集敘述, 並且可以傳入參數, 參數符號(Placeholder)可自

?Include Program

1.在ABAP/4中可以使用 Include 敘述載入另一個程式的全部敘述, 通常用於共用資料項 的宣告, 很類似C 的Include header file 的做法. 語法:

INCLUDE Example:

35

程式YStart 的內容如下: ***INCLUDE YSTART.

WRITE: / ?User Name = ? ,SY-UNAME. WRITE:/ ?Host Server = ?,SY-HOST. 另一程式如下: PROGRAM YTEST1.

INCLUDE YSTART. “載入 YSstart的所有內容 執行絡果:

User Name = MIS-CHOU Host Server = deidv01

2.Global 變數宣告應用 語法:

DATA: BEGIN OF COMMON PART [],

END OF COMMON PART [] 此常使用在 Include 的檔案中, 如 ***INCLUDE INCOMMON.

DATA: BEGIN OF COMMON PART NUMBERS, MID(8),

MNUM TYPE I,

END OF COMMON PART NUMBERS.

?Subroutine Procedure

在ABAP/4 Subroutine的呼叫可分成 Internal Call和 External Call, 前者撰寫在程式 中, 後者存在另一程式中, 通常為專存放Subroutine的公用程式集, 可提供結不同的 程式呼叫.

1.Subroutine 的宣告 FORM []. ENDFORM. 2.呼叫的方法 (1).Internal Call 語法:

PERFORM [] Example:

NUM1 = 100. NUM2 = 200.

36

PROFORM ADD. FORM ADD.

SUM = NUM1 + NUM2.

WRITE: / ?NUM1 + NUM2 = ?,SUM. ENDFORM.

執行結果: NUM1 + NUM2 = 300 (2).External Call 另一程式 語法:

PERFORM () [] [IF FOUND] :副程式名稱

:存放副程式的程式名稱 IF FOUND: 找到才執行 Example:

PROGRAM FORMPOOL. FORM HEADER.

WRITE: / ?USER NAME: ?,SY-UNAME. ENDFORM.

在程式中呼叫HEADER副程式 PROGRAM YTEST1.

PERFORM HEADER(FORMPOOL) IF FOUND. (3).External Call 另一專存放副程式的程式檔 語法:

PERFORM () [IN PROGRAM () [] [IF FOUND] Example:

存放副程式的程式檔 PROGRAM FORMPOOL. FORM SUB1.

WRITE: / ?USER NAME:?,SY-UNAME. ENDFORM. FORM SUB2.

WRITE: / ?HOST SERVER:?,SY-HOST. ENDFORM.

在程式中呼叫 FORMPOOL中的SUB2 副程式 SUBNAME = ?SUB2?. PROGNAME = ?FORMPOOL?.

PERFORM (SUBNAME) IN PROGRAM (PROGNAME) IF FOUND

37

?參數值的傳遞

在ABAP/4中參數的傳遞可分成

1.Call By Reference:

傳參數時將資料的存放位址(address)傳至參數中, 也就是副程式中的參數變數與外部實際 變數共用位址內的值, 又稱為 Call By Address, 若在副程式中位址中的值改變了, 外部實 際變數的值也會跟著改變. 語法:

FORM [USING …] [CHANGING …] PERFORM [USING …] [CHANGING …] Using 之後接在副程式中不會改變的變數, CHANGING接會改變值的變數 但實際上USING之後的參數在副程式中也可將值改變 Example: SUM = 0.

NUM1 = 100. NUM2=200.

PERFORM ADD USING NUM1 NUM2 CHANGING SUM. WRITE: / NUM1,NUM2,SUM “ SUM 由 0 變成 300

FORM ADD USING NUM1 NUM2 CHANGING SUM. SUM = NUM1 + NUM2. ENDFORM. 執行結果:

100 200 300

2.Call By Value

傳參數時將資料的值複製一份至另一位址中, 所以在副程式中參數變數值改變, 並不會影 響外部實際變數的值. 語法:

FORM USING VALUE(…)

使用 VALUE()表示 是 Call By Value的傳遞 PERFORM USING

Example: SUM = 0. NUM1 = 5.

PERFORM MULTI USING NUM1 CHANGING SUM. WRITE: / NUM1,SUM “NUM1值還是5, SUM 由 0 變成 120 FORM MULTI USING VALUE(NUM1) CHANGING SUM.

38

SUM = 1.

WHILE NUM1 > 1 SUM = SUM * NUM1. NUM1 = NUM1 – 1. ENDWHILE.. ENDFORM. 執行結果:

5 120

3.Call By Value and Return Result

傳入參數值的方式同Call By Value, 但在副程式結束執行時會將傳入的參數值複製 一份傳回給外部實際變數. 語法:

FORM ….. CHANGING VALUE() PERFORM …. CHANGING …. Example:

SUM = 0.

NUM1 = 100. NUM2=200.

PERFORM ADD USING NUM1 NUM2 CHANGING SUM. WRITE: / NUM1,NUM2,SUM “ SUM 由 0 變成 300

FORM ADD USING NUM1 NUM2 CHANGING VALUE(S). S = NUM1 + NUM2.

WRITE: / NUM1,NUM2,SUM “得到結果為 100 200 0 ENDFORM. 執行結果:

100 200 0 “在副程式中 SUM值尚未改變

100 200 300 “返回程式時, 將變數 S的值複製給 SUM “所以 SUM值變成 300

?Subroutine 的控制

5.CHECK

CHECK 之後條件成立才繼續往下副程式敘述 Example:

PERFORM SUB1. CHECK NUM1 < 10.

39

WRITE / NUM1. NUM1 = NUM1 + 1. ENDFORM. 6.EXIT

強迫結束副程式執行, 返回上一層程式敘述

?Function Module

在ABAP/4中的Function Module是儲存在一個函式庫中(library), 系統提供很多內設的 Function Module供程式中呼叫, 也可以自行增加自己的Function Module. 1.叫出已存在的Function Module

(1).在ABAP/4 Development Workbench 畫面中選擇 “Function library”, 可見以下畫面:

(2).選擇”Utility”中的”Find”中輸入要尋找的Function Module 名稱, 如輸入 STRING*, 為找 出前五個字元為 STRING的Function Module:

40

(3).輸入後按下左上的Execute, 可見以下畫面:

(4).選擇要查詢或修改的Function名稱, 如選擇 STRING_LENGTH, 如要查詢可選擇 “Display”, 可見Function Module之各項參數設定:

<1>.Import Parameter: 傳入的參數名稱, 但實際在程式中使用時剛好與Export 相顛們 <2>.Export Parameter: 傳回的參數名稱, 程式中變成 Import 的使用 <3>.Changing Parameter:使用Call By Value and Return Result方法的參數 <4>.Table Parameter: 使用的 Initial Table參數 <5>.Exceptions: 錯誤處理參數

41

如 STRING_LENGTH 為一傳回字串長度的函數, 其設定的參數如下: Import : String 傳入一字串字串資料 Export: Length 傳回的字串長度值

(5).要查看程式內容可按下 “ Source Code”, 顯示其程式內容如下:

function string_length.

length = strlen(string).

endfunction.

(6).函數的呼叫 語法:

CALL FUNCTION IMPORTING F1=a1…. EXPORTING F1=a1…. CHANGING F1=a1… TABLES F1=a1… EXCEPTIONS F1=a1… Example:

DATA: TEXT(20), LEN TYPE I. TEXT = ?ABCDEFGHIJ?.

CALL FUNCTION ?STRING_LENGTH? EXPORTING STRING = TEXT IMPORTING LENGTH = LEN. WRITE / LEN.

注意 EXPORTING與IMPORTING剛好顛倒, 執行所得結果為 10

42

4.螢幕輸入命令

在ABAP/4中要自螢幕輸入變數資料的內容, 使用的命令是 PARAMETERS 及, SELECTION-OPTIONS:

1. PARAMETER: 輸入一個變數或欄位內容

2. SELECTION-OPTIONS: 使用條件篩選畫面來輸入資料

?.PARAMETERS 指令

基本的輸入命令, 類似如BASIC的INPUT命令, 但無法使用F格式(浮點數) 語法:

PARAMETERS

[DEFAULT ] [LOWER CASE] [OBLIGATORY] [AS CHECKBOX] [RADIOBUTTON GROUP ] Example:

PARAMETERS: NAME(8), AGE TYPE I, BIRTH TYPE D. 執行結果:

在日期的輸入格式上為 MM/DD/YY , MM/DD/YYYY, MMDDYY 或MMDDYYYY , 如輸入 020165表 1965年02月01日, 與02/01/65 的輸入是一樣的, 日期輸入範圍為西元1950年至2049年

1.DEFAULT 設定輸入的預設值 Example:

PARAMETERS: COMPANY(20) DEFAULT ?DELTA?, BIRTH TYPE D DEFAULT ?19650201?. 2.LOWER CASE

ABAP/4預設是將字串輸入值自動轉換為大寫, 加上此參數會將輸入的資料 轉成小寫,

3.OBLIGATORY

強制要求輸入, 螢幕上會出現一個 ? , 使用者必頇要輸入才可. 4.AS CHECKBOX 輸入 CHECKBOX的格式

43

Example:

PARAMETERS: TAX AS CHECKBOX DEFAULT ?X?, NTD AS CHECKBOX. 執行結果:

5.RADIOBUTTON GROUP

輸入 RADIO BUTTON GROUP 的方式 Example:

PARAMETERS: BOY RADIOBUTTON GROUP SEX DEFAULT ?X?, GIRL RADIOBUTTON GROUP SEX. 執行結果:

?SELECTION-OPTIONS

條件篩選檢查條件輸入畫面指令, 輸入條件後可配合SELECT指令自TABLE讀取 符合條件的資料, 直接執行或放入 Internal Table中, 條件有四個參數: 1. SIGN:

I: 表篩選條件符合的資料 E: 表篩選條件不符合的資料 2. OPTION: 比較的條件符號

EQ(等於),NE(不等於),GT(大於),LE(小於),CP(包含),NP(不包含) 3. LOW: 最小值 4. HIGH: 最大值 語法:

SELECTION-OPTIONS FOR

Exaample:

TABLES SPFLI.

SELECTION-OPTIONS AIRLINE FOR SPFLI-CONNID. 將條件的輸入值存放入 AIRLINE, 篩選選擇為SPFLI中的 CONNID欄位

44

執行結果:

可直接輸入起始範圍或按下選擇畫面, 輸入完後按下左上角的執行鍵

? 條件輸入選擇畫面

1.自Table中選取

按下輸入項的右邊往下箭頭, 叫出Table中資料項, 選取開始和結束的範圍 2.Selection Options

按下”Selection options”按鍵, , 輸入Option及 Sign參數內容, 螢幕如下:

3.Multi-Options輸入

按下最右邊的Multi-Options輸入鍵, 輸入條件選取的範圍, 畫面如下:

條件輸入完後按下”Copy”按鍵

45

?改變條件輸入格式

1.DEFAULT TO 設定開始結束範圍輸入預設值 Example:

SELECTION-OPTION AIRLINE FOR SPFLI-CONNID DEFAULT ?2042? TO ?4555?.

2.NO-EXTENSION

設定不要Multi-Option輸入畫面 3.NO INTERVALS

設定不要區間範圍輸入畫面 4.LOWER CASE 輸入轉換成大寫 5.OBLIGATORY 強制要求輸入

?配合 SELECT 命令

條件輸入完後要將符合條件的資料篩選出來, 可配合使用 SELECT 指令 1.使用WHERE <條件式>

Example:

SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID.

SELECT * FROM SPFLI WHERE CONNID IN AIRLINE. WRITE: / CONNID,FROMCITY,TOCITY. ENDSELECT.

2.使用CHECK參數 Example:

SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID. SELECT * FROM SPFLI. CHECK AIRLINE.

WRITE: / CONNID,FROMCITY,TOCITY. ENDSELECT. 3.使用 IF … IN 敘述 Example:

SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID. SELECT * FROM SPFLI.

IF SPFLI-CONNID IN AIRLINE. WRITE: / CONNID,FROMCITY,TOCITY.

46

ENDIF ENDSELECT.

?SELECTION-SCREEN

1.產生空白列

語法:

SELECTION-SCREEN SKIP [] Example:

SELECTION-SCREEN SKIP 2. 產生兩列空白列 2.產生底線

語法:

SELECTION-SCREEN ULINE / (length) Example:

SELECTION-SCREEN ULINE /10(30). 自第10格開始產生長度30的底線 3.印出備註說明 語法:

SELECTION-SCREEN COMMENT / (length) Example:

REMARK = ?Pls enter your name?.

SELECTION-SCREEN COMMENT /10(30) REMARK. 4. 同一列中輸入數個資料項

語法:

SELECTION-SCREEN BEGIN OF LINE. ……

SELECTION-SCREEN END OF LINE. Example:

SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 20. PARAMETERS NAME(10).

SELECTION-SCREEN POSITION 40. PARAMETERS BIRTH TYPE D. SELECTION-SCREEN END OF LINE. 在20格輸入NAME內容, 40格輸入 BIRTH的內容

47

5. 繪出BLOCK PANEL

語法:

SELECTION-SCREEN BEGIN OF BLOCK [WITH FRAME [TITLE ]. ……. </p><p> SELECTION-SCREEN END OF BLOCK <block>. Example: </p><p> SELECTION-SCREEN BEGIN OF BLOCK RADIO WITH FRAME . </p><p> PARAMETER R1 RADIOBUTTON GROUP GR1. PARAMETER R2 RADIOBUTTON GROUP GR1. PARAMETER R3 RADIOBUTTON GROUP GR1. SELECTION-SCREEN END OF BLOCK RADIO. </p><p>48 </p><p>5.Standard Report </p><p> 一個典型的報表程式是由許多的程式區塊(Code Block)所組成,在區塊間最好能加上一些 </p><p> 說明以利程式可讀性,一個典型的報表程式格式如下: * </p><p>PROGRAM SOURCE HEADER : 說明程式名稱及目的 * Program Name: * Description: * Date/Author: * Table Update: * Special Logic: * Include: </p><p>*--------------------------------------------------------------- * MODIFICATION LOG : 程式修改更新記錄 </p><p>*--------------------------------------------------------------- * ChangeDate Programmer Request Description </p><p>* ========== ============= ============ ========================== * NEW PROGRAM </p><p>*--------------------------------------------------------------- * REPORT NAME : 宣告程式名稱及報表格式, </p><p>*------------------------------------------------------------------ REPORT Z_____ </p><p> NO STANDARD PAGE HEADING </p><p> MESSAGE-ID __ “ 所使用的MESSAGE LINE-COUNT ___ “ 每頁報表列數 LINE-SIZE ___. “ 每頁報表寬度 * TABLE DESCRIPTION : 宣告程式會使用的TABLE </p><p>*------------------------------------------------------------------ TABLES: </p><p> </p><p>* DATA : 宣告程式所使用的變數及自定型態 </p><p>*---------------------------------------------------------------- TYPES: </p><p>DATA: </p><p>* SELECTION SCREEN / OPTION / PARAMETER : 螢幕輸入報表篩選條件 *----------------------------------------------------------------- SELECTION-SCREEN BEGIN OF BLOCK ____ SELECT-OPTIONS: </p><p> </p><p>49 </p><p> SELECTION-SCREEN END OF BLOCK ___ </p><p>* INITIALIZATION : 啟動程式開始執行, 如SELECT-OPTION及PARAMETER *---------------------------------------------------------------- INITIALIZATION. </p><p>INCLUDE ____. </p><p>* AT START SELECTION : 輸入結束後啟動的區塊, 如按下<F8> </p><p>*--------------------------------------------------------------- START-OF-SELECTION. </p><p> SET PF-STATUS ____. “ 指定報表執行時所用的 GUI-STATUS名稱 </p><p> PERFORM READ_DATA. PERFORM PROCESS_DATA. PERFORM PRINT_DATA. PERFORM PRINT_SUMMARY. </p><p>* AT USER Commaand : 執行在GUI-STATUS中自定的命令 </p><p>*-------------------------------------------------------------------- AT USER_COMMAND. </p><p>* AT LINE SELECTION : 由在報表中按下<F2>或Double-Click啟動 </p><p>*-------------------------------------------------------------------- AT LINE-SELECTION. </p><p>* TOP OF PGAE : 每頁開始列印時執行, 用於定義報表表頭 </p><p>*-------------------------------------------------------------------- </p><p>* END OF PAGE : 報表列印完最後一頁後啟動 </p><p>*--------------------------------------------------------------------- END-OF-PAGE </p><p>* END OF SELECTION : 在結束列印資料後啟動, 如可用來印出USER輸入的條件 *--------------------------------------------------------------------- END-OF-SELECTION. INCLUDE _____ </p><p>* FORM : 撰寫程式中所使用到的副程式 </p><p>*------------------------------------------------------------- * Read Data : 自TABLE讀取資料放入Internal Table </p><p> </p><p>50 </p><p></p> <p>本文来源:<a href="https://www.bwwdw.com/article/s77r.html">https://www.bwwdw.com/article/s77r.html</a></p><span class="doc-download-e"></span> </div> <script type="text/javascript">s("download_bottom");</script> <div class="related_article"> <div class="related_top"><code>相关文章:</code></div> <ul><li><a href="https://www.bwwdw.com/article/s77r.html" target="_blank" title="APAP4基本语法参考">APAP4基本语法参考</a></li><li><a href="https://www.bwwdw.com/article/653o.html" target="_blank" title="APAP4基本语法参考">APAP4基本语法参考</a></li><li><a href="https://www.bwwdw.com/article/qzef.html" target="_blank" title="sql基本语法">sql基本语法</a></li><li><a href="https://www.bwwdw.com/article/pzwv.html" target="_blank" title="Cobol基本语法">Cobol基本语法</a></li><li><a href="https://www.bwwdw.com/article/r1bx.html" target="_blank" title="cobol基本语法">cobol基本语法</a></li><li><a href="https://www.bwwdw.com/article/pmcw.html" target="_blank" title="perl 基本语法介绍">perl 基本语法介绍</a></li><li><a href="https://www.bwwdw.com/article/cyyr.html" target="_blank" title="perl 基本语法介绍">perl 基本语法介绍</a></li><li><a href="https://www.bwwdw.com/article/0uaf.html" target="_blank" title="语法练习4">语法练习4</a></li><li><a href="https://www.bwwdw.com/article/7192.html" target="_blank" title="实验三 JSP基本语法">实验三 JSP基本语法</a></li><li><a href="https://www.bwwdw.com/article/yism.html" target="_blank" title="认识PHP的基本语法">认识PHP的基本语法</a></li></ul> </div> <div class="in_reading"><p class="rel_art_line">正在阅读:</p><p><a target="_blank" href="https://www.bwwdw.com/article/s77r.html" title="APAP4基本语法参考">APAP4基本语法参考</a><span>04-09</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/2j3j.html" title="中小企业留不住人的症结和解决办法">中小企业留不住人的症结和解决办法</a><span>08-20</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/syp8.html" title="原创:新版GMP现场检查指导原则与新版ISO 13485对比(连载一)">原创:新版GMP现场检查指导原则与新版ISO 13485对比(连载一)</a><span>03-23</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/btzf.html" title="208年继续教育(小学数学)专业试题">208年继续教育(小学数学)专业试题</a><span>10-09</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/7d7p.html" title="2011版物理一轮精品复习学案:第一章 机械振动 机械波(选修3-4)">2011版物理一轮精品复习学案:第一章 机械振动 机械波(选修3-4)</a><span>04-25</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/e9n6.html" title="水文地质学基础练习及答案">水文地质学基础练习及答案</a><span>06-01</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/oglt.html" title="上海市教师资格认定条件及2011年秋季申请流程(1)(2011-09-01 08.54.31)">上海市教师资格认定条件及2011年秋季申请流程(1)(2011-09-01 08.54.31)</a><span>11-26</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/y1y6.html" title="数学广角单元教材分析">数学广角单元教材分析</a><span>05-29</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/zti1.html" title="CAD在校施工设计实习日记40篇(1)">CAD在校施工设计实习日记40篇(1)</a><span>06-07</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/m1t7.html" title="安全组织设计">安全组织设计</a><span>05-22</span></p></div> <div class="previous"> <span class="pre">上一篇:<a title="魏都区汽车零部件生产企业名录2018版608家 - 图文" href="https://www.bwwdw.com/article/k77r.html">魏都区汽车零部件生产企业名录2018版608家 - 图文</a></span> <span class="next">下一篇:<a title="财务支出审批权限管理制度" href="https://www.bwwdw.com/article/077r.html">财务支出审批权限管理制度</a></span> </div> </div> </div> <div class="right-side"> <div class="right_fix"> <script type="text/javascript">s("right_top");</script> <div class="hotSearch"><div class="hotSearch_tl"><span></span>相关文章</div><ul><li><span>1</span><a href="https://www.bwwdw.com/article/dy31.html" title="jsj_DELPHI基本语法" target="_blank">jsj_DELPHI基本语法</a></li><li><span>2</span><a href="https://www.bwwdw.com/article/j0e1.html" title="Oracle存储过程基本语法" target="_blank">Oracle存储过程基本语法</a></li><li><span>3</span><a href="https://www.bwwdw.com/article/y6f7.html" title="java基本语法规范" target="_blank">java基本语法规范</a></li><li><span>4</span><a href="https://www.bwwdw.com/article/cbkr.html" title="DB2基本语法" target="_blank">DB2基本语法</a></li><li><span>5</span><a href="https://www.bwwdw.com/article/4tx1.html" title="VHDL语言的基本语法" target="_blank">VHDL语言的基本语法</a></li><li><span>6</span><a href="https://www.bwwdw.com/article/jvlf.html" title="Unit 4 Astronomy语法" target="_blank">Unit 4 Astronomy语法</a></li><li><span>7</span><a href="https://www.bwwdw.com/article/hsw1.html" title="第02讲xml基本语法" target="_blank">第02讲xml基本语法</a></li><li><span>8</span><a href="https://www.bwwdw.com/article/02ro.html" title="实验二 MATLAB基本语法(1)" target="_blank">实验二 MATLAB基本语法(1)</a></li><li><span>9</span><a href="https://www.bwwdw.com/article/p8j6.html" title="JSP实验二 JSP基本语法" target="_blank">JSP实验二 JSP基本语法</a></li><li><span>10</span><a href="https://www.bwwdw.com/article/w8y3.html" title="JSP实验二 JSP基本语法" target="_blank">JSP实验二 JSP基本语法</a></li></ul></div> <script type="text/javascript">s("right_mid");</script> <div class="right_list"><div class="right_list_t"><i></i><span>最新文章</span></div><ul><li><a href="https://www.bwwdw.com/article/inb.html" target="_blank" title="多层物业服务方案">多层物业服务方案</a></li><li><a href="https://www.bwwdw.com/article/hnb.html" target="_blank" title="(审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)">(审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)</a></li><li><a href="https://www.bwwdw.com/article/mnb.html" target="_blank" title="人教版新课标六年级下册语文全册教案">人教版新课标六年级下册语文全册教案</a></li><li><a href="https://www.bwwdw.com/article/jnb.html" target="_blank" title="词语打卡">词语打卡</a></li><li><a href="https://www.bwwdw.com/article/4nb.html" target="_blank" title="photoshop实习报告">photoshop实习报告</a></li><li><a href="https://www.bwwdw.com/article/1nb.html" target="_blank" title="钢结构设计原理综合测试2">钢结构设计原理综合测试2</a></li><li><a href="https://www.bwwdw.com/article/qnb.html" target="_blank" title="2014年期末练习题">2014年期末练习题</a></li><li><a href="https://www.bwwdw.com/article/enb.html" target="_blank" title="高中数学中的逆向思维解题方法探讨">高中数学中的逆向思维解题方法探讨</a></li><li><a href="https://www.bwwdw.com/article/nnb.html" target="_blank" title="名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版">名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版</a></li><li><a href="https://www.bwwdw.com/article/lnb.html" target="_blank" title="北航《建筑结构检测鉴定与加固》在线作业三">北航《建筑结构检测鉴定与加固》在线作业三</a></li><li><a href="https://www.bwwdw.com/article/snb.html" target="_blank" title="XX县卫生监督所工程建设项目可行性研究报告">XX县卫生监督所工程建设项目可行性研究报告</a></li><li><a href="https://www.bwwdw.com/article/knb.html" target="_blank" title="小学四年级观察作文经典评语">小学四年级观察作文经典评语</a></li><li><a href="https://www.bwwdw.com/article/znb.html" target="_blank" title="浅谈110KV变电站电气一次设计-程泉焱(1)">浅谈110KV变电站电气一次设计-程泉焱(1)</a></li><li><a href="https://www.bwwdw.com/article/0nb.html" target="_blank" title="安全员考试题库">安全员考试题库</a></li><li><a href="https://www.bwwdw.com/article/cnb.html" target="_blank" title="国家电网公司变电运维管理规定(试行)">国家电网公司变电运维管理规定(试行)</a></li><li><a href="https://www.bwwdw.com/article/9nb.html" target="_blank" title="义务教育课程标准稿征求意见提纲">义务教育课程标准稿征求意见提纲</a></li><li><a href="https://www.bwwdw.com/article/ukb.html" target="_blank" title="教学秘书面试技巧">教学秘书面试技巧</a></li><li><a href="https://www.bwwdw.com/article/ynb.html" target="_blank" title="钢结构工程施工组织设计">钢结构工程施工组织设计</a></li><li><a href="https://www.bwwdw.com/article/6kb.html" target="_blank" title="水利工程概论论文">水利工程概论论文</a></li><li><a href="https://www.bwwdw.com/article/3kb.html" target="_blank" title="09届九年级数学第四次模拟试卷">09届九年级数学第四次模拟试卷</a></li><li><a href="https://www.bwwdw.com/%E8%AF%AD%E6%B3%95/" target="_blank" title="语法">语法</a></li><li><a href="https://www.bwwdw.com/%E5%8F%82%E8%80%83/" target="_blank" title="参考">参考</a></li><li><a href="https://www.bwwdw.com/%E5%9F%BA%E6%9C%AC/" target="_blank" title="基本">基本</a></li><li><a href="https://www.bwwdw.com/APAP4/" target="_blank" title="APAP4">APAP4</a></li></ul></div> <script type="text/javascript">s("right_bottom");</script> <div class="right_list"><div class="right_list_t"><i></i><span>推荐文章</span></div><ul><li><a href="https://www.bwwdw.com/article/z77r.html" target="_blank" title="唐山市中心区经济适用住房管理实施细则">唐山市中心区经济适用住房管理实施细则</a></li><li><a href="https://www.bwwdw.com/article/977r.html" target="_blank" title="高中化学学习方法指导">高中化学学习方法指导</a></li><li><a href="https://www.bwwdw.com/article/c77r.html" target="_blank" title="豆腐是我们中国人平时吃的最多的美食之一 - 图文">豆腐是我们中国人平时吃的最多的美食之一 - 图文</a></li><li><a href="https://www.bwwdw.com/article/y77r.html" target="_blank" title="一次函数及其性质">一次函数及其性质</a></li><li><a href="https://www.bwwdw.com/article/ug7r.html" target="_blank" title="急诊管理与持续改进细则分解">急诊管理与持续改进细则分解</a></li><li><a href="https://www.bwwdw.com/article/3g7r.html" target="_blank" title="2001年东西部合作与贸易洽谈会调查报告">2001年东西部合作与贸易洽谈会调查报告</a></li><li><a href="https://www.bwwdw.com/article/6g7r.html" target="_blank" title="学习写得充实">学习写得充实</a></li><li><a href="https://www.bwwdw.com/article/7g7r.html" target="_blank" title="鑫禾公司员工手册">鑫禾公司员工手册</a></li><li><a href="https://www.bwwdw.com/article/gg7r.html" target="_blank" title="六年级品社教学工作总结">六年级品社教学工作总结</a></li><li><a href="https://www.bwwdw.com/article/pg7r.html" target="_blank" title="我国注销税务登记制度存在的问题">我国注销税务登记制度存在的问题</a></li><li><a href="https://www.bwwdw.com/article/n77r.html" target="_blank" title="中国智库的商业模式及发展方向">中国智库的商业模式及发展方向</a></li><li><a href="https://www.bwwdw.com/article/l77r.html" target="_blank" title="第四章习题及解答">第四章习题及解答</a></li><li><a href="https://www.bwwdw.com/article/q77r.html" target="_blank" title="湖南省高级人民法院关于审查和执行非诉行政执行案件的若干规定">湖南省高级人民法院关于审查和执行非诉行政执行案件的若干规定</a></li><li><a href="https://www.bwwdw.com/article/e77r.html" target="_blank" title="宜昌周边旅游景点与户外路线大集会 - 图文">宜昌周边旅游景点与户外路线大集会 - 图文</a></li><li><a href="https://www.bwwdw.com/article/477r.html" target="_blank" title="安般法门重点在(南师衣中珠之探寻系列)">安般法门重点在(南师衣中珠之探寻系列)</a></li><li><a href="https://www.bwwdw.com/article/177r.html" target="_blank" title="停电预案">停电预案</a></li><li><a href="https://www.bwwdw.com/article/m77r.html" target="_blank" title="企业会计准则应用指南—会计科目和主要账务处理 - 成本类">企业会计准则应用指南—会计科目和主要账务处理 - 成本类</a></li><li><a href="https://www.bwwdw.com/article/j77r.html" target="_blank" title="弹塑性力学定理和公式">弹塑性力学定理和公式</a></li><li><a href="https://www.bwwdw.com/article/i77r.html" target="_blank" title="数值积分及其MATLAB实现">数值积分及其MATLAB实现</a></li><li><a href="https://www.bwwdw.com/article/h77r.html" target="_blank" title="停车场泊车位的规划设计与效度评价 - 图文">停车场泊车位的规划设计与效度评价 - 图文</a></li></ul></div> </div> </div> </div> <div class="footer"> <p>Copyright©<script>timestamp2date(1);</script><a href="https://www.bwwdw.com/" target="_blank" title="博文网">博文网</a>bwwdw.com 版权所有</p> <p class="gray"><a href="https://www.bwwdw.com/article/" target="_blank">最新更新</a> | <a href="https://www.bwwdw.com/hot/" target="_blank">热点专题</a> | <a href="https://www.bwwdw.com/sitemap.html" target="_blank">网站地图</a> | <a href="https://www.bwwdw.com/tag/" target="_blank">TAG专题</a> | <a href="https://www.bwwdw.com/sitemap.xml" target="_blank">XML地图</a> | <a href="https://so.bwwdw.com" target="_blank">范文搜索</a><script type="text/javascript">tj();</script></p> </div> <a href="#0" class="cd-top">Top</a> <script src="/static/fanwen/js/jquery-1.9.1.min.js"></script> <script type="text/javascript"> document.write('<script type="text/javascript" src="/static/fanwen/js/pubuliu.js?'+RAND_STR+'"><\/script>'); document.write('<script type="text/javascript" src="/static/fanwen/js/lazyimg.js?'+RAND_STR+'"><\/script>'); document.write('<script type="text/javascript" src="/static/fanwen/js/gotop.js?'+RAND_STR+'"><\/script>'); </script> <script type="text/javascript"> $.ajax({ "url":"https://www.bwwdw.com/open/doc/readViews.json?id=s77r", "type":"get", "data":"", "dataType":"json", "success":function(res){ $("#read_views").html(res.data); } }); </script> <script type="text/javascript">bottomAction();</script> </body> </html>