固定资产数据分析
技术支持部整理
2005年2月
提纲
卡片处理及数据结构分析
计提折旧分析
期末处理
报表分析
卡片处理及数据结构分析
卡片新增
卡片静态信息,不做变动,不再改变
卡片新增
新增卡片变动情况(t_faalter)
新增卡片基本信息(t_facard)
新增自定义项目(t_facarditem)
新增设备信息(t_fadevice)
新增原值原币信息(t_faorgfor)
新增部门分配(t_fadept)
新增余额(t_fabalance)
新增T_fabalcard
新增T_fabaldept
新增费用分配(t_faexpense)
新增T_fabalexpense
动态信息,每期都不同,因此每期都有一条记录
数 据 表
基础资料表 :
T_FAAlterMode ,T_FAGroup ,T_FAStatus ,T_FALocation T_FAEconomyUse ,T_FACardItemDefine ,T_FAGroupItem ,T_FADeprMethodT_FAUserDeprRate
卡片变动相关表:
T_FAAlter,T_FACard ,T_FADevice ,T_FAOrgFor ,T_FADept ,T_FAExpenses ,T_FACardItem
余额与计提折旧相关表 :
T_FABalance ,T_FAbalCard ,T_FABalDevice ,T_FABalOrgFor ,T_FABalDept ,T_FABalExpenses ,T_FABalCardItem ,
其他表 :
T_FAClear ,T_FAVoucher
卡片新增
基础资料表
t_faaltermode(变动方式类别表),t_fastatus(使用状态类别表),
t_FADeprMethod(折旧方法定义表),
t_fagroup(卡片类别表),t_falocation(存放地点表)
t_fagroup(卡片类别表),t_falocation(存放地点表
变动基本表T_FAAlter
卡片基本信息表T_FACard
原值原币表T_FAOrgFor
固定资产部门分摊表T_FADept
折旧费用分摊表T_FAExpenses
自定义卡片项目表T_FACardItem
附属设备表T_FADevice
变动相关表
保留静态信息,只在变动期间保留一次
余额表 t_FABalance
卡片每期状况表 t_FABalCard
附属设备每期状况表 t_FABalDevice
原值原币每期状况表 t_FABalOrgFor
部门每期分配情况表 t_FABalDept
折旧费用每期分配情况表 t_FABalExpense
卡片自定义项目每期状况表 t_FABalCardItem
余额表和余额相关表
动态信息,每期保留一条,直到卡片清理
T_FAAlter
T_FABalance
T_FACard
t_facarditem
t_fadevice
t_faorgfor
t_fadept
t_faexpense
faalterid
T_fabalcard
T_fabaldept
T_fabalexpense
F b a I d
fassetid
余额表和余额相关表
新增卡片变动情况(t_faalter)
新增卡片基本信息(t_facard)
新增自定义项目(t_facarditem)
新增设备信息(t_fadevice)
新增原值原币信息(t_faorgfor)
新增部门分配(t_fadept)
修改余额(t_fabalance)
新增T_fabalcard
新增T_fabaldept
新增费用分配(t_faexpense)
新增T_fabalexpense
卡片变动(清理)
T_faclear
部门,费用科目,折旧方法的变动与新增卡片的保存方式一样
变动与新增基本相似
唯一差异,写入t_fabalance信息不同
变动
T_fabalance
T_fabalcard
清理,可以看作是原值和累计折旧减少的变动
清理
差异,写入t_fabalance,t_fabalcard,t_faclear信息不同
关系
累计折旧+净值-累积折旧调整=0
而净值=本期折旧
案例:清理不正确,导致下期对账时,期初折旧与总账不符
此问题是由于在上期做清理之前没有先记提折旧,所以卡片做清理时,清理的折旧数据错误导致。
判断原则:当月清理的卡片,必须保证期初折旧+本期折旧+调增-调减=0,否则下期对账一定不平 (调减也就是清理的折旧)
执行下面SQL找出不正确的清理卡片(aa不为0,则此卡片清理不正确)
select fasetid,(sum (FAccumDeprP)+sum(fdepr)+sum(faccumdeprinc)-sum(faccumdeprdec)) as aa from t_fabalance
where fperiod=’期间’ and fyear=’年度’ and fassetid in ( select fassetid from t_faclear where fperiod=’期间’ and fyear=’年度’) group by fassetid
处理方法:如果更改数据库,虽能解决此问题,但是已生成的相对应的总账凭证却是错的。
所以彻底的解决办法是:
反结到第上期,将错误的清理卡片删除掉,然后重新记提折旧之后再清理.
这样结到下期之后将不会再发生这种情况.
或则,直接在总账当期做凭证调整
可以运行以下SQL进行数据调整:
请运行以下SQL
update a set = from t_FAbalexpense a, t_FABalDept x where =
and in (select fbalid from (select ,, from t_FABalDept a left join t_FAbalexpense b on = and =) c where fdeptid is null)
update a set = from t_FAexpense a,t_FADept x where =
and in (select falterid from (select ,, from t_FADept a left join t_FAexpense b on = and =) c where fdeptid is null)
因为t_faexpense及t_fabalexpense表中的部门虽然丢失了,但是与之相对应的t_fadept表及t_fabaldept表中的部门数据却没有丢失,所以可以将之替换到与之相对应的表内。
案例
计提折旧分析
计提折旧分析
计提折旧
分摊本期折旧到部门与折旧费分配表
调用折旧子函数算出折旧额率
调用折旧子函数算出折旧额
生成计提折旧凭证
取得本期要折旧卡片的信息记录集合
清除本期部门与折旧费用分配表(0)
第一阶段
第二阶段
第三阶段
计提折旧的特点
1.计提折旧是采用公式计算折旧额和折旧率,0,1,2,3,4,5,6折旧方法为系统予设,0为没有公式,不提折旧,1,2,3,4,5折旧时全用卡片入账时的信息来折旧,6变动时采用的方法,以变动后的值来折旧.同时系统允许自定义折旧公式(自定义折旧公式和自定义折旧率法), 自定义折旧率法折旧时用入账时的值为基础来体折旧,自定义方法用自定义的计算项目值提折旧
计提折旧的特点
取得本期要折旧卡片的信息记录集合
,,,,,,,,,,,,,,,,,,,,,,, , from J
left outer join I on =
left outer join Q on = and = and = and =
left outer join Z on =
折旧信息
(Select ,,,,,,,,FAccumDeprInc,FAccumDeprDec,,,, ForgvalA , FResiduevalA, FDecPreReadA, FlifePeriodsA, FalterYear, FalterPeriod , FAlterCleared From T_FaBalance a,T_FaBalCard b,T_Faalter c,T_FaCard d Where =(Select max(FAlterNum) from t_FAAlter Where fassetid=) and =2001 and =1 And <>0 And = And = and = and = And = And =1)J
(Select , FInitDate,, FOrgValS, FAccumDeprS, FDecPreReadS, FResidueValS, FLifePeriodsS, FPeriodsUsedS from t_facard a,t_faalter b where = and =1 ) I
(Select Fassetid,fyear,fperiod,FCleared, Faccumdeprp+faccumdeprinc-faccumdeprdec+Fdepr FaccumDeprA,Fdeprperiods FperiodsUsedA from t_FAbalance ) Q
(Select ,,,, ,,,, ,,, FLocationName, ,,,, FGroupName From T_FaBalance a,T_FaBalCard b,T_FaDeprMethod c,T_FaStatus d,T_FaGroup E,T_Falocation l Where =2001 And =0 And = and = And = And = And = ) Z
折旧信息
理解此SQL语句,关键在 J,I,Q,Z三个查询表
J表:取期初信息和上一次变动信息,主要用于折旧公式变动6和自定义公式计提折旧
I表:取初始卡片信息,主要是由于折旧方法为1,2,3, 4,5的卡片计提折旧
Q表:最近一次变动后卡片期末的累计折旧,已使用期间等信息,与j结合,用于折旧方法6
Z表:取上一期卡片信息和计算折旧方法,如果刚好是第一期,则=0,
折旧信息
调用函数计算折旧额
取出,,对应Z表,实际Flifeperiods(预计使用期间) Fresidueval(预计净残值)来源t_fabalcard,而FdeprPeriods(已使用期间)来源 t_fanalance
ForgvalP(期初原值)对应J表,实际来源当期t_fanalanc的Forgval(期初原值),来判断卡片是否要计提折旧:
条件一:
FdeprPeriods>Flifeperiods (已提折旧期间>=预计使用期间)
If rs(FDeprRemain) > 0 Then ------------------剩余折旧额>0
If rs(FDeprShouldLP) *2< rs(FDeprRemain), DeprValue = rs(FDeprShouldLP))
每期应提折旧额<剩余折旧额,直接取应提折旧额作为这一期卡片的折旧额
Else
DeprValue = rs(FDeprRemain) 取剩余折旧额作为这一期卡片的折旧额
条件二:
Forgval-fresidueval<=0 (原值<=预计净残值) 则不再提折旧
不符和这两个条件,则必须根据折旧方法计提折旧额
根据折旧方法计算折旧(折旧方法取上期从Z表获得,最终来源T_FaBalCard表)
折旧判断
折旧方法为0:
卡片设置不计提折旧,当期折旧额直接赋0
折旧方法为1:平均年限法1
折旧计算公式:折旧额=(入账原值-入账预计净残值)/入账预计使用期间
取数来源I表中的.ForgValS,FresidueValS,FlifePeriodsS,实际来源t_facard表中新增卡片的.ForgVal,FresidueVal,FlifePeriods
所以只要t_facard的数据正确,则折旧每期都相同
折旧方法为2:平均年限法2
折旧计算公式:折旧额=(入账原值-入账累计折旧-入账预计净残值-入账减值准备)/入账剩余使用期间
取数来源I表中的FOrgValS, FAccumDeprS, FDecPreReadS, FResidueValS, FlifePeriodsS,FPeriodsUsedS实际来源t_facard表中新增卡片的 FOrgVal, FAccumDepr, FDecPreRead, FAMiuValueRead, FlifePeriods,FperiodsUsed
这种方法主要用在新增的卡片已经提了折旧,已使用过。
折旧计算
折旧方法5:双倍余额递减法
If Years - Yearid >= 2 Then
DeprValue = DDB(rs(FOrgValS), rs(FResidueValS), Years, Yearid, 2) / PeriodCount
Else '双倍余额递减法到了最后两年用直线法
DeprValue = rs(FOrgValS) - rs(FResidueValS) - rs(FAccumDeprP) '净值
If rs(FLifePeriodsS) - rs(FDeprPeriods) <= 0 Then
DeprValue = 0
Else DeprValue = DeprValue / (rs(FLifePeriodsS) - rs(FDeprPeriods)) '净值/剩余期间
折旧计算
折旧方法6:动态平均法
计算公式:折旧额=(调整后原值-调整后累计折旧-调整后预计净残值-调整后减值准备)/调整后剩余使用期间
取数来源J和Q表:ForgvalA , FResiduevalA, FDecPreReadA, FlifePeriodsA对应J表 ,实际主要来源t_facard(变动的卡片)的Forgval , FResidueval, FDecPreRead, FlifePeriods
FaccumDeprA ,FperiodsUsedA对应Q表,实际主要来源t_fabalance中的FaccumDeprA= Faccumdeprp+faccumdeprinc-faccumdeprdec+Fdepr,FperiodsUsed(t_fabalance只放映期初数据)
对应公式:
(ForgvalA - FaccumDeprA -FResiduevalA,-FDecPreReadA,)/FlifePeriodsA- FperiodsUsedA
自定义折旧方法:
如果从t_fabalcard取出的折旧方法是>1000,并且fuserate<>o则是用户自定义折旧率法deprvalue=forgvals-fresiduevals
deprvalue=deprvalue*折旧率/100
折旧计算
5. '处理特殊情况
'一:计提的折旧额比剩余净值大,导致净值出现负数:提剩余值
'二:最后一期,折旧没有提完:根据设置,提完或只提应提数
SalOrg = rs(FOrgValP) - rs(FResidueVal) - rs(FAccumDeprP) 剩余净值
SalLife = LifePeriods - rs(FDeprPeriods) ‘剩余期间
If SalLife <= 1 And rs(FDeprMethodId) <> 3 And rs("FDeprMethodId") < 1000 Then
If SalOrg > DeprValue Then 'SalOrg为未提的折旧额
If rs(FDeprOption) = 0 Then '最后期间全部提完
DeprValue = SalOrg
Else
If rs(FDeprOption) = 2 Then ‘最后一期剩余折旧额大于2倍当期折旧额则继续提取,否则当期提 If SalOrg > DeprValue * 2 Then
将剩余金额写入当前余额表
update t_fabalance set fdeprshouidlp=fdeprvalue,fdeprremain=salorg
折旧计算
第一阶段问题分析
1.余额记录(t_fabalance)日期与变动表(t_faalter)不一致
2.上期余额记录(t_fabalance)丢失
3.原值和累计折旧科目丢失
提取卡片折旧要素,常见的错误是:折旧相关要素取不到,系统提示‘null’错误
折旧分析
第二阶段问题分析
1.折旧方法丢失(t_fabalcard和t_facard不一致)
3.参与折旧计算的原值,累计折旧,预计使用期间等数据发生变化
计算折旧阶段,常见问题是系统折旧额与手工不符
折旧分析
第三阶段问题分析
1.费用科目非明细科目,科目项目非明细,或折旧费用科目带其它项目核算(部门)
2.核算项目丢失
_fabalexpense记录丢失
4.费用科目输入错误
生成凭证阶段,常见问题,凭证无法生成,或则凭证金额与实际折旧额不符
折旧分析
计提折旧时提示“科目无权限”,无法进行下去,如何处理?
答复:为什么说没有权限呢?登陆的身份是系统管理员,具有所有的权限,所以真正的原因肯定不是因为权限的问题。由于曾经发生过已经授权的用户授权信息丢失的案例,故新建了一个用户,授予了所有的权限,但依然出现这个错误提示,所以排除权限的问题。后来使用profile 工具进行跟踪,发现程序在科目表中查找一条内码为0的科目,为什么会是内码为0呢?这说明某个卡片使用的科目内码为0。经查找t_faexpense和t_fabalexpense表,发现折旧费用科目有为0的记录。
解答:一般来说是固定资产所使用的科目内码为0,如累计折旧科目。这种问题一般来说是升级或导数据的原因造成的。处理的方法是到卡片表t_facard和t_fabalcard中把fdepracctid为0的记录改为正确的科目内码即可
问题.提折旧提示“核算项目没有权限”,无法进行下去,如何处理?
答复:分析过程:
这个问题和提示“科目没有权限”类似,但内容不一样,这一次是“核算项目”。经查,固定资产相关科目设置了核算项目,如果不设置类别核算的话,是不需要用到核算项目的。到t_faexpense和t_fabalexpense表中查找到fdetailid,然后在t_itemdetail查找对应的核算项目,发现这些核算项目内码对应的t_item表的记录为非明细核算项目或则该核算项目已经做了删除标志,这当然是不允许的。
解答:一般是所对应的使用部门或折旧费用科目所对应的核算项目不存在或非明细的核算项目。处理方法是到部门分配表(t_fadept和t_fabaldept)和核算项目详情表t_itemdetail中把核算项目内码更正过来或者把对应的核算项目置为最明细即可。
案例分析
期末处理
期末处理
系统参数检查
系统期间更新
插入修改t_fabalance
更新卡片表t_fabalcard
更新t_fabalcarditem
更新t_fabaldevice
更新t_fabalorgfor
更新t_fabaldept
更新t_fabalexpense
更新t_fabalcarditem
将下期折旧额清0
更新t_identity
更新t_fabbalance
表最近变动日期
fdate字段
固定资产结账
更新t_fabalance
一.获得当期最小余额fbalid, 获得t_fabalance最大余额fbalid(不是当期最大,可能反结账)
进而把所有介于在当期最小fbalid和最大fbalid的所有t_fabalance记录,假如结果集为S,找出来做如下处理(注意S集合可能只是当期的余额,也可能包括以后期间的余额(反结账情况下)
二.先更新当期余额表中已提折旧期间数(初始化不更新)
S集合(本期)t_fabalance中已提折旧卡片的fdeprperiods加1
三.更新期初数
S集合已存在下期余额的记录(作过反结账),只要更新S集合的期初数和发生数据(因为反结账后,即使对原值,累积折旧或其它元素发生了改变,则变动产生的数据差异,已在变动处理时,已作过调整,反映到t_fabalance)。
说明:b指当期t_fabalance
固定资产结账
期初数据
下期.Fdeprperiods=b. Fdeprperiods
下期.forgvalp=b. forgvalp+b. forgvalinc_b. forgvaldec
下期.fdecprep=b. fdecprep+. _b. fdecpredec
下期.faccumdeprp=b. faccumdeprp+
下期.fnump=+-----数量
四.更新本年累计数据
如果年结,则所有累计数为0
或则。下期累数=当期累数+当期发生
固定资产结账
另一种情况,无下期记录,从当期取数然后插入生成下期记录(已清理的固定资产卡片下期不在登记余额)
insert into t_fabalance
期初数
下期fbalid=当期fbalid+1+最大fbalid-最小fbalid
下期期出数据=当期期初+当期增加-当期减少
本年累计数
如果年结,则本年累计数为0
否则
下期本年累计数=当期本年累计数+当期发生数
1. 更新卡片表t_fabalcard
以t_fabalance为基础,从FBALid取fbalid
固定资产结账
固定资产反结账
特点:固定资产反结账,不会删除以后期间的数据,仅仅做以下操作:
1. 更新上期余额表中的已提折旧期间字段(反初始化不更新)
3. 修改系统参数,固定资产当前期间减1
期末结账时,提示算术溢出,如何处理?
原因:com_balance的fbalid太大,超过系统定义范围
思路:重新编排com_balance的fbalid
select * into t_fabal_hetemp from t_fabalance where fyear>(select fvalue from t_systemprofile where fcategory='fa' and fkey='currentyear') --根据实际需要修改条件
--生成新旧内码对照表
select distinct(fbalid) AS Foldid,IDENTITY(int,1,1) as fnewid into #tmpa from t_fabalance
用新内码更新就内码
案例分析
T_fabalexpense,t_fabaldept,t_fabalance ,t_fabalcard,与折旧凭证的关系
报表分析
Select * from t_fabalance where fperiod=10 and fyear=2004
Select * from t_fabaldept where fbalid in (Select fbalid from t_fabalance where fperiod=10 and fyear=2004)
同一期间,折旧金额相同,折旧凭证中的折旧额直接来源T_fabalexpense
固定资产清单:
固定资产清单的内容来自t_fabalance,t_fabalcard,t_fabaldept,t_fabalexpense,t_faalter等等余额相关表和变动相关。固定资产清单是可以按期间查询的。其中有一个选项,是“多部门使用”的固定资产是否显示,或则如何显示的问题。一个固定资产如果有多个部门使用,那可以只显示其中的一个部门,也可以多个部门都显示出来。
报表分析
折旧费用明细表、折旧费用汇总表:
两个表的数据来源都是t_fabalance,t_fabalcard,t_fabaldept,t_fabalexpense等等余额相关表,只不过是折旧汇总表只显示汇总数据,而明细表把每个卡片的各自数据都显示出来。一般情况下,不论固定资产数据是否存在数据不一致的情况,但这两个表的数据都是一致的,因为他们的来源和算法一样。
报表分析
折旧费用分配表:
这个表的数据来自 t_fabalance、t_fabalcard、t_fabaldept、t_fabalexpense等等余额相关表。
固定资产明细账:
固定资产明细账除了折旧凭证的信息外,所有数据来自t_fabalance、t_falter、t_facard等余额和变动相关表。折旧凭证的信息来自凭证表中fobjectname=’fa’ 和fparameter=’depr’的当期折旧凭证
报表分析
自动对账分析
总账的数据来自余额表和当期的凭证;
固定资产的数据全部来自于t_fabalance余额表。
固定资产系统取数
固资原值:
select isnull(sum(),0) OrgValBegin,isnull(sum(),0) OrgValD,isnull(sum(),0) OrgValC from t_fabalance a,t_faalter b,t_facard c,t_account d where = and = and = and = and =1 and =2001 and =3 And (='1501' or like '1501.%')
累计折旧:
select isnull(Sum(),0) AccumDeprBegin, isnull(sum(),0) AccumDeprD,isnull(sum(+),0) AccumDeprC from t_fabalance a,t_faalter b,t_facard c,t_account d where = and = and = and = and =1 and =2001 and =3 And (='1502' or like '1502.%')
自动对账分析
减值准备:
select isnull(sum(),0) DecValBegin,isnull(sum(),0) DecValC,isnull(sum(),0) DecValD from t_fabalance a,t_faalter b,t_facard c,t_fagroup e ,t_account d where = and = and = and = and = and =1 and =2001 and =3 And (='1505' or like '1505.%')
自动对账分析
总账取数
固资原值: Select isnull(Sum(*),0) OrgValBegin,isnull(sum(),0) OrgValD,isnull(sum(),0) OrgValC from t_Balance a,t_account b where = and =2001 And =3 And =0 And =0 And (='1501')
自动对账分析
总账取数
累计折旧: Select isnull(Sum(*),0) AccumDeprBegin,isnull(sum(),0) AccumDeprD,isnull(sum(),0) AccumDeprC from t_Balance a,t_account b where = and =2001 And =3 And =0 and =0 And (='1502')
自动对账分析
总账取数
减值准备: Select isnull(Sum(*),0) DecValBegin,isnull(sum(),0) DecValD,isnull(sum(),0) DecValC from t_Balance a,t_account b where = and =2001 And =3 And =0 And =0 And (='1505')
自动对账分析
思路:
1.直接对t_fabalance当期原值,累计折旧,发生额求和,与总账比较,是否相等?相等,则意味着与总账一致,可能是科目设置 ,变动日期等条件有误
2.把对账SQL语句跟踪出来,放到查询分析器分析,一般做法是把条件一个一个屏蔽,找出是哪个条件影响结果,把这个条件找出,问题,也就解决了
案例分析
如上图如示,当发生自动对账不平时,因为自动对账除检查年份、月份之外,还会检查变动日期,所以可以用以下SQL进行日期调整。
update bal set faltdate= from t_fabalance bal,t_faalter faalter where = and =(select max(falterid) from t_faalter where fassetid= and (fyear< or (fyear= and fperiod<=)))
案例分析
Thanks!