ABAP入门.docx
《ABAP入门.docx》由会员分享,可在线阅读,更多相关《ABAP入门.docx(81页珍藏版)》请在冰点文库上搜索。
![ABAP入门.docx](https://file1.bingdoc.com/fileroot1/2023-5/25/4b8871a6-3721-4365-bcb2-f17ddc9d6edf/4b8871a6-3721-4365-bcb2-f17ddc9d6edf1.gif)
ABAP入门
ABAP/4语言入门
郑州三全食品股份有限公司信息部
内部培训教材
作者:
强晟
日期:
2006年8月2日
1.ABAP/4入门
&简介
ABAP/4(AdvancedBusinessApplicationProgramming)是SAP/R3目前唯一的系统开发工具,属4GL(第四代语言),语法比较近似VisualBasic或JAVA,和传统的第三代语言,如C、PASCAL有很大不同,在程序模块(ProgramStructureModule)可分以下三个部分:
1.过程块内的顺序编码
与一般语言语法近似,如IF,WHILE等,但并没有GOTO语法
2.报表
调用一个独立的事件(DependingEvent),读取数据库产生数据列表
3.对话框
屏幕参数输入的对话框,专门处理数据库读取或更改的事务过程
&基本语言概览
1.数据元素声明方式,如数值,字符数据变量声明
2.操作符使用,如+-*/
3.控制元素使用,如Boolean值
4.特殊数据格式,如日期与时间
5.字符处理函数,如部分字符串的截取
6.子程序或自定函数的调用
7.SQL语法使用
8.数据结构的使用,如过程内表的声明与使用
&报表概览
1.ReportsTask,如报表屏幕预览或打印机打印的选择
2.Reports模块是一个独立的程序
3.数据库读取方式,如可定义逻辑数据库(与磁盘的物理存储对应)
4.报表数据的计算与产生
5.报表的输出
&对话框概览
1.专处理数据库的读取与更改,如使用SQL命令
2.对话框不是一个独立程序,使用事务码来产生屏幕对话框
3.由流程逻辑控制,流程逻辑分成PBO(ProcessBeforeOutput,输出前过程)与PAI(ProcessAfterInput,输入后过程)
2.开始编程
2.1ABAP/4编辑器
&创建ABAP/4程序
使用ABAP工作台撰写程序(选择工具->ABAP/4工作台,事务码S001),屏幕如下:
可分成:
1.ABAP/4编辑器:
针对简单的报表或程序,仅使用几个组件或不使用
2.对象浏览器:
针对复杂的报表或程序,如对话事务模块(DialogTransactionModule)的编写
&使用ABAP/4编辑器撰写程序
1.ABAP/4编辑器界面如下(事务码SE38):
2.输入程序名称,如果是新程序,按下“创建”,如果修改已存在程序,则按下“修改”或F6键。
在命名规则上,报表程序为Yaxxxxxx或Zaxxxxxx,a表示applicationmodule(应用程序模块)简称,如s表示SD。
对话框程序为SAPMYxxx或SAPMZxxx
3.输入程序属性
(1).Title:
程序描述或功能说明
(2).Type:
执行模式,包括:
可执行程序,如报表;INCLUDE程序;模块池;函数组;子程序池
(3).Status:
程序开发状态,包括:
SAP标准生产程序;客户生产程序;系统程序;测试程序
(4).Application:
程序所属的应用模块,如:
财务会计;物料管理;销售分销
注意:
由于SAP翻译问题,上图界面语言混乱,操作时请以实际显示为准。
4.选择开发类
开发类:
用于同一系统中各个程序,如果不属任一类,可使用$TMP
5.撰写源代码
REPORT之后接的是程序名称,WRITE是显示的意思,会将所接的字符串在屏幕上显示,注意每一行最后要有一个'.'(点),表示语句的结束,储存后返回ABAP/4编辑器界面。
6.执行程序
按“执行”或F8键,屏幕可见执行所得的结果
&重要的编辑功能键
键
功能
F8
执行程序
F5
复制光标所在列的内容
F11
储存文件
CTRL+F11
删除光标所在列
2.2ABAP/4数据元素
&数据类型
ABAP/4的数据类型可分成:
类型
长度
范围
初始值
说明
C
1
1-65535字节
空格
字符串数据,如'Program'
D
8
8字节
'00000000'
日期数据,格式为YYYYMMDD
F
8
8字节
0
浮点数
I
4
-2^31至2^31-1
0
整数
N
1
1-65535字节
'00…0'
数值所组成的字符串
P
8
1-16字节
0
Packed数,用在小数点数
T
6
6字节
'000000'
时间数据,格式为HHMMSS
X
1
1-65535字节
X'00'
16进制数
&变量声明
变量声明包含name,type,length和structure四个部分,使用DATA命令,如
DATA:
S1TYPEI,
SUMTYPEI.
&常数声明
常数声明使用CONSTANTS命令,如声明PI是一个小数点5位的值3.14159
CONSTANTSPITYPEPDECIMALS5VALUE'3.14159'.
&系统所定义数据
这是由系统所定义的专有名词,如:
SPACE"空格字符串
SY-SUBRC"系统执行返回值,0表示成功
SY-UNAME"登录帐号
SY-DATUM"系统日期
SY-UZEIT"系统时间
SY-TCODE"目前的事务码
&TYPE声明
用来指定数据类型或声明自定数据类型
示例:
TYPES:
BEGINOFMYLIST,
NAME(10)TYPEC,
NUMBERTYPEI,
ENDOFMYLIST.
DATALISTTYPEMYLIST.
&LIKE声明
跟TYPE声明使用格式相同,如
DATATRANSCODELIKESY-TCODE.
不同的是LIKE用在已有值的数据项,如系统变量,而TYPE声明则是用在指定数据类型。
&DATA声明
语法:
DATA[][][]
:
变量名称,最长30个字符,不可含有+.,:
()等字符
:
数据类型及长度,如LINE(20)TYPEC.MYNAMELIKESY-UNAME.
:
初值
:
小数位数
示例:
DATA:
COUNTERTYPEPVALUE1,
FLAGTYPECVALUEISINITIAL,
WEIGHTTYPEPDECIMALS2VALUE'1.25'.
字段变量的声明:
DATA:
BEGINOFADDRESS,
NAME(10)TYPEC,
NUMBERTYPEP,
ENDOFADDRESS.
使用时用字段变量加上表名称,如ADDRESS-NAME
&CONSTANTS声明
用来声明常数
语法:
CONSTANTS[][][]
示例:
CONSTANTS:
CNAME(10)VALUE'周庆日',
BIRTH_DAYTYPEDVALUE'19650201'.
&STATICS声明
声明的变量仅在目前的程序中使用,结束后会自动释放
语法:
STATICS[][][]
&TABLES声明
用来声明表工作区的数据,对应至ABAP/4字典对象(DictionaryObject),由SQL命令加载所需数据
语法:
TABLES
示例:
TABLES:
SPFL.
SELECT*FROMSPFL.
WRITE:
SPFL-MANDT,SPFL-CARRID,SPFL-CONNECTION.
ENDSELECT.
从ABAP/4字典的SPFL表载入MANDT,CARRID,CONNECTION三个字段至SPFL这个表工作区
2.3向屏幕输出数据
&WRITE命令
ABAP/4用来在屏幕上输出数据的命令是WRITE
语法:
WRITE[:
]数据项
数据项可以是常数或变量,如果同时输出多项,必须加冒号,如:
WRITE'Thisissample'.
WRITE:
'COMPANY:
',STFL-CARRID.
&指定屏幕位置显示
语法:
WRITEAT[/][][()]资料项
/:
先往下一列
pos:
屏幕X轴坐标
(len):
显示数据的长度
示例1:
WRITE'FirstLine'.
WRITE/6'SecondLine'.
输出结果:
FirstLine
SecondLine
示例2:
DATA:
NUMBERTYPEIVALUE'1234567890',
TEXT(10)VALUE'ABCDEFGHIJ'.
WRITE:
(5)NUMBER,/(6)TEXT.
输出结果:
*7890
ABCDEF
&指定显示格式
语法:
WRITE数据项<显示格式参数>
显示格式参数:
LEFT-JUSTIFIED数据靠左显示
CENTERED数据靠中间显示
RIGHT-JUSTIFIED数据靠右显示
UNDER在数据项的X轴开始坐标显示
NO-GAP紧接着显示,不留空格
USINGEDITMASK使用内嵌字符显示,如11:
20:
30
USINGNOEDITMASK不使用内嵌字符
NO-ZERO数字前面0的部分不显示
NO-SIGN不显示正负号
DECIMALS显示d位小数字数
EXPONENTF(浮点数)exponent的值
ROUND四舍五入至小数位数下r位
CURRENCY币别显示
DD/MM/YY日期显示格式
MM/DD/YY日期显示格式
DD/MM/YYYY日期显示格式
MM/DD/YYYY日期显示格式
DDMMYY日期显示格式
MMDDYY日期显示格式
YYMMDD日期显示格式
示例1:
DATA:
XTYPEIVALUE'112030',
A(5)VALUE'ABCDE'.
WRITEXUSINGEDITMASK'__:
__:
__'.
输出结果为:
11:
20:
30
示例2:
DATA:
XTYPEIVALUE'112030',
A(5)VALUE'ABCDE'.
WRITEXUSINGEDITMASK'$___,___'.
输出结果为:
$112,030
&产生空白列
产生n个空白列
语法:
SKIP[]
示例:
WRITE'PASS1'.
SKIP.
WRITE'PASS2'.
输出结果为:
PASS1
PASS2
&显示图标
可以显示R/3系统所提供的符号或图标
语法:
WRITEASSYMBOL
WRITEASICON
示例:
INCLUDE.
INCLUDE.
WRITE:
/'PhoneSymbol:
',SYM_PHONEASSYMBOL.
WRITE:
/'AlarmIcon:
',ICON_ALARMASICON.
执行结果:
要查看系统所提供有哪些符号及图标,可选择返回ABAP编辑器的初始页,执行程序SHOWSYMB和SHOWICON程序列出所有符号和图标
&跳至指定列坐标
将坐标跳至指定的Y轴列坐标
语法:
SKIPTOLINE[]
示例:
SKIPTOLINE5.
WRITE'PASS1'.
执行结果:
PASS1
&显示复选框数据
以字符串数据内容的第一个字符为复选框的输出,如果是空白,复选框显示为空白,相反则显示X,可用在逻辑判断检查。
语法:
WRITE<资料项>ASCHECKBOX.
示例:
DATA:
FLAG1VALUE'',
FLAG2VALUE'X'.
WRITE:
/'CHECKFLAG1:
',FLAG1ASCHECKBOX.
WRITE:
/'CHECKFLAG2:
',FLAG2ASCHECKBOX.
执行结果:
2.4处理数据
&赋值
语法:
MOVETO.
将F1的值存至变量F2中,也可写成
F2=F1.
示例:
M_NAME='CHER'.
&使用偏移量
语法:
MOVE[+<偏移量>(取位数)]TO[+<偏移量>].
示例1:
DATA:
F1(10)VALUE'ABCDEFGHIJ',
F2(5).
F2=F1+3(5)."自第4个位置开始取出5个字符
WRITE/F2."F2的内容会变成DEFGH
执行结果:
DEFGH
示例2:
DATA:
F1(10)VALUE'ABCDEFGHIJ',
F2(5)VALUE'12345'.
MOVEF1+3(5)TOF2+2."自第4个位置开始取出5个字符,
"从F2的第三个位置开始替换
WRITE/F2."F2的内容会变成12DEF
执行结果:
12DEF
&字段变量组件的复制
语法:
MOVE–CORRESPONDINGTO.
将Strings1中的字段组件的数据复制至String2中,仅复制相同名称的组件
示例:
DATA:
BEGINOFADDRESS,
FIRSTNAME(10)VALUE'LULU',
LASTNAME(10)VALUE'CHOU',
TEL(12)VALUE'4660570',
ENDOFADDRESS.
DATA:
BEGINOFNAME,
FIRSTNAME(10),
LASTNAME(10),
E_MAIL(30),
ENDOFNAME.
MOVE-CORRESPONDINGADDRESSTONAME.
WRITE/ADDRESS.
WRITE/NAME
"NAME-FIRSTNAME变成'LULU',NAME-LASTNAME变成'CHOU',
"而NAME-E_MAIL则不变
执行结果:
LULUCHOU4660570
LULUCHOU
&变量以值调用的使用
在变量的使用上,可以使用类似CallByValue(以对象的值作为变量名)的方法
语法:
WRITE()TO
示例:
DATA:
NAME(20)VALUE'SOURCE',
SOURCE(10)VALUE'LILY',
TARGET(10).
WRITE(NAME)TOTARGET.
WRITE/TARGET."屏幕可印出LILY
"(NAME的值是SOURCE,SOURCE的值是LILY)
执行结果:
LILY
&清除变量内容
语法:
CLEAR
清除变量现在内容,恢复成初值
示例:
DATANTYPEIVALUE100.
CLEARN.
变量N的内容变成0
&算术符号
**乘幂
*乘
/除
+加
-减
DIV整数除法
MOD余数除法
&数值函数
1.ABS(N):
返回数值N的绝对值
2.SIGN(N):
1ifN>0
0ifN=0
-1ifN<0
3.CEIL(N):
返回大于数值N的最小整数
示例:
WRITECEIL(-5.65)显示–5.00
WRITECELL(4.54)显示5.00
4.FLOOR(N):
返回小于数值N的最大整数
示例:
WRITEFLOOR(-5.65)显示–6.00
WRITEFLOOR(4.54)显示4.00
5.TRUNC(N):
返回数值N的整数部分
示例:
WRITETRUNC(5.65)显示5.00
6.FRAC(N):
返回数值N的小数部分
示例:
WRITEFRAC(5.65)显示0.65
7.COS(A),SIN(A),TAN(A):
返回三角函数cosA,sinA,tanA的值,A为弧度量
8.EXP(N):
返回e^N值
8.LOG(N):
返回logeN值
9.LOG10(N):
返回logN值
10.SQRT(N):
返回N的平方根值
&日期与时间运算
1.日期数据的运算
日期数据可以直接运算,如加法与减法的运算
示例:
DATA:
MdateTYPED.
Mdate=SY-DATUM."如返回19971015,当前日期
Mdate+6
(2)='01'"Mdate变成19971001,当月的一号
Mdate=Mdate-1"Mdate变成19970931,上月最后一天
2.时间数据的运算
时间格式为'hhmmss',如'212030'表示'21:
20:
30'
示例:
DATA:
HOURSTYPEI,
MINUTESTYPEI,
T2TYPETVALUE'200000',
T1TYPETVALUE'183000'.
HOURS=(T2-T1)/3600."计算有几小时
MINUTES=(T2–T1)/60."计算几分钟
&字符串数据处理
1.字符串移位
语法:
SHIFT[BYPLACES][]
:
(1).空白,字符串往左移一位
(2).LEFT,字符串往左移n位
(3).RIGHT,字符串往右移n位
(4).CIRCULAR,字符串以环状方式移位
示例:
DATASTRING(10)VALUE'ABCDEFGHIJ'.
SHIFTSTRING."得到BCDEFGHIJ
SHIFTSTRINGBY2PLACESRIGHT."得到ABCDEFGH
2.替换字符串内容
语法:
REPLACEWITHINTO
将字符串中的以来取代
示例:
DATA:
STRING(10)VALUE'ABCDEFGHI',
STR1(3)VALUE'DEF',
STR2(3)VALUE'123'.
REPLACESTR1WITHSTR2INTOSTRING.
WRITE/STRING."得到ABC123GHI
3.大小写的转换
语法:
TRANSLATETOUPPERCASE."转成大写
TRANSLATETOLOWERCASE."转成小写
4.在字符串中寻找部分字符串
语法:
SEARCHFOR
示例:
DATASTRING(10)VALUE'ABCDEFGHIJ'.
会回存至两个变量,SY-SUBRC和SY-FDPOS,
若找到则SY-SUBRC为0,SY-FDPOS存开始位置,
若找不到则SY-SUBRC为4,SY-FDPOS为0
5.字符串长度
语法:
STRLEN()
示例:
INT=STRLEN('XYZABC')."得到6
INT=STRLEN('ABC')."得到3
6.取部分字符串
语法:
[+][]
从字符串的的下一个字符开始取个字符
示例:
DATAT(10)VALUE'ABCDEFGHIJ'.
WRITE/T+2(4)."得到'CDEF'
2.5流程控制
&比较运算符
1.=或EQ:
等于
2.<>或><或NE:
不等于
3.<或LT:
小于
4.<=或LE:
小于等于
5.>或GT:
大于
6.>=或GE:
大于等于
7.AND:
与
8.OR:
或
9.NOT:
非
&条件语句
1.IF语句
语法:
IF<条件1>.
<语句1>
ELSEIF<条件2>.
<语句2>
ELSEIF<条件3>.
<语句3>
…..
ELSE.
ENDIF.
(1).在每个判断语句之后要加上.
(2).在巢状循环(循环嵌套)之中无法使用ELSE语句,ELSE语句属IF语句(?
)
示例:
IF3>8.
WRITE/'3islessthan8'.
ENDIF.
2.CASE语句
语法:
CASE<变量f>.
WHEN<值1>.
<语句1>
WHEN<值2>.
<语句2>
….
WHENOTHERS.
ENDCASE.
示例:
DATAS
(1)TYPEC
S='A'.
CASES.
WHEN'X'.
WRITE/'StringisX'.
WHENOTHERS.
WRITE/'StringisnotX'.
ENDCASE.
&循环语句
1.计数循环
语法:
DO[nTIMES][VARYINGFROMNEXT[RANGE]].
<循环块>
ENDDO.
示例1:
DO2TIMES.
WRITE/'X'.
ENDDO.
执行结果:
X
X
示例2:
DOVARYINGIFROM1TO10.
S=S+I.
ENDDO.
WRITE:
/,'1+2+3+…+10=',S
执行结果:
1+2+3+…+10=55
2.条件循环
语法:
WHILE<条件>.
<语句块>
ENDWHILE.
示例:
DATA:
ITYPEI,
STYPEI.
I=1.
S=0.
WHILEI<=10.
S=S+I.
I=I+1.
ENDWHILE.
WRITE:
/'1+2+3+…+10=',S.
执行结果为:
1+2+3+…+10=55
&循环