好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

金蝶K3总帐数据流程.ppt

31页
  • 卖家[上传人]:枫**
  • 文档编号:567540805
  • 上传时间:2024-07-21
  • 文档格式:PPT
  • 文档大小:219KB
  • / 31 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • K/3总帐数据流程分析——技术支持部技术支持部 提提 纲纲2nK/3K/3相关数据库应用简介相关数据库应用简介相关数据库应用简介相关数据库应用简介Ø1.1.基础资料基础资料基础资料基础资料Ø2.2.初始化及余额表初始化及余额表初始化及余额表初始化及余额表Ø3.3.凭证处理凭证处理凭证处理凭证处理Ø4.4.结帐结帐结帐结帐nQ&AQ&A 3K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n1.基础资料相关数据表n涉及的表为t_measureunit(计量单位表),t_unitgroup(计量单位组n表)常用的字段为Fmeasureunitid(计量单位内码),unitgroupid(计n量单位组内码),Fstandard(是否基本计量单位)n n    基本计量单位n 在一个计量单位组内,只能有一个基本计量单位,即Funitgroupid 字n段值相同的记录,只能有一条记录的Fstandard字段值为1,如果一个组内n有两个Fstandard=1的计量单位,则会造成一些报表数据翻倍n n    计量单位丢失nK3中有很多表引用“计量单组ID”和“计量单位ID”,比如科目,凭证,物n料,物流单据,余额表、BOM等等。

      一旦t_UnitGroup或t_MeasureUnit丢n失记录(包括零记录),对引用表来说就产生了“孤立数据”或者也可以说nXX表与“计量单位表数据不匹配” 4K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n n    币别n t_currency,常用到的字段为FcurrencyID(币别内码),FFixRaten(换算率),Fscale(小数位数)等等n FcurrencyID(币别内码):系统默认记帐本位的FcurrencyID值为1n Fscale(小数位数):在中间层帐套管理中,有个地方设置本位币小数点位数,就是FcurrencyID值为1的记录对应的Fscale值,可以在此改动币别对应的小数位数n n    凭证字n 涉及的表为t_vouchgroup(凭证字表),常用的字段为FgroupID(凭证字内码),一般被t_voucher(凭证表)引用 5K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n n    科目n涉及的表为t_account(科目表),主要字段为fAccountID(科目内码),FfullName(科目全名),FQuantity(是否数量金额辅助核算), FMeasureUnitID(计量单位内码),FDetailid(核算项目内码)等。

      n1)FAccountID(科目内码)n 科目内码一旦被引用,为保证数据的完整性,此科目就不允许删除 6K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n2)FFullname(科目全名)n 这个字段主要是在录入凭证,查看帐薄时用到如果在录入凭证,查看帐薄时,系统只显示科目的最明细一级的名称,那就是因为科目全名字段中的值不正确这个问题有个相关的补丁可以解决,补丁名叫Repare_FullName.sqln3)Fquantity(是否数量金额辅助核算)n 此字段主要是标识此科目是否需要数量金额辅助核算,一般此字段与FmeasureUnitID(计量单位内码)一起使用,当fquantity字段的值为1时,FmeasureUnitID字段中一定也要有相应的值,且FmeasureUnitID与t_measureunit表中的FmeasureUnitID字段值相对应n4)FDetailid(核算项目使用状况内码)n 这个字段的值与t_itemdetail(核算项目横表)中的Fdetailid字段值相关联,且这个值在t_itemdetail表中对应的以F开头的字段的值为“-1”。

      7K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析l核算项目核算项目n客户、部门、职员、物料等,这些都是核算项目的类别比如客户是一n个核算项目类别,部门也是一个核算项目类别,系统用t_ItemClass保存n核算项目类别n我们把核算项目类别看成一个对象,则不同的对象都有各自的属性比n如对于客户这个对象来说,它的属性是:代码、名称、银行账号、法人代n表、偿债等级等等对于部门这个对象来说,它的属性是:代码、名称、n部门主管、部门、等等系统用t_ItemPropDesc保存核算项目类n别的属性t_ItemClass与t_ItemPropDesc用FitemClassID字段关联,一n个核算项目类别可以拥有多种属性,因此是“一对多”的关系用户新增的n核算项目类别的属性也保存在t_ItemPropDesc中n举例 :新增一核算项目类别,并定义核算项目类别属性,注意其数据的存放 8K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n不同的核算项目类别都拥有自己的数据表,在t_itemclass表中,有一n个FsqlTableName字段,它表示每个核算项目对应的数据表比如:客户—t_Organization ;部门—t_Department ;职员—t_Emp;物料—nt_ICItem ... 。

      n 不同的核算项目类别有相同的属性,比如:ID、父级ID、代码、名称、n长代码、全称等,系统将这些相同的属性值保存在t_Item表中n因此,所有的核算项目都实际同时保存在两个数据表中比如:新增一n个职员,则同时保存在t_Emp中和t_Item中;新增一个部门,则同时保存n在t_Department中和t_Item中n 因为所有的核算项目都保存在t_Item中,系统用t_Item.FitemClassIDn字段区分核算项目类别 9K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n2.初始化及余额表n n    运初始化数据的存放n初始化时,涉及到的表主要是 t_balance(金额余额表),t_quantitybalance(数量余额表)和t_profitandloss(损益类科目实际发生额情况表)n如果在年初进行初始化时,余额表和数量余额表中都只有第一期的数据,且没有本年累计数据和损益数据,即在两张余额表中,累计数字段的值为零和在损益类实际发生额表中没有记录 10K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n如果在年中进行初始化时,假如在第6期进行初始化,则nt_profitandloss有记录,另外两张余额表中会存在第1期和第6期两期的数据,例如t_Balance——n — 1期的数据中:FYtdDebit、FYtdCredit、FendBalance取用户录入的本年累计借方、本年累计贷方、期初余额(是指6月初的余额)。

      FDebit、FCredit、FBeginBalance这三列是系统倒算出来的,过程是:nFDebit=FytdDebit;FCredit= FytdCredit;FBeginBalance= FEndBalance+FCredit – FDebitn — 6期的数据中:6期的FBeginBalance等于1期的FendBalance;6期的FcreDit和FDebit无数据;6期的FYtdCreDit和FytdDebit等于1期的FYtdCreDit和FytdDebit;6期的FendBalance等于6期的FbeginBalance 11K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n n    币别IDn 在上面所讲的三张表中,都有币别(Fcurrencyid)这个字段,假如科n目带有外币核算,且外币有余额或发生额,则在这三张表中都由币别ID来n识别,一个科目的余额之和是由这个科目的几个币种余额之和而得;在余n额表中币别字段(Fcurrencyid)的值为零,就表示是此科目的综合本位n币记录一个科目下所有币别余额之和等于此科目币别字段为零值的记录n的余额,所有币别发生额字段之和等于币别字段为零值的记录的发生额。

      n n    核算项目使用状况IDn 在上面所讲的三张表中,也都有核算项目(Fdetailid)这个字段,如n果某个科目下挂核算项目,且核算项目有余额或发生额,那么在这三张表n中都由Fdetailid字段的值来反映Fdetailid字段的值为0,则是此科目n所有核算项目之和的记录 12K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n n    借贷方存放规则nt_balance表中,借方余额保存为正数,贷方余额保存为负数 nt_Profitandloss表对不同的余额方向的处理方式也不同例如:科目“营业外收入”的余额方向是贷方,在初始余额录入中录入“实际损益发生额”为200,则在t_ProFitandloss中FytdAmount保存为 –200n科目“现金”的余额方向是借方,在初始余额录入中录入“期初余额”为100,则在t_Balance中1期的FEndBalance保存为 100 13K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n试算平衡n 平衡的标准是:当前期间的综合本位币科目借方余额合计等于贷方余额合计,借方累计发生合计等于贷方累计发生额合计,即汇总t_Balance表中FcurrencyID=0的启用期间数据。

      下面这段SQL语句是检查余额表中的余额是否平衡:n select b.fdc,sum(a.fbeginbalance) from t_balance a join t_account b on a.faccountid=b.faccountid n where a.fyear=xxxx and a.fperiod=yy and a.fdetailid=0 and a.fcurrencyid=0 and b.fdetail=1 group by b.fdcn结束初始化n 由于月末处理需要,结束初始化后,系统将自动更新表t_Subsys(新增或更新一条记录),同时更新t_SystemProfile 表中 Fcategory = GL, Fkey = InitClosed对应的 Fvalue=1,初始化完成 14n3.凭证处理n(1)、多项目核算n在讲凭证处理之前,先来讲一下多项目核算,即一个科目带一个核算项目或带多个核算项目时,数据是怎样形成的n多核算项目在科目中的应用n在基础资料维护中需要下设核算项目的科目中设置核算项目类别,科目下设了核算项目类别将会在表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和图2n在t_ItemDetailV 中有对应FdetailID = 1的两条记录,FitemClassID对应t_ItemClass表中FitemClassID的值,分别为1 和2 ,FitemID = -1(表示此类别参与核算) 15n多核算项目在凭证中的应用n在录入凭证时科目下设核算项目则提示输入核算项目,输入核算项目后,在表t_VoucherEntry 中FDetailID 有相应的代码,在表t_ItemDetailt和t_ItemDetailV 中有按FdetailID对应的记录,更新的规则是在t_ItemDetail中“F”开头 + “数字”的字段值和t_ItemDetailV中FitemID字段值是录入的核算项目对应表t_Item中FitemID的值。

      n例如:做一张收款凭证,借:银行存款,贷:应收帐款(下挂客户和部门核算),客户为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=30n在录入模式凭证时,与录入凭证时一样,表t_VoucherEntrytemplate中FDetailID 有相应的代码,在t_ItemDetailt和t_ItemDetailV表中都有相应的记录生成 16n核算项目横表和纵表:n核算项目横表为t_ItemDetailt,核算项目纵表为t_ItemDetailtV。

      核算项目纵表是由核算项目横表来生成的,可以用SP_CleanItemDetailV这个存储过程来生成系统一般是在查询一些帐表时用到核算项目纵表,比如查明细帐,如果查出来的核算项目窜户,则可以运行EXEC SP_CleanItemDetailV 来重新生成过核算项目纵表,这样查明细帐时数据就正常了而有时也会出现核算项目横表丢失记录,而在核算项目纵表中却保存完好,这时就可以写SQL语句从核算项目纵表中把丢失的记录插回核算项目横表中了 17K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n(2).凭证过帐n凭证表t_Voucher、t_Voucherentryn凭证过帐n在过帐前,系统会检查总帐是否已完成初始化、检查当前期间是否有未过帐凭证,若未完成初始化或没有未过帐凭证,则退出过帐过程否则进入下一步凭证过帐时,在选定的凭证范围内按照期间、凭证字、凭证号、分录号的顺n序逐条处理凭证分录:n①检查凭证是否在本会计年度、期间n② 根据帐套选项的“凭证过帐前必须审核”,检查凭证是否已经审核n③ 检查科目、核算项目的合法性n④ 检查凭证号是否连续n⑤ 将分录中的借或贷方发生额登记至t_Balance,分三步完成:nA、登记科目的原币、原币折合本位币发生额。

      nB、登记核算项目的原币、原币折合本位币发生额nC、若是非明细科目,则汇总其所有上级科目的发生数n以上三步操作中数据库中数据会发生变化的有表t_Balance中的FdebitFor,FcreditFor,FytdDebitFor,nFytdCreditFor,FEndBalanceFor,FDebit,FCredit,FytdDebit,FYtdCredit,FendBalance十个字段 18K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n⑥ 检查是否机制损益类凭证,如是结转机制凭证(FinternalInd=“TransferPL”损益、“RateAdjust” 调汇),则不更新余额表数据n⑦ 若科目属于损益类科目(t_Account中FGroupID值大于500),且凭证分录中的FinternalInd字段值为 “TransferPL”(自动结转),则将分录中的借或贷方发生额登记至表t_ProfitAndLoss中,分三步完成:nA、登记损益类科目的原币、原币折合本位币发生额nB、登记核算项目的原币、原币折合本位币发生额nC、若是非明细科目,则汇总其所有上级科目的发生数。

      n以上三步操作中数据库中数据会发生变化的有表t_ProfitAndLoss中的FamountFor, FytdAmountFor,Famount,FytdAmount四个字段n⑧ 若科目或核算项目设有数量辅助核算,则更新表t_QuantityBalance,发生变化的字段有FDebitQty ,nFCreditQty ,FYtdDebitQty ,FytdCreditQty,FEndQty五个字段n⑨ 表t_Voucher的对应字段Fposted=1,FpostID=过帐人,加上过帐标记 19K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n(3).反过帐n① 检查本期有没有已过帐的凭证,若没有,则退出反过帐过程n② 更新t_Balance本期发生、本年累计及期末余额字段,使其数值去除当前反过帐凭证的发生额:n 如反过帐凭证分录为借方:n 注以下:Vch.FamountFor、Vch.Famount、Vch.FQuantity为凭证分录金额及数量n FDebitFor:= FdebitFor — Vch.FAmountForn FYtdDebitFor= FytdDebitFor — Vch.FAmountForn FEndBalanceFor= FBeginBalanceFor + DebitFor — CreditForn FDebit= Fdebit — Vch.FAmountn FYtdDebit= FytdDebit — Vch.FAmountn FEndBalance= FBeginBalance + Debit — Credit 20K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n③ 损益类科目更新t_ProfitAndLoss 本期发生及本年累计字段:nFamountFor= FamountFor —Vch.FAmountFornFytdAmountFor= FytdAmountFor — Vch.FAmountFornFamount= Famount — Vch. FAmountnFytdAmount= FytdAmount — Vch.Famountn④更新t_QuantityBalance本期发生、本年累计及期末余额字段,使其恢复至期初状态:n如反过帐凭证分录为借方:nFdebitQty= FdebitQty — Vch.FquantitynFytdDebitQty= FytdDebitQty — Vch.FquantitynFendQty= FbeginQty+DebitQty — CreditQtyn⑤表t_Voucher的对应字段Fposted=0,FpostID= -1 修改为未过帐标记。

      21K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n4.4.期末结帐期末结帐nA> 检查是否完成初始化nB> 检查本期是否还有未过帐的凭证.nC> 如果需要-检查本期损益类科目余额是否结平,如果不平不能结帐nD> 检查T-SubSys表看是否其他要求与总帐同步(Fperiodsynch=1)的子系统是否已经结帐nE> 将t_Balance、t_ProfitAndLoss、t_QuantityBalance表中所有本期期末数据复制为下一期期初数据,本年累计数据累计到下一期,发生额为0nF> 删除表t_ItemDetail 、t_ItemDetailV中一些在t_Balance、t_ProfitAndLoss、t_QuantityBalance、t_VoucherEntry、t_Account 中都不存在的核算项目多余数据nG>更新表t_SystemProfile 当前期间加到下一期间n 如果Fperiod= PeriodPerYear则更新nFkey= CurrentYear ,Fvalue=Fvalue+1;Fkey= CurrentPeriod,Fvalue=1n 否则更新Fkey= CurrentPeriod,Fvalue=Fvalue+1nH>期末处理管理表t_SubSYS将本期数据设为已结帐Fcheckout=1,增加一条下一期Fcheckout=0的记录。

      22K/3主要模块数据库结构及问题分析主要模块数据库结构及问题分析n反结账nA> 删除表t_Balance中所有本期记录nB> 删除表t_ProfitAndLoss中所有本期记录nC> 删除表t_QuantityBalance中所有本期记录nD> 期末处理管理表t_SubSYS删除当前期的记录,上期数据设为未结帐Fcheckout=0 23n总帐取数原理n 涉及的表有下面这些:t_Group,t_User,t_SystemPro,t_Account,t_Voucher,t_VoucherEntry,t_Itemdetail,t_Item当过滤条件中不选“包含本期未过帐凭证”和“显示核算项目明细”时,系统就是直接取t_Balance表中的数据;当过滤条件中选上“包含本期未过帐凭证”时,系统还会从t_Voucher,t_VoucherEntry两表中取出借贷方未过帐的数据进行汇总,再与t_Balance表中的借贷方本期全合计数相加,而得出“包含本期未过帐凭证”的本期发生合计数,再计算出余额;当过滤条件中选上“显示核算项目明细”时,系统还会联接t_Itemdetail,t_Item两表,而得出科目所带核算项目的数据。

      24n明细帐取数原理n① 不包括核算项目时,涉及的表有:t_Group,t_user,t_systempro,t_currency,t_Voucher,nt_VoucherGroup,t_VoucherTplType,t_VoucherEntry,t_Settle,t_Balancen系统先从t_Balance表中取出期初数,然后再从t_Voucher,t_VoucherEntry表中取出每笔明细发生数据,最后再算出本期合计数、本年累计数和期末余额n② 包括核算项目时,涉及的表有:t_Group,t_user,t_systempro,t_currency,t_Voucher,nt_VoucherGroup,t_VoucherTplType,t_VoucherEntry,t_Settle,t_Balance,t_Item,t_ItemDetailVn系统先从t_account,t_Balance,t_Voucher,t_VoucherEntry,t_Item,t_ItemDetailV这几个表中取出过滤条件中所选科目的核算项,再从t_Balance表中取出核算项目对应的期初余额,再从t_Voucher,t_VoucherEntry表中取出核算项目每笔明细发生数据,最后再算出本期合计数、本年累计数和期末余额。

      25n科目余额表取数原理n① 不包括核算项目时,涉及的表有:t_Group,t_user,t_systempro,t_Balance,t_Voucher,t_VoucherEntry当过滤条件不选择包含未过帐赁证时,系统主要是从t_Balance表中取数,不取核算项目记录(即FdetailID值为0),把t_Balance表中正数做为借方余额,负数做为贷方余额,并生成一张临时表,这种取数使得最底下的借贷方合计数有可能与手工相加借贷方余额不等;当过滤条件选择包含未过帐赁证时,系统也是先从t_Balance表中取出数据生成一张临时表,再从t_Voucher,t_VoucherEntry表中取出本期未过帐的数据,并依据这些数据更新临时表中的数据,使临时表中的数据相当于过帐后的余额数据,再从临时表中把数据取到科目余额表界面上n② 包括核算项目时,涉及的表有:t_Group,t_user,t_systempro,t_Balance,t_Voucher,t_VoucherEntry,t_ItemDetail,t_Itemclass与前面一样,系统先从t_Balance表中取出数据生成一张临时表,再从t_Voucher,t_VoucherEntry表中取出本期未过帐的数据,这时需要把核算项目的值也取出来,并依据这些数据更新临时表中的数据,使临时表中的数据相当于过帐后的余额数据,再从再从临时表中把数据取到科目余额表界面上。

      26n案例一:在总帐系统初始数据录入的时候,币别选择“美元”,录入原币以后打回车会出现错误提示,并且数据不能保存n 分析:在录入初始数据时,系统会把最明细科目的数据逐级进行汇总,如果明细科目设置了外币核算,而其上级科目却没有设置核算处币,则录入数据进行保存时,系统肯定会出错了解决方法就是所上级科目都要设置核算其所有下级明细科目所核算的币别,即所有外币即可 27n案例二:有一账套在录入凭证时只能显示最明细的会计科目,并不能显示全称;在查明细帐时也只是显示科目最明细的名称,而不能显示这个科目的全称n 分析:在录凭证和查询明细帐时,都要用到科目(t_Account)这个表上的科目全名字段(FfullName),则查看t_Account表FfullName字段的值,发现此字段的值全部都是科目最明细的名称,全名丢失,问题就在这里后来发现是丢失了科目全名触发器所导致的,解决方法是把科目全名的触发器给补上即可(有相关的补丁SQL语句) 28n案例三:有一帐套“原材料”科目下设二级明细科目核算,二级明细科目设置数量金额核算,在查“原材料”二级明细科目的数量金额明细帐时,出现“定义的应用程序或对象错误”,高级选项提示为“多步操作产生的错误,请检查每一步的状态值”。

      n 分析:查数量金额明细帐时,涉及到的基础资料肯定少不了计量单位表(t_MeasureUnit),在查“原材料”二级明细科目的明细帐时,没有出现错误,证明此科目的科目表基础资料无误;那么就要查此科目对应的计量单位表了,检查计量单位表(t_MeasureUnit)时,发现计量单位表(t_MeasureUnit)的名称字段(Fname)的值有英文状态下的单引号,把它改成中文状态下的双引号后,查数量金额明细帐正常 29n案例账套练习:n一、查询第五期凭证时提示null无效,其它期间正常n二、进入凭证汇总时报错 提提 纲纲30nK/3K/3相关数据库应用简介相关数据库应用简介相关数据库应用简介相关数据库应用简介Ø1.1.基础资料基础资料基础资料基础资料Ø2.2.初始化及余额表初始化及余额表初始化及余额表初始化及余额表Ø3.3.凭证处理凭证处理凭证处理凭证处理Ø4.4.结帐结帐结帐结帐nQ&AQ&A 31谢谢 谢!谢! 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.