文档介绍:K3总账数据结构分析技术支持部整理提纲?基础资料?初始化?凭证处理?往来业务管理?结转损益?结账K3总账数据结构基础资料?计量单位?科目?零记录K3总账数据结构基础资料—计量单位?相关数据表涉及的表为t_measureunit(计量单位表),t_unitgroup(计量单位组表)。常用的字段为Fmeasureunitid(计量单位内码),unitgroupid(计量单位组内码),Fstandard(是否基本计量单位)。?基本计量单位在一个计量单位组内,只能有一个基本计量单位,即Funitgroupid字段值相同的记录,只能有一条记录的Fstandard字段值为1,如果一个组内有两个Fstandard=1的计量单位,则会造成一些报表数据翻倍。?计量单位丢失K3中有很多表引用“计量单组ID”和“计量单位ID”,比如科目,凭证,物料,物流单据,余额表、BOM等等。一旦t_UnitGroup或t_MeasureUn丢失记录(包括零记录),对引用表来说就产生了“孤立数据”。或者也可以说XX表与“计量单位表数据不匹配”。K3总账数据结构案例问题描述:在打开基础资料的科目时出现“当前数据不存在”。原因:经过检查发现出现这个问题的主要原因是由于t_UnitGroup表丢失了一条零记录。处理:使用如下sql补上就可以了——insertintot_UnitGroup(FUnitGroupID,FName,FDefaultUnitID)values(0,'*',0)K3总账数据结构零记录在K3中很多表都存在零记录,比如:t_currency、t_Measureunit、t_Item、t_ItemDetail等等。这些零都是系统预置的,有特定的用途,比如:=0代表不使用数量辅助核算;=0代表所有币别;=0代表所有核算项目。系统预置的零记录不能删除。K3总账数据结构孤立记录?孤立记录“孤立记录”是一个普遍的现象,数据库经常会出现这种问题,这种情况下可以使用NOTIN的子查询来判断是否存在“孤立数据”.比如:凭证的表头存在而凭证表体丢失——select*fromt_VoucherwhereFvoucherIDNOTIN(selectFvoucherIDfromt_VoucherEntry)ount中根本不存在——select*fromt_Vouchert_Balance中的FdetailID在t_ItemDetail中不存在——select*fromt_BalancewhereFdetailIDNOTIN(selectFdetailIDfromt_ItemDetail)K3总账数据结构币别、凭证字?币别t_currency,常用到的字段为FcurrencyID(币别内码),FFixRate(换算率),Fscale(小数位数)等等。FcurrencyID(币别内码):系统默认记帐本位的FcurrencyID值为1Fscale(小数位数):在中间层帐套管理中,有个地方设置本位币小数点位数,就是FcurrencyID值为1的记录对应的Fscale值,可以在此改动币别对应的小数位数。?凭证字涉及的表为t_vouchgroup(凭证字表),常用的字段为FgroupID(凭证字内码),一般被t_voucher(凭证表)引用。K3总账数据结构科目?ount(科目表),ountID(科目内码),FfullName(科目全名),FQuantity(是否数量金额辅助核算),FMeasureUnitID(计量单位内码),FDetailid(核算项目内码)等。1)ountID(科目内码)科目内码一旦被引用,为保证数据的完整性,此科目就不允许删除。K3总账数据结构案例问题描述:gl001帐套中,科目103没有任何业务发生,但是删除时却提示:“已有业务发生或已被使用,不能删除”。处理过程:1、用Profiler跟踪删除过程,发现系统调用了存储过程sp_ObjectInUsed;2、用“sp_helttextsp_ObjectInUsed”命令查看存储过程,发现sp_ObjectInUsed检测t_Balance、t_VoucherEntry、t_BUDGET、t_ProfitAndLoss是否引用了103科目,但经过检查发现这个表并未引用103科目ID;3、在sp_ObjectInUsed脚本的最后用游标调用t_ObjectRefs表中存储过程;4、依次检查t_ObjectRefs表中存储过程,最后在sp_ObjectInUsed存储过程中发现t_Icitem表引用了103科目。5、修改物料的存货科目,问题解决。