特别总帐.docx
《特别总帐.docx》由会员分享,可在线阅读,更多相关《特别总帐.docx(18页珍藏版)》请在冰点文库上搜索。
![特别总帐.docx](https://file1.bingdoc.com/fileroot1/2023-5/26/e10845bb-4e29-4ed5-b0ce-32beb5dd40c3/e10845bb-4e29-4ed5-b0ce-32beb5dd40c31.gif)
特别总帐
特别目的总帐(SpecialPurposeLedger)
1BasicSettings
[1]PerformPreparation
T-code:
GCVOSE16:
T000C
在此定义允许LocalLedger,GlobalLedgerpost到特别总帐并允许使用多语言版本.
使用SPL是如此的简单,实际上SAP的应用就是这么简单唯一缺少的是你市场上相关书籍不多而已所以读者才会觉得其似乎有点神秘.
如果读着使用SAP标准的SPLLedgerL0的话,读者不必要去了解SPL的具体细节,要做的只有两步,GCVO启动SPL,接下来GCL2Maintainledger时将SAP默认的公司代码删除后加上您的CompanyCodes就可以(请参照MasterData->MaintainLedgers).
Companycode0001默认使用了LedgerL0,你甚至只要使用GCVO激活SPL就可,测试一下,简单使用FB50在companycode0001记上一笔,然后SE16检查表GLT1(summarytable),对,SPL有了数据.
LedgerL0三个重要表GLT1(summarytable),GLS1(Actuallineitem)和GLP1(Planlineitem),这种table的命名方式在各种SPLedger都被采用,在稍后会详细提及.
简单理解,Localledger就是post到companycode的SPL,Globalledger则post到Company.
如果你愿意,你还可直接使用GB01Post凭证到SPLedgerL0,GB06是reverse,然后GD23可看凭证(对GloballedgerTcode分别是GB11/GB16/GB33),GB01要求输入Doctype和版本,关于Doctype我们自然想到OBA7,SPL通常默认只有两种凭证类型A0(实际)和P0(计划),比较简单,因为和Ledger0不同,SPLedger不是LegalLedger它通常是为了配合管理和分析用处.
*关于利润中心数据也是采用SPLedger的方式,相关Ledger是8A/8C/8E,请看<>之利润中心,合并报表9/1C/1M也是,销售成本会计帐0F(Costofsalesaccounting)也是等等.
什么是SPLedger?
简单理解就是Ledger0(会计总帐,合法总帐)外的其他Ledger都是SPLedger,实际思路也很简单,就是在记帐时同时将数据Post到启动了的特别总帐相关表中而已,显然启动了越多的SPLedger,性能越会手影响.因为随着计算机速度的大大提高通常会使用同步update,所以一些极端情况下,SPL出了问题,你的FIDoc也产生不了.
SPLedger的用处呢?
简单来讲,你想出几套帐玩,其中这是一常见使用SPL的case,请参考例1.利用特别总帐出中方式报表.
[2]MaintainCodingBlock
T-code:
OXK1|OXK2|OXK3
什么是Codingblock?
Codigblock,简单理解,可能企业有一些特殊需求(请看例1.利用特别总帐出中方式报表)希望FI和CO凭证行项目能记录更多信息而这些现有表BSEG和COEP没有相关字段承载,就可使用Codingblock.
使用codingblock增加的字段(所谓的Accountassignment字段)在激活后会加入所有的相关表中并且自动动态重新生成相应标准程序,并且,重要的是使用OXK1你可维护Subscreen让这些加入的字段出现在用户记帐或相关操作上的屏幕上,然后用户将信息录入这些字段.
OXK3界面如图2
[1]专家模式,如果读者对ABAP很熟悉,可使用,它将一步步如何建立domain,data
element,structure(CI_COBL,CI_COBL_BI),然后是将增加的field加入表BSEG,如果读者觉
得自己还不是专家,就使用默认的Lightmode,SAP自动完成这些操作.
[2]codingblocksubscreenOXK1,如果需要在Accountassigment时建立一个子屏幕将这些字
段加到屏幕上,并将优先级设成1.请参考例2如何应用OXK1.
[3]产生一些程序.
[4]SAP标准的Acct.Assinment字段,这些字段使用SE16:
TCOBF可看到,也是OXK1定义
AccountassignmentSubscreen可看到的字段,自定义的字段在OXK1也可见.
[5]自定的ZZCB1字段,需要指出的是可使用includestructure.
[6]字段还可被加入到结构COBL-FM中,OXK1并不可见,它将被用在一些用户自定义程序中.
增加字段ZZCB1,如需要可增加多个字段,选取Package(SAP46C以前称开发类,Package和Developmentclass的区别请参考<>,在此不可选择Localobject),由于修改了大量标准表和结构,需要AccessKey,并且你可能必须耐心等待整个激活过程,在此过程中,读者可发现所有的记帐操作都可能会错误,毕竟BSEG表正在更新.那个著名的记帐总程序SAPMF05A需要重新编译.
从图3.7.1.2-2读者可看到激活fieldZZCB1更新了的ABAP对象,这还不包括CO用到的一些ABAP对象,比如COLineitem表COEP和SPLSendtableACCIT_GLX(结构),SE11你可看到Codingblockcustomerinclude结构CI_COBL(包含自定义codingblockfieldsCI_COBL)或直接加入了ZZCB1..
***在等待激活时如果被中途Cancel,这将有一定风险,加入的字段需要加入一些结构而这些结构激活过程被停止,这样读者会发现记帐出了问题,这就意味大多数会产生财务凭证的操作不能用,开PO也出了问题,所以需要的就是耐心等待.即使真的cancel了,在一些操作时会出现ABAP错误提示一些结构错误,用户依旧可使用SE11直接去激活这些结构就没问题.
在一些意外情况下,可执行这些程序重新生成程序或排错RGUGBR18|RGUGBR00
|RGUGBR26|RSINCL00.
***在激活后使用SE11去看看相关表和结构发现加入了子结构CI_COBL(里面有字段ZZCB1),然后使用OXK1可使用此字段做subscreen.其实典型的是结构COBL,使用SE11可看到其它SAP标准定义的codingblock,比如include的子结构SI_COBL,COBL_EX和图3.7.1.2-1[6]所加入的为FM自定义结构COBL-FM.
***为什么激活过程会如此长,很简单,自定义的CI-COBL在可使用前必须要一些程序支持而这些程序是自动产生的可能要插入一批相关标准程序,一个实例是(读者可使用Se11依次
看其包含关系)CI_COBL->EKKN->UEKKN->MMPR_UEKKN,就是说如果CI_COBL产生,这些结构都必须重新激活(否则ME21N就没法做了,读者试下在激活过程中是否还可开白条PO)?
而这只是一个case.
***允许定义最多7个codingblockfields,这些字段也可用在SPL中,接下来会介绍如何在定义fieldmovement中使用codingblockfields
***关于如何使用OXK1定义subscreen请看FI配置maintaincodingblock.
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
2Planning
3ActualPosting
4PeriodicProcessing
5InformationSystem
6Tools
例1.利用特别总帐出中方式报表
一个典型的例子就是在一些外企由于会计期间和中方标准(多数外企可能使用公历2月做年度第一个期间,并且每个期间还可能不是自然月份,比如使用每月最后一周五做期间最后日或每月第一周二做期间起始日)可能有所不同,我们使用特别总帐出中方式的报表,这样在GCL2时分配公司时就可使用SAP标准的K4年度变式(分配后双击公司代码会弹出一子屏幕在此选用SPL的会计年度变式).
1.假设读者使用了年度变式24,然后在SPL允许的公司代码用FB50记笔帐,Postingperiod是2005/06/10,如果成功帐务数据立即传送到SPLtables,使用SE16检查GLT1(Summarytable,类似总帐的GLT0,可能读者非常熟悉),GLS1(LineItem),就能发现其postingPeriod是11(因为使用的是FV24).
2.为了便于大家更理解SPL中采用的年度变式和标准总帐采用的年度变式的不同,再举一个实例,标准总帐采用的年度变式如图3.7.1.1-1.
[1]这是个year-dependent的变式,2005/01/01是第6期间,而中方标准是第一期间.
[2]2005/07/02是2005第12期间的最后一天(2005年年结以此天为底),而2005/07/03开始是2006年的第1期间的第1天.
这个变式有点特殊,就是2005年度的12个会计期间覆盖的日期是从2004/07/31-2005/07/02.
现在的问题是要出中方标准报表,ABAPer将很难按符合中方标准的按月份定期间的逻辑去抓取财务数据,在此情况下启动SPL很容易解决此问题,报表从SPL相关表中抓取数据就可.
通过上面的例子读者应该对SPL有所了解了,下面将更深入解释SPL的配置.
***SAP到底有多少所谓的帐,读者SE16:
看看表T881就知道.而且读者还可自定义.
但是起码Ledger0必须知道,就是一般总帐它将summary数据写入GLT0.
例2如何应用OXK1
IMGPath:
基本设置的路径如图3.7.1-1,接下来就不再提及相关配置路径.
3.7.1.2MaintainCodingBlock3.7.1.3Tables
一.ExecuteExpressInstallation
Tcode:
GCIQ
如图3.7.1.3-1,[1]建立一个tablegroupZSTSPL[2]在按此按钮时会提示STSPLT->Summarytable,ZSTSPLA->Actuallineitemtable,ZSTSPLP->Planlineitemtable,ZSTSPLO->Objecttable_1(object/partner)和,ZSTSPLC->Objecttable_2(transactionattributes)5个表将被建立,Tablegroup的意思也就是说这些表将组成一个group叫ZSTSPL以用在特殊总帐上[3]在installTablegroup时,会产生一些程序,SAP强烈推荐reinstalltablegroup,特别是test,和productionserver是同一台(估计没多少企业会这样),很显然,reinstall会重新更新这些程序,有ABAP知识的人知道程序激活后在同一server是垮client断的,这样可能导致潜在错误,我们已经知道SPL是和GL同步的,SPL出错的后果是正常的操作会做不下去.
[4]所谓的sendfields,从[1]知道在建立tablegroup时会产生5个表,此些表的字段是SAP动态根据其一定标准产生的(比如ZSTSPLT->summarytable就类似GLsummarytableGLT0,其中包含TSL01-TSL16->对应各期间交易|凭证货币的累计金额和HSL01-HSL16则是对应累计本位币金额),如果想加入其它字段请按[5],细心的读者会发现其实这些额外的字段就是accountassignmentfields,[6]只是这些字段前加了ZZ前缀,读过codingblockfield后对此应该不再陌生,加入profitcenter和自定义的[7]ZZBC1字段
之所以加入ZZBC1是便于是读者更理解codingblock,在顺利建立tablegroup后,
使用SE11可发现grouping的5个表中都包含了上面insertedfieldsRZZPRCTR和RZZZCB1,前面多了R前缀.
***自定义的codingblock字段不仅可用于一般总帐而且可用于特殊总帐,SAP设计之精妙和完美不得不另人佩服,将所谓的非hardcoding(可配置)推到极点.难怪业界有闻SAP什么业务都可配置出来,虽有夸张,但今日观之,信矣.
在建立tablegroup后,为了在特殊总帐能用到,还必须进行安装,安装的过程会产生一系列相应程序比如substitution,validation,从总帐传plan和actualline到SPL的系列程序等,仔细的读者在install过程中的状态栏可看到.
在install时会有如图3.7.1.3-3的提示,特殊总帐的安装当然伴随一定数量的报表产生,熟悉reportpainter的读者一定不会对set,keyfigure,characteristic陌生(关于reportpainter请看其它:
reportpainter详解)
图中将costcenter和functionalarea做为固定特征值.
如图3.7.1.3-4,在完成install后SAP提示其建立一些report,读者可自行检查.
建立和安装好SPLtablegroup后,接下来就可在自定义的特别Ledger里使用,和手工记两(多)套帐不同的是,SAPSPL是根据用户定义自动记账的.
在此有几点留给读者思考.
1tablegroup中的objecttable有什么用途?
2几个clustertable组成一个tablecluster,几个pooledtable组成一个tablepool,
同样,几个SPLtable组成一个tablegroup.输入一tablegroup是如何找到其中包含的SPLtable的?
3关于installtablegroup和reportpainter的关系,读者也许知道类似情况在建立
成本中心组,成本要素组时这些数据也会作为reportset存在,读者可自行建立
成本中心(要素)组,然后找找究竟save在什么表中?
二.DefineTableGroup
如果想建立一globalledger的tablegroup,请选择图3.7.1.3-5[1]Globaltablegroup
更详细请参考第一步.
三.DisplayAssignmentsGraphically
T-code:
GCD6
没什么特别,你输入一个SPLtable,将同一tablegroup的tables以图形界面显示出来而已.
输入GLT1:
可看到SAPdefaultlocalledger所用的表,什么是特殊总帐,我的感觉是SAP认为非ledger0(一般总帐)的ledger都是特殊总帐,比如启动了EC-PCA,相应的ledgertables是GLPCT|GLPCA||GLPCP|GLPCC|GLPCO(注意最后的字母T,A,P).
四.TechnicalHelp
T-code:
GCCG|GCGG|GCU2|GCI2|GCVB
通常在你create和installtablegroup,SPL产生了相关表,结构和一些程序(这种动态产生ABAP对象的例子在很多地方都可见到,比如凭证的确定和退代会自动产生一些程序,CO-PA根据设置自动产生一些CO-PA相关表和程序),技术帮助IMG是说如果在这些自动产生对象的过程中出现错误,读者可手工再去产生一次,通常这步并不是必需要的..
在TechnicalHelp下有个maintaiupdatetype在SAP47已经被禁止.了解ABAP知识的用户可通过SE93输入TcodeGCVB然后找到程序RGISETGL就可发现程序在INITIALIZATION.时使用了messageE410(00).显然SAP认为采用同步实时更新SPLtable比较安全,毕竟采用Delaystart不能保证GL和SPL数据的完整性,当然这是以牺牲一定的Performance为代价的,另外需要指出的是如果SPL程序出了问题,显然相关财务凭证也不能记到GL中,所以启动SPL需要注意此点.
***如下图,Updatewithdelayedstart已经不允许.实际上连Tcode都禁止使用了.
如果依旧想使用delayedupdate.编写程序将表TFDIR字段FUNCNAME=’G_GLDB_POSTING_1’的字段UTASK直接改成2.
至于fieldmovement在接下来的masterdata再仔细讨论.
3.7.1.4MaintainTableDirectory
T-code:
GCI3SE16:
V_T800A
3.7.1.5MaintainFixedFieldMovements
T-code:
GCI4SE16:
V_T800M
3.7.1.6MasterData
IMGPath:
如图3.7.1.6-1,关于MasterDataIMG的10项配置.
一.MaintainActivities
T-code:
GCV1|GCV2|GCV3|GCV4SE16:
T022|T022T
在理解什么是Activities,请读者做下面两个动作.
1使用SE16:
BKPF,查询条件BKPF-GLVOR依此分别输入RFBU|RMWA|
RMWL|RMWE|RMRP|SD00|KOAE|RMPR,然后着重看查询出的记录的两个字段
BKPF-TCODE,BKPF-AWTYP,我想读者对activiites就会有初步了解.
***需要指出的是BKPF-AWTYP是另一个重要字段,比如AWTYP=BKPF可判断此FIDOC是直接从FI模块post过来的,=MKPF是物料移动产生的,=VBRK是SDbilling产生的,细心的读者会发现BKPF,MKPF,VBRK恰好都是headertable.读者可自行检查其它值,了解这些对理解FICO非常有帮助特别是报表开发.
2另一个动作是分配CONo.range的Tcode:
KANK,点击Group按钮进去看看,有一堆Activities.
Activity其实可理解一种业务交易(businesstransaction)类型,其实在Ledger0(一般总帐)中也使用了它,在SPL中同样使用它将确定其它模块或外部数据如何将数据Post到SPL中.
***通常并不需要自定义一个Activity,使用SAP标准的activity就可,读者有兴趣倒是可研究SAP标准的activity.
如图3.7.1.6-2[1]自定义的activity-ZACT,很遗憾,自定义的activitytype只能选择0->不posttransaction和3可选post但不能是Verion1.
读者使用SE16:
T894->SPL和FI-LC合并报表版本表,自定义的activity只能用在计划版本中,关于建立自定义Ledger的版本请看接下来的第三步MaintainLedger.
研究过记帐程序SAPMF05A读者会发现很多activity是写死的,SAP并不是万能,毕竟你想自定义一个activity再嵌入SAP标准逻辑!
二.MaintainFieldMovements
T-code:
GCF1|GCF2|GCF3|GCF4SE16:
T888|T888T|T888M
定义一个Fieldmovement其实是形成一个Fieldgroup,这些field在分配Activities给companycode(Globalcompany)Ledger时将被决定post到特别总帐中.
读者觉得似乎含糊不清,可以这样简单理解,一个fieldmovement包含一个fieldgroup(就在前面刚讲过SPL的Tablegroup),一个fieldgroup决定多少Field(字段)将被post到SPL中.
如图3.7.1.6-3,[1]自定义的FieldmovementZFLM,[2]自定义的SPLsummarytable白ZSTSPLT,就是在前面定义tablegroup时产生的summarytable.[3]所谓的Sendtable,此三个实际上是结构(结构可这样理解就是不包含任何数据不使用来存放数据而是用来在程序中定义内表->内存中的表,这也容易理解,假设程序需要将数据写到多个表中,用结构定义一内表包含这些表的所有字段,在前台操作或保存时先将数据临时存在这些内表中,经过判断无误在做一事务提交到表中)[4]这些是ZSTSPLT表的字段,[5][6]为了方便读者理解,本人特意将sendertable的postingkey赋给确ZSTSPLT的利润中心,而自定义的codingblockfieldZZCB1记录的是操作用户名称.是的,假设读者使用FB50什么的级了笔帐,会发现SPL表的利润中心和ZZCB1分别保存的是PK码和Username,所以在设置senderfield必须注意不能犯错.[7]GCX1|GCX2
定义的用户出口.如有需要字段值可根据用户出口定义的Form获得(详细请看3.7.1.10UserExits)
三.MaintainLedgers
在此可对ledger新建更改删除和拷贝等动作
T-Code:
GCL1|GCL2|GCL3|GCL4|GCL6SE16:
T881|T881T
1在讲述Ledger只前,只想说一句,就是做FICO如果不知道SAP默认的几个ledger(中文叫帐套吧)是很悲哀的.
2在允许建立更改SPL前,必须使用GCVO激活SPL(表T000C-GL_ONLY->localledger,
T000C-BKRS_ONLY->GlobalLedger任何一个为X).
3通常想使用自定义的tablegroup不用copyfromreferenceledger(copyfromLedgerL0是不可以的,因为GLT1是所谓的共享表->pooledtable).
4最简单的方法就是直接使用LedgerL0withsummarytableGLT1,将默认的公司代码删除换上实际需要的公司代码就可以.
如图3.7.1.6-4,[1]接下来可将SPLZ1assign给公司代码|公司,[2]分配Activity,你可决定ledgerZ1需要分配什么activities(比如Z1只需要FIpost过来的数据),[3]版本,通常定义两种版本,1->actualversion,2->planversion,所谓的实际版本就是从FI|MM|SD等产生凭证时post过来的,计划版本允许是用户输入的,无外乎是将来可以去