ABAP4语法祥解
更新时间:2024-01-04 15:42:01 阅读量: 教育文库 文档下载
- ABAP4 四舍五入推荐度:
- 相关推荐
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
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
將F1的值存至变量 F2 中, 也可写成 F2 = F1 Example:
M_NAME = ‘CHER’.
使用 Offset 语法:
MOVE
DATA: F1(10) VALUE ‘ABCDEFGHIJ’, F2(5).
F2 = F1+3(5). “自第4个位置开始取出5个字符 F2 的內容会变成 DEFGH
Field String 元素的复制 语法:
MOVE –CORRESPONDING
將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 (
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
第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
DATA: STRING(10) VALUE ‘ABCDEFGHI’, STR1(3) VALUE ‘DEF’, STR2(3) VALUE ‘123’.
REPLACE STR1 WITH STR2 INTO STRING. WRITE / STRING. “得到 ABC123GHI 3.大小写转换 語法:
TRANSLATE
SEARCH
DATA STRING(10) VALUE ‘ABCDEFGHIJ’.
5.字串长度 STRLEN(
INT = STRLEN(‘XYZABC’). “得到 6 INT = STRLEN(‘ABC ’ ). “得到 3 6.取部分字串
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
TYPES
INCLUDE STRUCTURE . DATA: END OF
DATA:
格式: APPEND [
第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 [
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 [
[INDEX
五.
读取internal table 格式一:
LOOP AT
READ TABLE
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
举例一. 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
或: DELETE
八.
Internal table 排序
SORT
其中:
九.
初始化internal table
REFRESH
第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
如果第一个条件是真, 系统将执行所有语句直到第一个语句块结束,然后继续处理 ENDIF语句之后的程序。要采用选择性条 件,可以使用 ELSEIF语句。如果第一个条件是假,系统使用与 IF 语句一样的方式处理后面的 ELSEIF语句。如果 IF 或 ELSEIF 条件都为假 ,则执行 ELSE 开始的语句块。最后的 语句块必须 用 ENDIF 结束。
要用公式表 达 IF 和 ELSEIF 语句中的条 件,可以使用任何编程逻辑表 达式描述的逻辑表达式。
CASE的条件分支语句
要根据特殊 数据字段的 内容执行不 同的语句块 ,可以如下 使用 CASE 语句: 语法:
CASE
第12页(共39页) 4/29/2013
ABAP/4 Training
WHEN
例如:
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 选项指定目标区域
逐行将内表
第13页(共39页) 4/29/2013
ABAP/4 Training
AT FIRST.“读取内边的第一行 ENDAT.
AT LAST.“读取到内标的最后一行 ENDAT.
AT NEW
AT END
可以用sy-tabix 取回值.
在语句块内 ,系统字段 SY-TABIX 包含当前行 的索引。处 理完表格的 所有行之后 循环结束。 在 ENDLOOP 语句之后, 如果至少读 取了一行, 则将系统字 段 SY-SUBRC 设置为0。 否则,将其设置为4。
可以使用 FROM、TO 或 WHERE 选项限制要在循环中进行处理的行 数。 使用 FROM 选项,可以 用
用 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 [
在发现 EXIT、 STOP 或 REJECT 语句之前, 系统继续执行由 DO 引导、ENDDO 结束的语句块。
可以使用 TIMES 选项限制循 环次数。
系统字段 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] [ / ] [
UNDER
USING EDIT MASK
第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
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
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
Example:
TABLES SPFLI.
SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID.
将条件的输入值存放入 AIRLINE, 筛选选择为SPFLI中的CONNID字段 执行结果:
可直接输入起始范围或按下选择画面, 输入完后按下左上角的执行键
三. 条件输入选择画面
1. 自Table中选取
按下输入项的右边往下箭头, 叫出Table中数据项, 选取开始和结束的范围 2. Selection Options
按下”Selection options”按键, , 输入Option及 Sign参数内容, 屏幕如下:
四. 改变条件输入格式 1.
DEFAULT
第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 [
SELECTION-SCREEN SKIP 2. 产生两列空白列 2.产生底线
语法:
SELECTION-SCREEN ULINE /
SELECTION-SCREEN ULINE /10(30). 自第10格开始产生长度30的底线 3.印出备注说明 语法:
SELECTION-SCREEN COMMENT /
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
SELECTION-SCREEN END OF BLOCK
SELECTION-SCREEN BEGIN OF BLOCK RADIO WITH
第24页(共39页) 4/29/2013
ABAP/4 Training
FRAME .
PARAMETER R1 RADIOBUTTON GROUP GR1. PARAMETER R2 RADIOBUTTON GROUP GR1. PARAMETER R3 RADIOBUTTON GROUP GR1. SELECTION-SCREEN END OF BLOCK RADIO.
§SQL语法
我们在编写ABAP4程序的时候,经常需要从TABLE中根据某些条件读取数据,.读取数据最常用的方法就是通过SQL语法实现的.
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
OPEN SQL 语句包含有: SELECT,INSERT,UPDATE,MODIFY,DELETE,OPEN CURSOR, FETCH,CLOSE CURSOR,COMMIT WORK,ROLLBACK WORK等. 1. SELECT语句
语法格式:
SELECT
SY-SUBRC = 0 表示读取数据成功
<> 0 表示未找到符合条件的记录 SY-DBLNT: 被处理过的记录的笔数. 相关的命令:
EXIT. 退出循环.
CHECK
第25页(共39页) 4/29/2013
ABAP/4 Training
SELECT ?.ENDSELECT.是循环方式读取记录的.
例如:
TABLES MARD.
SELECT [DISTINCT] * FROM MARD WHERE MATNR = ‘3520421700’.
(从MARD中抓取所有料号=3520421700的数据) ◆读取一笔数据 TABLES MARD.
SELECT SINGLE * FROM MARD WHERE MATNR = ‘3520421700’. (从MARA中抓取一笔料号=3520421700的资料)
◆ 将读取的记录放在work area中,并且加入Internal table 中. 格式有:
... INTO
... INTO CORRESPONDING FIELDS OF
... INTO CORRESPONDING FIELDS OF TABLE
... APPENDING CORRESPONDING FIELDS OF TABLE
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.
SELECT MATNR WERKS LGORT LABST
INTO CORRESPONDING FIELDS OF ITAB FROM MARD
WHERE MATNR = ‘3520421700’. APPEND ITAB. CLEAR ITAB. ENDSELECT.
(将读取的结果放在Internal table ITAB中) 举例二. TABLES MARD.
第26页(共39页) 4/29/2013
ABAP/4 Training
SELECT MATNR MTART MAKTX INTO (t_matnr, t_mtart, maktx) FROM MARD
WHERE MATNR = ‘3520421700’.
(从MARD中抓取料号=3520421700的料号、类型和描述,放在变量t_matnr, t_mtart, maktx中)。 ◆按指定的字段排序 TABLES SBOOK.
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.
(利用参数ORDER BY所指定的字段排序) ◆ 抓取数据的条件叙述 (1) BETWEEN
例如: WHERE YEAR BETWEEN 1995 AND 2000. (2) LIKE
例如: WHERE NAME LIKE ‘MIKE%’. (‘%’是通配符号) (3) IN (
是
例如: WHERE PLANT IN (‘CHUNGLI’, ‘TAOYUAN’,’LIUTU’).
(表示PLANT 只要是’CHUNGLI’或’TAOYUAN’或’LIUTU’都可以).
2. INSERT 语句
◆ 从work area 加入到Internal Table中
格式: INSERT INTO
DATA: BEGIN OF WA,
CODE(6) TYPE C, NAME(30) TYPE C, END OF WA.
DATA: VEN LIKE WA OCCURS 10.
第27页(共39页) 4/29/2013
ABAP/4 Training
?
WA-CODE = ‘530120’.
WA-NAME = ‘XINGDA ELECTRONICS CO.,LTD’. INSERT INTO VEN VALUES WA .
如果work area的名称就是internal table的名称,可以直接写成: INSERT
DATA: BEGIN OF WA OCCURS 10, CODE(6) TYPE C, NAME(30) TYPE C, END OF WA. ?
WA-CODE = ‘530120’.
WA-NAME = ‘XINGDA ELECTRONICS CO., LTD’. INSERT WA.
◆ 从另外一个Internal table中INSERT 数据 格式:
INSERT
将
MODIFY
DELETE
Database Cursor是一个数据库暂存区, 将经SELECT指令读取的记录存放至此暂存区, 再由此暂存区放至Work Area中, 可减少数据库读取的次数. 1.开启 Database Cursor 语法:
OPEN CURSOR
TABLES SPFLI.
DATA: WA LIKE SPFLI, C1 TYPE CURSOR.
OPEN CURSOR C1 FOR SELECT * FROM SPFLI WHERE AREA =’TAIWAN’. 2.读取 Database Cursor的数据存入 Work Area
第28页(共39页) 4/29/2013
ABAP/4 Training
语法:
FETCH NEXT CURSOR
FETCH NEXT CURSOR C1 INTO WA.
读取下一笔Cursor位置的数据存入WA, 如果已无数据可读, SY-SUBRC <>0. 关闭 Database Cursor 语法:
CLOSE CURSOR
CLOSE CURSOR C1. 6. COMMIT WORK & ROLLBACK WORK
要确定数据成功写入数据库,可使用COMMIT WORK指令,如: COMMIT WORK.
相反的, 如果反悔要复原, 可使用 ROLLBACK WORK, 可复原在上个COMMIT WORK指令之后的数据, 如: ROLLBACK WORK.
第29页(共39页) 4/29/2013
ABAP/4 Training
§使用NATIVE SQL指令 语法格式:
EXEC SQL [PERFORMING
正在阅读:
ABAP4语法祥解01-04
青海盐湖提锂工艺获重大突破08-30
一次难忘的演讲作文600字07-05
分析化学单元测试题09-17
“共同托起明天的太阳”活动发言稿06-12
一次回老家的经历作文600字07-14
英语作文-中国的女权主义feminism in china01-31
小学语文习惯调查报告10-15
三百六十行,行行不容易作文300字06-25
商的近似值解决问题教案(修改)07-08
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 语法
- ABAP4
- 甘肃省自然科学研究员副研究员任职资格评审条件
- 小升初英语知识点归纳
- 基于丹尼森模型的海尔企业文化分析
- 易语言教程
- 电脑周边配件品牌图标
- 品茶之人境
- 项目比较法在嵌入式系统实训教学模式中的应用探讨-精选教育文档
- 前台门户网站架构设计方案 - 图文
- 2015香港特别行政区教师招聘考试公共基础知识包过题库
- 第一章 地球的运动 第一课时 地球的自转
- 利用MasterCAM软件实现典型零件数控车自动编程
- 中国古代的天人合一
- 新概念英语作者亚历山大给中国学生的口语学习建议
- 都业华高级班季课11月8日 第4课 分型同级别分解、分型与成交量及选股(课后) - 图文
- 九龙新村小区物业服务合同
- 开题报告(可供参考) - 图文
- 2017年成人高考去新加坡留学 - 图文
- 借鉴台湾档案数位典藏做法促进档案信息共享建设
- 复习试题(一)
- 精选-25一年级上册美术教案认识颜色2沪教版-文档资料