创建存储过程 系统使用了sf_初始化帐户sf_启用帐户sf_凭证过帐sf_期末结帐和sf_计算资产负债表个存储过程实现的功能分别为新建帐套启用帐套凭证过帐确认期末结帐和运算指定会计期间的资产负债表等功能具体计算方法在下面的脚本中有详细的注释读者可以参考这些注释 create proc sf_初始化帐户 as begin tran 清除原来数据从新建立帐户 delete from 帐簿初始化表 设置帐户初始基本数据 insert into 帐簿初始化表 (科目代码科目名称累计借方累计贷方期初余额余额方向) select 科目代码科目名称余额方向 from 科目表 设置初始信息 update 系统参数表 set 取值 = datepart(mmgetdate()) where 参数名称 = 会计期间开始月份 update 系统参数表 set 取值 = datepart(mmgetdate()) where 参数名称 = 当前会计期间 commit GO create proc sf_启用帐户 as begin tran 清除原来数据从新建立帐户 delete from 科目余额表 delete from 本期汇总帐簿 delete from 本期明细帐簿 delete from 分录表 delete from 分录表历史 delete from 凭证表 delete from 凭证表历史 设置本期汇总帐簿及科目余额表 insert into 本期汇总帐簿 select 科目代码期初余额 期初余额余额方向 from 帐簿初始化表 update 本期汇总帐簿 set 会计期间=b取值 from 系统参数表 as b where 参数名称=当前会计期间 insert into 科目余额表(科目代码 期初借方余额 期初贷方余额 本期借方发生额 本期贷方发生额 本年借方累计发生额 本年贷方累计发生额 本期借方余额 本期贷方余额 余额方向) select 科目代码累计借方累计贷方 case when 余额方向=借方 then 期初余额 else end case when 余额方向=贷方 then 期初余额 else end 余额方向 from 帐簿初始化表 update 科目余额表 set 会计期间=b取值 from 系统参数表 as b where 参数名称=当前会计期间 commit GO create proc sf_凭证过帐 as begin tran 设置本期汇总帐簿信息 update 本期汇总帐簿 set 本期借方合计 = 本期借方合计 + b借方 本期贷方合计 = 本期贷方合计 + b贷方 本年借方累计 = 本年借方累计 + b借方 本年贷方累计 = 本年贷方累计 + b贷方 余额 = 余额 + case when 余额方向=借方 then (借方 贷方) else (贷方 借方) end from 本期汇总帐簿 as a (select 科目代码 sum(借方) as 借方 sum(贷方) as 贷方 from 分录表 as f 凭证表 as p where f凭证编号 = p凭证编号 group by f科目代码) as b where a科目代码 = b科目代码 设置本期明细帐簿信息 insert into 本期明细帐簿(分录编号会计期间凭证字号 凭证编号 摘要 科目代码 借方 贷方 数量 单价 结算方式 结算号 结算日期) select 编号会计期间凭证字号 p凭证编号 摘要 科目代码 借方 贷方 数量 单价 结算方式 结算号 结算日期 from 凭证表 as p 分录表 as f where f凭证编号 = p 凭证编号 计算余额 update 本期明细帐簿 set 余额方向=a余额方向 from 科目表 as a where 本期明细帐簿科目代码=a科目代码 通过游标循环计算余额 declare @bh int @dm char() @jf money @df money declare @fx char() @bj char() @ye money @kjqj int declare mycursor cursor for select 内部编号科目代码 借方贷方余额方向余额标记会计期间 from 本期明细帐簿 where 余额标记 is null order by 内部编号 open mycursor fetch next from mycursor into @bh@dm@jf@df@fx@bj@kjqj while (@@fetch_status=) begin select @ye = 余额 from 本期明细帐簿 where 内部编号 in (select max(内部编号) from 本期明细帐簿 where 内部编号 < @bh and 科目代码=@dm and 余额标记 = 是) 没有本期第一条明细从科目余额表取余额 if(@ye is null) select @ye = case when 余额方向=借方 then 本期借方余额 本期贷方余额 else 本期贷方余额 本期借方余额 end from 科目余额表 where 会计期间 = @kjqj [] [] [] |