04—语法

数据类型:

数据对象的技术特性的定义

本身不占用内存空间

可以是系统预定义或者用户自定义

数据对象:

内存变量

指定为某一特定数据类型

预定义数据类型:

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:终止所有循环

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值