当前位置:文档之家› ABAP技术初级培训教材

ABAP技术初级培训教材

ABAP技术初级培训教材
ABAP技术初级培训教材

3. ABAP基础

3.1 数据定义

3.1.1 数据类型

定义数据需要指定其数据类型。数据类型有预定义数据类型和自定义数据类型之分。预定义数据类型的名称是固定的。用户定义的数据类型的名称由用户在程序中指定。ABAP/4 中预定义的数据类型如下表所示。

3.1.2 变量定义

DATA语法: DATA [] TYPE [] []

: 变量名称, 最长30个字符, 不可含有 + . , : ( ) 等字符。

: 数据类型及长度, 如 LINE(20) TYPE C.亦如MYNAME LIKE SY-UNAME 。

: 初值。

: 小数位数。

实例:

DATA: COUNTER TYPE P VALUE 1, *名称为COUNTER变量,类型为P ,初值为1

FLAG TYPE C VALUE IS INITIAL, *名称为FLAG的变量,类型为 C ,初值为默认值

WEIGHT TYPE P DECIMALS 2 VALUE ‘1.25’. *名称为WEIGHT的变量,类型为P ,初值为1.25

实例:

DATA: BEGIN OF ADDRESS, *定义数组变量ADDRESS

NAME(10) TYPE C ,

NUMBER TYPE P,

END OF ADDRESS.

使用时用字段变量加上组件名称, 如 ADDRESS-NAME。

3.1.3 常量定义

常数定义使用 CONSTANTS 指令, 如定义 PI 是一个有5位小数的数值 3.14159 .

实例:

CONSTANTS PI TYPE P DECIMALS 5 VALUE ‘3.14159’.

3.1.4 系统定义的数据

SPACE空白字符串

SY-SUBRC系统执行返回值,0表示执行成功

SY-UNAME登陆帐号名称

SY-DATUM系统日期

SY-UZEIT系统时间

SY-TCODE目前的事务代码

3.1.5 指令

1TYPE指令

TYPE用来指定数据类型。

实例:

DATA: NAME(10) TYPE C.

TYPES: NUMBER TYPE I.

2TYPES指令

TYPES用来自定义数据类型。

实例:

TYPES:BEGIN OF MYLIST,

NAME(10) TYPE C,

NUMBER TYPE I,

END OF MYLIST.

3LIKE指令

LIKE也用来指定数据类型,使用格式与TYPE相同,LIKE与TYPE的区别是LIKE 用在已有值的数据项, 如系统变量, 而TYPE叙述则是用在指定数据类型。

实例:

DATA: MYDATA LIKE SY-DATUM.

4STATICS指令

STATICS用来定义变量,使用格式与DATA相同。与DATA的区别是STATICS只能在子程序中使用,用STATICS定义的变量可以在退出子程序后保留局部数据对象的值,而DATA不能。

语法: STATICS [] [] []

实例:

FORM DATATEST2.

STATICS A(20) TYPE C .

A = 'AAA'.

WRITE: / A.

ENDFORM.

5TABLES指令

TABLES 语句用来创建称为表工作区的数据对象。表工作区是参考 ABAP/4 词典对象的字段串。语法:TABLES .其中 是ABAP/4 词典对象的名称,同时也是创建的表工作区的名称。表工作区组件的顺序和名称与在 ABAP/4 词典中声明的对象相同。

实例:

TABLES: EBAN.

3.2.1 赋值

语法: MOVE TO

将F1的值存至变数 F2 中, 也可写成 F2 = F1

实例:

M_NAME = 'CHER'.

3.2.2 截取字符串赋值

语法: MOVE [+] TO [+]

实例:

DATA: F1(10) TYPE C VALUE 'ABCDEFGHIJ'.

F2(5) TYPE C.

F2 = F1+3(5). *自第4个位置开始取出5个字符

F2 的内容会变成 DEFGH

3.2.3 数组值的复制

语法: MOVE –CORRESPONDING TO .

将Strings1中的字段名称相同的数据复制至Strings2相应字段中

实例:

DATA: BEGIN OF ADDRESS,

FIRSTNAME(10) TYPE C VALUE 'LULU',

LASTNAME(10) TYPE C VALUE 'CHOU',

TEL(12) TYPE C VALUE '4660570',

END OF ADDRESS.

DATA: BEGIN OF NAME,

FIRSTNAME(10) TYPE C,

LASTNAME(10) TYPE C,

E_MAIL(30) TYPE C,

END OF NAME.

MOVE-CORRESPONDING ADDRESS TO NAME.

NAME-FIRSTNAME 变成 ‘LULU’, NAME-LASTNAME 变成 ‘CHOU’, 而 NAME-E_MAIL 则不变。

3.2.4 变量 CALL BY VALUE 的使用

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

语法: WRITE () TO

实例:

DATA: NAME(20) TYPE C VALUE 'SOURCE',

SOURCE(10) TYPE C VALUE 'LILY',

TARGET(10) TYPE C.

WRITE (NAME) TO TARGET.

WRITE / TARGET.

执行结果: LILY

3.2.5 清除变量内容

语法: CLEAR

清除变量现在内容

实例:

DATA N TYPE I VALUE 100.

CLEAR N.

变量 N 的内容变成 0

3.2.6 算术符号

1 ** 乘幂

2 * 乘

3 / 除

4 + 加

5 - 减

6 DIV 整数除法

7 MOD 余数除法

3.2.7 数值函数

1ABS(N): 取数值 N 的绝对值

2SIGN(N): 1 if N > 0

0 if N = 0

-1 if N < 0

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

实例:

DATA:INT1 TYPE I,

INT2 TYPE I.

INT1 = CEIL('-5.65').

WRITE:INT1. 输出结果:5-

INT2 = CEIL('4.54').

WRITE:INT2. 输出结果:5

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

实例:

DATA:INT1 TYPE I,

INT2 TYPE I.

INT1 = FLOOR('-5.65').

WRITE:INT1. 输出结果:6-

INT2 = FLOOR('4.54').

WRITE:INT2. 输出结果:4

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

实例:

DATA: INTI TYPE I.

INTI = TRUNC('5.65').

WRITE INTI. 输出结果: 5

6FRAC(N): 传回数值 N 的小数部分

实例:

DATA: MYF TYPE F.

MYF = FRAC('5.65').

WRITE MYF. 输出结果: 0.65

7COS(A),SIN(A),TAN(A): 传回三角函数 cos A, sin A, tan A 的值, A 为弪度量

8EXP(N): 传回 e^N 值

9LOG(N): 传回 log eN 值

LOG10(N): 传回 log N值

10SQRT(N): 传回 N 的平方根值

1日期数据的运算

日期数据可以直接运算, 如加法与减法的运算

实例:

DATA: Mdata TYPE D.

Mdate = SY-DATUM. *如传回 19971015

Mdate = Mdate + 1. *Mdate 变成 19971016

Mdate+6(2) = '01'. *Mdate 变成 19971001

Mdate = Mdate - 1. *Mdate 变成 19970930

2时间数据的运算

时间格式为 ‘hhmmss’, 如 ‘212030’ 表 ’21:20:30’

实例:

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. *计算几分钟

3.2.9 字符串数据处理

1字符串移位

语法: SHIFT [BY PLACES] [] [CIRCULAR]

[BY PLACES]:表示移动的位数,没有此参数默认移动一位。

[] : 移动的方向,没有此参数默认向左移动。

(1).LEFT, 字符串往左移 n 位

(2).RIGHT, 字符串往右移 n 位

[CIRCULAR]: 字符串以环状方式移位

实例:

DATA STRING(10) TYPE C VALUE 'ABCDEFGHIJ'.

SHIFT STRING. *得到 'BCDEFGHIJ'

SHIFT STRING BY 2 PLACES RIGHT. *得到 ABCDEFGH

2取代字符串内容

语法: REPLACE WITH INTO

将字符串 中的 来取代

实例:

DATA: STRING(10) TYPE C VALUE 'ABCDEFGHI',

STR1(3) TYPE C VALUE 'DEF',

STR2(3) TYPE C VALUE '123'.

REPLACE STR1 WITH STR2 INTO STRING.

WRITE / STRING. *得到 ABC123GHI

3大小写的转换

语法: TRANSLATE TO UPPER CASE. *转成大写

TRANSLATE TO LOWER CASE. *转成小写

4在字符串中寻找部分字符串

语法: SEARCH FOR

从字符串查询字符串

执行结果存至两个变数, SY-SUBRC 和 SY-FDPOS, 若找到则 SY-SUBRC 为 0 ,SY-FDPOS 存开始位迭(从0开始计)。

若找不到则 SY-SUBRC为 4, SY-FDPOS为 0。

实例:

DATA STRING(10) TYPE C VALUE 'ABCDEFGHIJ'.

SEARCH STRING FOR 'CDE'.

SY-SUBRC值为:0

SY-FDPOS值为:2

5字符串长度

语法:STRLEN()

实例:

DATA:INT TYPE I.

INT = STRLEN('XYZABC'). *得到 6

INT = STRLEN('ABC '). *得到 3

6取部分字符串

语法:[+][]

实例:

DATA T(10) TYPE C VALUE 'ABCDEFGHI'.

WRITE / T+2(4).

执行结果:CDEF

7组合字符串的函数

语法:

CONCATENATE INTO .

实例:

data:str1(4) type c,

str2(4) type c,

str3(8) type c.

str1 = '2007'.

str2 = '0902'.

concatenate str1 str2 into str3.

write:str3.

执行结果:20070902

8去掉字符串中间的空格

语法:

CONDENSE NO-GAPS.

实例:

data: str0(10) type c.

str0 = 'abc sde'.

condense str0 no-gaps.

write:/ str0.

执行结果:abcsde

在ABAP/4中要自屏幕输入变量的内容, 使用的命令是 PARAMETERS 及 SELECTION-OPTIONS:

1. PARAMETER: 输入一个变量或字段内容

2. SELECTION-OPTIONS: 使用条件筛选画面来输入数据

3.3.1 PARAMETERS 指令

语法:

PARAMETERS

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

实例:

PARAMETERS: NAME(8) TYPE C,

AGE TYPE I,

BIRTH TYPE D.

执行行結果:

LOWER CASE:ABAP/4预设是将字串输入值自动转换为大写, 加上此参数会将输入的资料转成小写。

OBLIGATORY:强制要求输入, 屏幕上会出現一个“ ?” , 使用者必须要输入才可。

AS CHECKBOX:输入 CHECKBOX的格式。

实例:

PARAMETERS: TAX AS CHECKBOX DEFAULT ‘X’,

NTD AS CHECKBOX.

执行結果:

RADIOBUTTON GROUP :输入 RADIO BUTTON GROUP 的方式。

实例:

PARAMETERS: BOY RADIOBUTTON GROUP SEX DEFAULT ‘X’,

GIRL RADIOBUTTON GROUP SEX.

执行結果:

3.3.2 SELECTION-OPTIONS

语法:

SELECT-OPTIONS FOR

[DEFAULT TO ]

[NO-EXTENSION]

[NO INTERVALS]

[LOWER CASE]

[OBLIGATORY]

实例:

TABLES SPFLI.

SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID. *将条件的输入值存放入 AIRLINE, 筛选对象为SPFLI中的CONNID栏位。

执行結果:

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

实例:

SELECTION-OPTION AIRLINE FOR SPFLI-CONNID

DEFAULT '2042' TO '4555'.

NO-EXTENSION:设定不要多值输入画面

NO INTERVALS:设定不要区间范围输入画面

LOWER CASE:输入转换成大写OBLIGATORY:强制要求输入

图29

图30

图31

32

3.3.3 配合 SELECT 命令

条件输入完后要将符合条件的数据筛选出来, 可配合使用 SELECT 指令

1使用WHERE <条件式>

实例:

SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID.

SELECT * FROM SPFLI WHERE CONNID IN AIRLINE.

WRITE: / SPFLI-CONNID,SPFLI-FROMCITY,SPFLI-TOCITY.

ENDSELECT.

2使用CHECK参数

实例:

SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID.

SELECT * FROM SPFLI.

CHECK AIRLINE.

WRITE: / SPFLI-CONNID,SPFLI-FROMCITY,SPFLI-TOCITY.

ENDSELECT.

3使用 IF … IN 叙述

实例:

SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID.

SELECT * FROM SPFLI.

IF SPFLI-CONNID IN AIRLINE.

WRITE: / SPFLI-CONNID,SPFLI-FROMCITY,SPFLI-TOCITY.

ENDIF

ENDSELECT.

3.3.4 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.

实例:

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN POSITION 20.

PARAMETERS NAME(10) TYPE C.

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 .

……

SELECTION-SCREEN END OF BLOCK .

实例:

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.

SELECTION-SCREEN SKIP 1. *空一行

PARAMETERS: P_WERKS LIKE EBAN-WERKS OBLIGATORY.

SELECT-OPTIONS:

S_MATNR FOR EKPO-MATNR, "物料号码

S_MATKL FOR EBAN-MATKL. "物料组

SELECTION-SCREEN END OF BLOCK B1.

执行结果:

图33

3.4 屏幕输出指令

3.4.1 Write 指令

1ABAP/4 用来在屏幕上输出数据的指令是 Write 指令

语法: Write 资料项

资料项可以是常数或变量。

实例:

WRITE 'This is sample'.

WRITE: 'COMPANY:',STFL-CARRID.

2指定屏幕位置显示

语法: Write AT [/] [] [()] 资料项

/ : 先往下一列

pos : 屏幕X轴坐标

(len): 显示资料的长度

实例:

WRITE 'First Line '.

WRITE / 6 'Second Line'.

输出结果:

First Line

Second Line

DATA: NUMBER TYPE I VALUE '1234567890'.

TEXT(10) TYPE C VALUE 'ABCDEFGHIJ'.

WRITE: (5) NUMBER, /(6) TEXT.

输出结果:

*7890

ABCDEF

3指定显示格式

语法: WRITE 资料项 <显示格式参数>

显示格式参数:

LEFT-JUSTIFIED 资料靠左显示

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(浮点数)的科学计数法表示

ROUND 四舍五入至小数位数下 r 位

CURRENCY 币别显示

DD/MM/YY 日期显示格式

MM/DD/YY

DD/MM/YYYY

MM/DD/YYYY

DDMMYY

MMDDYY

YYMMDD

实例:

DATA: X TYPE I VALUE '112030',

A(5) TYPE C VALUE ’ABCDE’. 

WRITE X USING EDIT MASK ‘__:__:__’.

输出结果为 11:20:30

WRITE X USING EDIT MASK '$___,___'.

输出结果为 $112,030

3.4.2 产生空白列

1产生 n 个空白行

语法: SKIP []

实例:

WRITE 'PASS1'.

SKIP 1.

WRITE 'PASS2'.

执行结果:

PASS1

PASS2

2跳至指定行坐标

将坐标跳至指定的Y轴列坐标

语法: SKIP TO LINE []

实例:

SKIP TO LINE 5.

WRITE ‘PASS1’.

3.4.3 显示图示

可以显示R/3 系统所提供的符号或图标

语法: WRITE AS SYMBOL

WRITE AS ICON

实例:

INCLUDE

INCLUDE

WRITE: / ‘Phone Symbol:’ , SYM_PHONE AS SYMBOL.

WRITE: / ‘Alarm Icon:’ , ICON_ALARM AS ICON.

执行结果:

要查看系统所提供有那些符号及图标, 可选择 “编辑” 下的 “模式”, 选择“WRITE”接下来选择要查的群组。

3.4.4 显示 CHECK BOX 资料

语法:

WRITE <资料项> AS CHECKBOX.

实例:

DATA: FLAG1 VALUE ' ',

FLAG2 VALUE 'X'.

WRITE: / 'CHECK FLAG 1:' , FLAG1 AS CHECKBOX.

WRITE: / 'CHECK FLAG 2:' , FLAG2 AS CHECKBOX.

执行结果:

3.4.5 输出横线

语法:

ULINE [AT] [][()].

int1:为输出横线的起始位置

int2:为输出横线的长度

int1与int2为变量时必须有[AT]参数,是常数时可以不写[AT]

实例:

ULINE 10(20). *从第10位置开始输出一条长度为20的横线

实例:

DATA:INT1 TYPE I VALUE '20'.

DATA:INT2 TYPE I VALUE '100'.

ULINE AT INT1(INT2). *根据int1与int2的值,从位置20输出一条长度为100的横线

相关主题
文本预览
相关文档 最新文档