sap系统学习.docx
- 文档编号:26556241
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:20
- 大小:399.28KB
sap系统学习.docx
《sap系统学习.docx》由会员分享,可在线阅读,更多相关《sap系统学习.docx(20页珍藏版)》请在冰豆网上搜索。
sap系统学习
SY-SUBRC:
语句执行后的返回值,0表示成功
SY-DATUM:
当前服务器日期
SY-UZEIT:
当前服务器时间
SY-ULINE:
255长度的水平线
SY-VLINE:
垂直线
SY-INDEX:
循环说执行的次数
SY-TABIX:
内表循环的次数
SY-DYNNR:
当前Screen号
SY-MANDT:
当前登录的Client号
SY-STEPL:
返回当前操作的屏幕行号(TableControl)
SY-LOOPC:
当前表格控件在屏幕中的总行数(TableControl)
SY-UCOMM:
PAI所出发的功能代码
SY-DYNNR:
当前屏幕号
SY-MSGID:
MessageClass
SY-MSGNR:
MessageNumber
SY-MSGTY:
MessageType
SY-MSGV1~4:
MessageVariant
SY-LINCT:
REPROT语句中设定的LINE-COUNT
SY-LINSZ:
REPROT语句中设定的LINE-SIZE
SY-SROWS:
当前窗口的列表行数
SY-SCOLS:
当前窗口的列表栏目数
SY-PAGNO:
当前页的页码
SY-LINNO:
当前选定行的行号
SY-COLNO:
当前选定列的列号
SY-LSIND:
当前列表索引,第一级列表为1
SY-LILLI:
选择某行时光标行位置
SY-CUROW:
选择某行时光标列位置
PROGRAM_NAME=sy-repid意思就是返回当前程序名,程序名保存在“program_name”
EQ=NE<>LT
一.TYPES,DATA,LIKE区别:
1.TYPES与DATA区别:
TYPES是用来定义某种类(型)的,需(用DATA语句)实例化以后才可以使用,而DATA是用来定义数据对象(实例变量)的,对于用DATA直接定义的结构体对象(不参照其它结构类型),其同时也是一个结构类型.
2.TYPE与LIKE区别:
TYPE后面跟随的只能是某种类(型),而LIKE后面可以跟随类型或实例对象,参照结构体对象生成内表时只能用LIKE,不能用TYPE,因为结构体对象不是类型,只是一种实例对象,参照结构类型生成内表时可以用LIKE也可以用TYPE.其中通过LIKE定义的内表直接拥有参照结构类型的元素结构,而通过TYPE定义的内表只能间接拥有被参照结构类型的元素结构,结构类型不能作为内表的工作区,只有结构体对象才可以.
二.内表的创建
方式一:
TYPES:
BEGINOFline,
field1TYPEi,
field2TYPEi,
ENDOFline.
现在只定义一个类型接下来你可以定义一个工作区:
DATA:
ITAB_WATYPE(LIKE)line.
接下来定义一个无工作区的内表:
DATA:
ITABTYPE(LIKE)lineOCCURS0.
DATA:
ITABTYPE(LIKE)STANDARDTABLEOFlineINITIALSIZE0.
定义一个有工作区的内表:
DATA:
ITABTYPE(LIKE)lineOCCURS0WITHHEADERLINE.
DATA:
ITABTYPE(LIKE)STANDARDTABLEOFlineINITIALSIZE0WITHHEADERLINE.
方式二:
你可以直接用DATA来定义,例如:
DATA:
BEGINOFline,
field1TYPEi,
field2TYPEi,
ENDOFline.
这时候line本身就是一个对象,它当然可以当作工作区来使用,这时你就不用再定义一个工作区了
(当然你如果愿意也可以自定义一个工作区)。
用DATA定义的line本身也是一个结构类型。
例如下面再定义一个工作区:
DATA:
ITAB_WATYPE(LIKE)line.
定义一个内表:
DATA:
ITABTYPE(LIKE)lineOCCURS0WITHHEADERLINE.
DATA:
ITABTYPE(LIKE)STANDARDTABLEOFlineINITIALSIZE0WITHHEADERLINE.
方式三:
当然你可以直接定义内表,这个内表是有工作区的(不管有无headerline实践证明):
DATA:
BEGINOFITABOCCURS0,
CARR1LIKESPFLI-CARRID,
CONN1LIKESPFLI-CONNID,
ENDOFITAB.
下面我再定义一个类似的无工作区的内表:
DATA:
ITAB1TYPEITAB.(错误的,实践证明,定义出来的什么都不是)。
正确方法:
ITAB1TYPEITABOCCURS0.(这样定义后的是一个无工作区的内表)。
下面我再定义一个类似的有工作区的内表:
DATA:
ITAB1LIKEITABOCCURS0WITHHEADERLINE.
方式四:
这种方法,我没有用过,以后用到了再说吧。
DATA:
BEGINOFSTRUCTUREITAB1OCCURS0.
INCLUDE STRUCTUREITAB.
ENDOFSTRUCTUREITAB1.
2typerefto
typerefto属于ABAP中面向对象的编程。
它是定义一个类的对象。
3
SAP中ABAP对内表插入数据的时候有3种:
APPEND,COLLECT,INSERT。
要填充内表 ,既可逐行 添加数据, 也可复制另 一个表格的 内容。
要逐行填充 内表,可以 使用 APPEND、 COLLECT 或 INSERT 语句。
_ 要将内表 仅用于存储 数据,出于 性能方面的 考虑,建议 使用 APPEND。
用 APPEND 也可以创建 序列清单。
_ 要计算数 字字段之和 或要确保内 表中没有出 现重复条目 ,请使用 COLLECT 语句,它根 据标准关键 字处理行。
_ 要在内表 现有行之前 插入新行, 请使用 INSERT 语句。
要将内表内 容复制到另 一个内表中 ,请使用 APPEND、 INSERT 或 MOVE 语句的变式 。
_ 要将内表 行附加到另 一个内表中 ,请使用 APPEND 语句的变式 。
_ 要将内表 行插入另一 个内表中, 请使用 INSERT 语句的变式 。
_ 要将内表 条目内容复 制到另一个 内表中,并 且覆盖该目 标表格,请 使用 MOVE 语句。
COLLECT的特性让我看到了企业写报表的曙光。
有的时候我们需要对某个区域或者某个客户年度营业额进行汇总,于是COLLECT就大派用场了,甚至可以不用跟QAD一样判断是否有存在这个记录而进行汇总,SAP就已经帮你处理好这一切!
不过,默认COLLECT只是对非P和I进行汇总,所以有的时候这也带来很多不方便。
这个问题留下一篇博文解决吧!
请看如下例子:
REPORT Z_COLLECT.
DATA:
BEGIN OF ITAB OCCURS 4,
COLUMN1(3) TYPE C,
COLUMN2
(2) TYPE N,
COLUMN3 TYPE I,
COLUMN4(5) TYPE C,
END OF ITAB.
ITAB-COLUMN1 = 'abc'. ITAB-COLUMN2 = '12'. ITAB-COLUMN3 = 3. ITAB-COLUMN4 = 'xyz'.
COLLECT ITAB.
WRITE / SY-TABIX.
ITAB-COLUMN1 = 'def'. ITAB-COLUMN2 = '34'. ITAB-COLUMN3 = 5. ITAB-COLUMN4 = 'xyz'.
COLLECT ITAB.
WRITE / SY-TABIX.
ITAB-COLUMN1 = 'abc'. ITAB-COLUMN2 = '12'. ITAB-COLUMN3 = 15. ITAB-COLUMN4 = 'xyz'.
COLLECT ITAB.
WRITE / SY-TABIX.
LOOP AT ITAB.
WRITE:
/ ITAB-COLUMN1, ITAB-COLUMN2, ITAB-COLUMN3, ITAB-COLUMN4.
ENDLOOP.
结果:
1
2
1
abc1218xyz
def345xyz
看懂了这个结果了吗?
?
4clearitab.清表头(如果没有表头,清表体)保存内存区
clearitab[].清除内表,保留表头(工作区域)
refresh清除内表保留表头(工作区域)
5如ATNewf.
f是内表的一个字段,当f字段或者f字段左边的字段内容发生变化是该事件后面的语句都会执行
6ABAP-数据库操作OPEN SQL SELECT总结
OPENSQL是使用ABAP语言操作数据库的一种语句,由于OPENSQL操作的数据库表是已经在ABAP数据字典中创建的,所以使用OPENSQL操作数据库不用关心系统使用的数据库类型。
语句用法
SELECT:
SELECT result
FROM source
INTO|APPENDING target
[[FORALLENTRIESINitab]WHERE sql_cond]
[GROUPBY group][HAVING group_cond]
[ORDERBY sort_key].
...
[ENDSELECT].
1.result :
选择的结果。
确定要选出的field。
常见用法有SINGLE ,*,DISTINCTXX,FIELD(可多个)等。
2.source :
此处为数据库表。
对应一个数据库表,ABAP数据字典中有一个structure类型transparenttable(透明表)与之对应,这里写的就是这个transparenttable的名字。
SOURCE中包含了很多语法,
...FROM{{dbtab[AStabalias]}
| join
|{(dbtab_syntax)[AStabalias]}}
[UPTOnROWS] *表示共选取多少行
[CLIENTSPECIFIED] *是否是指定client的
[BYPASSINGBUFFER] *(还没见过,待补全)
[CONNECTION{con|(con_syntax)}].... *(还没见过,待补全)
FROM之后的部分是source的内容。
[AStabalias]:
为dbtab重命名,例如dbtabasa,那么其中的field可以表示为a~field。
(在SELECT语句中where之后要用到from后面出现的dbtab的column时,表示表中的FIELD,用"~"来避免混淆,在where部分会说到。
在表示结构的字段用"-")。
join:
将多个数据库表进行联合查询的时候用JOIN来连接。
...[(]{dbtab_left[AStabalias_left]}|join
{[INNER]JOIN}|{LEFT[OUTER]JOIN}
{dbtab_right[AStabalias_right]ONjoin_condAND..}[)]... .
3.INTO|APPENDING target:
用APPENDING时,不删除原来内表中的内容,而且standard,hashed,sortedtable都可以使用APPENDING。
此句用法:
1. ...INTO[CORRESPONDINGFIELDSOF]wa "wa为与数据库表结构相同的结构
2. ...INTO(dobj1,dobj2...) "传入field
3. ...INTO|APPENDING[CORRESPONDINGFIELDSOF]TABLEitab[PACKAGESIZEn] "packagesizen:
以n行为限量,打包传递。
4.[FORALLENTRIESINitab]:
此语句用作数据库表与内表的联合,对于itab有以下限制:
itab中不能有重复的记录,且表不能为空。
5.WHERE sql_cond:
这里是写从数据库表中寻找相关记录的逻辑的地方,比较重要。
句式1:
...coloperatorf...
此处col是指source中的dbtab的column,f可以是任何数据对象或者是source中的表的column,如果f是source的column,那么f应该表示为source~column。
operator:
=(EQ)<>(NE)<(LT)>(GT)<=(LE)>=(GE)
句式2:
...col[NOT]BETWEENdobj1ANDdobj2... *dobj为数字对象
句式3:
...col[NOT]LIKEdobj[ESCAPEesc]...
这个表达式用来判断col是否和dobj是同一类型。
注意:
dobj不能指定为columnID.而且col和dobj必须为character-type。
当加上ESCAPE时,dobj可以以'XXX'的形式出现,ESCAPEesc用来去掉dobj中的通配符esc.
例如 LIKE'%!
_%'ESCAPE'!
'
dobj的类型中可以有通配符_(单个字符)、%(任意长字符串)等
句式4:
...col[NOT]IN(dobj1,dobj2...)...
判断col的值或内容是否与括号中的dobj的值或内容一致。
举例如下:
SELECT* FROMsbook INTOTABLEsbook_tab
WHEREclassNOTIN('C','F','Y').
句式5:
...col[NOT]INseltab...
seltab是由SELECT-OPTIONS语句确定的选择区域。
下面由一个例子说明:
DATAspfli_waTYPEspfli.
SELECT-OPTIONS:
s_carridFORspfli_wa-carridNOINTERVALS
NO-EXTENSION,
s_connidFORspfli_wa-connidNOINTERVALS
NO-EXTENSION.
SELECTSINGLE* FROMspfli INTOspfli_wa
WHEREcarridINs_carridAND
connidINs_connid.
句式6:
...colIS[NOT]NULL... 这个不用解释了吧,就是column是否为空值。
句式7:
...cond1ANDcond2ANDcond3 ...cond1ORcond2ORcond3...
AND和OR用来连接多个条件。
此处值得注意的是AND要写在OR之前,如果需要改变顺序可添加括号。
句式8:
...[NOT]EXISTSsubquery...
...col[NOT]INsubquery...
subquery的形式是(select…)。
6[GROUPBY group][HAVING group_cond][ORDERBY sort_key].
groupby group 是如果加了下划线的field在数据库表中出现了多次,那么只取一条。
group不能为string
havinggroup_cond:
为groupbygroup提供选择条件,having后可以跟数据统计语句如count/sum等,除了数据统计语句外,having后只能跟在groupby之后的字段中出现过的字段。
sortkey必须是出现在SELECT之后的result中的column,而且有多个sortkey时,自左向右确定排序顺序。
后面可加DESCENDING和ASCENDING。
也可以用orderbyprimarykey.
7move用指定偏移量赋值
可以在每条ABAP/4语句中为基本数据类型指定偏移量和长度(参见指定数据对象的偏移量)。
在这种情况下,MOVE语句语法如下:
语法
MOVE
赋值运算符语法如下:
语法
将字段
在MOVE语句中,所有偏移量和长度指定都可为变量。
这同样适用于采用赋值运算符的语句,只要也可以写做MOVE语句。
在赋值运算符之后未指定字段名称的语句中,(例如在数学表达式中),所有偏移量和长度指定都必须是无符号数值。
详细信息,参见数值运算)。
SAP建议只在非数值字段之间才采用指定偏移量和长度赋值。
对于数值字段,结果毫无意义。
DATA:
F1(8)VALUE'ABCDEFGH',
F2(20).
F2+6(5)=F1+3(5).
在该示例中,赋值运算符功能如下:
8模糊查询:
concatenate'%'p_sgtxt'%'intol_text.<连接字符串>
SELECT....
WHEREbseg~sgtxtLIKEl_sgtxt.
9删除:
DELETETABLE
or
DELETETABLE
根据条件删除内表中的一行数据
DELETE
根据条件删除内表中的多行数据
DELETEADJACENTDUPLICATEENTRIESFROM
[COMPARING
|ALLFIELDS].
删除相邻行的重复项,保留第一条记录
1、如果没有定义non-nuique键,并且在删除的时候没有指定条件,则将比较所有的字段;等同于比较
DELETEADJACENTDUPLICATESFROMITABCOMPARINGALLFIELDS
定义non-unique字段方式如下:
DATAITABLIKESTANDARDTABLEOFLINE
WITHNON-UNIQUEKEYCOL2.
2、如果有non-unique键,则在没有删除的比较条件时比较该key,删除相邻的重复项。
3、可以使用指定条件进行比较处理COMPARING
当然在此也可以使用动态的方式指定比较的内容,下面的例子二我做了一个简单的测试,仅供参考。
10工作区域
每个工作区域只有一条信息,ABAP所有的修改都是通过工作区域完成的,即ITAB-MATNR都指的是工作区域,工作区域的优先级最高,譬如
data:
beginofitaboccurs0,(itab是一个内表)
matnrlikeekpo-matnr,
endofitab。
Dataitalikeitab。
Ita是一个工作区域
11
data:
beginofitab OCCURS0,
col1typei,
col2typei,
endofitab.
*&*&*可跟内表,结构
data:
itab1alike itab. "定义一个结构(工作区域)工作区域最优先
data:
itab1blikeitaboccurs0."定义一个没有表头的内表
data:
itab1clikeitaboccurs0WITHHEADERLINE."定义一个有表头的内表
*&*&可跟内表结构
data:
itab2bliketableofitab. "定义一个没有表头的内表
****data:
itab2bliketableofitaboccurs0.
data:
itab2cliketableofitabwithHEADERLINE."定义一个有表头的
****&**只能跟内表,不能跟结构
data:
itab4alikelineofitab. "定义一个结构(工作区域)
data:
itab4blikeLINEOFitaboccurs0. "定义一个没有表头的内表
data:
itab4clikelineofitaboccurs0WITHHEADERLINE."定义一个有表头的
12内表工作区域
带表头的内表(带工作区域的内表):
data:
beginofitab OCCURS0,
col1typei,
col2typei,
endofitab.
2data:
itab1clikeitabtwooccurs0WITHHEADERLINE.
定义工作区域:
1datagzlikeitab
2datagz2likelineofitab
3
13
Where的选择是满足所有的都进行操作。
14:
collect非数值字段都相同,则累加数值字段,无相同则增添新数据。
若有2条以上信息满足相同的信息,则第一进行累加。
15:
callfunction中参数定义参考打印类型ZRANGES_MATNR(适用于物料范围)。
ZRANGES_WERKS(工厂范围),ZRANGES_DATUM(日期范围)。
16:
函数组里面可以包含9(99)个函数。
RFC一定为传值。
勾选PASSvalue。
Export里面没有可选。
17:
错误信息I000(oo)类型跳出错误信
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sap 系统 学习