香草冰淇淋的SAP天地——Welcome!
自我介绍
切换风格
订阅我的Blog
博客日历
文章归档...
最新发表...
博客统计...
网站链接...
资源
===========================================================
转贴:FI 的簇表的使用(来源:network 作者:sapsky)
===========================================================

http://www.sapsky.com/html/2006-11/654.htm

BSAD:应收明细(已清帐)
BSID:应收明细(未清帐)
BSAS:总帐明细(已清帐)
BSIS:总帐明细(未清帐)
BSAK:应付明细(已清帐)
BSIK:应付明细(未清帐)

BSEG主要通过“凭证号”“会计年度”“行号”和这六张表关联
一般情况下一笔业务产生的凭证都是未清的,那么:如果该业务行是客户相关的,则被记录到BSID;
如果该业务行是供应商相关的,则被记录到BSIK;
无论和客户相关还是和供应商相关,都是和总帐相关,所以也会有记录到BSIS;
但是如果这笔业务被清帐了,则相应的记录会从BSIS转移到BSAS

一般情况下:应收账款、预收账款、其他应收款、应收汇票等科目既和客户相关,又和未清项管理的总帐科目相关;
应付账款、预付账款、其他应付款、应付汇票等科目既和供应商相关,又和未清项管理的总帐科目相关;
其他总帐科目一般不启用未清项管理,所以记录一般都放在BSIS中。
BSEG本身是一个 Cluster Table(簇表),BSEG就是由上述的六大表的集成,当要读取”BSEG”Table时就等于去读取那六个表,这样你可以想像它读起来会就多慢。对於簇表或Pool Table,都是SAP系统本身在使用的,因此簇表本身是不存在资料库实体的,虽然是可以在ABAP使用,不过还是有一些限制: 1.不能使用select distinct or group by语法 2.不能使用Native SQL 3.不能使用specify field names after the order by clause 4.不能在建立次索引 5.查询时一定要用KEY FIELD


zmlovehxl 发表于:2007.03.22 16:31 ::分类: ( ABAP笔记 ) ::阅读:(443次) :: Permanent link :: 引用 (0)
===========================================================
转贴:利用Visual Basic开发SAP接口程序初探(from itpub)
===========================================================
利用Visual Basic开发SAP接口程序初探 查看全文
zmlovehxl 发表于:2006.12.12 11:26 ::分类: ( ABAP笔记 ) ::阅读:(809次) :: Permanent link :: 引用 (0)
===========================================================
转帖:FI方面的几个概念及关系问题(from itpub)
===========================================================

http://www.itpub.net/369892.html

江南一枫叶

SAP R/3财务基本概念及集成性浅释---总帐等概念

1,科目表的建立及分配

在SAP中,科目表的层次较公司代码高,也就是说先创建好科目表,然后可以分配给不同的公司使用。在同一集团范围内,为了使各个集团范围内的公司使用的科目表都能一致,通常是先创建一个虚拟的公司及科目表,然后集团范围内公司都可从其拷贝。科目表中的科目就是在总帐的主数据中分别创建的。这里值得一提是,在SAP中的科目表与传统的手工方式在科目体系中有了很大的不同。传统的帐务体系将会计科目分为1级科目、2级科目、3级科目等。但在SAP已没有这样分法了。除了应收、应付、固定资产等统驭科目外,所有的明细或2、3科目上升为总帐科目(当然在使用之前,应进行有关主数据的设置),如传统的银行存款—工商银行XX支行XX帐号,这只是银行存款的一个子科目,但在SAP中,此时已设置为一个总帐科目了,科目代码是根据企业会计制度中的有关编码扩充至8位编码,如一个企业有许多银行存款,在SAP中就变成了有许多总帐科目。在总帐层次显示时,是分别显示的,但到报表层次时,则根据所有银行科目中的前四位代码汇集成一个科目银行存款进行披露。管理费用也一样,在SAP中有非常多管理费用的总帐科目(如工资、奖金、津贴等)。但在总帐还包含有从其他模块中过入的金额,如统驭科目,统驭如应付/收及固定资产的明细科目,因此在SAP的总帐科目表中,我们看到的就不是目前的五、六十个科目,而是将近五百个的总帐科目。由于应收、应付、固定资产有各自独立的模块,所以有各自的明细帐。但反映在总帐及报表层次时,分别为细分的统驭科目(如应收帐款可根据企业管理的需要分为应收国内的款项与应收国外的款项等)。SAP所有的财务信息都是即时的,当记录一笔总帐分录时,相应的总帐、报表都已生成,当应收明细帐生成时,通过统驭科目就可即时过入总帐与报表。也就是说,在SAP的帐务里,任何时点都会产生新的总帐与新的报表(注意该总帐与报表并不完全体现法人的资产负债损益情况,尚有折旧、预提待摊因素要考虑)。

2,统驭科目的概念及分类,统驭科目的变更

统驭科目(reconciliation account)指的就是将明细科目归集起来的意思。前面我们说到,系统总帐科目表中包括统驭科目,该统驭科目是与应收模块、应付模块、固定资产模块有关的,其中长、短期借款运用了应付模块的功能,也成为了统驭科目。在实际业务过程,我们可能会发生统驭科目选用错误,此时就要用到统驭科目的变更功能。如客户A的统驭科目被误选为11310101,并有一笔分录输入,假设为1000元,此时的总帐科目11310101就有1000元余额,事后发现用错统驭科目,为此在此客房的主数据中更改统驭科目假设为113102101(注意这并不会更改已过入11310101的1000元),更改完毕后,至月末(假设本月只有一笔分录及余额为1000元)运行客户重组程序,系统会产生借:11310299(系11310201的调整科目,但非统驭科目)1000贷:11310199(系11310101的调整科目,但非统驭科目)1000,在报表层次上11310101与11310199被安排在一行后余额变为0,11310201与11310299被安排在一行后余额变为1000,这样在报表层次就将由于选错统驭科目而产生的错误纠正了。第二个月初,系统会自动运行相反的调整分录,借:11310199(系11310101的调整科目,但非统驭科目)1000贷:11310299(系11310201的调整科目,但非统驭科目)1000.直到选错统驭科目的金额被支付出去后,才不需运行上述程序。

3,凭证的输入规则:在SAP中,总帐科目在输入分录是需要遵循传统的记帐方法,“有借必有贷,借贷必相等”。但对于应收、应付的发票输入(即作会计分录)单边则可,如在应付模块作发票输入,填入供应商的号码,日期、金额后,其次填写行项目,此时的行项目的字段中已经默认了借方,用户只需选择适当的总帐科目(如管理费用—XX)、金额、成本中心即可。产生的分录即为借贷皆具的双边分录了。应收模块的发票输入也同样。在应收、应付模块中除了后勤模块的“发票校验程序”及销售模块的“出具发票程序”自动过入应付、应收帐款外,尚有许多处如“过帐”、“清帐”也具有半自动生成会计分录的功能。另外,在SAP中,凭证具有较宽泛的意义,如后勤模块的产生的收货单据,在SAP中也称为凭证,发票也称凭证,因此财务人员在实际操作中应注意区别。

4,凭证的类别

传统的会计核算中,将凭证的类别分为收、付、转三类或直接就是一类记帐凭证。SAP对凭证的分类基本上也遵循收、付、转三类的原则,即总帐凭证(类似转帐凭证)SA,与供应商有关的凭证(类似于付款凭证):KR(应付供应商的凭证)、KG(供应商转来的红字发票,SAP称为贷记凭证)、KZ(付款给供应商的凭证),与客户有关的凭证(类似于收款凭证):DR(开具发票给顾客的凭证)、DG(开具红字发票给顾客的凭证)、DZ(向顾客收款的凭证),与固定资产交易有关的凭证AA等。

5,记帐码

在手工的会计核算过程中,我们通过用记帐符号“借”与“贷”来描述资产、负债的增、减。但在SAP中,却变得有些复杂了,比如,对于总帐科目的凭证,用符号40来表示总帐的借方,用50来表示总帐的贷方,分录例示如下:40:10010101(现金)50:50150101(营业外收入);对于与供应商发票有关的凭证输入,主要与应付帐款有关的借贷方就比较复杂了,如贷方用31、32、33、34、35、36、37、38、39,借方用21、22、23、24、25、26、27、28、29,如供应商发票输入分录为:40:50100101(营业费用-电费)31:10100037(表示通过主数据创建的供应商编号)。对于与应收帐款有关的,其应收帐款的借贷方所用的记帐码:用01、02、03、04、05、06、07、08、09表示借方,用11、12、13、14、15、16、17、18、19表示贷方,如输入一笔与客户发票有关的分录:01:客户有关的号码50:其他业务收入。与固定资产有关的业务,用70表示借方,用75表示贷方,假设通过应付模块采购固定资产,70:固定资产号码31:10100037.与存货有关的业务,用89表示借方,用99表示贷方,如89:存货贷:50:GR/IR,退货时,40:GR/IR 99:存货(与存货有关的会计业务,大部分是系统自动产生的,因此少了一道麻烦!)。

记帐码在SAP中实际上起到如下的作用:在行项目中决定可输入的科目的类别;行项目是以借方或贷输入;决定其他字段的状态。

6,凭证号码的产生

在SAP中,凭证号码可以由系统产生也可由手工产生,但系统产生的凭证号是连续的,手工产生的号码难免会产生跳号等失误,因此对系统设置时采用的凭证号码是由系统自动产生的。同时,对不同类别的凭证,系统对其产生的号码的范围不尽一致,如输入供应商发票产生的凭证号在1900000000-1999999999之间,付款给供应商的的凭证产生的凭证号在1500000000-1599999999,与固定资产有关的凭证产生的凭证号在0100000000-0199999999之间,开具发票给客户产生的凭证号在1600000000-1699999999之间等等!尚有其他号码范围,可参照总帐蓝图中的有关叙述。当然,号码范围是与年度有关的,即开始新一个会计年度时,号码区间又会被重新选用,从而避免号码被用尽的可能。




7,记帐期间变式,会计年度与特殊期间

记帐期间变式是较难理解的一个内容。通过手工的做法是,在某一期间内所有交易都必须在同一时点结帐,以便总帐及财务报表的生成。但在系统中,由于每一时点都可以产生一个即时会计报表,因此某些类型的凭证可以在期间结束时予以关帐,而某些却又可以继续开着,即某些类型凭证可在8月份入七月份的帐。当然从严格的角度说,这是不合适的。这就是记帐期间变式。特殊会计期间,在系统中,会计期间基本上分为12个期间,这与正常手工核算无二,但由于在年度的会计期间结束后(此时12月31日会计报表已产生),仍然存在应当调整的事项,如审计时发现有些费用的确认不尽合理,有些交易金额必须重新确认(如某些资产负债表日后事项),这时的调整就在特殊期间进行。SAP的特殊会计期间分为4个,即13-16期间。但有些资产负债表业务却又难以在特殊期间实现,如资产负债后日后发生的上一年度的退货,由于这涉及到集成的业务,所以在SAP较难实现(具体参见后述)。

8,初级成本要素与次级成本要素

初级成本要素与次级成本要素。SAP除总帐的及时集成外,它的另一个特点是与控制模块的及时集成。在SAP中所有的总帐中的费用科目都被要求创建成为初级成本要素。这样,当输入一个总帐的费用分录时,系统会要求输入一个成本中心,即表示此时系统已将该初级成本要素分配给了某一成本中心。即通过一个分录就将总帐与控制模块的要求同时满足,这就是SAP的无缝集成。当然控制模块中只有该要素的金额,而不是像总帐的记录是通过双边分录来实现的,因此某成本心的费用报表是各个初级成本要素总汇。次级成本要素是指,某一成本中心的费用要素可整理成为次级的费用要素(项目),并将其通过一定的比例分摊给不同的成本中心。控制模块就是通过这两个要素反映了企业内外部间的资金流动情况。在SAP中,初级成本要素就类似于科目表,它可以分配给任何一个成本中心,包括法人间的成本中心,即不同的成本中心可能包括的初级成本要素是一模一样的,但金额却不尽相同。

9,分配与分摊

分配与分摊对于成本要素的来说是一个很重要的功能。并且这功能就类似于固定资产折旧一样,一月只能执行一次。分配的功能是与初级成本要素相关的,分摊的功能是与次级成本要素的功能相关的。这两个功能同样都可用到计划(预算)与实际发生额中。如可创建一个循环,将某成本中心(可超过一个以上)的初级成本要素(可超过一个以上),按一定的比例分配给其他成本中心(可超过一个以上),当然也将这循环分为几个段,各段间相应的要求可以不一样,这样每月末执行时,就可以很好地反映初级成本要素的流向情况。同样的,也可创建一个分摊循环,将某成本中心(可超过一个以上)的初级成本要素(可超过一个以上)重新组合成为一个次级成本要素,然后再将其按一定的比例分配给其他成本中心(可超过一个以上),当然也将这循环分为几个段,各段间相应的要求可以不一样,这样每月末执行时,就可以很好地反映次级成本要素的流向情况。分配与分摊的区别在于,分配是将某一成本中心的初级成本要素分给另一成本心,被分配的初级成本要素会与被分配的成本中心的相同的初级成本要素一并反映,而分摊则是将次级成本要素分摊到另一成本中心,与被分摊的成本中心的初级成本要素一同反映,这样有利于区分本成本中心的发生的费用与分摊过来的费用的界限。需要说明的是,同一利润中心下的成本中心的分配或分摊,并不影响该利润中心的利润额,但跨利润中心进行分配或分摊,则影响了不同利润中心的利润额,两种方法产生(分配或分摊的规则相同时)的影响一致。


zmlovehxl 发表于:2006.08.11 23:33 ::分类: ( SAP心得 ) ::阅读:(526次) :: Permanent link :: 引用 (0)
===========================================================
转帖:作为一个ABAP程式开发人员,以后的路怎么走啊?(from百易论坛)
===========================================================

http://www.100easy.com/dispbbs.asp?boardID=16&ID=18276&page=1(作者:manutdfan

作为一个ABAP程式开发人员,以后的路怎么走啊?

今天主管开始休假了,难得轻松下来。不经意间想起一个我曾经想过的问题,以后的路怎么走?

想想自己都28了,奔三的人了。现在公司里天天做ABAP程式开发,无聊死了。公司里刚升级到SAP 4.7,上了SD, MM和PP模块,可是分工太细了,我平时只能开发开发程式,SD,MM模块的很多东西都接触不到。编程这个行业永远是年轻人的天下,到了30以后我不会再去做纯粹编程的工作了。兄弟们多讨论讨论我们以后不编程了去做什么比较好啊?

我想学SD或MM模块,毕竟公司的很多资源还是可以充分利用的,别人不教,咱可以自学。不过,应该从何学起啊,怎么学比较快啊?哪儿有比较好的学习资料啊?

请多提建议,我想这可能也是大家已经面临或即将遇到的一个问题,多谢!

magiccxm:

ABAP编程不是没有前途,我比较小了,刚过本命年

ABAP编程不是简单的编程,SAP中最主要的语言,一个是ABAP,一个是JAVA

ABAP以后的路应该往OO方向发展,

还有JAVA方面,中国适应的太少,使用SAP集成的太多,什么ITS,等等,最新的BSP技术,也是以后ABAPER需要了解和掌握的。

开发包括几大部分,最简单的REPORT和DIALOG,还有很多其他的,比如WEB,WORKFLOW,BAPI,以及和其他PC系统的接口。

REPORT最简单的,最重要的,提高代码执行效率。(SD的报表是多多的,表也是大大的,月报表是运行慢慢的,以后发展的路就是提高SD报表运行的效率)

DIALOG不常用的,除非你需要开发自己的一套系统,只是使用SAP平台。

WORKFLOW要和HR相结合的。所以你是需要理解HR的东西的

WEB东西就是更多了,EP只是一个平台,EP不能满足你所有的功能。最新的BSP技术是全新的,中国好象没有几家在用的。

BW是个模块,严格上来说,是不属于ABAPER的范围。

SAP的技术是不断变化的,ABAPER哪个公司是不能少的,但是待遇就差了

我觉得以后的路就是,多多掌握开发技术,并且了解模块的东西,你不会实施,但是你了解。

还有出路就是做第三方接口,也是前途很大

lcr:

大家写了这么多,我也来抛个砖。

单论abap本身来说,就有很多东西可以学。SAP,或者其他的大公司,5年以上abap经验的人很多。

我感觉abap比起其他语言,已经算容易很多的了。而且一个好的abap人员,成长也是需要很多时间的,因此经验多了以后,不一定就竞争不过年轻人。这点可能和其他语言有区别,毕竟sap的环境不多,而且abap和实际企业应用密切相关,不是可以速成的那种。

要提高自身价值,除了技术,更重要的可能是其他的能力。大多数行业,技术水平不一定决定收入水平。如果是在客户方工作的abap人员,这点可能更明显。和客户的交流沟通和说服能力,我认为比技术水平更难得。相似的能力还有外语,对企业的了解等等。举例来说,如果一个abap人员,除了coding水平还可以之外,又懂各个模块的基本流程,了解会计学知识,理解mrp,外语又流利,大家可以想像这样的人是很有竞争力的。

技术方面来说,有了良好的abap基础和经验,可以做功能顾问,或者向bsp,oo,bw等方向发展。如果一时没有良好的机会,abap本身也有很多方面的内容可以学习,例如楼上朋友说得workflow,badi等系统增强。这样看的话会发现report只是很小的一部分。

最后还有个机遇的问题。这个就得看运气了。但愿大家机会多多:)


zmlovehxl 发表于:2006.05.23 16:43 ::分类: ( SAP心得 ) ::阅读:(7961次) :: Permanent link :: 引用 (0)
===========================================================
我的ABAP笔记——不断添加更新中……
===========================================================
1、 多参数的传输方法:

SUBMIT RSOLETI2 AND RETURN

WITH LANGU = LANGU

WITH MODE = SY-UCOMM

WITH CLSID = TOLE-CLSID_OLB

WITH APP = TOLE-APP

WITH AGGOBJ = TOLE-AGGOBJECT

WITH VERSION = TOLE-VERSION

WITH OBJTYPE = TOLE-OBJTYPE.

2、删掉内表中重复的行

DELETE ADJACENT DUPLICATES FROM itab.

3、SAP程序性能分析工具——runtime analysis

Tcodese30

tricks and tips

ABAP语句性能对比及相关文档

4、[zmlovehxl 发表于itpub论坛]

【求助】abap编程-如何读取文件的生成日期

接口程序需要读取服务器上的一个文本文件,我想先判断该文件的生成日期再做下面的处理,请问有什么办法吗?
谢谢各位!

我是老鼠你是猫’回复:

class: CL_GUI_FRONTEND_SERVICES

注:CL_GUI_FRONTEND_SERVICES为CLASS对象,不是Function Module

源文档 <http://www.itpub.net/showthread.php?s=&postid=3742635>

5、计算两个日期之间有多少天?

http://www.sapleague.com/bbs/dispbbs.asp?boardid=20&id=2284&star=1#7573


[求助]计算两个日期之间有多少天用什么函数啊?

有知道的吗?谢谢各位了!


binshan回复:
系统标准的试下‘HR_MX_INTERVAL_BETWEEN_DATES’。不过如果2个 时间超过一年,就要把年的

天数加进去了

http://www.100easy.com/dispbbs.asp?boardid=16&id=19449&star=1#128196
[求助]计算两个日期之间有多少天用哪个函数啊?有知道的吗?


谢谢了!

vannamei:这个为什么要用函数呢?两个日期相减不就行了吗?

SD_DATETIME_DIFFERENCE这个或者可以,你可以把TIME1和TIME2输入相同的时间就可以了吧.

mf2030041:用这个函数 COMPUTE_YEARS_BETWEEN_DATES


http://www.itpub.net/522004.html
【求助】计算两个日期之间有多少天用哪个函数啊?
有人知道吗?很急!
谢谢各位了!

sanbao:DAYS_BETWEEN_TWO_DATES?

00045138:DATE_CONVERT_TO_FACTORYDATE
HR_HK_DIFF_BT_2_DATES
这两个都可以

zmlovehxl注:最后我在程序中使用的函数是‘HR_MX_INTERVAL_BETWEEN_DATES’,可以返回年数,不到一年返回0


zmlovehxl 发表于:2006.03.22 15:15 ::分类: ( ABAP笔记 ) ::阅读:(1803次) :: Permanent link :: 引用 (0)
===========================================================
关于我的blog
===========================================================

欢迎大家来到我的blog!

首先,自我介绍一下,我从2004年初开始接触SAP,并一直从事ABAP开发方面的工作。虽然有了两年的ABAP开发经验,但是感觉项目结束之后进步不是很大,很多细节和ABAP高级编程方面的东西都没有涉及到。想进一步学习和提高!

建立这个blog的主要目的是想把自己收集的一些abap方面的资料整理一下,可以说是一个收藏夹吧。所以大部分都是从其他论坛或者blog中摘录的。在这里感谢所有的原作者和论坛!

其次,也希望sap,特别是abap方面的高手能不吝赐教,感激不尽!

特别说明:最近经常发现blog上有人发垃圾评论,无奈之下把部分文章的回复功能关闭了。如果有ABAP高手或者同行愿意跟我联系,请不吝赐教,发邮件到zmlovehxl@126.com

谢谢大家的支持!!!


zmlovehxl 发表于:2006.03.16 09:54 ::分类: ( 关于我的blog ) ::阅读:(414次) :: Permanent link :: 引用 (0)
===========================================================
我收集的SAP论坛链接
===========================================================

http://www.itpub.net/forum45.html

http://www.mgrit.com/sap/40/ShowForum.aspx

http://www.sapleague.com/bbs/index.asp

http://www.saphrfans.com/

http://www.sapclub.org/forums/

http://www.erphome.net/wdb/index.php?s=da4cb0b3922282bbab0c2e3017148d99

http://www.sapbox.com/bbs/index.asp

http://www.sapsh.com/

http://www.100easy.com/

http://www.erpxp.com/bbs/index.asp


zmlovehxl 发表于:2006.03.16 09:40 ::分类: ( SAP网址收藏 ) ::阅读:(16119次) :: Permanent link :: 引用 (0)
===========================================================
点滴:关于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笔记 ) ::阅读:(1102次) :: Permanent link :: 引用 (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


zmlovehxl 发表于:2006.03.16 09:30 ::分类: ( ABAP笔记 ) ::阅读:(3197次) :: Permanent link :: 引用 (0)
===========================================================
转帖:abap 示范实例(from 神话blog)
===========================================================

abap 示范实例 超好的东东---申明:这文章不是我写的
作者:神话 日期:2006-01-16
字体大小: 小 中 大


在这里我给初学者示范一个实例,讲讲abap开发报表的简单过程。程序的正确与
否我们不与讨论,我们只关心这个程序的编写过程。
首先,在任何程序的开始阶段,我们都要确定将会用到的表。我们所讲的这个程序
是查询采购订单是否完成的。将会用到以下三个表:EKKO,EKPO,EKET。
程序的开头为:
REPORT TEST.
TABLES: EKKO,EKET,EKPO.
现在我们已经定义了所要用到的表,接下来的工作就是定义内表和数据。内表是
用来存储我们从上述三个表中查询到的数据。相关定义如下:
DATA: BEGIN OF ITAB OCCURS 0,
EBELN LIKE EKKO-EBELN,
MENGE LIKE EKPO-MENGE,
WEMNG LIKE EKET-WEMNG,
END OF ITAB.
现在我们已经定义完了内表ITAB。接着我们该定义数据了。数据就像C语言里的
常量。其相关定义如下:
DATA: MATNR LIKE EKPO-MATNR,
MENGE LIKE EKPO-MENGE,
WEMNG LIKE EKET-WEMNG,
EBELN LIKE EKPO-EBELN.
到这里我们已经把程序里要用到的数据和内表都定义好了。接着我们要做的工作
就是选择屏幕。所谓选择屏幕是指程序运行时,你要从屏幕上输入的内容。比如
说一个程序运行时,你输入一个物料号,就可以得到该物料的当前的库存数,那
你就要编写一个屏幕以供查询者输入查询的条件。其相关定义如下:
Select-OPTIONS: EBELN1 FOR EKKO-EBELN,
BEDAT FOR EKKO-BEDAT,
EKGRP FOR EKKO-EKGRP.
PARAMETERS: R1 RADIOBUTTON GROUP RADI,
R2 RADIOBUTTON GROUP RADI,
R3 RADIOBUTTON GROUP RADI.
现在我们已经完成了程序的前期准备,接着就开始真正的到表里查询我们需要的
相关数据了。其代码如下:
Select K~EBELN
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM EKKO AS K
Where K~EBELN IN EBELN1
AND K~BEDAT IN BEDAT
AND K~EKGRP IN EKGRP.

LOOP AT ITAB.
Select SUM( MENGE ) INTO ITAB-MENGE
FROM EKPO
Where EBELN EQ ITAB-EBELN.
MODIFY ITAB.
ENDLOOP.

LOOP AT ITAB.
Select SUM( WEMNG ) INTO ITAB-WEMNG
FROM EKET
Where EBELN EQ ITAB-EBELN.
MODIFY ITAB.
ENDLOOP.
然后我们需要定义输出界面。把我们查询到的数据输出时要有一个输出的格式,
这样大家看起来才会方便。代码如下:
TOP-OF-PAGE .
WRITE: /'采购凭证号',22 '物料号码',
47 '采购订单数量',77 '收到货物数量',
95 '完成标志'.
ULINE AT /1(130).
END-OF-PAGE .

START-OF-SelectION.
最后就是把我们查到的数据输出了。其实我举的这个程序到这一步时穿插了
一些查询,所以比较长。代码如下:
IF R1 = 'X'.
LOOP AT ITAB.
Select S~MATNR S~MENGE P~WEMNG S~EBELN
INTO (MATNR, MENGE, WEMNG, EBELN)
FROM EKPO AS S INNER JOIN EKET AS P
ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN
Where S~EBELN = ITAB-EBELN.
IF ITAB-MENGE > ITAB-WEMNG.
WRITE: /2 EBELN,23 MATNR,41 MENGE,
71 WEMNG,97 '否'.
ULINE AT /1(130).
CLEAR: EBELN,MATNR,MENGE,WEMNG.
ENDIF.
ENDSelect.
ENDLOOP.

ELSEIF R2 = 'X'.
LOOP AT ITAB.
Select S~MATNR S~MENGE P~WEMNG S~EBELN
INTO (MATNR, MENGE, WEMNG, EBELN)
FROM EKPO AS S INNER JOIN EKET AS P
ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN
Where S~EBELN = ITAB-EBELN.
IF ITAB-MENGE <= ITAB-WEMNG.
WRITE: /2 EBELN,23 MATNR,41 MENGE,
71 WEMNG,97 '是'.
ULINE AT /1(130).
CLEAR: EBELN,MATNR,MENGE,WEMNG.
ENDIF.
ENDSelect.
ENDLOOP.

ELSE.
LOOP AT ITAB.

Select S~MATNR S~MENGE P~WEMNG S~EBELN
INTO (MATNR, MENGE, WEMNG, EBELN)
FROM EKPO AS S INNER JOIN EKET AS P
ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN
Where S~EBELN = ITAB-EBELN.
IF ITAB-MENGE > ITAB-WEMNG.
WRITE: /2 EBELN, 23 MATNR,41 MENGE,
71 WEMNG,97 '否'.
ULINE AT /1(130).
CLEAR: EBELN,MATNR,MENGE,WEMNG.
ENDIF.
ENDSelect.
ENDLOOP.
ENDIF.

LOOP AT ITAB.
IF R3 = 'X' AND ITAB-MENGE <= ITAB-WEMNG.
Select S~MATNR S~MENGE P~WEMNG S~EBELN
INTO (MATNR, MENGE, WEMNG, EBELN)
FROM EKPO AS S INNER JOIN EKET AS P
ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN
Where S~EBELN = ITAB-EBELN.
WRITE: /2 EBELN,23 MATNR,41 MENGE,
71 WEMNG,97 '是'.
ULINE AT /1(130).
CLEAR: EBELN,MATNR,MENGE,WEMNG.
ENDSelect.
ENDIF.
ENDLOOP.
这时程序就结束了。其实举这个例子是想让大家知道ABAP开发报表的一个常规
流程,并不是讲什么技巧之类的,希望能对初学者有点用。抛砖引玉!
还有很多好东东,以后慢慢发.


[本日志由 神话 于 2006-01-16 05:13 PM 编辑]
文章来自: 本站原创
引用通告地址: http://www.washerfitting.com/blog/default.asp/trackback.asp?tbID=352
Tags:


zmlovehxl 发表于:2006.03.16 09:28 ::分类: ( ABAP笔记 ) ::阅读:(575次) :: Permanent link :: 引用 (0)