1、
ABAP根底知识(完整版)-上
SAP ABAP / 4 根底知识学习
数据类型
C :字符串
D :日期型格式为 YYYYMMDD 例:'1999/12/03'
F : 浮点数长度为8
I :整数
N :数值组成的字符串 如:011,'302'
T : 时间格式为:HHMMSS 如:'14:03:00'
X : 16进制数 如:'1A03'
*-------------------------------------------------------------------------------------*
变量声明
DATA 2、ngth>] 3、 NAME(10) TYPE C,
AGE TYPE I,
WEIGHT TYPE DECIMALS 2,
END OF PERSON.
另外,有关DATA声明的指令还有: CONSTANTS(声明常数)、STATICS(临时变量声明).
exp:
CONSTANTS PI TYPE P DECIMALS 5 VALUE '3.14159'.
STATICS 关键字
声明的变量仅在目前的程序中使用, 结束后会自动释放
语法:
STATICS 4、length>] 5、Y-TABIX: 当前处理的是internal table 的第几笔
SY-TMAXL: Internal table的总笔数
SY-SROWS: 屏幕总行数;
SY-SCOLS: 屏幕总列数;
SY-MANDT: CLIENT NUMBER
SY-VLINE: 画竖线
SY-ULINE: 画横线
TYPE 关键字
用来指定资料型态或声明自定资料型态
Example:
TYPES: BEGIN OF MYLIST,
NAME(10) TYPE 6、 C,
NUMBER TYPE I,
END OF MYLIST.
DATA LIST TYPE MYLIST.
LIKE 关键字
跟TYPE关键字使用格式相同, 如
DATA TRANSCODE LIKE SY-TCODE.
不同的是 LIKE 用在已有值的资料项, 如系统变量, 而TYPE关键字那么是用在指定资料型态。
TABLES 关键字
用来声明 Table Work Area 的数据, 对应至 ABAP/4 资料文件(Dictiona 7、ry Object), 由SQL 指令加载所需数据
语法:
TABLES 8、
输出
一. WRITE 语句
ABAP/4用来在屏幕上输出资料的指令是WRITE指令,例如:
WRITE: 'USER NAME IS:', SY-UNAME.
二. 指定屏幕输出位置
指定输出位置的语句格式为:
WRITE: [AT] [ / ] [ 9、FIED 资料*左对齐
CENTERED 资料*中间对齐
RIGHT-JUSTIFIED 资料*右对齐
UNDER 10、 NO-SIGN: 不显示正负号
DECIMALS 11、YYY:
DD/MM/YYYY
YYYY/MM/DD:
YYYY/DD/MM:
例如1: WRITE: /10(6) 'ABCDEFGHIJK'.
输出结果为: ABCDEF
例如2: DATA: X TYPE I VALUE '11:20:30',
A(5) TYPE C VALUE 'AB CDE'.
WRITE: / X USING EDIT MASK '__:__:__'.
WRITE: / X USING EDIT MASK '$___,_ 12、'.
WRITE: / Y NO-GAP.
输出结果为:
11:20:30
$112,030
ABCDEF
例如3: DATA: LEN TYPE I VALUE 10,
POS TYPE I VALUE 11,
TEXT(10) VALUE '1234567890'
WRITE 'The text ------------ appears in the text.'.
WRITE AT POS(LEN) TEXT.
WRITE TO 语句的 13、根本 形式
要将值(文字)或源字段内容写入目标字段,可以使用 WRITE TO 语句:
语法
WRITE 14、MBER TO PACK.
WRITE / PACK.
MOVE NUMBER TO PACK.
WRITE / PACK.
exp:
DATA: NAME(10) VALUE 'SOURCE',
SOURCE(10) VALUE 'Antony',
TARGET(10).
...
WRITE (NAME) TO TARGET.
WRITE: TARGET.
exp :
DATA: COUNTER TYPE I.
COMPUTE COUNTER = COUNTER + 1.
COUNTER = COUNTER + 1.
AD 15、D 1 TO COUNTER.
在此,三条运算语句进行相同算术运算
输出屏幕上的线和空行
用以下语法,可以在输出屏幕上生成水平线:
语法
ULINE [AT [/][ 16、所示:
WRITE [AT [/][ 17、动。
四. 显示图示:
语法: WRITE: 18、接下来选择要查看的群组,如SYMBOL 或ICON, 接下来按'Display'即可.
*-------------------------------------------------------------------------------------*
一. Internal Table 的声明
ABAP/4中的Internal Table是一种Data Structure,类似于其他语言中的STRUTURE,它可以由几个不同类型的栏位(field)组成,用来表示具有不同属性的某一事物,单独一笔资料表示某个事物,多笔资料表示具有相同属性的多个事物.
Internal 19、table 的定义有以下几种格式:
格式一. DATA: BEGIN OF 20、语法:
DATA 21、> TYPE 22、 name>.
DATA: END OF 23、INE OCCURS 10.
TYPES: BEGIN OF DEEPLINE,
TABLE1 TYPE VECTOR,
TABLE2 TYPE ITAB,
END OF DEEPLINE.
TYPES DEEPTABLE TYPE DEEPLINE OCCURS 10.
本例如创立与上例相同的内表数据类型(VECTOR 和 ITAB)。然后创立数据类型 DEEPLINE 作为字段串,包含这些内表作为组件。通过该字段串,数据类型 DEEPTABLE 被创立为内表。因此该内表的元素本身就是内表。
exp :
TYPES: BE 24、GIN OF LINE,
COLUMN1 TYPE I,
COLUMN2 TYPE I,
COLUMN3 TYPE I,
END OF LINE.
TYPES ITAB TYPE LINE OCCURS 10.
DATA TAB1 TYPE ITAB.
DATA TAB2 LIKE TAB1 WITH HEADER LINE.
同创立内表数据类型(页 99)中所示,该例如创立数据类型 ITAB 作为内表。通过使用 DATA 语句的 TYPE 参数引用 ITAB,使数据对象 TAB1 与 ITAB 结构相同。通过 25、使用 DATA 语句的 LIKE 参数引用 TAB1,使数据对象 TAB2 结构相同。创立的 TAB2 带表头行。因此,可以在程序中使用 TAB2-COLUMN1、TAB2-COLUMN2 和 TAB2-COLUMN3 等定位表格工作区域 TAB2。
exp :
DATA FLIGHT_TAB LIKE SFLIGHT OCCURS 10.
本例如创立数据对象 FLIGHT_TAB, 其结构与数据库表格 SFLIGHT 相同。
本例如介绍 如何采用两种不同的步骤创立同一内表。
TYPES VECTOR_TYPE TYPE I OCCURS 10.
DATA VECTOR T 26、YPE VECTOR_TYPE WITH HEADER LINE.
在此创立一个内表数据类型 VECTOR_TYPE,其行包含首先创立的根本类型 I 字段。然后,通过引用 VECTOR_TYPE 创立数据对象 VECTOR。通过使用 WITH HEADER LINE 选项还创立表格工作区域 VECTOR。在这种情况下,表格工作区域包含一种类型 I 字段,可以通过名称 VECTOR 定位。
DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.
在这种情况下,通过直接在 DATA 语句中使用 OCCURS 选项创立完全一样的数据类型 VECTOR。
27、
1. TYPES type.
2. TYPES type(len).
3. TYPES: BEGIN OF structype ...
END OF structype.
4. TYPES itabtype {TYPE tabkind OF linetype LIKE tabkind OF lineobj}
[WITH [UNIQUE|NON-UNIQUE] ke 28、ydef] [INITIAL SIZE n].
5. TYPES itabtype TYPE RANGE OF type.
TYPES itabtype LIKE RANGE OF f.
6. TYPES itabtype {TYPE linetype|LIKE lineobj} OCCURS n.
*-------------------------------------------------------------------------------------*
APPEND LINE
格式:APPEND 29、TO 30、 WRITE : / LINE-COL1,LINE-COL2.
ENDLOOP.
举例二 (不使用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 : 31、/ ITAB-COL1,ITAB-COL2.
ENDLOOP.
exp:
DATA: BEGIN OF ITAB OCCURS 10,
COL1 TYPE C,
COL2 TYPE I,
END OF ITAB.
DO 3 TIMES.
APPEND INITIAL LINE TO ITAB.
ITAB-COL1 = SY-INDEX. ITAB-COL2 = SY-INDEX ** 2.
APPEND ITAB.
ENDDO.
LOOP AT ITAB.
WRITE: / ITAB-COL1, IT 32、AB-COL2.
ENDLOOP.
举例三. (参加另一个Internal table的元素)
格式: APPEND LINES OF 33、位汇总.
格式: COLLECT [ 34、 ITAB-COL1 = 'ABC'. ITAB-COL2 = 80.
COLLECT ITAB.
此时, internal table中放的是2笔数据, 分别为:
ITAB-COL1 ITAB-COL2
'ABC' 90
'XYZ' 20
*-------------------------------------------------------------------------------------*
INSERT L 35、INE
将元素插入在指定的internal table位置之前.
格式: INSERT [ 36、加的元素放在此记录前面)
Example:
DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
DO 3 TIMES.
37、 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之前
38、 LOOP AT ITAB INTO LINE.
WRITE: / SY-TABIX,LINE-COL1,LINE-COL2. "SY-TABIX为Table位置
ENDLOOP.
执行结果:
1 10 20
2 100 200 "插入的元素
39、 3 20 40
4 30 60
插入另一Internal Table元素
语法:
INSERT LINES OF 40、 APPEND LINES OF ITAB TO JTAB INDEX 3.
将ITAB所有元素插入JTAB中, 位置在第三个元素之前
*-------------------------------------------------------------------------------------*
读取internal table
格式一:
LOOP AT 41、LOOP.
Example:
LOOP AT ITAB INTO LINE WHERE COL1 >100.
WRITE: / SY-TABIX,LINE-COL1.
ENDLOOP.
仅读取 COL1 > 100 的元素
格式二:
READ TABLE 42、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.)
WRI 43、TE: / 'ITAB-COL1 = ', ITAB-COL1, 'ITAB-COL2 = ', ITAB-COL2.
执行结果同样是:
ITAB-COL1 = 3
ITAB-COL2 = 6.
Example:
READ TABLE ITAB INTO LINE INDEX 5
读取 ITAB的第5个元素资料, 放入 LINE的栏位中
根据栏位内容寻找
语法:
READ TABLE 44、 Example:
ITAB-COL1 = 'ABC'.
READ TABLE ITAB INTO LINE.
找出ITAB 中 COL1 栏位内容是 ABC 的元素, 找到的值放入 LINE 中
假设找到 SY-SUBRC传回0, 找不到那么传回 4, 45、
修改internal table 中的值
格式: MODIFY 46、
MODIFY T_SALARY TRANSPORTING salary WHERE birthday = '1999/12/06'.
DELETE internal table中的栏位
格式: DELETE 47、NDING, Default 为ASCENDING.
48、请使用 DESCRIBE 语句,用法如下:
语法
DESCRIBE TABLE 49、
DESCRIBE TABLE ITAB LINES LIN OCCURS OCC.
WRITE: / LIN, OCC.
DO 1000 TIMES.
LINE-COL1 = SY-INDEX.
LINE-COL2 = SY-INDEX ** 2.
APPEND LINE TO ITAB.
ENDDO.
DESCRIBE TABLE ITAB LINES LIN OCCURS OCC.
WRITE: / LIN, OCC.
其输出为:
0 10
1.000 10
在此创立内表 ITAB。 50、在填充表格前后执行 DESCRIBE 语句。更改当前行号,但无法更改初始行号。
*-------------------------------------------------------------------------------------*
加总
SUM.
总和计算存放与work area中,但只能在LOOP 中使用.
例: LOOP AT ITAB INTO LINE.
SUM.
ENDLOOP.
WRITE: / LINE-COL1, LINE-COL2.
LINE-COL1 和 LINE-COL2 存数值总和初始化int