K3总帐技术支持手册附图Word格式文档下载.docx
《K3总帐技术支持手册附图Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《K3总帐技术支持手册附图Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
1.4.2现金流量表的平衡关系12
1.5往来处理12
1.5.1往来业务核销12
1.5.2往来对账单12
1.5.3账龄分析13
1.6期末处理13
1.6.1期末调汇原理13
1.6.2结转损益14
1.6.3自动转账15
1.6.4期末结账与反结账15
1.7账薄16
1.7.1总账取数原理16
1.7.2明细账取数原理16
1.7.3科目余额表取数原理17
1.7.4核算项目分类总账取数原理17
1.7.5核算项目明细账取数原理17
1.7.6核算项目余额取数原理18
1.8报表与总账对账18
1.8.1资产负债表18
1.8.2损益表19
第二篇典型案例分析20
第一篇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(科目全名):
这个字段主要是在录入凭证,查看账薄时用到。
如果在录入凭证,查看账薄时,系统只显示科目的最明细一级的名称,那就是因为科目全名字段中的值不正确。
这个问题有个相关的补丁可以解决,补丁名叫Repare_FullName.sql。
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=1groupbyb.fdc
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本期发生、本年累计及期末余额字段,使其数值去除当前反过账凭证的发生额:
如反过账凭证分录为借方:
注以下:
Vch.FamountFor、Vch.Famount、Vch.FQuantity为凭证分录金额及数量
FDebitFor:
=FdebitFor—Vch.FAmountFor
FYtdDebitFor=FytdDebitFor—Vch.FAmountFor
FEndBalanceFor=FBeginBalanceFor+DebitFor—CreditFor
FDebit=Fdebit—Vch.FAmount
FYtdDebit=FytdDebit—Vch.FAmount
FEndBalance=FBeginBalance+Debit—Credit
③损益类科目更新t_ProfitAndLoss本期发生及本年累计字段:
FamountFor=FamountFor—Vch.FAmountFor
FytdAmountFor=FytdAmountFor—Vch.FAmountFor
Famount=Famount—Vch.FAmount
FytdAmount=FytdAmount—Vch.Famount
4更新t_QuantityBalance本期发生、本年累计及期末余额字段,使其恢复至期初状态:
FdebitQty=FdebitQty—Vch.Fquantity
FytdDebitQty=FytdDebitQty—Vch.Fquantity
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_Tr