ABAP学习精华.docx
《ABAP学习精华.docx》由会员分享,可在线阅读,更多相关《ABAP学习精华.docx(52页珍藏版)》请在冰豆网上搜索。
ABAP学习精华
§.ABAP/4DATAELEMENT
1.DataType(数据类型)
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’.
2.变量宣告
变量宣告包含name,length,type,structure等,语法如下:
DATA[][][]
其中:
:
变量名称,最长30个字符,不可含有+,.,:
()等字符;
:
变量类型及长度;
:
初值
:
小数字数
Example1:
DATA:
COUNTERTYPEPDECIMALS3.
NAME(10)TYPECVALUE‘Delta’.
S_DATETYPEDVALUE‘19991203’.
Example2:
DATA:
BEGINOFPERSON,
NAME(10)TYPEC,
AGETYPEI,
WEIGHTTYPEPDECIMALS2,
ENDOFPERSON.
另外,有关DATA宣告的指令还有:
CONSTANTS(宣告常数)、STATICS(临时变量宣告).
3.系统专用变量说明
系统内部专门创建了SYST这个STRUCTURE,里面的字段存放系统变量,常用的系统变量有:
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:
画横线
附注:
1.SAP的全称是:
SystemApplicationProductsinDataProcessing;
2.ABAP/4的全称是:
AdvancedBusinessApplicationProgramming;
3.ABAP/4的路径为:
ToolsABAP/4WorkBenchABPA/4Editor;
4.ABAP/4每条语句以句号结束;
5.ABAP/4中象=,>,<,+,-,*,/等符号左右都需要有至少一个空格;
6.整行注释用’*’号,注释本行后面部分用’”’号;
§OUTPUTTINGDATATOSCREEN
一.WRITE语句
ABAP/4用来在屏幕上输出数据的指令是WRITE指令,例如:
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’,
A(5)TYPECVALUE‘ABCDE’.
WRITE:
/XUSINGEDITMASK‘__:
__:
__’.
WRITE:
/XUSINGEDITMASK‘$___,___’.
WRITE:
/YNO-GAP.
输出结果为:
11:
20:
30
$112,030
ABCDEF
4.显示图标:
语法:
WRITE:
ASSYMBOL.
WRITE:
ASICON.
例如:
INCLUDE.
INCLUDE.
WRITE:
/‘Phonesymbol:
’,SYM_PHONEASSYMBOL.
WRITE:
/‘AlarmIcon:
’,ICON_VOICE_OUTPUTASICON.
要查看系统所提供有那些符号及图标,可选择’EDIT’下的’InsertStatement’,选择’Write’,接下来选择要查看的群组,如SYMBOL或ICON,接下来按’Display’即可.
§INTERNALTABLE
1.InternalTable的宣告
ABAP/4中的InternalTable是一种DataStructure,类似于其它语言中的STRUTURE,它可以由几个不同类型的字段(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.
2.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.
将的元素加入至中,可选取自至的范围.
APPENDLINESOFITABTOJTAB.
3.COLLECTLINE
COLLECT指令也是将元素加入Internaltable中,与APPEND的区别是:
COLLECT指令在非数值字段相同的情况下,将数值字段汇总.
格式:
COLLECT[INTO]
DATA:
BEGINOFITABOCCURS3,
COL1(3)TYPEC,
COL2TYPEI,
ENDOFITAB.
ITAB-COL1=‘ABC’.ITAB-COL2=10.
COLLECTITAB.
ITAB-COL1=‘XYZ’.ITAB-COL2=20.
COLLECTITAB.
ITAB-COL1=‘ABC’.ITAB-COL2=80.
COLLECTITAB.
此时,internaltable中放的是2笔数据,分别为:
ITAB-COL1ITAB-COL2
‘ABC’90
‘XYZ’20
4.INSERTLINE
将元素插入在指定的internaltable位置之前.
格式:
INSERT[INTO][INITIALLINEINTO][INDEX]
或者:
INSERTLINESOF[FROMTO]INTOINDEX
其中:
即workarea,工作区中的元素.
[INITIALLINEINTO]:
插入一笔初始化的记录.
:
internaltable
[INDEX]:
internaltable的记录号.(新加入的元素放在此记录前面)
5.读取internaltable
格式一:
LOOPAT[INTO][FROMTO][WHERE]
ENDLOOP.
格式二:
READTABLE[INTO][INDEX/WITHKEY]
举例.(格式二)
DATA:
BEGINOFITABOCCURS10,
COL1TYPEI,
COL2TYPEI,
ENDOFITAB.
DO10TIMES.
ITAB-COL1=SY-INDEX.
ITAB-COL2=SY-INDEX*2.
APPENDITAB.
ENDDO.
READTABLEITABINDEX3.
(或者:
READTABLEITABWITHKEYCOL1=3.)
WRITE:
/‘ITAB-COL1=‘,ITAB-COL1,‘ITAB-COL2=‘,ITAB-COL2.
执行结果同样是:
ITAB-COL1=3
ITAB-COL2=6.
6.修改internaltable中的值
格式:
MODIFY[FROM][INDEX][TRANSPORTING…][WHERE]
举例一.READTABLEITABINDEX3.
LINE-COL1=29.
MODIFYITABFROMLINETRANSPORTINGCOL1.
将第三笔记录的COL1字段的值修改为29.
举例二.T_SALARY–salary=50.
MODIFYT_SALARYTRANSPORTINGsalaryWHEREbirthday=‘1999/12/06’.
7.DELETEinternaltable中的字段
格式:
DELETEINDEX.
或:
DELETE[FROMTO][WHERE]
8.Internaltable排序
SORT[][BY…]
其中:
有DESCENDING和ASCENDING,Default为ASCENDING.
:
为指定排序的字段.
9.加总
SUM.
总和计算存放与workarea中,但只能在LOOP中使用.
例:
LOOPATITABINTOLINE.
SUM.
ENDLOOP.
WRITE:
/LINE-COL1,LINE-COL2.
10.初始化internaltable
REFRESH.清空中的值.
CLEAR.清空的HeaderLine.
FREE.释放记忆体空间.
§屏幕输入命令
在ABAP/4中要从屏幕输入变量,使用的命令是PARAMETERS及SELECTION-OPTIONS:
1.PARAMETER:
输入一个变量
2.SELECTION-OPTIONS:
使用条件筛选画面来输入数据
一.PARAMETERS指令
基本的输入命令,类似如BASIC的INPUT命令,但无法使用F格式(浮点数)
语法:
PARAMETERS
[DEFAULT][LOWERCASE]
[OBLIGATORY][ASCHECKBOX]
[RADIOBUTTONGROUP]
Example:
PARAMETERS:
NAME(8),
AGETYPEI,
BIRTHTYPED.
执行结果:
在日期的输入格式上为MM/DD/YY,MM/DD/YYYY,MMDDYY或MMDDYYYY,如输入020165表1965年02月01日,与02/01/65的输入是一样的,日期输入范围为公元1950年至2049年
1.DEFAULT
设定输入的默认值
Example:
PARAMETERS:
COMPANY(20)DEFAULT‘DELTA’,
BIRTHTYPEDDEFAULT‘19650201’.
2.LOWERCASE
ABAP/4预设是将字符串输入值自动转换为大写,加上此参数会将输入的资料转成小写,
3.OBLIGATORY
强制要求输入,屏幕上会出现一个?
使用者必须要输入才可.
4.ASCHECKBOX
输入CHECKBOX的格式
Example:
PARAMETERS:
TAXASCHECKBOXDEFAULT‘X’,
NTDASCHECKBOX.
执行结果:
5.RADIOBUTTONGROUP
输入RADIOBUTTONGROUP的方式
Example:
PARAMETERS:
BOYRADIOBUTTONGROUPSEXDEFAULT‘X’,
GIRLRADIOBUTTONGROUPSEX.
执行结果:
二.SELECTION-OPTIONS
SELECTION-OPTIONS所输入的值实际上是放在internaltable中的,该Internaltable有四个字段,分别是:
SIGN,OPTION,LOW,HIGH..条件筛选检查条件输入画面指令,输入条件后可配合SELECT指令自TABLE读取符合条件的资料,直接执行或放入InternalTable中,条件有四个参数:
1.SIGN:
I:
表筛选条件符合的资料
E:
表筛选条件不符合的资料
2.OPTION:
比较的条件符号
EQ(等于),NE(不等于),GT(大于),LE(小于),CP(包含),NP(不包含)
3.LOW:
最小值
4.HIGH:
最大值
语法:
SELECTION-OPTIONSFOR
Example:
TABLESSPFLI.
SELECTION-OPTIONSAIRLINEFORSPFLI-CONNID.
将条件的输入值存放入AIRLINE,筛选选择为SPFLI中的CONNID字段
执行结果:
可直接输入起始范围或按下选择画面,输入完后按下左上角的执行键
三.条件输入选择画面
1.自Table中选取
按下输入项的右边往下箭头,叫出Table中资料项,选取开始和结束的范围
2.SelectionOptions
按下”Selectionoptions”按键,,输入Option及Sign参数内容,屏幕如下:
3.Multi-Options输入
按下最右边的Multi-Options输入键,输入条件选取的范围,画面如下:
条件输入完后按下”Copy”按键
四.改变条件输入格式
1.DEFAULTTO
设定开始结束范围输入默认值
Example:
SELECTION-OPTIONAIRLINEFORSPFLI-CONNID
DEFAULT‘2042’TO‘4555’.
2.NO-EXTENSION
设定不要Multi-Option输入画面
3.NOINTERVALS
设定不要区间范围输入画面
4.LOWERCASE
输入转换成大写
5.OBLIGATORY
强制要求输入
五.配合SELECT命令
条件输入完后要将符合条件的资料筛选出来,可配合使用SELECT指令
1.使用WHERE<条件式>
Example:
SELECT-OPTIONSAIRLINEFORSPFLI-CONNID.
SELECT*FROMSPFLIWHERECONNIDINAIRLINE.
WRITE:
/CONNID,FROMCITY,TOCITY.
ENDSELECT.
2.使用CHECK参数
Example:
SELECT-OPTIONSAIRLINEFORSPFLI-CONNID.
SELECT*FROMSPFLI.
CHECKAIRLINE.
WRITE:
/CONNID,FROMCITY,TOCITY.
ENDSELECT.
3.使用IF…IN叙述
Example:
SELECT-OPTIONSAIRLINEFORSPFLI-CONNID.
SELECT*FROMSPFLI.
IFSPFLI-CONNIDINAIRLINE.
WRITE:
/CONNID,FROMCITY,TOCITY.
ENDIF
ENDSELECT.
六.SELECTION-SCREEN
1.产生空白列
语法:
SELECTION-SCREENSKIP[]
Example:
SELECTION-SCREENSKIP2.
产生两列空白列
2.产生底线
语法:
SELECTION-SCREENULINE/(length)
Example:
SELECTION-SCREENULINE/10(30).
自第10格开始产生长度30的底线
3.印出备注说明
语法:
SELECTION-SCREENCOMMENT/(length)
Example:
REMARK=‘Plsenteryourname’.
SELECTION-SCREENCOMMENT/10(30)REMARK.
4.同一列中输入数个资料项
语法:
SELECTION-SCREENBEGINOFLINE.
……
SELECTION-SCREENENDOFLINE.
Example:
SELECTION-SCREENBEGINOFLINE.
SELECTION-SCREENPOSITION20.
PARAMETERSNAME(10).
SELECTION-SCREENPOSITION40.
PARAMETERS