一些不错的ABAP资料

 
点滴:关于SAP内表及工作区(摘自论坛)
===========================================================

http://www.sapforum.net/cgi-bin/topic.cgi?forum=1&topic=1948&show=0
[求助]内表(internal table)和工作区(work area)的区别

ABAP/4的Internal Table如同其他语言的数组结构,在操作上可以有复制,删除,新增等功能,可以存很多条记录,并且ABAP的这种用法,对行数没什么限制。
WORK AREA就是其他语言的结构,象自定义的一个类型一样,但一旦创建一个Internal Table之后,WORK AREA就成了外界跟Intertal Table的交流口,每条记录的进入和取出都得通过它。并且在清除它们的时候要分开来清除。

http://www.sapforum.net/cgi-bin/topic.cgi?forum=1&topic=1897&show=60

要用 MODIFY 语句更改行 ,请使用:
语法
MODIFY <itab> [FROM <wa>] [INDEX <idx>].
FROM 选项中指定 的工作区域 <wa> 代替 <itab> 中的行。如 果表格有表 头行,可以 忽略 FROM 选项。这样 ,表格工作 区域就代替 行。
如果使用 INDEX 选项,则新 行代替索引 为 <idx> 的现有行。如果替换成 功,则将 SY-SUBRC 设置为0。 如果内表包 含的行少于 <idx>, 则不更改任 何行并且 SY-SUBRC 包含4。
如果使用没 有 INDEX 选项的 MODIFY 语句,则系 统只能在 LOOP - ENDLOOP 块中通过更 改当前行( 例如由 SY-TABIX 返回其索引 的行)来处 理它。
modify 是用来更新内表的!

http://www.100easy.com/forum/dispbbs.asp?boardID=16&ID=10178&page=2

我的理解是一般SAP有三种表

transparent table透明表, pooled table and cluster table簇表. 对于透明表是和DB层的physical table对应的.

对于后俩者,是不对应到DB表的. 比如TBSL就是一个pooled table, 你在DB层找不到此表.

然后多个cluster(pooled) tables组成一个table cluster和table pool . table cluster和table pool是DB层的一个物理表.

为什么要这样呢?我想一个原因可能是速度问题, 我想在存取数据方面,table cluster 可能比table pool要快些,还是那个老问题,就是ABAP dict的数据操作语句是如何转换到DB能认识的语句的, 我study过,但是没什么结果.

记得BSEG吧?当然作为一个cluster table它在DB层不存在, 但是它是作为table cluster :RFBLG的一部分的, 另一个典型的pooled table : 比如posting key OB41设置其实是将数据write to pooled table TBSL, TBSL同样在DB层看不到,但是它是做为table pool ATAB(DB的一个physical 表), RFBLG 和ATAB都有一个字段save data是binaray save的, 所以我想SAP是将经常用到的表(比如bseg)弄到table cluster中, 而配置表ATAB使用频率相对低点,就搞table pool, 但是有理由相信他们速度肯定比存取transparent table要快得多,. 至于底层的技术可能要问真正的ABAP高手了.

我测试过将ATAB delete那个二进制字段,然后在create, 结果posting key不能用了, 比如从RFBLG将BELNR(FI doc no)那条记录删除, OK, FB03再也看不到此doc的line item了, 就是说会计凭证的line item data是binary save在vardata那个field中的.............

pooled table只是才sap dict(se11)才能看到的, 在DB层是没有的, 简单得说,大概是为了加块速度或其他原因吧, 多个pooled table组成一个table pool (就象TBSL-posting keys table),SE16 check ATAB(有个字段是tabname)你会发现有很多pool table组成了它.

另一个case是BSEG和RFBLG,可是RFBLG倒是没有说明你BSEG就在RFBLG中, 但是你可看到BSEG的BELNR(FI doc no).

这样理解吧, 一般ATAB是多是配置表(Pooled table),所以SAP需要告诉你table name

而RFBLG偏重内容, 比如你在RFBLG delete 一个BELNR, (有个VARDATA恐怕就是将BSEG的内容保存在此), SE16:BSEG就看不到它了, 我想当你check BSEG内容时实际上从DB曾是将RFBLG根据一定规则将内容display出来.


zmlovehxl 发表于:2006.03.16 09:34 ::分类: ( ABAP笔记 ) ::阅读:(230次) :: 评论 (0) :: 引用 (0)
===========================================================
转帖:SAP学习笔记(from 神话blog)
===========================================================

SAP学习笔记
作者:神话 日期:2006-01-03
字体大小: 小 中 大


SAP学习笔记
1.如何进行Client的Copy?
用户(sap*)登录已经存在的Client(如:000),然后用T—CODE(SCC4)或菜单(Tools->Administration-> Administration-> Client Administration->Client Maintenance)进行新Client的创建(如:创建一个新的Client《008》);
 用SAP*登录已经创建的新的Client《008》,然后进行Client Copy,即用T—CODE(SCCL)或者菜单(Tools->Administration-> Administration-> Client Admin->Client Copy->Local Copy/Remote Copy) 进行Copy。[参数文件选择:SAP_ALL]

2.SAP的数据库是如何划分的?
SAP的数据库分为两部份,即Cross-Client和Client-Specific。Cross-Client包括Repository和其他一些东西,其中,Repository这部分组成数据字典;在Client-specific部分,包括应用程序和客户化的表。由于有了Client-specific部分,才使得各个用户的数据得以区分。

3.如何才能在Mini SAP中自由的进行软件开发?
 需要打补丁
将补丁文件《MBSCORR01042000》拷贝到目录《<MBS_DIR>transtmp》下;
 cd <MBS_DIR> 和执行dbenv.cmd
 cd transtmp和执行....R3trans.exe -i MBSCORR01042000
 Program generate:
Logon on MBS as BCUSER;
execute Transaction SE38;
generate SAPLSTRD and SAPDBF1S
 DDIC不能进行软件开发,需要用BCUSER或者增加新的用户(通过su01)进行软件开发。
新增加的用户,需要进行Access Key才能进行开发;
BCUSER的Access Key:29671482393151224771

4.如何进入开发界面?
通过T—CODE(SE38)或者菜单(Tools->ABAP Workbench->Development->ABAP Editor就可以进入开发界面了。

5.ABAP4的命名程序规则是怎样的?
 使用至少1个但不超过8个字符。
 不要使用下列字符:句点(.);逗号(,);空格( );括号'('')';单引号(');双引号(");等号(=);星号(*);元音变音( , , , , , )和' ';百分号(%)和下划线(_):
报表程序(以列表格式输出数据分析):Yaxxxxxx或Zaxxxxxx。用应用程序区的分类字母替换a。任何有效字符替换x。注意SAP报表程序遵守相似的命名约定:Raxxxxxx。
任何其它ABAP/4程序(培训程序或事务程序):SAPMYxxx或SAPMZxxx。用有效字符替换x。注意标准SAPABAP/4程序遵守相似的命名约定:SAPMaxxx,其中a代表某应用程序区。

换行输出,用/就可以了,WRITE / ‘I am star.’


6.指定程序属性的一些关键内容?
进入程序开发界面,输入program名字后,进入程序属性界面(Program Attributes):
 Title(标题):必须输入项;
 Type(类型):包括Executable program(1:如同报表的独立程序)、INCLUDE program(I:包含程序)、Module pool(M:模块存储)
 Application(应用程序):该项能够使系统将程序分配给适当的业务区,如:选择Financial Accounting(F:财务会计)。
 Logical database(逻辑数据库):仅仅应用于应用程序中的报表程序。这个属性决定报表使用哪个逻辑数据库来检索数据,以及逻辑数据库属于哪个应用程序。应用程序中数据库名称必须是唯一的。但是,整个系统可以包括数个同名数据库,因此指定应用程序很重要。如果报表程序直接读取数据,而未使用逻辑数据库,则应该像通常一样指定应用程序,而将“逻辑数据库”字段置空。
 Selection screen(选择屏幕版本):仅仅应用于应用程序中的报表程序。如果没有指定选择屏幕版本,则系统在逻辑数据库选择标准、报表特定参数选项的基础上自动创建选择屏幕;如果想使用自己的选择屏幕,请输入号码同时该号码必须小于1000。
 Editor lock(编辑器锁定):如果设置此属性,则其他用户则不能修改、改名或删除程序。只有创建用户可以更改程序、维护属性、文本摘要及文档或者解除锁定。
 Fixed point arithmetic(定点算术):如果设置此属性,系统则根据小数点位数将类型P字段四舍五入,或用零填补。这种情况下,无论在用户主记录中指定了什么,小数点字符总是句点(.)。
 Start using variant(通过变式启动): 仅仅应用于应用程序中的报表程序。如果设置该属性,则用户只能通过使用变式启动报表程序。在启动程序之前,必须创建至少一个报表变式。

7.如何将事务代码分配给程序?
可以将事务代码分配给类型为Executable program(1)的单独程序,以后就将程序作为事务代码处理。通过T—CODE(SE38)或者菜单(Tools->ABAP Workbench->Development->other Tools->Transactions就可以了。

8.如何进行注释?
可以在程序的任意处插入注释行。在程序中有两种方法表明注释:
 如果要将整行变为注释,则在行开始处输入星号(*)。
 如果要将某行一部分注释,则在注释之前输入双引号(")。系统将由双引号标明的注释解释为空格。

9.预定义的数据类型有哪几种?
C(文本和字符):文本文字最长可达254个字符。如果需要非整型数值或较长的数字(如:'12345678901234567890'、'+0.58498'、'-8473.67'),则必须使用文本文字,该文本文字自动转换到正确的类型。同样,请使用文本文字表示浮点数值。
D:(日期):
F(浮点数):对于正数和负数,类型F数值范围是1x10**-307到1x10**308,包括0(零)。精确范围近似为15位十进制数,这取决于硬件平台的浮点算法;由于是在内部将类型F数据转换为二进制系统,因此可能出现舍入误差。尽管ABAP/4处理器试图将这些影响减至最小,但是如果要求高精度,则不应该使用类型F数据。而应代之以类型P数据;如果需要大的数值范围,而且舍入误差不重要,则可以使用类型F数据。
I(整型):数值范围是-2**31到2**31-1并且仅包括整数;对算术运算的非整型结果(如分数)进行四舍五入,而不是截断;可用于计数器、项目号、索引和时间期段等。
N(数字文本):虽然由数字组成,但不包含数值,,但这些数字不用于计算。科目号和邮编是典型的类型。
P(压缩号):允许在小数点后有数字;类型P数据的数值范围取决于大小和小数点后的位数,有效大小可以是从1到16字节的任何值,将两个十进制数字压缩到一个字节,而最后一个字节包含一个数字和符号,在小数点后最多允许14个数字;使用类型P数据时,最好将程序属性设置为“定点算法”,否则,将类型P数字作为整型对待;类型P数据可用于如距离、重量和钱数等数值。
T(时间):
X(十六进制):

10.下面是系统字段示例:
SY-SUBRC返回代码值(0,如果操作成功)
SY-UNAME用户的登录名
SY-DATUM当前日期
SY-UZEIT当前时间
SY-TCODE当前事务

11.如何定义内部变量?
 DATA <f>[(<length>)] <type> [<value>] [<decimals>].
注:对于C和N型,如果length不输入,则默认长度为1;对于N型变量,如果值中包括字符,则字符不起作用,只输出数字。如果length大于实际内容的长度,则对于C型来讲,以空字符来填充,对于N型来说,对0来填充。如果指定长度,但未指定类型,则创建给定长度的字符字段。
 例子:Str=’ab123’,NStr = ‘1245ab3’,Int = 100
write 'This is star''s computer.'. 输出:This is star’s computer.
DATA Str type C. 输出:a
DATA Str(5) type C. 输出:ab123
DATA NStr type N. 输出:3
DATA NStr(7) type N. 输出:12453
DATA NStr1 like NStr value ’1234567’. 输出:1234567
DATA Int type I. 输出:100
DATA Pdat(10) type p value '9.876543210' decimals 9. 输出:9.876543210
CONSTANTS PI TYPE P DECIMALS 10 VALUE '3.1415926536'. 输出:3.1415926536
DATA MYNAME LIKE SY-UNAME. 与系统定义的对象SY-UNAME有一样的数据类型
 DATA SUM1 TYPE I.
DATA SUM2 TYPE I.
DATA SUM3 TYPE I.

DATA: SUM1 TYPE I,
SUM2 TYPE I,
SUM3 TYPE I,
是一样的,这就是链语句。

12.如何设置字段串和使用字段串?
DATA: BEGIN OF ADDRESS,
NAME(20) TYPE C,
STREET(20) TYPE C,
NUMBER TYPE P,
POSTCODE(5) TYPE N,
CITY(20) TYPE C,
END OF ADDRESS.
该示例定义了一个长度为73的字段串ADDRESS。可以通过ADDRESS-NAME、ADDRESS-STREET等定址组件。可以将长字段串的声明收集在包括程序中。但是,如果频繁使用该数据结构,则最好将它们保存在ABAP/4词典中。

13.LIKE参数,语法如下:DATA <f> LIKE <g>.
利用LIKE参数,可以将已定义数据对象的数据类型分配给变量。
LIKE参数常用于附属字段以临时保存数据库字段的内容。如果更改数据库字段的属性,则系统自动改写备份字段的属性。
可将任何数据对象用于<g>。利用LIKE参数,可以引用在ABAP/4词典中声明的数据对象的数据类型。
如: DATA NUMBER_1 TYPE P.
DATA NUMBER_2 LIKE NUMBER_1.
DATA MYNAME LIKE SY-UNAME.

14.STATICS 语句:
如果要在过程的运行时间之外仍保留某变量的数值,可以在该过程中利用STATICS语句定义该变量。STATICS语句是DATA语句的变异。语法如下: STATICS <s>[<length>] <type> [<value>] [<decimals>].
要在过程中将字段串定义为静态有效,请写:
STATICS: BEGIN OF <fstring>,
<component declaration>,
..............
END OF <fstring>.

15.TABLES语句:TABLES <dbtab>
利用TABLES语句,可以创建称为表工作区的数据对象。表工作区是参考ABAP/4词典对象的字段串。
<dbtab>是ABAP/4词典对象的名称,同时也是创建的表工作区的名称。表工作区组件的顺序和名称与在ABAP/4词典中声明的对象相同。
要在ABAP/4词典中创建对象,步骤:Tools->ABAP Workbench->Development->ABAP Dictionary。
表工作区提供一个接口,通过该接口可以将数据从数据库表加载到程序,或利用开放式SQL语句修改数据库表的内容。
要显示表的组件及其数据类型的列表,请在ABAP/4编辑器的命令行中(选择“编辑->其它功能->命令输入”)键入“SHOW<dbtab>”。
要定址表工作区的组件,可以将表名作为前缀,然后用连字符添加组件:dbtab>-<component>
例子:TABLES: SPFLI.
Select * FROM SPFLI.
WRITE: SPFLI-MANDT, SPFLI-CARRID, SPFLI-CONNID, ......
ENDSelect.
示例中,TABLES语句创建表工作区SPFLI。SPFLI与ABAP/4词典中声明的数据库表SPFLI结构相同。在Select循环中,用属于数据库表SPFLI的行填充表工作区SPFLI。


15.TYPES语句:使用TYPES语句创建用户定义的基本数据类型和结构化数据类型。
TYPES: SURNAME(20) TYPE C,
BEGIN OF ADDRESS,
NAME TYPE SURNAME,
....
END OF ADDRESS.
通过TYPES定义的类型不能直接使用,需要通过DATA进行定义其对应的变量后,使用其变量。

DATA: ADDRESS_1 TYPE ADDRESS,
ADDRESS_2 TYPE ADDRESS.

16.内表示例:下列程序是有关如何将结构化数据对象声明为内表的示例。
PROGRAM SAPMZTST.
TYPES: BEGIN OF MYSTRING,
NUMBER TYPE I,
NAME(10) TYPE C,
END OF MYSTRING.
TYPES MYTAB TYPE MYSTRING OCCURS 5.
DATA STRING TYPE MYSTRING.
DATA ITAB TYPE MYTAB.
STRING-NUMBER = 1. STRING-NAME = 'John'.
APPEND STRING TO ITAB.
STRING-NUMBER = 2. STRING-NAME = 'Paul'.
APPEND STRING TO ITAB.
STRING-NUMBER = 3. STRING-NAME = 'Ringo'.
APPEND STRING TO ITAB.
STRING-NUMBER = 4. STRING-NAME = 'George'.
APPEND STRING TO ITAB.
LOOP AT ITAB INTO STRING.
WRITE: / STRING-NUMBER,STRING-NAME.
ENDLOOP.
该程序在屏幕上产生下列输出:
1 John
2 Paul
3 Ringo
4 George
示例中,首先将数据类型MYSTRING定义为字段串。然后,根据字段串MYSTRING,用TYPES语句的OCCURS参数将数据类型MYTAB定义为内表。利用数据类型MYSTRING和MYTAB声明数据对象STRING和ITAB。然后逐行填充内表ITAB的字段。通过使用字段串STRING,在屏幕上显示ITAB的内容。

17.TYPE或TYPES所定义的变量不能直接赋值,只能通过DATA针对TYPE所定义的用户类型进行定义变量,然后使用这个变量。


18.如何确定数据对象的长度?
Data: text(8),len type i. //定义了两个变量
Describe field text length len. //将变量text的长度存放于变量len中
Write len. //打印变量text的长度值

19.如何确定数据对象的类型?
DATA: TEXT(8) TYPE N, TYP. //定义了两个变量TEXT和TYP
DESCRIBE FIELD TEXT TYPE TYP. //将变量TEXT的类型存放于变量TYP中 
WRITE TYP. //打印变量TEXT的类型

19.如何确定数据对象的输出长度?
Data: text type f, len type I, out-len type i. //定义了三个变量
Describe field text length len output-length out-len. //将变量text的长度存放于变量中
Write: len,out-len. //打印变量text的长度值

20.如何确定数据对象的小数位数?
Data: text type p decimals 2,dec. //定义了两个变量
Describe field text decimals dec. //将变量text的长度存放于变量中
Write: dec . //打印变量text的长度值

21.如何确定转换例程?
Data: text type n, exam type i. //定义了两个变量
Describe field text edit mask i. //将变量text的长度存放于变量中
Write: i . //打印变量text的长度值

文章来自: 本站原创
引用通告地址: http://www.washerfitting.com/blog/default.asp/trackback.asp?tbID=326
Tags: ABAP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值