ABAP4语法祥解

更新时间:2024-01-04 15:42:01 阅读量: 教育文库 文档下载

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

ABAP/4 Training

§. ABAP/4 DATA ELEMENT 一. Data Type (数据类型)

C: 字符(串), 长度为1, 最大有65535 BYTES, 初始值为: space.

D: 日期, 格式为YYYYMMDD, 最大是’9999/12/31’ ,例:’1999/12/03’. F: 浮点数, 长度为8, 例如: 4.285714285714286E-01 I: 整数 范围 :-2^31 ~ 2^31-1 N: 数值组成的字符串: 011, ‘302’. P:用于小数点数值,例如: 12.00542;

T: 时间, 格式为HHMMSS,例如: ’14:03:00’, ’21:30:39’. X: 16进制数, 例如 ‘1A03’. 二. 变量宣告

变量宣告包含name, length, type, structure等,语法如下: DATA [] [] [] 其中: :变量名称,最长30个字符,不可含有 + , . , : ( ) :变量类型及长度; :初值 :小数位数 Example 1:

DATA: COUNTER TYPE P DECIMALS 3, NAME (10) TYPE C VALUE ‘Delta’, S_DATE TYPE D VALUE ‘19991203’. Example 2:

DATA: BEGIN OF PERSON, NAME(10) TYPE C, AGE TYPE I,

WEIGHT TYPE P DECIMALS 2, END OF PERSON.

另外,有关DATA宣告的指令还有: CONSTANTS(宣告常数)、STATICS(临时变量宣告). 三. 系统专用变量说明

系统内部专门创建了SYST这个STRUCTURE,里面的字段存放系统变量,常用的系统变量有:

SY-SUBRC : 系统执行某指令后,表示执行成功与否的变量,’0’ 表示成功 SY-UNAME: 当前使用者登入SAP的USERNAME; SY-DATUM: 当前系统日期; SY-UZEIT: 当前系统时间;

SY-TCODE: 当前执行程序的Transaction code SY-INDEX : 当前LOOP循环过的次数

SY-TABIX: 当前处理的是internal table 的第几行

等字符;

第1页(共39页) 4/29/2013

ABAP/4 Training

SY-TMAXL: Internal table的总行数 SY-SROWS: 屏幕总行数; SY-SCOLS: 屏幕总列数; SY-MANDT: CLIENT NUMBER SY-VLINE: 画竖线 SY-ULINE: 画横线 附注:

1. SAP的全称是: System Application Products in Data Processing; 2. ABAP/4的全称是:Advanced Business Application Programming; 3. ABAP/4的路径为:Tools ? ABAP/4 WorkBench?ABPA/4 Editor ; 4. ABAP/4每条语句以句号结束;

5. ABAP/4中象= ,>, <,+,-,*,/等符号左右都需要有至少一个空格; 6. 整行注释用’*’号, 注释本行后面部分用’”’号;

第2页(共39页) 4/29/2013

ABAP/4 Training

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’, 而 NAME-E_MAIL 則不变

变量 CALL BY VALUE 的使用

在变量的使用上, 可以使用类似Call By Value 的方法 语法:

第3页(共39页) 4/29/2013

ABAP/4 Training

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 余数除法

数值函数

◆ ABS(N): 传回数值 N 的绝对值 ◆

SIGN(N): 1 if N > 0

◆ if N = 0

-1 if N < 0

CEIL(N): 传回大于输值N的最小整数 Example:

第4页(共39页) 4/29/2013

ABAP/4 Training

WRITE CEIL(-5.65) 印出 –5.00 WRITE CELL(4.54) 印出 5.00 ◆

FLOOR(N): 传回小于数值N的最大整数 Example:

WRITE FLOOR(-5.65) 印出 –6.00 WRITE FLOOR(4.54) 印出 4.00 ◆

TRUNC(N): 传回数值N的整数部分 Example:

WRITE TRUNC(5.65) 印出 5.00 日期与时间的运算 1.日期的运算 Example:

DATA: Mdata TYPE D.

Mdate = SY-DATUM. “ 如传回 19971015 Mdate+6(2) = ‘01’ “ Mdate 变成 19971001 Mdate = Mdate - 1 “ Mdate 变成 19970931

2.时间的运算

‘hhmmss’, 如 ‘212030’ 表 ’21:20:30’ Example:

DATA: HOURS TYPE I, MINUTES TYPE I,

T2 TYPE T VALUE ’20:00:00’, T1 TYPE T VALUE ’18 30 00’. HOURS = (T2 - T1) / 3600. “计算几个小时 MINUTES = (T2 – T1) / 60. “计算几分钟

字串资料处理 1.字串移位 语法:

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

第5页(共39页) 4/29/2013

ABAP/4 Training

DATA STRING(10) VALUE ‘ABCDEFGHIJ’. SHIFT STRING. “得到 BCDEFGHIJ’

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. 4.在字串中寻找部分字串 語法:

SEARCH FOR Example:

DATA STRING(10) VALUE ‘ABCDEFGHIJ’.

5.字串长度 STRLEN() Example:

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

DATA T(10) VALUE ‘ABCDEFGHIJ’. WRITE / T+2(4). “得到 CDEF 第6页(共39页) 4/29/2013

ABAP/4 Training

§ INTERNAL TABLE

一. Internal Table 的宣告

ABAP/4中的Internal Table是一种Data Structure,类似于其它语言中的STRUTURE,它可以由几个不同类型的字段(field)组成,用来表示具有不同属性的某一事物,单独一笔资料表示某个事物,多笔数据表示具有相同属性的多个事物.例如: 为了存取或记录某班的同学数据,我们创建如下的internal table: DATA: BEGIN OF STUDENT OCCURS 0, STD_ID TYPE N, NAME(10) TYPE C, AGE TYPE I, BIRTH TYPE D,

SCORE TYPE P DECIMALS 2, END OF STUDENT.

此时我们已经创建了名叫STUDENT的internal table,并且为它预先申请了能够存放20笔数据的Buffer(当然,如果存取数据不止20笔,程序执行时,会自动申请系统Buffer)

Internal table 的定义有以下几种格式:

格式一. DATA: BEGIN OF OCCURS , TYPE , [ TYPE , TYPE , ? ] END OF . 格式二. TYPES: BEGIN OF , TYPE , [ TYPE , TYPE , ? ] END OF .

TYPES TYPE OCCURS . 格式三. DATA: BEGIN OF .

INCLUDE STRUCTURE . DATA: END OF .

DATA: LIKE OCCURS . 二. APPEND LINE

格式: APPEND [ TO ] . 举例一. (使用work area) DATA: BEGIN OF LINE,

第7页(共39页) 4/29/2013

ABAP/4 Training

COL1 TYPE I, COL2 TYPE I, END OF LINE.

DATA ITAB LIKE LINE OCCURS 10. DO 2 TIMES.

LINE-COL1 = SY-INDEX. LINE-COL2 = SY-INDEX ** 2. APPEND LINE TO ITAB. ENDDO.

LOOP AT ITAB INTO LINE.

WRITE: / LINE-COL1, LINE-COL2. ENDLOOP. 执行结果为:

1 2

1 4

举例二. (不使用work area)

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

ITAB-COL1 = SY-INDEX. ITAB-COL2 = SY-INDEX ** 2. APPEND ITAB. ENDDO. LOOP AT ITAB.

WRITE: / ITAB-COL1, ITAB-COL2. ENDLOOP.

执行结果与举例一相同. 三. COLLECT LINE

COLLECT 指令也是将元素加入Internal table中,与APPEND 的区别是: COLLECT指令在非数值字段相同的情况下,将数值字段汇总.

格式: COLLECT [ INTO ] DATA: BEGIN OF ITAB OCCURS 3, COL1(3) TYPE C, COL2 TYPE I, END OF ITAB.

ITAB-COL1 = ‘ABC’. ITAB-COL2 = 10.

第8页(共39页) 4/29/2013

ABAP/4 Training

COLLECT ITAB.

ITAB-COL1 = ‘XYZ’. ITAB-COL2 = 20. COLLECT ITAB.

ITAB-COL1 = ‘ABC’. ITAB-COL2 = 80. COLLECT ITAB.

此时, internal table中放的是2笔数据, 分别为: ITAB-COL1 ITAB-COL2 ‘ABC’ 90 ‘XYZ’ 20 四.

INSERT LINE

将元素插入在指定的internal table位置之前.

格式: INSERT [ INTO] [INITIAL LINE INTO ] [INDEX ] 或者: INSERT LINES OF [FROM TO ] INTO INDEX 其中: 即work area,工作区中的元素. [INITIAL LINE INTO] :插入一笔初始化的记录. : internal table

[INDEX ]: internal table 的记录号.(新加入的元素放在此记录前面)

五.

读取internal table 格式一:

LOOP AT [INTO ][FROM TO ][WHERE ] ENDLOOP. 格式二:

READ TABLE [INTO ] [INDEX / WITH KEY ] 举例. (格式二)

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

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

ENDDO.

READ TABLE ITAB INDEX 3.

(或者: READ TABLE ITAB WITH KEY COL1 = 3.)

WRITE: / ‘ITAB-COL1 = ‘, ITAB-COL1, ‘ITAB-COL2 = ‘, ITAB-COL2. 执行结果同样是:

第9页(共39页) 4/29/2013

ABAP/4 Training

ITAB-COL1 = 3 ITAB-COL2 = 6.

六.

修改internal table 中的值

格式: MODIFY [FROM ][INDEX ][TRANSPORTING ?][WHERE ]

举例一. READ TABLE ITAB INDEX 3. LINE-COL1 = 29.

MODIFY ITAB FROM LINE TRANSPORTING COL1. 将第三笔记录的COL1字段的值修改为29. 举例二. T_SALARY – salary = 50.

MODIFY T_SALARY TRANSPORTING salary WHERE birthday = ‘1999/12/06’.

七.

DELETE internal table中的字段 格式: DELETE INDEX .

或: DELETE [FROM TO ] [WHERE ]

八.

Internal table 排序

SORT [][BY ?]

其中: 有DESCENDING 和ASCENDING, Default 为ASCENDING. : 为指定排序的字段.

九.

初始化internal table

REFRESH . 清空中的值. CLEAR . 清空的Header Line.

第10页(共39页) 4/29/2013

ABAP/4 Training

§ABAP控制语句

编程逻辑表达式

.... ...

该表达式比 较两个字段 。可能为真 ,也可能为 假。在带关 键字 IF、 CHECK 和 WHILE 的条件语句 中使用逻辑 表达式。

根据操作数 的数据类型 ,可以使用 不同的逻辑 运算符。允 许进行:

除上述比较之外,还可 以执行测试 以检查数据 字段是否完 全满足一定 条件。可以 使用这些测 试:

另外,可以 将几个逻辑 表达式组合 为一个简单 逻辑表达式 。

运算符1 = <>或>< < <= > >= 例如:

*&---------------------------------------------------------------------* *& Report Y_EXP6 * *& * *&---------------------------------------------------------------------* *& * *& * *&---------------------------------------------------------------------* program Y_EXP6 .

DATA: F TYPE F VALUE '100.00',

P TYPE P VALUE '50.00' DECIMALS 2, I TYPE I VALUE '30.00'.

WRITE 'The following logical expressions are true:'. IF F >= P .

WRITE: / F,'>=',P. ELSE.

WRITE: / F,'<',P. ENDIF. IF I = P .

WRITE: / I,'=',P. ELSE.

WRITE: / I,' <> ',P.

第11页(共39页)

4/29/2013

运算符2 EQ NE LT LE GT GE 含 义 等于 不 等于 小 于 小 于等于 大 于 大 于等于 ABAP/4 Training

ENDIF.

这生成如下 输出:

The following logical expressions are true: 1.000000000000000E+02 >= 50.00 30 <> 50.00

这里,在 IF 语句中使用两个逻辑表达式。如果逻辑表达式为真,则屏幕上显示出来。如果逻辑表达式为假,则将相反表达式显示在屏幕上。

IF的条件分支语句

IF 语句允许依 据条件将程 序流转到特 定的语句块 中。该语句 块包括 IF 语句及其后 面的 ELSEIF、 ELSE 或 ENDIF 之间的所有 命令。 语法:

IF . ELSEIF . ELSEIF . ..... ELSE.

ENDIF.

如果第一个条件是真, 系统将执行所有语句直到第一个语句块结束,然后继续处理 ENDIF语句之后的程序。要采用选择性条 件,可以使用 ELSEIF语句。如果第一个条件是假,系统使用与 IF 语句一样的方式处理后面的 ELSEIF语句。如果 IF 或 ELSEIF 条件都为假 ,则执行 ELSE 开始的语句块。最后的 语句块必须 用 ENDIF 结束。

要用公式表 达 IF 和 ELSEIF 语句中的条 件,可以使用任何编程逻辑表 达式描述的逻辑表达式。

CASE的条件分支语句

要根据特殊 数据字段的 内容执行不 同的语句块 ,可以如下 使用 CASE 语句: 语法:

CASE . WHEN .

WHEN .

第12页(共39页) 4/29/2013

ABAP/4 Training

WHEN .

WHEN ... ...... WHEN OTHERS.

ENDCASE.

例如:

DATA: TEXT1 VALUE 'X', TEXT2 VALUE 'Y', TEXT3 VALUE 'Z', STRING VALUE 'A'. CASE STRING. WHEN TEXT1.

WRITE: / 'String is', TEXT1. WHEN TEXT2.

WRITE: / 'String is', TEXT2. WHEN TEXT3.

WRITE: / 'String is', TEXT3. WHEN OTHERS.

WRITE: / 'String is not', TEXT1, TEXT2, TEXT3. ENDCASE. 产生如下输 出: String is not X Y Z 逐行读取内表

要将内表逐行读入工作区域,可以使用 LOOP 语句编一个循环。语法如下所示: 语法:

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

用 INTO 选项指定目标区域 。 如果表格有 表头行,则可以忽略 INTO 选项。这样 ,表格工作区域就成了目标区域。

逐行将内表 读入 或表格工作区域 。 对于读取的每一行,系统都处理以 LOOP 开始,以ENDLOOP 结束的语句 块。可以用控制关键字 AT 在 LOOP - ENDLOOP 块内控制语句块流

第13页(共39页) 4/29/2013

ABAP/4 Training

AT FIRST.“读取内边的第一行 ENDAT.

AT LAST.“读取到内标的最后一行 ENDAT.

AT NEW .这个字段新的值. ENDAT.

AT END .这个字段是最后的值.就是说这个值即将变化 还没变化的时候. ENDAT.

可以用sy-tabix 取回值.

在语句块内 ,系统字段 SY-TABIX 包含当前行 的索引。处 理完表格的 所有行之后 循环结束。 在 ENDLOOP 语句之后, 如果至少读 取了一行, 则将系统字 段 SY-SUBRC 设置为0。 否则,将其设置为4。

可以使用 FROM、TO 或 WHERE 选项限制要在循环中进行处理的行 数。 使用 FROM 选项,可以 用 指定要读取 的第一行 使用 TO 选项,可以 用 指定要读取 的最后一行 。

用 WHERE 选项,可以 指定 的任何逻辑 表达式(参 见 编程逻辑表达式 )。第一个操作数必须是内表行结 构的组件。 如果在循环中使用控制 关键字 AT ,则不能使 用 WHERE选项。

FROM 和 TO 选项限制系 统必须读取 的行数。WHERE 选项仅避免 对工作区域 进行不必要 的填充。用 WHERE 选项,系统 必须读取所 有行。为了 提高效率,

应该尽可能 使用 FROM 和 TO 选项。在某 些条件下用 EXIT 语句(参见 完全终止循环)而不是 WHERE 选项跳出循 环也十分有 效。

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

DATA ITAB LIKE LINE OCCURS 10. DO 30 TIMES.

LINE-COL1 = SY-INDEX. LINE-COL2 = SY-INDEX * SY-INDEX. APPEND LINE TO ITAB. ENDDO.

LOOP AT ITAB INTO LINE FROM 10 TO 25 WHERE COL2 > 400. WRITE: / SY-TABIX, LINE-COL2. ENDLOOP.

第14页(共39页) 4/29/2013

ABAP/4 Training

其输出为:

21 441 22 484 23 529 24 576 25 625

使用 DO的无条件循环

如果想要多次执行语句块,则可以如下使用 DO 语句编程循环: 语法:

DO [ TIMES] [VARYING FROM NEXT ]. ENDDO.

在发现 EXIT、 STOP 或 REJECT 语句之前, 系统继续执行由 DO 引导、ENDDO 结束的语句块。

可以使用 TIMES 选项限制循 环次数。 可以是文字或变量。如果 是 0 或负数,系统不执行该循环。

系统字段 SY-INDEX 中包含已处理过的循环 次数。

注意:使用 DO 语句时要避 免死循环。 如果不使用 TIMES 选项,则在语句块中至少应包含一个EXIT、STOP 或 REJECT 语句,以便系统能够退出循环。

本例显示 DO 循环的基本格式 DO.

WRITE SY-INDEX. IF SY-INDEX = 3. EXIT. ENDIF. ENDDO.

产生如下输 出:

1 2 3

这里,处理 3 次循环,然 后在 EXIT 语句后退出 循环。

终止循环

要终止循环 过程,请使 用下列关键 字之一。

第15页(共39页) 4/29/2013

ABAP/4 Training

关键 字 CONTINUE CHECK EXIT

用途 无条 件终 止 循 环过 程 有条 件终 止 循 环过 程 完全 终止 循 环 在循环中只能使用 CONTINUE, 但在循环外 还可使用关 键字 CHECK 和 EXIT, 分别完成不同的功能。 例如,可以 终止子程序或整个程序 块。 CONTINUE、 CHECK 和 EXIT:

无条件终止 循环过程

要立即无条 件终止循环 ,请如下使 用 CONTINUE 语句: 语法 CONTINUE.

在CONTINUE 语句之后, 系统跳过当 前语句块中 所有剩余语 句块,继续 该语句后面 的循环。 例如:

DO 4 TIMES.

IF SY-INDEX = 2. CONTINUE.!! ENDIF.

WRITE SY-INDEX. ENDDO. 产生如下输 出:

1 3 4

此处系统不 处理 WRITE 语句就终止第二次循环 。 有条件终止 循环过程

要有条件终止循环过程 ,请如下使用CHECK 语句:1 语法

CHECK .

如果条件是假,系统跳过当前语句块中所有剩余语句块, 继续后面的循环过程。 对于, 可使用编程逻辑表达式中描述的任何逻辑表达 式。

DO 4 TIMES.

第16页(共39页)

4/29/2013

LOOP - ENDLOOP 循环,用于 处理内表

SELECT - ENDSELECT 循环,用于 从数据表中 读取数据

ABAP/4 Training

CHECK SY-INDEX BETWEEN 2 and 3. WRITE SY-INDEX. ENDDO.

产生如下输 出: 2 3

此处系统不处理 WRITE 语句就终止第一个和第四个循环, 因为 SY-INDEX 不在 2 和 3 之间。

完全终止循环

要无条件完 全终止循环 ,请如下使 用 EXIT 语句: 语法 EXIT.

EXIT 语句之后, 系统立即退出循环,继续结束语句 (ENDDO、 ENDWHILE、 ENDSELECT)后 面的处理。 在嵌套循环中,系统仅退出当前循环。

DO 4 TIMES.

IF SY-INDEX = 3. EXIT. ENDIF. WRITE SY-INDEX. ENDDO.

产生如下输 出: 1 2

此处系统不 处理 WRITE 语句或第四 个循环过程 ,就在第三 个循环过程 中完全终止 循环。

第17页(共39页) 4/29/2013

ABAP/4 Training

§OUTPUTTING DATA TO SCREEN 一. WRITE 语句

ABAP/4用来在屏幕上输出数据的指令是WRITE指令,例如: WRITE: ‘USER NAME IS:’, SY-UNAME. 二. 指定屏幕输出位置 指定输出位置的语句格式为:

WRITE: [AT] [ / ] [] [()] 资料项 [] 其中: / : 在下一行输出

: 指定输出的行号; ():指定输出位数(长度) : 指定显示格式参数,参数有: LEFT-JUSTIFIED 资料靠左对齐 CENTERED 数据靠中间对齐 RIGHT-JUSTIFIED 资料靠右对齐

UNDER 正对在数据项的下面显示 NO-GAP 紧接着显示,不留空格

USING EDIT MASK : 使用内嵌子元显示, 如 12:03:20 USING NO EDIT MASK: 不使用内嵌子元 NO-ZERO: 数字前面 0 的部分不显示 NO-SIGN: 不显示正负号 DECIMALS : 显示 位小数 EXPOENT : F(浮点数)指数的值 ROUND : 四舍五入至小数点后位 CURRENCY : 币别显示 DD/MM/YY : 日期显示格式 MM/DD/YY: YY/MM/DD: YY/DD/MM MM/DD/YYYY:

第18页(共39页) 4/29/2013

ABAP/4 Training

DD/MM/YYYY YYYY/MM/DD: YYYY/DD/MM:

例如1: WRITE: /10(6) ‘ABCDEFGHIJK’. 输出结果为: ABCDEF

例如2: DATA: X TYPE I VALUE ‘112030’, A(8) TYPE C VALUE ‘AB CDEF’. WRITE: / X USING EDIT MASK ‘__:__:__’. WRITE: / X USING EDIT MASK ‘$___,___’. WRITE: / A NO-GAP. 输出结果为: 11:20:30 $112,030 ABCDEF

第19页(共39页) 4/29/2013

ABAP/4 Training

§屏幕输入命令

在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

第20页(共39页) 4/29/2013

ABAP/4 Training

ABAP/4预设是将字符串输入值自动转换为大写, 加上此参数会将输入的数据转成小写,

3. OBLIGATORY

强制要求输入, 屏幕上会出现一个 ? , 使用者必须要输入才可. 4. AS CHECKBOX

输入 CHECKBOX的格式 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. 执行结果:

二. SELECT-OPTIONS

SELECTION-OPTIONS所输入的值实际上是放在internal table中的,该Internal table 有四个字段,分别是:SIGN,OPTION,LOW,HIGH.. 条件筛选检查条件输入画面指令, 输入条件后可配合SELECT指令自TABLE读取符合条件的数据, 直接执行或放入 Internal Table中, 条件有四个参数: 1. SIGN:

I: 表筛选条件符合的资料 E: 表筛选条件不符合的资料 2. OPTION: 比较的条件符号

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

第21页(共39页) 4/29/2013

ABAP/4 Training

语法:

SELECT-OPTIONS FOR

Example:

TABLES SPFLI.

SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID.

将条件的输入值存放入 AIRLINE, 筛选选择为SPFLI中的CONNID字段 执行结果:

可直接输入起始范围或按下选择画面, 输入完后按下左上角的执行键

三. 条件输入选择画面

1. 自Table中选取

按下输入项的右边往下箭头, 叫出Table中数据项, 选取开始和结束的范围 2. Selection Options

按下”Selection options”按键, , 输入Option及 Sign参数内容, 屏幕如下:

四. 改变条件输入格式 1.

DEFAULT TO 设定开始结束范围输入默认值 Example:

第22页(共39页) 4/29/2013

ABAP/4 Training

SELECT-OPTIONS 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. ENDIF ENDSELECT.

六. SELECTION-SCREEN 1.产生空白列

语法:

第23页(共39页) 4/29/2013

ABAP/4 Training

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的内容

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 </p><p> 第24页(共39页) 4/29/2013 </p><p>ABAP/4 Training </p><p>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>§SQL语法 </p><p> 我们在编写ABAP4程序的时候,经常需要从TABLE中根据某些条件读取数据,.读取数据最常用的方法就是通过SQL语法实现的. </p><p>ABAP/4中可以利用SQL语法创建或读取TABLE,SQL语法分为DDL(DATA DEFINE LANGUAGE)语言和DML(DATA MULTIPULATION LANGUAGE)语言,DDL语言是指数据定义语言,例如CREATE等, DML语言是数据操作语言,例如SELECT, INSERT等语句. SQL语句有OPEN SQL语句和NATIVE SQL语句. OPEN SQL语句不是标准SQL语句,是ABAP/4语言,利用OPEN SQL语句能在Databases 和 Command 之间产生一个BUFFER,所以它有一个语言转换的过程. 而NATIVE SQL语句则是标准的SQL语句, 它直接针对Databases操作. 一. OPEN SQL </p><p> OPEN SQL 语句包含有: SELECT,INSERT,UPDATE,MODIFY,DELETE,OPEN CURSOR, FETCH,CLOSE CURSOR,COMMIT WORK,ROLLBACK WORK等. 1. SELECT语句 </p><p>语法格式: </p><p>SELECT <result> [INTO <target>] [FROM <source>] [WHERE <condition>] [GROUP BY <fields>] [ORDER BY <sort order>] 其中: <result>指定要抓取的字段 </p><p> <target>将读取的记录存放在work area中 <source>指定从那个TABLE中读取数据 <condition>抓取资料的条件 <fields>指定按那些字段分组 <sort order>排序的字段及方式 相关的系统变量: </p><p> SY-SUBRC = 0 表示读取数据成功 </p><p> <> 0 表示未找到符合条件的记录 SY-DBLNT: 被处理过的记录的笔数. 相关的命令: </p><p> EXIT. 退出循环. </p><p> CHECK <logistic statement>.如果逻辑表达式成立,则继续执行,否则,开 始下一次循环. ◆ .利用循环方式读取所有记录 </p><p> 第25页(共39页) 4/29/2013 </p><p></p><p>ABAP/4 Training </p><p>SELECT ?.ENDSELECT.是循环方式读取记录的. </p><p> 例如: </p><p>TABLES MARD. </p><p>SELECT [DISTINCT] * FROM MARD WHERE MATNR = ‘3520421700’. <Statements>. ENDSELECT. </p><p>(从MARD中抓取所有料号=3520421700的数据) ◆读取一笔数据 TABLES MARD. </p><p>SELECT SINGLE * FROM MARD WHERE MATNR = ‘3520421700’. (从MARA中抓取一笔料号=3520421700的资料) </p><p>◆ 将读取的记录放在work area中,并且加入Internal table 中. 格式有: </p><p> ... INTO <work area> </p><p> ... INTO CORRESPONDING FIELDS OF <work area> ... INTO (f1, ..., fn) 变量组. ... INTO TABLE <internal table> </p><p> ... INTO CORRESPONDING FIELDS OF TABLE <internal table> ... APPENDING TABLE <internal table> </p><p> ... APPENDING CORRESPONDING FIELDS OF TABLE <internal table> 举例一: TABLES MARD. </p><p>DATA: BEGIN OF ITAB OCCURS 10, MATNR LIKE MARD-MATNR, WERKS LIKE MARD-WERKS, LGORT LIKE MARD-LGORT, LABST LIKE MARD-LABST, END OF ITAB. </p><p>SELECT MATNR WERKS LGORT LABST </p><p> INTO CORRESPONDING FIELDS OF ITAB FROM MARD </p><p> WHERE MATNR = ‘3520421700’. APPEND ITAB. CLEAR ITAB. ENDSELECT. </p><p>(将读取的结果放在Internal table ITAB中) 举例二. TABLES MARD. </p><p> 第26页(共39页) 4/29/2013 </p><p>ABAP/4 Training </p><p>SELECT MATNR MTART MAKTX INTO (t_matnr, t_mtart, maktx) FROM MARD </p><p> WHERE MATNR = ‘3520421700’. <Statements>. ENDSELECT. </p><p>(从MARD中抓取料号=3520421700的料号、类型和描述,放在变量t_matnr, t_mtart, maktx中)。 ◆按指定的字段排序 TABLES SBOOK. </p><p>SELECT * FROM SBOOK WHERE CARRID = ‘LH’ AND CONNID = ‘0400’ AND FLDATE = ‘19950228’ ORDER BY BOOKID [ASCENDING/DESCENDING]. WRITE: / SBOOK-BOOKID, SBOOK-CUSTOMID, SBOOK-CUSTTYPE, SBOOK-SMOKER, SBOOK-LUGGWEIGHT, SBOOK-WUNIT, SBOOK-INVOICE. ENDSELECT. </p><p>(利用参数ORDER BY所指定的字段排序) ◆ 抓取数据的条件叙述 (1) BETWEEN <g1> AND <g2> </p><p>例如: WHERE YEAR BETWEEN 1995 AND 2000. (2) LIKE <g> </p><p>例如: WHERE NAME LIKE ‘MIKE%’. (‘%’是通配符号) (3) IN (<g1>?<gn>) </p><p>是<g1>?<gn>里面的任意一个值即可. </p><p>例如: WHERE PLANT IN (‘CHUNGLI’, ‘TAOYUAN’,’LIUTU’). </p><p>(表示PLANT 只要是’CHUNGLI’或’TAOYUAN’或’LIUTU’都可以). </p><p>2. INSERT 语句 </p><p>◆ 从work area 加入到Internal Table中 </p><p>格式: INSERT INTO <database> VALUES <work area> 例如: </p><p>DATA: BEGIN OF WA, </p><p> CODE(6) TYPE C, NAME(30) TYPE C, END OF WA. </p><p>DATA: VEN LIKE WA OCCURS 10. </p><p> 第27页(共39页) 4/29/2013 </p><p>ABAP/4 Training </p><p>? </p><p>WA-CODE = ‘530120’. </p><p>WA-NAME = ‘XINGDA ELECTRONICS CO.,LTD’. INSERT INTO VEN VALUES WA . </p><p>如果work area的名称就是internal table的名称,可以直接写成: INSERT <internal table> 例如: </p><p>DATA: BEGIN OF WA OCCURS 10, CODE(6) TYPE C, NAME(30) TYPE C, END OF WA. ? </p><p>WA-CODE = ‘530120’. </p><p>WA-NAME = ‘XINGDA ELECTRONICS CO., LTD’. INSERT WA. </p><p>◆ 从另外一个Internal table中INSERT 数据 格式: </p><p>INSERT <itab1> FROM TABLE <itab2> [ACCEPTING DUPLICATE KEY] </p><p>将<itab2>中非NULL的数据加入<itab1>中,加上[ACCEPTING DUPLICATE KEY]能限制相同PRIMARY KEY不重复加入. 3. MODIFY 语法 </p><p>MODIFY <internal table> [FROM <work area>]. 4. DELETE 语法 </p><p> DELETE <internal table> [FROM <work area>]. 或: DELETE <internal table> [WHERE <conditions>] 5. DATABASE CURSOR </p><p> Database Cursor是一个数据库暂存区, 将经SELECT指令读取的记录存放至此暂存区, 再由此暂存区放至Work Area中, 可减少数据库读取的次数. 1.开启 Database Cursor 语法: </p><p> OPEN CURSOR <c> FOR SELECT ? WHERE <condition> Example: </p><p> TABLES SPFLI. </p><p> DATA: WA LIKE SPFLI, C1 TYPE CURSOR. </p><p> OPEN CURSOR C1 FOR SELECT * FROM SPFLI WHERE AREA =’TAIWAN’. 2.读取 Database Cursor的数据存入 Work Area </p><p> 第28页(共39页) 4/29/2013 </p><p>ABAP/4 Training </p><p>语法: </p><p> FETCH NEXT CURSOR <c> INTO <wa> Example: </p><p> FETCH NEXT CURSOR C1 INTO WA. </p><p> 读取下一笔Cursor位置的数据存入WA, 如果已无数据可读, SY-SUBRC <>0. 关闭 Database Cursor 语法: </p><p> CLOSE CURSOR <c> Example: </p><p> CLOSE CURSOR C1. 6. COMMIT WORK & ROLLBACK WORK </p><p>要确定数据成功写入数据库,可使用COMMIT WORK指令,如: COMMIT WORK. </p><p>相反的, 如果反悔要复原, 可使用 ROLLBACK WORK, 可复原在上个COMMIT WORK指令之后的数据, 如: ROLLBACK WORK. </p><p> 第29页(共39页) 4/29/2013 </p><p>ABAP/4 Training </p><p> </p><p>§使用NATIVE SQL指令 语法格式: </p><p>EXEC SQL [PERFORMING <form>]. <statements> ENDEXEC. 举例一. EXEC SQL. </p><p> CREATE TABLE AVERI_CLNT ( </p><p> CLIENT CHAR(3) NOT NULL, ARG1 CHAR(3) NOT NULL, ARG2 CHAR(3) NOT NULL, FUNCTION CHAR(10) NOT NULL, PRIMARY KEY (CLIENT, ARG1, ARG2) ) ENDEXEC. 举例二. </p><p>DATA: F1(3), F2(3), F3(3). F3 = ' 1 ' EXEC SQL. </p><p> SELECT CLIENT, ARG1 INTO :F1, :F2 FROM AVERI_CLNT WHERE ARG2 = :F3 ENDEXEC </p><p>PERFORMING <form name>的使用: </p><p>如果NATIVE SQL的SELECT命令执行结果是抓到多笔记录,我们想要逐笔记录处理时,就用PERFORMING 参数,这个FORM能被逐次调用.如果想中止调用,就用EXIT FORM SQL结束调用. 例如: </p><p>DATA: F1(3), F2(3), F3(3). </p><p>F3 = '010' </p><p>EXEC SQL PERFORMING WRITE_AVERI_CLNT. </p><p> 第30页(共39页) 4/29/2013 </p><p></p><p>ABAP/4 Training </p><p> SELECT CLIENT, ARG1 INTO :F1, :F2 FROM AVERI_CLNT WHERE ARG2 = :F3 ENDEXEC. </p><p>FORM WRITE_AVERI_CLNT. WRITE: / F1, F2. ENDFORM. 注意: </p><p>a. NATIVE SQL把TABLE中的MANDT(client)字段当作一般字段使用,所以在抓取数据时必须指定特定的Client; </p><p>b. NATIVE SQL中的SELECT语句没有CHECK权限的功能; </p><p>c. 在登入SAP R/3系统时,我们已经自动与Database连接,所以在执行NATIVE SQL时并不需要CONNECT语句; </p><p>d. 一条NATIVE SQL语句可以以分号;结束,一般情况下是以句号.结束. e. 某些数据库系统对TABLE名字和FIELD名字有大小写区别,要正确书写. f. 在NATIVE SQL中,双引号”不表示注释. </p><p> </p><p> 第31页(共39页) 4/29/2013 </p><p>ABAP/4 Training </p><p> </p><p>§ABAP/4 PROGRAM MODULE </p><p>ABAP/4中的Module类似于其它语言中的子程序,通常是先定义后调用.主程序传给Module所需要的参数,然后Module返回主程序所需要的值.当然, ABAP/4中也有 ’传值’ 和 ’传址’ 两种参数传递方式. 一. Macro block (宏) </p><p> 宏(Macro block)包括宏定义语句和宏调用语句. 宏定义的格式: </p><p> DEFINE <macro>. </p><p> <macro statements>. 993<\\46) END-OF-DEFINITION. 宏调用的格式: </p><p> <macro> [<p1> <p2>?]. </p><p> 其中: [<p1> <p2>?].表示所使用的参数,参数之间要有一个空格. 举例: </p><p> DATA: result TYPE I. DEFINE MULTI. </p><p> result = &1 * &2. </p><p> WRITE: / ‘&1 * &2’, = result. END-OF-DEFINITION. ? </p><p> MULTI 3 7. 输出结果为: 21. </p><p>宏可以调用其它宏,但不可以调用自身. </p><p>DATA: RESULT TYPE I, N1 TYPE I VALUE 5, N2 TYPE I VALUE 6. DEFINE OPERATION. RESULT = &1 &2 &3. OUTPUT &1 &2 &3 RESULT. </p><p> 第32页(共39页) 4/29/2013 </p><p>ABAP/4 Training </p><p>END-OF-DEFINITION. DEFINE OUTPUT. </p><p>WRITE: / ’The result of &1 &2 &3 is’, &4. END-OF-DEFINITION. OPERATION 4 + 3 . OPERATION 2 ** 7. OPERATION N2 - N1. </p><p>输出结果为: </p><p> The result of 4 + 3 is 7 </p><p>The result of 2 ** 7 is 128 The result of N2 - N1 is 1 </p><p>二. Include 使用 </p><p>格式: INCLUDE <yixxxxxx>. </p><p>作用: 将某个写好的INCLUDE 程序(代码)加到原程序中,在程序编译(combine)的时候,系统会自动全部展开并且编译. 注意: </p><p> INCLUDE程序不能传送数据. 如果需要传送数据使用SUBROUTINES 或 FUNCTION MODULES. </p><p>INCLUDE 的调用格式. INCLUDE <INCL>. 例如: </p><p>REPORT zchn4062. INCLUDE yiauth00. </p><p>.Global 变量宣告应用 语法: </p><p> DATA: BEGIN OF COMMON PART [<name>], <data 宣告> </p><p> END OF COMMON PART [<name>] 此常使用在 Include 的档案中, 如 ***INCLUDE INCOMMON. </p><p> DATA: BEGIN OF COMMON PART NUMBERS, MID(8), </p><p> 第33页(共39页) 4/29/2013 </p><p>ABAP/4 Training </p><p> MNUM TYPE I, </p><p> END OF COMMON PART NUMBERS. </p><p> </p><p>三. Subroutine Procedure </p><p>Internal Subroutines: Subroutines 的代码就在调用它的程序里. External Subroutines: Subroutines 的代码不在调用它的程序里 </p><p>在ABAP/4 Subroutine的呼叫可分成 Internal Call和 External Call, 前者撰写在程序 中, 后者存在另一程序中, 通常为专存放Subroutine的公用程序集, 可提供结不同的 程序呼叫. </p><p> 1.Subroutine 的宣告 FORM <subr> [<pass>]. </p><p> <subroutine statement block> ENDFORM. 2.呼叫的方法 (1).Internal Call 语法: </p><p> PERFORM <subr> [<pass>] Example: </p><p> NUM1 = 100. NUM2 = 200. PROFORM ADD. FORM ADD. </p><p> SUM = NUM1 + NUM2. </p><p> WRITE: / ‘NUM1 + NUM2 = ‘,SUM. ENDFORM. </p><p> 执行结果: NUM1 + NUM2 = 300 (2).External Call 另一程序 语法: </p><p> PERFORM <subr>(<prog>) [<pass>] [IF FOUND] <subr>:子程序名称 </p><p> <prog>:存放子程序的程序名称 IF FOUND: 找到才执行 Example: </p><p> PROGRAM FORMPOOL. FORM HEADER. </p><p> WRITE: / ‘USER NAME: ‘,SY-UNAME. ENDFORM. </p><p> 第34页(共39页) 4/29/2013 </p><p>ABAP/4 Training </p><p> 在程序中呼叫HEADER子程序 PROGRAM YTEST1. </p><p> PERFORM HEADER(FORMPOOL) IF FOUND. </p><p> (3).External Call 另一专存放子程序的程序文件, 所CALL的Subroutine name 和 存放该Subroutine 的子程序名都存放在变量中. 语法: </p><p> PERFORM (<fsubr>) [IN PROGRAM (<fprog>) [<pass>] [IF FOUND] Example: </p><p> 存放子程序的程序文件 PROGRAM FORMPOOL. FORM SUB1. </p><p> WRITE: / ‘USER NAME:’,SY-UNAME. ENDFORM. FORM SUB2. </p><p> WRITE: / ‘HOST SERVER:’,SY-HOST. ENDFORM. </p><p> 在程序中呼叫 FORMPOOL中的SUB2 子程序 SUBNAME = ‘SUB2’. PROGNAME = ‘FORMPOOL’. </p><p> PERFORM (SUBNAME) IN PROGRAM (PROGNAME) IF FOUND </p><p>参数值的传递 </p><p> 在ABAP/4中参数的传递可分成 1. </p><p>Call By Reference: </p><p>传参数时将数据的存放地址(address)传至参数中, 也就是子程序中的参数变量与外部实际 </p><p>变量共享地址内的值, 又称为 Call By Address, 若在子程序中地址中的值改变了, 外部实际变量的值也会跟着改变. 语法: </p><p> FORM <subr> [USING <f1> <f2>?] [CHANGING <f1>?] PERFORM <subr> [USING <f1> <f2>?] [CHANGING <f1>?] </p><p> Using 之后接在子程序中不会改变的变量, CHANGING接会改变值的变量 但实际上USING之后的参数在子程序中也可将值改变 Example: SUM = 0. </p><p> NUM1 = 100. NUM2=200. </p><p> PERFORM ADD USING NUM1 NUM2 CHANGING SUM. WRITE: / NUM1,NUM2,SUM “ SUM 由 0 变成 300 </p><p> 第35页(共39页) 4/29/2013 </p><p></p><p>ABAP/4 Training </p><p> FORM ADD USING NUM1 NUM2 CHANGING SUM. SUM = NUM1 + NUM2. ENDFORM. 执行结果: </p><p> 100 200 300 </p><p> </p><p>2. </p><p>Call By Value </p><p>传参数时将数据的值复制一份至另一地址中, 所以在子程序中参数变量值改变, 并不会影 </p><p>响外部实际变数的值. 语法: </p><p> FORM <subr> USING VALUE(<f1>?) </p><p> 使用 VALUE(<f1>)表示 <f1>是 Call By Value的传递 PERFORM <subr> USING <f1> </p><p> Example: SUM = 0. NUM1 = 5. </p><p> PERFORM MULTI USING NUM1 CHANGING SUM. </p><p> WRITE: / NUM1,SUM “NUM1值还是5, SUM 由 0 变成 120 FORM MULTI USING VALUE(NUM1) CHANGING SUM. SUM = 1. WHILE NUM1 > 1 SUM = SUM * NUM1. NUM1 = NUM1 – 1. ENDWHILE.. ENDFORM. 执行结果: </p><p> 5 120 3. </p><p>Call By Value and Return Result </p><p>传入参数值的方式同Call By Value, 但在子程序结束执行时会将传入的参数值复制 一份传回给外部实际变数. 执行过程中外部实际参数不变. 语法: </p><p> FORM ?.. CHANGING VALUE(<f1>) PERFORM ?. CHANGING ?. <f1> Example: </p><p> SUM = 0. </p><p> NUM1 = 100. NUM2=200. </p><p> 第36页(共39页) 4/29/2013 </p><p>ABAP/4 Training </p><p> 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. </p><p> WRITE: / NUM1,NUM2,SUM “得到结果为 100 200 0 ENDFORM. 执行结果: </p><p> 100 200 0 “在子程序中 SUM值尚未改变 </p><p> 100 200 300 “返回程序时, 将变量 S的值复制给 SUM “所以 SUM值变成 300 </p><p>INTERNAL TABLE的传送. </p><p> 1, PASSING WITH USING AND SHANGING. 2, PASSING WITH TABLES. </p><p>Subroutine 的控制 CHECK <Condition> </p><p>CHECK 之后条件成立才继续往下子程序叙述 Example: </p><p> PERFORM SUB1. CHECK NUM1 < 10. WRITE / NUM1. NUM1 = NUM1 + 1. ENDFORM. EXIT </p><p>强迫结束子程序执行, 返回上一层程序叙述 </p><p>Function Module </p><p>在ABAP/4中的Function Module是储存在一个函式库中(library), 系统提供很多内设的Function Module供程序中呼叫, 也可以自行增加自己的Function Module. 1.叫出已存在的Function Module </p><p> (1).在ABAP/4 Development Workbench 画面中选择 “Function library”, 可见以下画面: </p><p> 第37页(共39页) 4/29/2013 </p><p>ABAP/4 Training </p><p> </p><p> </p><p> (2).选择要查询或修改的Function名称, 如选择 STRING_LENGTH, 如要查询可选择 “Display”, 可见Function Module之各项参数设定: </p><p> <1>.Import Parameter: 传入的参数名称, 但实际在程序中使用时刚好与Export 相颠们 </p><p> <2>.Export Parameter: 传回的参数名称, 程序中变成 Import 的使用 <3>.Changing Parameter:使用Call By Value and Return Result方法的参数 <4>.Table Parameter: 使用的 Initial Table参数 <5>.Exceptions: 错误处理参数 </p><p> 如 STRING_LENGTH 为一传回字符串长度的函数, 其设定的参数如下: Import : String 传入一字符串字符串数据 Export: Length 传回的字符串长度值 </p><p> (3).要查看程序内容可按下 “ Source Code”, 显示其程序内容如下: </p><p> function string_length. </p><p> length = strlen(string). </p><p> endfunction. </p><p> (4).函数的呼叫 语法: </p><p> CALL FUNCTION <module> IMPORTING F1=a1?. EXPORTING F1=a1?. CHANGING F1=a1? TABLES F1=a1? </p><p> 第38页(共39页) 4/29/2013 </p><p>ABAP/4 Training </p><p> EXCEPTIONS F1=a1? Example: </p><p> DATA: TEXT(20), LEN TYPE I. </p><p> TEXT = ‘ABCDEFGHIJ’. </p><p> CALL FUNCTION ‘STRING_LENGTH’ EXPORTING STRING = TEXT IMPORTING LENGTH = LEN. WRITE / LEN. </p><p> 注意 EXPORTING与IMPORTING刚好颠倒, 执行所得结果为 10 </p><p> </p><p> 第39页(共39页) 4/29/2013 </p><p></p> <p>本文来源:<a href="https://www.bwwdw.com/article/0kax.html">https://www.bwwdw.com/article/0kax.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/q7w8.html" target="_blank" title="ABAP4语法祥解">ABAP4语法祥解</a></li><li><a href="https://www.bwwdw.com/article/0kax.html" target="_blank" title="ABAP4语法祥解">ABAP4语法祥解</a></li><li><a href="https://www.bwwdw.com/article/x0dm.html" target="_blank" title="ABAP4培训手册_final">ABAP4培训手册_final</a></li><li><a href="https://www.bwwdw.com/article/x5m.html" target="_blank" title="abap基础语法练习">abap基础语法练习</a></li><li><a href="https://www.bwwdw.com/article/ld6h.html" target="_blank" title="移动类型祥解">移动类型祥解</a></li><li><a href="https://www.bwwdw.com/article/acdr.html" target="_blank" title="ABAP基础语法学习笔记">ABAP基础语法学习笔记</a></li><li><a href="https://www.bwwdw.com/article/qvmf.html" target="_blank" title="Cubase File菜单祥解">Cubase File菜单祥解</a></li><li><a href="https://www.bwwdw.com/article/xhld.html" target="_blank" title="有关迷宫式密封祥解">有关迷宫式密封祥解</a></li><li><a href="https://www.bwwdw.com/article/gu77.html" target="_blank" title="锅炉规程2017.2.22祥解 - 图文">锅炉规程2017.2.22祥解 - 图文</a></li><li><a href="https://www.bwwdw.com/article/i9qt.html" target="_blank" title="汽机EH油系统祥解">汽机EH油系统祥解</a></li></ul> </div> <div class="in_reading"><p class="rel_art_line">正在阅读:</p><p><a target="_blank" href="https://www.bwwdw.com/article/0kax.html" title="ABAP4语法祥解">ABAP4语法祥解</a><span>01-04</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/fv1m.html" title="碎石桩施工组织设计(方案)">碎石桩施工组织设计(方案)</a><span>07-26</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/me8n.html" title="大学生《德胜员工守则》读后感合集">大学生《德胜员工守则》读后感合集</a><span>03-25</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/3141.html" title="精明打造品牌女鞋">精明打造品牌女鞋</a><span>06-05</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/rq6s.html" title="我站上了舞台作文500字">我站上了舞台作文500字</a><span>06-21</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/w6j.html" title="我爱我班-一个学生感动我的故事">我爱我班-一个学生感动我的故事</a><span>07-07</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/fip.html" title="案例教学在多媒体广告设计教学中的应用探究">案例教学在多媒体广告设计教学中的应用探究</a><span>03-08</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/7uyd.html" title="鞍山师范学院外语系大学生英语节">鞍山师范学院外语系大学生英语节</a><span>09-22</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/en5k.html" title="帽子的旅行作文600字">帽子的旅行作文600字</a><span>07-02</span></p><p><a target="_blank" href="https://www.bwwdw.com/article/97r3.html" title="勘察设计招标文件(评分) - 图文">勘察设计招标文件(评分) - 图文</a><span>06-28</span></p></div> <div class="previous"> <span class="pre">上一篇:<a title="2017秋华师网络教育毛概在线作业答案" href="https://www.bwwdw.com/article/skax.html">2017秋华师网络教育毛概在线作业答案</a></span> <span class="next">下一篇:<a title="2017最新最全人教版四年级数学下册知识点总结 - 图文" href="https://www.bwwdw.com/article/zkax.html">2017最新最全人教版四年级数学下册知识点总结 - 图文</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/a9dd.html" title="FANUC+0T编程祥解" target="_blank">FANUC+0T编程祥解</a></li><li><span>2</span><a href="https://www.bwwdw.com/article/8jn2.html" title="ABAP基本语法学习关键语句的写法" target="_blank">ABAP基本语法学习关键语句的写法</a></li><li><span>3</span><a href="https://www.bwwdw.com/article/1946.html" title="俄语语法图文并解" target="_blank">俄语语法图文并解</a></li><li><span>4</span><a href="https://www.bwwdw.com/article/3kf7.html" title="ABAP语法讲解二(s e l e c t语句)" target="_blank">ABAP语法讲解二(s e l e c t语句)</a></li><li><span>5</span><a href="https://www.bwwdw.com/article/th7r.html" title="S7-300学习资料(视频祥解)" target="_blank">S7-300学习资料(视频祥解)</a></li><li><span>6</span><a href="https://www.bwwdw.com/article/f93o.html" title="S7-300学习资料(视频祥解)" target="_blank">S7-300学习资料(视频祥解)</a></li><li><span>7</span><a href="https://www.bwwdw.com/article/1kf1.html" title="汉语历史语法研究的目标_吴福祥" target="_blank">汉语历史语法研究的目标_吴福祥</a></li><li><span>8</span><a href="https://www.bwwdw.com/article/iufp.html" title="论五行八字类祥解" target="_blank">论五行八字类祥解</a></li><li><span>9</span><a href="https://www.bwwdw.com/article/bu5x.html" title="SAP开发ABAP" target="_blank">SAP开发ABAP</a></li><li><span>10</span><a href="https://www.bwwdw.com/article/ssew.html" title="论五行八字类祥解" target="_blank">论五行八字类祥解</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/ukxw.html" target="_blank" title="exercise2">exercise2</a></li><li><a href="https://www.bwwdw.com/article/6kxw.html" target="_blank" title="铅锌矿详查地质设计 - 图文">铅锌矿详查地质设计 - 图文</a></li><li><a href="https://www.bwwdw.com/article/3kxw.html" target="_blank" title="厨余垃圾、餐厨垃圾堆肥系统设计方案">厨余垃圾、餐厨垃圾堆肥系统设计方案</a></li><li><a href="https://www.bwwdw.com/article/gkxw.html" target="_blank" title="陈明珠开题报告">陈明珠开题报告</a></li><li><a href="https://www.bwwdw.com/article/7kxw.html" target="_blank" title="化工原理精选例题">化工原理精选例题</a></li><li><a href="https://www.bwwdw.com/article/rkxw.html" target="_blank" title="政府形象宣传册营销案例">政府形象宣传册营销案例</a></li><li><a href="https://www.bwwdw.com/article/pkxw.html" target="_blank" title="小学一至三年级语文阅读专项练习题">小学一至三年级语文阅读专项练习题</a></li><li><a href="https://www.bwwdw.com/article/akxw.html" target="_blank" title="2014.民诉 期末考试 复习题">2014.民诉 期末考试 复习题</a></li><li><a href="https://www.bwwdw.com/article/8kxw.html" target="_blank" title="巅峰智业 - 做好顶层设计对建设城市的重要意义">巅峰智业 - 做好顶层设计对建设城市的重要意义</a></li><li><a href="https://www.bwwdw.com/article/wkxw.html" target="_blank" title="(三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案">(三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案</a></li><li><a href="https://www.bwwdw.com/article/bkxw.html" target="_blank" title="2017年实心轮胎现状及发展趋势分析(目录)">2017年实心轮胎现状及发展趋势分析(目录)</a></li><li><a href="https://www.bwwdw.com/article/xkxw.html" target="_blank" title="基于GIS的农用地定级技术研究定稿">基于GIS的农用地定级技术研究定稿</a></li><li><a href="https://www.bwwdw.com/article/okxw.html" target="_blank" title="2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文">2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文</a></li><li><a href="https://www.bwwdw.com/article/tkxw.html" target="_blank" title="作业">作业</a></li><li><a href="https://www.bwwdw.com/article/5kxw.html" target="_blank" title="OFDM技术仿真(MATLAB代码) - 图文">OFDM技术仿真(MATLAB代码) - 图文</a></li><li><a href="https://www.bwwdw.com/article/2kxw.html" target="_blank" title="Android工程师笔试题及答案">Android工程师笔试题及答案</a></li><li><a href="https://www.bwwdw.com/article/vkxw.html" target="_blank" title="生命密码联合密码">生命密码联合密码</a></li><li><a href="https://www.bwwdw.com/article/dkxw.html" target="_blank" title="空间地上权若干法律问题探究">空间地上权若干法律问题探究</a></li><li><a href="https://www.bwwdw.com/article/fkxw.html" target="_blank" title="江苏学业水平测试《机械基础》模拟试题">江苏学业水平测试《机械基础》模拟试题</a></li><li><a href="https://www.bwwdw.com/article/ikxw.html" target="_blank" title="选课走班实施方案">选课走班实施方案</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/ABAP4/" target="_blank" title="ABAP4">ABAP4</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/9kax.html" target="_blank" title="甘肃省自然科学研究员副研究员任职资格评审条件">甘肃省自然科学研究员副研究员任职资格评审条件</a></li><li><a href="https://www.bwwdw.com/article/ckax.html" target="_blank" title="小升初英语知识点归纳">小升初英语知识点归纳</a></li><li><a href="https://www.bwwdw.com/article/ykax.html" target="_blank" title="基于丹尼森模型的海尔企业文化分析">基于丹尼森模型的海尔企业文化分析</a></li><li><a href="https://www.bwwdw.com/article/usax.html" target="_blank" title="易语言教程">易语言教程</a></li><li><a href="https://www.bwwdw.com/article/3sax.html" target="_blank" title="电脑周边配件品牌图标">电脑周边配件品牌图标</a></li><li><a href="https://www.bwwdw.com/article/6sax.html" target="_blank" title="品茶之人境">品茶之人境</a></li><li><a href="https://www.bwwdw.com/article/7sax.html" target="_blank" title="项目比较法在嵌入式系统实训教学模式中的应用探讨-精选教育文档">项目比较法在嵌入式系统实训教学模式中的应用探讨-精选教育文档</a></li><li><a href="https://www.bwwdw.com/article/gsax.html" target="_blank" title="前台门户网站架构设计方案 - 图文">前台门户网站架构设计方案 - 图文</a></li><li><a href="https://www.bwwdw.com/article/psax.html" target="_blank" title="2015香港特别行政区教师招聘考试公共基础知识包过题库">2015香港特别行政区教师招聘考试公共基础知识包过题库</a></li><li><a href="https://www.bwwdw.com/article/rsax.html" target="_blank" title="第一章 地球的运动 第一课时 地球的自转">第一章 地球的运动 第一课时 地球的自转</a></li><li><a href="https://www.bwwdw.com/article/kkax.html" target="_blank" title="利用MasterCAM软件实现典型零件数控车自动编程">利用MasterCAM软件实现典型零件数控车自动编程</a></li><li><a href="https://www.bwwdw.com/article/nkax.html" target="_blank" title="中国古代的天人合一">中国古代的天人合一</a></li><li><a href="https://www.bwwdw.com/article/lkax.html" target="_blank" title="新概念英语作者亚历山大给中国学生的口语学习建议">新概念英语作者亚历山大给中国学生的口语学习建议</a></li><li><a href="https://www.bwwdw.com/article/qkax.html" target="_blank" title="都业华高级班季课11月8日 第4课 分型同级别分解、分型与成交量及选股(课后) - 图文">都业华高级班季课11月8日 第4课 分型同级别分解、分型与成交量及选股(课后) - 图文</a></li><li><a href="https://www.bwwdw.com/article/ekax.html" target="_blank" title="九龙新村小区物业服务合同">九龙新村小区物业服务合同</a></li><li><a href="https://www.bwwdw.com/article/4kax.html" target="_blank" title="开题报告(可供参考) - 图文">开题报告(可供参考) - 图文</a></li><li><a href="https://www.bwwdw.com/article/1kax.html" target="_blank" title="2017年成人高考去新加坡留学 - 图文">2017年成人高考去新加坡留学 - 图文</a></li><li><a href="https://www.bwwdw.com/article/mkax.html" target="_blank" title="借鉴台湾档案数位典藏做法促进档案信息共享建设">借鉴台湾档案数位典藏做法促进档案信息共享建设</a></li><li><a href="https://www.bwwdw.com/article/jkax.html" target="_blank" title="复习试题(一)">复习试题(一)</a></li><li><a href="https://www.bwwdw.com/article/ikax.html" target="_blank" title="精选-25一年级上册美术教案认识颜色2沪教版-文档资料">精选-25一年级上册美术教案认识颜色2沪教版-文档资料</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=0kax", "type":"get", "data":"", "dataType":"json", "success":function(res){ $("#read_views").html(res.data); } }); </script> <script type="text/javascript">bottomAction();</script> </body> </html>