k3系统原理与数据结构分析Word格式文档下载.docx
《k3系统原理与数据结构分析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《k3系统原理与数据结构分析Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
财务管理学院?
53套讲座+17945份资料
销售经理学院?
56套讲座+14350份资料
销售人员培训学院?
72套讲座+4879份资料
第一篇k3系统原理及数据结构分析
1、总账系统
1.1根底资料
1.1.1科目
涉及的表为t_account〔科目表〕,常用到的字段为fitemid(科目内码),ffullname(科目全名),fquantity(是否数量金额辅助核算),FmeasureUnitID〔计量单位内码〕,fdetailid(核算工程内码)等等。
fitemid〔科目内码〕:
一个新增加的科目,在初始数据中录入数据,后来把此科目的数据删除了,或录入了一张此科目的凭证,又把此凭证删除了,然后想把此新增科目删除;
或者是结转新账套之后,想把一些没有余额的科目删除。
这时系统提示科目已有业务发生,不能删除。
其实这涉及到很多数据库表引用了t_account〔科目表〕的Fitemid字段,这些表总账系统中有t_balance〔余额表〕,t_quantitybalance〔数量余额表〕,t_voucherentry〔凭证体表〕,t_profitandloss〔损益科目实际发生额表〕;
固定资产系统中有t_faexpense〔费用分配表〕,t_fabalexpense〔用于折旧计算的费用分配表〕,t_facard〔固定资产卡片表〕,t_fabalcard〔卡片变动表〕;
工业物流中有t_icitem〔物料明细资料表〕;
商业物流中有com_item〔商品明细资料表〕。
只要在这些表中存在记录,那么相对应的科目就不能在界面中删除。
Ffullname(科目全名):
这个字段主要是在录入凭证,查看账薄时用到。
如果在录入凭证,查看账薄时,系统只显示科目的最明细一级的名称,那就是因为科目全名字段中的值不正确。
这个问题有个相关的补丁可以解决,补丁名叫。
fquantity(是否数量金额辅助核算):
此字段主要是标识此科目是否需要数量金额辅助核算,一般此字段与FmeasureUnitID〔计量单位内码〕一起使用,当fquantity字段的值为1时,FmeasureUnitID字段中一定也要有相应的值,且此值与t_measureunit表中的FmeasureUnitID字段值相对应。
Fdetailid〔核算工程内码〕:
这个字段的值与t_itemdetail(核算工程横表)中的Fdetailid字段值相关联,且这个值在t_itemdetail表中对应的以F开头的字段的值为“-1”。
例如:
113〔应收账款〕科目,带部门及客户两个核算工程,假设在t_account表中对应的Fdetailid字段的值为1,那么在t_itemdetail表中,一定要有Fdetailid值为1的记录,且F1,F2两个字段的值都为“-1”。
详细讲解见凭证处理这节
科目表〔t_account〕如图1所示:
〔图1〕
核算工程横表〔t_itemdetail〕如图2所示:
〔图2〕
1.1.2币别
涉及的表为t_currency〔币别表〕,常用到的字段为FcurrencyID〔币别内码〕,FfixRate〔换算率〕,Fscale〔小数位数〕等等。
FcurrencyID〔币别内码〕:
系统默认账套记账本位的FcurrencyID值为1。
Fscale〔小数位数〕:
在中间层账套管理中,有个地方设置本位币小数点位数,就是FcurrencyID值为1的记录对应的Fscale值,可以在此改动币别对应的小数位数。
注意币别表中有一条默认的零记录,此记录不能丧失,如果丧失,会导致数据错误或在操作时出现莫名其妙的错误〔一般是在做凭证时不能保存,查询凭证,账表时数据不正确〕。
1.1.3凭证字
涉及的表为t_vouchgroup〔凭证字表〕,常用的字段为FgroupID〔凭证字内码〕,一般被t_voucher〔凭证表〕引用。
1.1.4计量单位
涉及的表为t_measureunit〔计量单位表〕,t_unitgroup〔计量单位组表〕,常用的字段为Fmeasureunitid〔计量单位内码〕,Funitgroupid(计量单位组内码),Fstandard〔是否根本计量单位〕。
计量单位表中有一条默认的零记录,此记录不能丧失,如果丧失,会导致数据错误在操作时出现莫名其妙的错误〔一般是在做凭证时不能保存,查询凭证,账表时数据不正确〕。
在一个计量单位组内,只能有一个根本计量单位,即Funitgroupid字段值相同的记录,只能有一条记录的Fstandard字段值为1。
1.1.5核算工程
涉及的表为t_item〔核算工程表〕,t_itemclass〔核算工程类别表〕,常用的字段为Fitemid〔核算工程内码〕,Fitemclassid〔核算工程类别内码〕。
在t_item表中,按Fitemclassid字段的值,把核算工程分为很多类:
1为客户,2为部门,3为职员,4为物料,5为仓库,6为备注,7为计量单位,8为供给商,9为现金流量工程。
。
,如果是自定义的核算工程,一般Fitemclassid字段的值都比拟大,在对应的t_itemclass表中,有一个FsqlTableName字段,它表示每个核算工程对应的详细情况表名称。
核算工程类别表〔t_itemclass〕如图3所示:
〔图3〕
1.1.6部门
涉及的表为t_item〔核算工程表〕,t_department〔部门详细情况表〕,t_item表中fitemclassid字段值为“2”的所有记录,都是部门记录,在t_department表中记录的是最明细一级的部门信息,这两张表之间依靠fitemid字段相关联。
1.1.7职员
涉及的表为t_item〔核算工程表〕,t_Emp〔职员详细情况表〕,t_item表中fitemclassid字段值为“3”的所有记录,都是职员记录,在t_emp表中记录的是最明细一级的职员信息,这两张表之间依靠fitemid字段相关联。
1.1.8现金流量工程
涉及的表为t_item〔核算工程表〕,fitemclassid字段值为“9”的所有记录,都是现金流量工程,在凭证录入时,录入现金流量工程时,就是取此表的数据。
1.2初始化
1.2.1初始化
初始化时,涉及到的表主要是t_balance〔金额余额表〕,t_quantitybalance〔数量余额表〕和t_profitandloss〔损益类科目实际发生额情况表〕。
当在年初进行初始化时,余额表和数量余额表中都只有第一期的数据,且没有本年累计数据和损益数据,即在两张余额表中,累计数字段的值为零和在损益类实际发生额表中没有记录。
当在年中进行初始化时,假设在第6期进行初始化,那么在两张余额表中会存在第1期和第6期两期的数据,累计数字段有数据,损益类实际发生额表中有记录。
在上面所讲的三张表中,都有币别〔Fcurrencyid〕这个字段,假设科目带有外币核算,且外币有余额或发生额,那么在这三张表中都由币别ID来识别,一个科目的余额之和是由这个科目的几个币种余额之和而得;
在余额表中币别字段〔Fcurrencyid〕的值为零,就表示是此科目的综合本位币记录。
一个科目下所有币别余额之和等于此科目币别字段为零值的记录的余额,所有币别发生额字段之和等于币别字段为零值的记录的发生额。
在上面所讲的三张表中,也都有核算工程〔Fdetailid〕这个字段,如果某个科目下挂核算工程,且核算工程有余额或发生额,那么在这三张表中都由Fdetailid字段的值来反映。
Fdetailid字段的值为0,那么是此科目所有核算工程之和的记录。
〔如图4〕
第一条记录Fdetailid,Fcurrencyid字段的值都为0,表示这条记录是此科目所有币别所有核算工程之和的记录,第二条记录Fdetailid字段值为0,Fcurrencyid字段值为1,表示是所有币别为本位币的所有核算工程的之和的记录,依次类推。
〔图4〕
1.2.2试算平衡
平衡的标准是:
当前期间的综合本位币科目借方余额合计等于贷方余额合计,借方累计发生合计等于贷方累计发生额合计,即汇总t_Balance表中FcurrencyID=0的启用期间数据。
下面这段SQL语句是检查余额表中的余额是否平衡:
selectb.fdc,sum(a.fbeginbalance)fromt_balanceajoint_accountbona.faccountid=b.faccountid
wherea.fdetailid=0anda.fcurrencyid=0andb.fdetail=1
1.2.3结束初始化
由于月末处理需要,结束初始化后,系统将自动更新表t_Subsys〔新增或更新一条记录〕,同时更新
t_SystemProfile表中Fcategory=GL,Fkey=InitClosed对应的Fvalue=1,初始化完成。
1.3凭证处理
1.3.1多工程核算
在讲凭证处理之前,先来讲一下多工程核算,即一个科目带一个核算工程或带多个核算工程时,数据是怎样形成的。
1多核算工程在科目中的应用
在根底资料维护中需要下设核算工程的科目中设置核算工程类别,科目下设了核算工程类别将会在表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〞开头+“数字〞的字段是根据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〔表示此类别参与核算〕。
2多核算工程在凭证中的应用
在录入凭证时科目下设核算工程那么提示输入核算工程,输入核算工程后,在表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表中FdetailID的值假设为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中FDetailID有相应的代码,在t_ItemDetailt和t_ItemDetailV表中都有相应的记录生成。
3核算工程横表和纵表:
核算工程横表为t_ItemDetailt,核算工程纵表为t_ItemDetailtV。
核算工程纵表是由核算工程横表来生成的,可以用SP_CleanItemDetailV这个存储过程来生成。
系统一般是在查询一些账表时用到核算工程纵表,比方查明细账,如果查出来的核算工程窜户,那么可以运行EXECSP_CleanItemDetailV来重新生成过核算工程纵表,这样查明细账时数据就正常了。
而有时也会出现核算工程横表丧失记录,而在核算工程纵表中却保存完好,这时就可以写SQL语句从核算工程纵表中把丧失的记录插回核算工程横表中了。
多工程核算如图5所示:
〔图5〕
1.3.2凭证过账
在过账前,系统会检查总账是否已完成初始化、检查当前期间是否有未过账凭证,假设未完成初始化或没有未过账凭证,那么退出过账过程否那么进入下一步。
凭证过账时,在选定的凭证范围内按照期间、凭证字、凭证号、分录号的顺序逐条处理凭证分录:
①检查凭证是否在本会计年度、期间。
②根据账套选项的“凭证过账前必须审核〞,检查凭证是否已经审核。
③检查科目、核算工程的合法性。
④检查凭证号是否连续。
⑤将分录中的借或贷方发生额登记至t_Balance,分三步完成:
A、登记科目的原币、原币折合本位币发生额。
B、登记核算工程的原币、原币折合本位币发生额。
C、假设是非明细科目,那么汇总其所有上级科目的发生数。
以上三步操作中数据库中数据会发生变化的有表t_Balance中的FdebitFor,FcreditFor,FytdDebitFor,
FytdCreditFor,FEndBalanceFor,FDebit,FCredit,FytdDebit,FYtdCredit,FendBalance十个字段。
⑥检查是否机制损益类凭证,如是结转机制凭证(FinternalInd=“TransferPL〞、“RateAdjust〞),那么不更新余额表数据。
⑦假设科目属于损益类科目〔t_Account中FGroupID值大于500〕,且凭证分录中的FinternalInd字段值为
“TransferPL〞(自动结转),那么将分录中的借或贷方发生额登记至表t_ProfitAndLoss中,分三步完成:
A、登记损益类科目的原币、原币折合本位币发生额。
以上三步操作中数据库中数据会发生变化的有表t_ProfitAndLoss中的FamountFor,FytdAmountFor,Famount,FytdAmount四个字段。
⑧假设科目或核算工程设有数量辅助核算,那么更新表t_QuantityBalance,发生变化的字段有FDebitQty,
FCreditQty,FYtdDebitQty,FytdCreditQty,FEndQty五个字段。
⑨表t_Voucher的对应字段Fposted=1,FpostID=过账人,加上过账标记。
1.3.3凭证反过账
①检查本期有没有已过账的凭证,假设没有,那么退出反过账过程。
②更新t_Balance本期发生、本年累计及期末余额字段,使其数值去除当前反过账凭证的发生额:
如反过账凭证分录为借方:
FDebitFor:
=FdebitFor—
FYtdDebitFor=FytdDebitFor—
FEndBalanceFor=FBeginBalanceFor+DebitFor—CreditFor
FDebit=Fdebit—Vch.FAmount
FYtdDebit=FytdDebit—Vch.FAmount
FEndBalance=FBeginBalance+Debit—Credit
③损益类科目更新t_ProfitAndLoss本期发生及本年累计字段:
FamountFor=FamountFor—
FytdAmountFor=FytdAmountFor—Vch.FAmountFor
Famount=Famount—Vch.FAmount
FytdAmount=FytdAmount—
4更新t_QuantityBalance本期发生、本年累计及期末余额字段,使其恢复至期初状态:
FdebitQty=FdebitQty—
FytdDebitQty=FytdDebitQty—
FendQty=FbeginQty+DebitQty—CreditQty
5表t_Voucher的对应字段Fposted=0,FpostID=-1修改为未过账标记。
1.4现金流量
1.4.1凭证录入与保存时有关现金流量的处理
总账系统中的现金流量表最关键的表就是t_CashFlowBal和t_VoucherEntry这两张表,在做凭证时,如果某条分录指定了现金流量工程,那么在t_CashFlowBal表中插入一条记录,在t_VoucherEntry表中,现金类科目的分录记录的FcashFlowItem字段的值为1。
t_CashFlowBal表结构如下:
FvoucherID:
凭证内码〔与t_VoucherEntry表中的FvoucherID相对应〕
FentryID:
凭证分录号〔与t_VoucherEntry表中的FentryID相对应〕
FcashAccountID:
现金流量科目内码〔即凭证中对方科目的内码〕
FitemID:
现金流量工程内码〔与t_Item表中的FitemID相对应〕
FsubItemID:
现金流量附表工程内码〔与t_Item表中的FitemID相对应〕
FcurrencyID:
币别内码〔与t_VoucherEntry表中的FcurrencyID相对应〕
FamountFor:
原币金额〔与t_VoucherEntry表中的FamountFor相对应〕
Famount:
本位币金额〔与t_VoucherEntry表中的Famount相对应〕
当做凭证时,没有指定现金流量工程,而是通过T型账户来指定现金流量工程时,系统会把所有现金类科目的凭证分录〔整张凭证的分录〕都提取到t_CashFlowBal表中;
在没有指定流量工程和附表工程之前,t_CashFlowBal表中的FitemID与FsubItemID字段的值分另为-1和0;
当指定了流量表工程和附表工程时,那么更新t_CashFlowBal表中相应记录的FitemID和FsubItemID字段的值。
1.4.2现金流量表的平衡关系
在T型账中,有一些对应关系:
现金类科目的借贷发生额一定要相等,非现金类科目的借贷发生额不一定相等;
借方现金类科目与非现金类科目发生额合计等于过滤期间的总账的现金类科目的借方发生额,相应的贷方现金类科目与非现金类科目发生额合计等于过滤期间的总账的现金类科目的贷方发生额。
这是提取数据最关键的一步,如果在这个地方数据就与总账不对,那么以下的对应关系就没有依据了。
满足上面的对应关系后,就是现金流量表本身的平衡关系了,第一、现金流量的净增加额与补充资料工程中的现金及现金等价物的净增加额相等;
第二、补充资料工程中的净利润与利表中的净利润数相等;
第三、补充资料工程中的净利润加上附表二的总数等于主表中经营活动产生的现金流量净发生额。
1.5往来处理
1.5.1往来业务核销
涉及到的表:
t_Voucher,t_VoucherEntry,t_TransCheckInfo,t_Account,t_Item,t_MeasureUnit,t_VoucherGroup,t_Currency,T_AcctGroup,t_ItemDetailV,t_TransInitBalance。
①进行往来业务核的前提条件是系统参数中设定“启用往来业务核销〞,往来科目一定要设置“往来业务核算〞,所有的凭证全部都要过账。
②以“应收账款〞科目为例,系统先从t_TransInitBalance,t_VoucherEntry两个表中取出“应收账款〞初始化期间没有核销或没有核销完的数据和凭证表中“应收账款〞科目借方发生的没有核销或没有核销完的记录〔与t_TransCheckInfo表相比拟而得出没有核销或没有核销完的数据〕,再从t_VoucherEntry表中取出“应收账款〞科目贷方发生的没有核销或没有核销完的记录〔也是与t_TransCheckInfo表相比拟而得出没有核销或没有核销完的数据〕,分别列在上下两个窗口中。
窗口上半局部是需要进行核销的记录,下半局部是收款或是付款业务,如果是资产类科目,那么借方行发生额在上面,贷方发生额在下面;
如果是负债类科目,那么是贷方发生额在上面,借方发生额在下面。
在此客户可进行自动或手工核销。
③核销完后,系统会在t_TransCheckInfo表中记录核销的记录。
1.5.2往来对账单
往来对账单是用来过滤查询某个往来科目的某个核算工程的借贷余数据情况:
1当过滤条件选择“全部〞时,涉及的表有下面这些:
t_Balance,t_Voucher,t_VoucherEntry,t_ItemDetailV,t_Account,系统先从t_Balance表中取出期初余额,再从t_Voucher,t_VoucherEntry两表中取出本期借贷方发生数据,最后计算得出余额。
2当过滤条件选择“未核销〞时,涉及的表有下面这些:
t_Balance,t_TransCheckInfo,
t_Voucher,t_VoucherEntry,t_ItemDetailV,t_Account,系统先从t_Balance,t_TransCheckInfo两表中取出期初余额,再从t_Voucher,t_VoucherEntry两表中取出本期借贷方发生数据,最后计算得出余额。
1.5.3账龄分析
账龄分析主要是用来对设置为往来核算科目的往来款项余额的时间分布进行分析,系统自动把设置往来的会计科目的科目余额属性方向〔如应收账款为借方〕的最后一笔业务发生时间为账龄起算点,所有业务自动从凭证中提取,自动出龄分析表。
在账龄分析表中,系统只提供单核算的账龄分析表,不提供组合情况的账龄分析表。
目前系统的过滤项中的核算工程的选项实际上是无效的,把往来核算的科目下所设置的所有的核算工程都列示出来。
涉及的表有下面这些:
t_TransInitBalance,t_Balance,t_LastContactDate,t_VoucherEntry,t_Voucher,t_TransCheckInfo,t_itemdetail。
系统分别从t_TransInitBalance,t_Balance,t_LastContactDate,t_VoucherEntry这些表中