《k3系统原理与数据结构分析.docx》由会员分享,可在线阅读,更多相关《k3系统原理与数据结构分析.docx(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、n更多企业学院: 中小企业管理全能版183套讲座+89700份资料总经理、高层管理49套讲座+16388份资料中层管理学院46套讲座+6020份资料国学智慧、易经46套讲座人力资源学院56套讲座+27123份资料各阶段员工培训学院77套讲座+ 324份资料员工管理企业学院67套讲座+ 8720份资料工厂生产管理学院52套讲座+ 13920份资料财务管理学院53套讲座+ 17945份资料销售经理学院56套讲座+ 14350份资料销售人员培训学院72套讲座+ 4879份资料目 录第一篇k3系统原理及数据结构分析1、总账系统11 基础资料111 科目 涉及的表为t_account(科目表),常用到的
2、字段为fitemid(科目内码),ffullname(科目全名),fquantity(是否数量金额辅助核算), FmeasureUnitID(计量单位内码),fdetailid(核算项目内码)等等。 fitemid(科目内码):一个新增加的科目,在初始数据中录入数据,后来把此科目的数据删除了,或录入了一张此科目的凭证,又把此凭证删除了,然后想把此新增科目删除;或者是结转新账套之后,想把一些没有余额的科目删除。这时系统提示科目已有业务发生,不能删除。其实这涉及到很多数据库表引用了t_account(科目表)的Fitemid字段,这些表总账系统中有t_balance(余额表),t_quantity
3、balance(数量余额表),t_voucherentry(凭证体表),t_profitandloss(损益科目实际发生额表);固定资产系统中有t_faexpense(费用分配表),t_fabalexpense(用于折旧计算的费用分配表),t_facard(固定资产卡片表),t_fabalcard(卡片变动表);工业物流中有t_icitem(物料明细资料表);商业物流中有com_item(商品明细资料表)。只要在这些表中存在记录,那么相对应的科目就不能在界面中删除。 Ffullname(科目全名):这个字段主要是在录入凭证,查看账薄时用到。如果在录入凭证,查看账薄时,系统只显示科目的最明细一级
4、的名称,那就是因为科目全名字段中的值不正确。这个问题有个相关的补丁可以解决,补丁名叫Repare_FullName.sql。 fquantity(是否数量金额辅助核算):此字段主要是标识此科目是否需要数量金额辅助核算,一般此字段与FmeasureUnitID(计量单位内码)一起使用,当fquantity字段的值为1时,FmeasureUnitID字段中一定也要有相应的值,且此值与t_measureunit表中的FmeasureUnitID字段值相对应。 Fdetailid(核算项目内码):这个字段的值与t_itemdetail(核算项目横表)中的Fdetailid字段值相关联,且这个值在t_i
5、temdetail表中对应的以F开头的字段的值为“-1”。例如:113(应收账款)科目,带部门及客户两个核算项目,假设在t_account表中对应的Fdetailid字段的值为1,那么在t_itemdetail表中,一定要有Fdetailid值为1的记录,且F1,F2两个字段的值都为“-1”。详细讲解见凭证处理这节 科目表(t_account)如图1所示: (图1)核算项目横表(t_itemdetail)如图2所示: (图2)112 币别涉及的表为t_currency(币别表),常用到的字段为FcurrencyID(币别内码),FfixRate(换算率),Fscale(小数位数)等等。Fcur
6、rencyID(币别内码):系统默认账套记账本位的FcurrencyID值为1。Fscale(小数位数):在中间层账套管理中,有个地方设置本位币小数点位数,就是FcurrencyID值为1的记录对应的Fscale值,可以在此改动币别对应的小数位数。注意币别表中有一条默认的零记录,此记录不能丢失,如果丢失,会导致数据错误或在操作时出现莫名其妙的错误(一般是在做凭证时不能保存,查询凭证,账表时数据不正确)。113 凭证字涉及的表为t_vouchgroup(凭证字表),常用的字段为FgroupID(凭证字内码),一般被t_voucher(凭证表)引用。114 计量单位 涉及的表为t_measureu
7、nit(计量单位表),t_unitgroup(计量单位组表),常用的字段为Fmeasureunitid(计量单位内码),Funitgroupid(计量单位组内码),Fstandard(是否基本计量单位)。计量单位表中有一条默认的零记录,此记录不能丢失,如果丢失,会导致数据错误在操作时出现莫名其妙的错误(一般是在做凭证时不能保存,查询凭证,账表时数据不正确)。 在一个计量单位组内,只能有一个基本计量单位,即Funitgroupid 字段值相同的记录,只能有一条记录的Fstandard字段值为1。115 核算项目 涉及的表为t_item(核算项目表),t_itemclass(核算项目类别表),常用
8、的字段为Fitemid(核算项目内码),Fitemclassid(核算项目类别内码)。在t_item表中,按Fitemclassid字段的值,把核算项目分为很多类:1为客户,2为部门,3为职员,4为物料,5为仓库,6为备注,7为计量单位,8为供应商,9为现金流量项目。,如果是自定义的核算项目,一般Fitemclassid字段的值都比较大,在对应的t_itemclass表中,有一个FsqlTableName字段,它表示每个核算项目对应的详细情况表名称。核算项目类别表(t_itemclass)如图3所示: (图3)116 部门 涉及的表为t_item(核算项目表),t_department(部门详
9、细情况表), t_item表中fitemclassid字段值为“2”的所有记录,都是部门记录,在t_department表中记录的是最明细一级的部门信息,这两张表之间依靠fitemid字段相关联。117 职员 涉及的表为t_item(核算项目表), t_Emp(职员详细情况表),t_item表中fitemclassid字段值为“3”的所有记录,都是职员记录,在t_emp表中记录的是最明细一级的职员信息,这两张表之间依靠fitemid字段相关联。118 现金流量项目 涉及的表为t_item(核算项目表),fitemclassid字段值为“9”的所有记录,都是现金流量项目,在凭证录入时,录入现金流
10、量项目时,就是取此表的数据。12 初始化121 初始化初始化时,涉及到的表主要是 t_balance(金额余额表),t_quantitybalance(数量余额表)和t_profitandloss(损益类科目实际发生额情况表)。当在年初进行初始化时,余额表和数量余额表中都只有第一期的数据,且没有本年累计数据和损益数据,即在两张余额表中,累计数字段的值为零和在损益类实际发生额表中没有记录。当在年中进行初始化时,假如在第6期进行初始化,则在两张余额表中会存在第1期和第6期两期的数据,累计数字段有数据,损益类实际发生额表中有记录。在上面所讲的三张表中,都有币别(Fcurrencyid)这个字段,假如
11、科目带有外币核算,且外币有余额或发生额,则在这三张表中都由币别ID来识别,一个科目的余额之和是由这个科目的几个币种余额之和而得;在余额表中币别字段(Fcurrencyid)的值为零,就表示是此科目的综合本位币记录。一个科目下所有币别余额之和等于此科目币别字段为零值的记录的余额,所有币别发生额字段之和等于币别字段为零值的记录的发生额。在上面所讲的三张表中,也都有核算项目(Fdetailid)这个字段,如果某个科目下挂核算项目,且核算项目有余额或发生额,那么在这三张表中都由Fdetailid字段的值来反映。Fdetailid字段的值为0,则是此科目所有核算项目之和的记录。(如图4)第一条记录Fde
12、tailid,Fcurrencyid字段的值都为0,表示这条记录是此科目所有币别所有核算项目之和的记录,第二条记录Fdetailid字段值为0,Fcurrencyid字段值为1,表示是所有币别为本位币的所有核算项目的之和的记录,依次类推。 (图4)122 试算平衡 平衡的标准是:当前期间的综合本位币科目借方余额合计等于贷方余额合计,借方累计发生合计等于贷方累计发生额合计,即汇总t_Balance表中FcurrencyID=0的启用期间数据。下面这段SQL语句是检查余额表中的余额是否平衡:select b.fdc,sum(a.fbeginbalance) from t_balance a joi
13、n t_account b on a.faccountid=b.faccountid where a.fdetailid=0 and a.fcurrencyid=0 and b.fdetail=1 group by b.fdc123 结束初始化由于月末处理需要,结束初始化后,系统将自动更新表t_Subsys(新增或更新一条记录),同时更新t_SystemProfile 表中 Fcategory = GL, Fkey = InitClosed对应的 Fvalue=1,初始化完成。13 凭证处理131 多项目核算在讲凭证处理之前,先来讲一下多项目核算,即一个科目带一个核算项目或带多个核算项目时,数
14、据是怎样形成的。 多核算项目在科目中的应用在基础资料维护中需要下设核算项目的科目中设置核算项目类别,科目下设了核算项目类别将会在表t_Account 中FDetailID 有相应的代码 ,同时在t_ItemDetailt和t_ItemDetailV 中有按FdetailID对应的记录。例如:113(应收账寺)科目,带部门及客户两个核算项目,假设FDetailID的值为1,那么在t_ItemDeail中有一条记录FDetail = 1 ,FdetaiCount=2 (表示下设两个核算项目类别),F1= -1 ,F2 = -1,F3 = 0,F4=0,F8=0 等(以“F”开头 + “数字”的字段
15、是根据t_ItemClass 中核算项目类别代码FitemClassID 的值得来的,1和2在t_ItemClass 中分别代表客户和部门,由于此科目下设核算项目类别为“客户” 和“部门”,所以只有F1,F2字段的值是 1,其他则为0表示在此类别不参与核算),可以参考图1和图2。在t_ItemDetailV 中有对应FdetailID = 1的两条记录,FitemClassID对应t_ItemClass表中FitemClassID的值,分别为1 和2 ,FitemID = -1(表示此类别参与核算)。 多核算项目在凭证中的应用在录入凭证时科目下设核算项目则提示输入核算项目,输入核算项目后,在表
16、t_VoucherEntry 中FDetailID 有相应的代码,在表t_ItemDetailt和t_ItemDetailV 中有按FdetailID对应的记录,更新的规则是在t_ItemDetail中“F”开头 + “数字”的字段值和t_ItemDetailV中FitemID字段值是录入的核算项目对应表t_Item中FitemID的值。例如:做一张收款凭证,借:银行存款,贷:应收账款(下挂客户和部门核算),客户为A客户,部门为B部门;在t_Item个表中,A客户对应的FitemID的值假设为20,B部门对应的FitemID值为30,那么,在保存完这张凭证后,t_VoucherEntry表中F
17、detailID的值假设为4,在t_ItemDetail表中相对应有一条FdetailID=4,FdetaiCount=2的记录,其F1=20,F2=30,其他以F开头的字段的值如F3=0,F4=0,F8=0等等,这里面的F1和F2的值就是A客户和B部门在t_Item表中对应的FitemID的值。在t_ItemDetailV有两条相应的记录,表现如下:FDetailID=4,FitemClassID=1,FitemID=20;FDetailID=4,FitemClassID=2,FitemID=30。在录入模式凭证时,与录入凭证时一样,表t_VoucherEntrytemplate中FDeta
18、ilID 有相应的代码,在t_ItemDetailt和t_ItemDetailV表中都有相应的记录生成。 核算项目横表和纵表:核算项目横表为t_ItemDetailt,核算项目纵表为t_ItemDetailtV。核算项目纵表是由核算项目横表来生成的,可以用SP_CleanItemDetailV这个存储过程来生成。系统一般是在查询一些账表时用到核算项目纵表,比如查明细账,如果查出来的核算项目窜户,则可以运行EXEC SP_CleanItemDetailV 来重新生成过核算项目纵表,这样查明细账时数据就正常了。而有时也会出现核算项目横表丢失记录,而在核算项目纵表中却保存完好,这时就可以写SQL语句
19、从核算项目纵表中把丢失的记录插回核算项目横表中了。多项目核算如图5所示: (图5)132 凭证过账在过账前,系统会检查总账是否已完成初始化、检查当前期间是否有未过账凭证,若未完成初始化或没有未过账凭证,则退出过账过程否则进入下一步。 凭证过账时,在选定的凭证范围内按照期间、凭证字、凭证号、分录号的顺序逐条处理凭证分录: 检查凭证是否在本会计年度、期间。 根据账套选项的“凭证过账前必须审核”,检查凭证是否已经审核。 检查科目、核算项目的合法性。 检查凭证号是否连续。 将分录中的借或贷方发生额登记至t_Balance,分三步完成:A、登记科目的原币、原币折合本位币发生额。B、登记核算项目的原币、原
20、币折合本位币发生额。C、若是非明细科目,则汇总其所有上级科目的发生数。以上三步操作中数据库中数据会发生变化的有表t_Balance中的FdebitFor,FcreditFor,FytdDebitFor,FytdCreditFor,FEndBalanceFor,FDebit,FCredit,FytdDebit,FYtdCredit,FendBalance十个字段。 检查是否机制损益类凭证,如是结转机制凭证(FinternalInd=“TransferPL”、“RateAdjust”),则不更新余额表数据。 若科目属于损益类科目(t_Account中FGroupID值大于500),且凭证分录中的F
21、internalInd字段值为 “TransferPL”(自动结转),则将分录中的借或贷方发生额登记至表t_ProfitAndLoss中,分三步完成:A、 登记损益类科目的原币、原币折合本位币发生额。B、登记核算项目的原币、原币折合本位币发生额。C、若是非明细科目,则汇总其所有上级科目的发生数。以上三步操作中数据库中数据会发生变化的有表t_ProfitAndLoss中的FamountFor, FytdAmountFor,Famount,FytdAmount四个字段。 若科目或核算项目设有数量辅助核算,则更新表t_QuantityBalance,发生变化的字段有FDebitQty ,FCredi
22、tQty ,FYtdDebitQty ,FytdCreditQty,FEndQty五个字段。 表t_Voucher的对应字段Fposted=1,FpostID=过账人,加上过账标记。133 凭证反过账 检查本期有没有已过账的凭证,若没有,则退出反过账过程。 更新t_Balance本期发生、本年累计及期末余额字段,使其数值去除当前反过账凭证的发生额:如反过账凭证分录为借方:注以下:Vch.FamountFor、Vch.Famount、Vch.FQuantity为凭证分录金额及数量FDebitFor:= FdebitFor Vch.FAmountForFYtdDebitFor= FytdDebit
23、For Vch.FAmountForFEndBalanceFor= FBeginBalanceFor + DebitFor CreditForFDebit= Fdebit Vch.FAmountFYtdDebit= FytdDebit Vch.FAmountFEndBalance= FBeginBalance + Debit Credit 损益类科目更新t_ProfitAndLoss 本期发生及本年累计字段:FamountFor= FamountFor Vch.FAmountForFytdAmountFor= FytdAmountFor Vch.FAmountForFamount= Famou
24、nt Vch. FAmountFytdAmount= FytdAmount Vch.Famount 更新t_QuantityBalance本期发生、本年累计及期末余额字段,使其恢复至期初状态:如反过账凭证分录为借方:FdebitQty= FdebitQty Vch.FquantityFytdDebitQty= FytdDebitQty Vch.FquantityFendQty= FbeginQty+DebitQty CreditQty 表t_Voucher的对应字段Fposted=0,FpostID= -1 修改为未过账标记。14 现金流量141 凭证录入与保存时有关现金流量的处理总账系统中的
25、现金流量表最关键的表就是t_CashFlowBal和t_VoucherEntry这两张表,在做凭证时,如果某条分录指定了现金流量项目,则在t_CashFlowBal表中插入一条记录,在t_VoucherEntry表中,现金类科目的分录记录的FcashFlowItem字段的值为1。t_CashFlowBal表结构如下:FvoucherID: 凭证内码(与t_VoucherEntry表中的FvoucherID相对应)FentryID: 凭证分录号(与t_VoucherEntry表中的FentryID相对应)FcashAccountID: 现金流量科目内码(即凭证中对方科目的内码) FitemID:
26、 现金流量项目内码(与t_Item表中的FitemID相对应)FsubItemID: 现金流量附表项目内码 (与t_Item表中的FitemID相对应) FcurrencyID: 币别内码(与t_VoucherEntry表中的FcurrencyID相对应)FamountFor: 原币金额(与t_VoucherEntry表中的FamountFor相对应)Famount: 本位币金额(与t_VoucherEntry表中的Famount相对应)当做凭证时,没有指定现金流量项目,而是通过T型账户来指定现金流量项目时,系统会把所有现金类科目的凭证分录(整张凭证的分录)都提取到t_CashFlowBal表
27、中;在没有指定流量项目和附表项目之前,t_CashFlowBal表中的FitemID与FsubItemID字段的值分另为-1和0;当指定了流量表项目和附表项目时,则更新t_CashFlowBal表中相应记录的FitemID和FsubItemID字段的值。142 现金流量表的平衡关系在T型账中,有一些对应关系:现金类科目的借贷发生额一定要相等,非现金类科目的借贷发生额不一定相等;借方现金类科目与非现金类科目发生额合计等于过滤期间的总账的现金类科目的借方发生额,相应的贷方现金类科目与非现金类科目发生额合计等于过滤期间的总账的现金类科目的贷方发生额。这是提取数据最关键的一步,如果在这个地方数据就与总
28、账不对,那么以下的对应关系就没有依据了。满足上面的对应关系后,就是现金流量表本身的平衡关系了,第一、现金流量的净增加额与补充资料项目中的现金及现金等价物的净增加额相等;第二、补充资料项目中的净利润与利表中的净利润数相等;第三、补充资料项目中的净利润加上附表二的总数等于主表中经营活动产生的现金流量净发生额。15 往来处理151 往来业务核销 涉及到的表:t_Voucher,t_VoucherEntry,t_TransCheckInfo,t_Account,t_Item,t_MeasureUnit,t_VoucherGroup,t_Currency,T_AcctGroup,t_ItemDetail
29、V,t_TransInitBalance。 进行往来业务核的前提条件是系统参数中设定“启用往来业务核销”,往来科目一定要设置“往来业务核算”,所有的凭证全部都要过账。 以“应收账款”科目为例,系统先从t_TransInitBalance,t_VoucherEntry两个表中取出“应收账款”初始化期间没有核销或没有核销完的数据和凭证表中“应收账款”科目借方发生的没有核销或没有核销完的记录(与t_TransCheckInfo表相比较而得出没有核销或没有核销完的数据),再从t_VoucherEntry表中取出“应收账款”科目贷方发生的没有核销或没有核销完的记录(也是与t_TransCheckInfo
30、表相比较而得出没有核销或没有核销完的数据),分别列在上下两个窗口中。窗口上半部分是需要进行核销的记录,下半部分是收款或是付款业务,如果是资产类科目,则借方行发生额在上面,贷方发生额在下面;如果是负债类科目,则是贷方发生额在上面,借方发生额在下面。在此客户可进行自动或手工核销。 核销完后,系统会在t_TransCheckInfo表中记录核销的记录。152 往来对账单 往来对账单是用来过滤查询某个往来科目的某个核算项目的借贷余数据情况: 当过滤条件选择“全部”时,涉及的表有下面这些:t_Balance,t_Voucher,t_VoucherEntry, t_ItemDetailV,t_Accoun
31、t ,系统先从t_Balance表中取出期初余额,再从t_Voucher,t_VoucherEntry两表中取出本期借贷方发生数据,最后计算得出余额。 当过滤条件选择“未核销”时,涉及的表有下面这些:t_Balance,t_TransCheckInfo,t_Voucher,t_VoucherEntry, t_ItemDetailV,t_Account ,系统先从t_Balance,t_TransCheckInfo两表中取出期初余额,再从t_Voucher,t_VoucherEntry两表中取出本期借贷方发生数据,最后计算得出余额。153 账龄分析 账龄分析主要是用来对设置为往来核算科目的往来款
32、项余额的时间分布进行分析,系统自动把设置往来的会计科目的科目余额属性方向(如应收账款为借方)的最后一笔业务发生时间为账龄起算点,所有业务自动从凭证中提取,自动出龄分析表。在账龄分析表中,系统只提供单核算的账龄分析表,不提供组合情况的账龄分析表。目前系统的过滤项中的核算项目的选项实际上是无效的,把往来核算的科目下所设置的所有的核算项目都列示出来。 涉及的表有下面这些:t_TransInitBalance,t_Balance,t_LastContactDate,t_VoucherEntry,t_Voucher,t_TransCheckInfo,t_itemdetail。系统分别从t_TransIn
33、itBalance,t_Balance,t_LastContactDate,t_VoucherEntry这些表中取出期初,本期借方发生,本期贷方发生的数据与t_TransCheckInfo表中的核销数据相减而得出未核销的数据,按时间的分布把这些数据分别归类到具体的时间中而形成账龄分析表。16 期末处理161 期末调汇原理系统执行此功能时,是根据在会计科目中的科目属性来进行的,只有在会计科目中设定为期末调汇的科目才会进行期末调汇处理。调汇原理:某个科目的期末原币乘以期末汇率是否与此科目调汇前余额表中的综合本位币有差异,如果有差异,就生成调汇凭证。期末汇率:用户输入。调汇前余额表中的综合本位币:期
34、初综合本位币(即上期期末调汇后的余额)与本期业务发生综合本位币之和。本期业务发生综合本位币:做凭证时原币乘以月初汇率或原币乘以业务发生日的汇率就得出业务发生的综合本位币调汇计算: 算出此科目在调汇前余额表中的期末综合本位币A(一般都是把凭证过账即可) 算出原币余额乘以期末汇率得出期末综合本位币的余额B,B作为本期期末的综本位币余额,也是下期期初的综合本位币余额。 算出B与A的差C(B-A),其中C即为要调汇所产生差异。把C记入汇兑损益,是正是负根据C的正负以及科目的借贷方决定。例如对应收账款调汇,C为正则记入应收账款正数(借方),记入汇兑损益科目贷方正数。涉及的表有下面这些:t_User,t_
35、Voucher,t_VoucherEntry,t_VoucherGroup,t_Currency,t_Account,t_Systempro,t_Balance,t_RateAdjust,t_ItemDetailV,t_ItemClass,t_rp_Contact,t_RP_BillNumber,t_RP_ARPBill,t_RP_Contactbal。处理步骤如下: 系统首先检查有没有未过账的凭证,如果有,则退出,没有则进行下一步,检查本期是否有调汇凭证,有则退出,没有则进行下一步; 接着系统把期末汇率更新到t_Currency表中相应外币的汇率字段中,再取出汇兑损益科目,如果没有,则要手工
36、录入,并把此科目填入系统参数表中,以便下次能够使用;再接着取出生成汇兑损益凭证的凭证字、凭证日期和摘要; 系统从t_Balance表中取出科目的期末原币和期末本位币(调汇前的本位币),并计算期末原币*期末汇率减去期末本位币(调汇前的本位币)而得到需要调整的差额,如果差额为零,则提示本期不需要调汇,否则生成一张调汇凭证。 从应收系统的t_rp_Contact(往来业务列表)中取出期初客户(供应商)外币和本位币的未核销余额与本期客户(供应商)的发生数据核销后剩余原币和本位币金额进行汇总,得出客户(供应商)的期末原币和本位币余额,并计算期末原币*期末汇率减去期末本位币而得到需要调整的差额,然后生成一
37、张调汇的其他应收(付)单,这张单据的凭证内码指向第三步生成的调汇凭证内码,且这张单据的状态为完全核销状态,(向t_RP_ARPBill,t_rp_Contact插入相应的记录),并更新应收应付余额(更新t_RP_Contactbal表中的数据)。162 结转损益 此功能是将所有损益类科目的本期实际发生额全部自动转入本年利润科目,并可根据用户的需要生成收益凭证与损失凭证。 损益类科目的实际发生额:损益类科目的实际发生额实际上就是该科目在期末结转损益之前的余额。 涉及的表有下面这些:t_User,t_Group,t_Systempro,t_VoucherEntry,t_Account,t_Acct
38、Group,t_VoucherGroup,t_DataTypeInfo,t_Currency,t_MeasureUnit,t_UnitGroup,t_Balance,t_QuantityBalance,t_ItemDetailV,t_ItemClass等。 处理步骤如下: 先检测系统参数(t_Systemprofile表中Fcategory=“GL”,Fkey=“EarnAccount”的记录)中有无本年利润科目(Fvalue的值),若无则退出;再检测系统中有无结转损益的凭证(t_Voucher表中本期有无FInternalInd=TransferPL的记录),若有则提示是删还是过账结转损益的
39、凭证,若是选过账,则系统把结转损益的凭证过账,若是选删除,则把结转损益的凭证删除,再进入到下一步。 从科目表中把所有损益类科目列出(t_Account表中FgroupID501的记录),并更新科目表中损益类科目对应本年利润科目(FearnAccountID字段)的值为系统参数中设置的本年利润科目的科目ID。 从系统参数表(t_Systemprofile)中取出一系列的参数值,如果这些参数值没有错误,则再从余额表(t_Balance)和数量余额表(t_QuantityBalance)取出所有最明细损益科目包括所有币别和核算项目的期末余额(也即损益类科目实际发生额),另外再对照损益类科目设置的项目
40、核算,分别从t_Account、t_ItemDetailV和t_ItemClass表中进行验证科目对应的FdetailID值的正确性,若无错误,最后再往t_Voucher,t_VoucherEntry表中插入相应的记录。163 自动转账自动转账功能用于自动生成可按比例转出指定科目的“发生额”、“余额”、“最新发生额”、“最新余额”等项数值的会计业务。本位币金额公式:该条分录的科目必须为最明细科目,如明细科目下设了核算项目,还必须输入核算项目代码,在输入科目及核算项目后,还须录入币别。根据科目是否下设外币及数量,可以录入原币取数公式、本位币取数公式、数量取数公式。公式的语法与自定义报表完全相同,
41、通过取数公式可取到账上任意的数据。另外,在公式中还可录入常数。(“本位币金额公式”即“数据来源公式”)自动转账公式:其实就是ACCT函数,在这里没有取核算项目的地方,但是可以依照报表中ACCT函数的格式来设置。比如取应收账款(113)科目下从客户001到客户100的本期期末余额的数据,公式可以这样来定义: ACCT(113|客户|001:100,Y,0,0,0,)。各个ACCT函数之间可以进行加减乘除的运算,也可以直接录入一个常量来当做公式。 涉及的表主要有下面这些:t_Currency,t_AutoTransfer,t_AutoTransferEntry,t_SystemPro,t_item
42、,t_Account,t_ItemClass,t_Balance等。 在做自动转账时,主要是检查t_AutoTransferEntry表中转账科目对应的核算项目是否正确,也即t_AutoTransferEntry表中FaccountID的值在t_Account表是否存在,是否带核算项目,如果带核算项目,则t_AutoTransferEntry表中FdetailID字段的值对应的在t_ItemDetailV表中是否存在,其FitemClassID的值是否与科目所带的核算项目类别相匹配,如果这些都检测通过,则接下来就是公式取数的事了。通过公式取到数之后,系统再检查按照转账凭证设置的借贷方计算取到的
43、数是否平衡,如果平衡,则生成转账凭证。164 期末结账与反结账 期末结账: 涉及的表有下面这些:t_Account,t_AcctGroup,t_Balance,t_Currency,t_Department, t_Item,t_ItemClass,t_MeasureUnit,t_Organization,t_Personnel,t_ProfitAndLoss,t_QuantityBalance,t_RateAdjust,t_UnitGroup,t_Voucher,t_VoucherEntry,t_VoucherGroup,t_SystemProfile。处理流程:A 检查是否完成初始化。B 检
44、查本期是否还有未过账的凭证C 如果需要-检查本期损益类科目余额是否结平,如果不平不能结账。D 检查T-SubSys表看是否其他要求与总账同步(Fperiodsynch=1)的子系统是否已经结账E 将t_Balance、t_ProfitAndLoss、t_QuantityBalance表中所有本期期末数据复制为下一期期初数据,本年累计数据累计到下一期,发生额为0。F 删除表t_ItemDetail 、t_ItemDetailV中一些在t_Balance、t_ProfitAndLoss、t_QuantityBalance、t_VoucherEntry、t_Account 中都不存在的核算项目多余数
45、据。G 更新表t_SystemProfile 当前期间加到下一期间 如果Fperiod= PeriodPerYear则更新Fkey= CurrentYear ,Fvalue=Fvalue+1;Fkey= CurrentPeriod,Fvalue=1 否则更新Fkey= CurrentPeriod,Fvalue=Fvalue+1H 期末处理管理表t_SubSYS将本期数据设为已结账Fcheckout=1,增加一条下一期Fcheckout=0的记录。 反结账:涉及的表有下面这些:t_Account,t_AcctGroup,t_Balance,t_Currency,t_Department,t_It
46、em,t_ItemClass, t_MeasureUnit,t_Organization,t_Personnel,t_ProfitAndLoss,t_QuantityBalance,t_RateAdjust,t_UnitGroup,t_Voucher,t_VoucherEntry,t_VoucherGroup,t_SystemProfile。 处理流程:A 删除表t_Balance中所有本期记录。B 删除表t_ProfitAndLoss中所有本期记录。C 删除表t_QuantityBalance中所有本期记录。D 期末处理管理表t_SubSYS删除当前期的记录,上期数据设为未结账Fcheckout=0。17 账薄171 总账取数原理