数据类型:
数据对象的技术特性的定义
本身不占用内存空间
可以是系统预定义或者用户自定义
数据对象:
内存变量
指定为某一特定数据类型
预定义数据类型:
C,D,F,I,N,P,T
1.定义数据类型—TYPES
在程序中用TYPES声明局部数据类型
语法格式与变量类似
TYPES定义的类型在程序中用于声明常量或者变量
TYPES定义的是类型,不是变量,所以不能直接赋值
ABAP数据类型可以是预定义数据类型,可以是数据字典里的全局数据类型,或者用户在程序中自定义的数据类型
例子:
TYPES:
BEGIN OF EMPLOYEE,
CODE(10) TYPE C,
NAME(10) TYPE C,
END OF EMPLOYEE.
TYPES:
ADDRESS(50) TYPE C.
DATA:EMP TYPE EMPLOYEE.
DATA:MYADD TYPE ADDRESS.
EMP-CODE=‘1001’.
EMO-NAME=‘ZHANGSAN’.
MYADD=‘THIS IS MY ADDRESS’.
2.数据对象定义
用TYPE定义变量:
DATA < NAME > [< LENGTH >] TYPE < TYPE > [VALUE< VALUE >] [DECIMAL< DECIMAL >]
[]里的内容表示可选项。<>表示名称
< NAME >:变量名称,最长30个字符
< LENGTH >:长度,要用圆括号括起来,如LINE(20) TYPE C
< TYPE >:数据类型
< VALUE >:初始值
< DECIMALS >:小数位
例子:
DATA:
C1 TYPE C,
INT1 TYPE I VALUE 1,
TEMP TYPE P DECIMAL 2.
用LIKE定义变量:
DATA < NAME > [< LENGTH >] LIKE < OBJECT >|< TYPE > [VALUE< VALUE >] [DECIMAL< DECIMAL >]
TYPE与LIKE的区别
LIKE用在已有值的数据类型,如系统变量而TYPE则用在定义数据类型
例子:
DATA:
TRANSCODE LIKE SY-TCODE.
常量的定义:
CONSTANTS< NAME >[< LENGTH >] TYPE < TYPE > VALUE< VALUE >
常量一但被定义,长期被保存在内存中,其值无法改变
例子:
CONSTANTS PI TYPE P DECIMALS 5 VALUE ‘3.14159’.
常用的系统变量:
SY-SUBRC:系统执行某指令后,表示执行成功与否的变量,0表示成功
SY-UNAME:当前使用者登录SAP的USERNAME
SY-DATUM:当前系统日期
SY-UZEIT:当前系统时间
SY-TCODE:当前执行程序的transaction code
SY-INDEX:当前LOOP循环过的次数
SY-TABIX:当前处理的是internal table的第几笔
SY-MANDT:CLIENT NUMBER
SY-VLINE:画竖线
SY-ULINE:画横线
结构体的定义:
有结构的变量
程序中用DATA定义的局部变量
DATA:
BEGIN OF < NAME >
< FIELD1 >…
< FIELD2 >…
END OF< NAME >.
结构体赋值:
可对结构体直接赋值
相同的结构体之间可以用等于号来实现数据的赋值
WRITE STRUCTURE NAME可输出所有字段,或使用< STRUCTURE >-< FIELDNNAME >输出指定字段
相同结构体之间使用MOVE…TO…进行赋值
有差异的结构体,可使用MOVE-CORRESSPONDING匹配及赋值相同的字段
例子:
USERINF-SID=‘A00001’.
USERINF-NAME=‘JERY’.
USERIF-TEL=‘123456’
DATA:
BEGIN OF USERDETAIL,
SID(10) TYPE C,
NAME(20) TYPE C,
BIRDATE TYPE D,
ADD(50) TYPE C,
END OF USERDETAIL.
MOVE-CORRESSPONDING USERINF TO USERDETAIL.
表示把USERIF的值赋值给USERDETAIL
结构体继承:
参考已经存在的结构体创建一个属性相同的信结构体
可在新结构体中增加字段
定义语句:INCLUDE STRUCTURE
例子:
DATA:
BEGIN OF EMPLOYEE,
INCLUDE STRUCTURE USERINF,
DATA:
BIRTHDATE TYPE D,
ADD(50) TYPE C,
END OF EMPLOYEE.
用TYPES定义的结构体不能直接赋值,要用DATA实例化后才能赋值。
用DATA定义的结构体可以直接赋值。
3.数据的赋值
①MOVE < F1 > TO < F2 >
②WRITE < VALUE > TO < FIELD > 带有格式的赋值
③在源字段中取偏移量给目标变量
MOVE < F1 >[+<偏移量>] [(<取位数>)] TO < F2 > [+<偏移量>] [(<取位数>)]
WRITE < F1 >[+<偏移量>] [(<取位数>)] TO < F2 > [+<偏移量>] [(<取位数>)]
例子:
DATA:
F1(10) VALUE ‘ABCDEFGHIJ’,
F2(5).
F2=F1+3(5).//从第三位开始,取5个,DEFGH
WRITE:F1,/F2.
注意:下标是从0开始的
MOVE-CORRESPONDING < STRING1 > TO < STRING2 >
解锁:SM12
3.流程控制
①IF
IF< CONDITION1 >.
.
ELSEIF< CONDITION2 >.
< STATEMENT BLOCK >.
ELSE.
< STATEMENT BLOCK >
ENDIF.
IF只有一个,ENDIF只有一个,ELSEIF有多个
②CASE
CASE< F >.
WHEN< F1 >.
< STATEMEN BLOCK >.
WHEN< F2 >.
< STATEMENT BLOCK >.
WHEN…
WHEN OTHERS
< STATEMENT BLCOK >.
ENDCASE.
③DO
DO[< N > TIMES]
< STATEMENT BLOCK >
ENDDO.
注:
N:可以是数字或者是变量,如果N是0或者是负数,系统不执行该循环
TIMES:循环次数
使用DO语句要避免死循环,如果不使用TIMES选项,则在语句中至少要包含一个EXIT,STOP语句,使系统可以退出循环
系统SY-INDEX记录循环的次数
④WHILE
WHILE< CONDITION >
< STATEMENT BLOCK >
ENDWHILE.
满足条件< CONDITION >时候执行,不满足,退出
⑤LOOP
LOOP循环用于实现内表数据的循环读取和操作
LOOP AT ITAB.
WRITE:ITAB.
ENDLOOP
CONTINUE:无条件终止当前循环,直接执行下一次循环
CHECK:有条件终止当前循环
EXIT:终止所有循环