我的SAPABAP基础语法学习笔记.docx
《我的SAPABAP基础语法学习笔记.docx》由会员分享,可在线阅读,更多相关《我的SAPABAP基础语法学习笔记.docx(40页珍藏版)》请在冰豆网上搜索。
我的SAPABAP基础语法学习笔记
ABAP基础学习笔记
学前说明:
1.ABAP/4每条语句以句号结束;
2.ABAP/4中象=,>,<,+,-,*,/等符号左右都需要有至少一个空格,否则报错;
3.整行注释用’*’号,星号要放当前行的第一个才有效,注释本行后面部分用’”’号;
一、基本数据类型:
TypeLengthRangeInitialValueDescription
C11-65535ByteSpace字符串数据,如’Program’
D88Byte‘00000000’日期数据,格式为YYYYMMDD
F88Byte0浮点数
I4-2^31至2^31-10整数
N11-65535Byte‘00…0’数值所组成的字符串
P81-16Byte0Packed数,用在小数点数
T66Byte‘000000’时间数据,格式为HHMMSS
X11-65535ByteX’00’16进位数
例:
C:
字符(串),长度为1,最大有65535BYTES,初始值为:
space,例:
‘M’;
D:
日期,格式为YYYYMMDD,最大是’9999/12/31’,例:
’1999/12/03’.
F:
浮点数,长度为8,例如:
4.285714285714286E-01
I:
整数范围:
-2^31~2^31-1
N:
数值组成的字符串:
011,‘302’.
P:
packed数,用于小数点数值,例如:
12.00542;
T:
时间,格式为HHMMSS,例如:
’14:
03:
00’,’21:
30:
39’.
X:
16进制数,例如‘1A03’.
二、变量的声明:
变量宣告包含name,length,type,structure等,语法如下:
DATA[][][]
其中:
[]里的内容表示可选项。
:
变量名称,最长30个字符,不可含有+,.,:
()等字符;
:
长度及变量类型;
:
初值
:
小数位数
例如:
DATA:
C1TYPEC,
INT1TYPEIVALUE1,
TEMPTYPEPDECIMAL2.
DATA后面的冒号表示后面声明多个变量,如果只有一个变量也可以写成:
DATAC1TYPEC.
TYPE也是用来声明变量的,与DATA差不多,不过TYPE不能直接给变量赋值。
例如:
TYPES:
INT1TYPEI.(不能VALUE1)
LIKE的使用:
TYPESTEMPLIKESY-TCODE.(即声明变量TEMP的类型与SY-TCODE的类型一样,当你不知道后面变量是什么类型时好用)
STRUCTURE
DATA:
BEGINOFMAN,
NAME(20)TYPEC,
PHONE(11)TYPEN,
ENDOFMAN.
结构在后面说到的内表里有说到。
常量的声明:
CONSTANTS临时变量的声明:
STATICS
例:
CONSTANTSP1TYPEPDECIMALS5VALUE‘3.14159’.
三、系统专用变量说明:
系统内部专门创建了SYST这个STRUCTURE,里面的字段存放系统变量,常用的系统变量有:
SPACE:
空格。
SY-SUBRC:
系统执行某指令后,表示执行成功与否的变量,’0’表示成功
SY-UNAME:
当前使用者登入SAP的USERNAME;
SY-DATUM:
当前系统日期;
SY-UZEIT:
当前系统时间;
SY-TCODE:
当前执行程序的Transactioncode(事务代码)
SY-INDEX:
当前LOOP循环过的次数
SY-TABIX:
当前处理的是internaltable(内表)的第几笔
SY-TMAXL:
Internaltable的总笔数
SY-SROWS:
屏幕总行数;
SY-SCOLS:
屏幕总列数;
SY-MANDT:
CLIENTNUMBER
SY-VLINE:
画竖线
SY-ULINE:
画横线
还有其他系统变量,可以输入事务代码:
SE11查询系统表SYST
四:
WRITE用于在屏幕输出内容(相当于JAVA里的system.out.print())。
例如:
WRITE:
‘USERNAMEIS:
’,SY-UNAME.
指定输出位置的语句格式为:
WRITE:
[AT][/][][()]资料项[]
其中:
/:
表示在下一行输出
:
指定输出的列号(跟输出多少个空格有点像);
():
指定输出位数(长度)
:
指定显示格式参数,参数有:
LEFT-JUSTIFIED资料靠左对齐
CENTERED数据靠中间对齐
RIGHT-JUSTIFIED资料靠右对齐
UNDER正对在资料项的下面显示
NO-GAP紧接着显示,不留空格
USINGEDITMASK:
使用给定格式显示,如12:
03:
20
USINGNOEDITMASK:
不使用内嵌子元
NO-ZERO:
数字前面0的部分不显示
NO-SIGN:
不显示正负号
DECIMALS:
显示位小数
EXPOENT:
F(浮点数)指数的值
ROUND:
四舍五入至小数点后位
CURRENCY:
币别显示
DD/MM/YY:
日期显示格式
MM/DD/YY:
YY/MM/DD:
YY/DD/MM
MM/DD/YYYY:
DD/MM/YYYY
YYYY/MM/DD:
YYYY/DD/MM:
例如1:
WRITE:
/10(6)‘ABCDEFGHIJK’.
输出结果为:
ABCDEF
例如2:
DATA:
XTYPEIVALUE’11:
20:
30’,
Y(5)TYPECVALUE‘ABCDE’.
WRITE:
/XUSINGEDITMASK‘__:
__:
__’.
WRITE:
/XUSINGEDITMASK‘$___,___’.
WRITE:
/YNO-GAP.
输出结果为:
11:
20:
30
$112,030
ABCDEF
显示图示:
语法:
WRITE:
ASSYMBOL.
WRITE:
ASICON.
例如:
INCLUDE.
INCLUDE.
WRITE:
/‘Phonesymbol:
’,SYM_PHONEASSYMBOL.
WRITE:
/‘AlarmIcon:
’,ICON_VOICE_OUTPUTASICON.
要查看系统所提供有那些符号及图标,可选择’模式’下的’write’确定后,接下来选择要查看的群组,如SYMBOL或ICON.
跳过指定空白行进行输出:
SKIP5.(跳过五行空白)
SKIPTOLINE5.(跳到第五行)
WRITE:
‘AAAAAA’.
结果自己去试试就知道了。
五:
INTERNALTALBE(内表)的声明及使用
ABAP/4中的InternalTable是一种DataStructure,类似于其它语言中的STRUCTURE,它可以由几个不同类型的字段(field)组成,用来表示具有不同属性的某一事物,单独一笔资料表示某个事物,多笔数据表示具有相同属性的多个事物.例如:
为了存取或记录某班的同学数据,我们创建如下的internaltable:
DATA:
BEGINOFSTUDENTOCCURS20,
STD_IDTYPEN,
NAME(10)TYPEC,
AGETYPEI,
BIRTHTYPED,
SCORETYPEPDECIMALS2,
ENDOFSTUDENT.
此时我们已经创建了名叫STUDENT的internaltable,并且为它预先申请了能够存放20笔数据的Buffer(当然,如果存取数据不止20笔,程序执行时,会自动申请系统Buffer)
Internaltable的定义有以下几种格式:
格式一.DATA:
BEGINOFOCCURS,
TYPE,
[TYPE,
TYPE,
…]
ENDOF.
格式二.TYPES:
BEGINOF,
TYPE,
[TYPE,
TYPE,
…]
ENDOF.
TYPESTYPEOCCURS.
格式三.DATA:
BEGINOF.
INCLUDESTRUCTURE.
DATA:
ENDOF.
DATA:
LIKEOCCURS.
1、APPENDLINE
格式:
APPEND[TO].
举例一.(使用workarea)
DATA:
BEGINOFLINE,
COL1TYPEI,
COL2TYPEI,
ENDOFLINE.
DATAITABLIKELINEOCCURS10.
DO2TIMES.
LINE-COL1=SY-INDEX.
LINE-COL2=SY-INDEX**2.
APPENDLINETOITAB.
ENDDO.
LOOPATITABINTOLINE.
WRITE:
/LINE-COL1,LINE-COL2.
ENDLOOP.
执行结果为:
11
24
举例二.(不使用workarea)
DATA:
BEGINOFITABOCCURS10,
COL1TYPEI,
COL2TYPEI,
ENDOFITAB.
DO2TIMES.
ITAB-COL1=SY-INDEX.
ITAB-COL2=SY-INDEX**2.
APPENDITAB.
ENDDO.
LOOPATITAB.
WRITE:
/ITAB-COL1,ITAB-COL2.
ENDLOOP.
执行结果与举例一相同.
举例三.(加入另一个Internaltable的元素)
格式:
APPENDLINESOF[FROM][TO]TO.
将的元素加入至中,可选取自至