📄 财务管理.sql
字号:
select @fieldname = @alias + '.' + @fieldname
end
if (len(@list1)>0) or (len(@list)+len(@fieldname)>252)
begin
select @list1 = @list1 + @fieldname
select @list1 = @list1 + ', '
end
else
begin
select @list = @list + @fieldname
select @list = @list + ', '
end
fetch next from mycur into @fieldname
END
close mycur
deallocate mycur
if len(@list1)>0
select @list1 = substring(@list1, 1, len(@list1)-1)
else
select @list = substring(@list, 1, len(@list)-1)
select @list, @list1
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
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(20), @jf money, @df money
declare @fx char(4), @bj char(4), @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=0)
begin
select @ye=NULL
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
and 科目代码 = @dm
select @ye = isnull(@ye,0)
update 本期明细账簿
set 余额=case when @fx='借方' then
@ye + @jf - @df else
@ye + @df - @jf end,
余额标记='是'
where 内部编号=@bh
fetch next from mycursor into @bh,@dm,@jf,@df,@fx,@bj,@kjqj
end
close mycursor
deallocate mycursor
-- 更改状态
update 凭证表 set 过账状态 = '已过'
-- 放入历史
insert into 凭证表历史 select * from 凭证表
insert into 分录表历史 select * from 分录表
-- 清除已过帐数据
-- 注意,改放到程序中清除,因为要统计凭证张数/分录张数和金额
-- 统计后删除
-- delete from 分录表
-- delete from 凭证表
commit
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
create proc sf_初始化帐户
as
begin tran
-- 清除原来数据,从新建立帐户
delete from 帐簿初始化表
-- 设置帐户初始基本数据
insert into 帐簿初始化表
(科目代码,科目名称,累计借方,累计贷方,期初余额,余额方向)
select 科目代码,科目名称,0,0,0,余额方向 from 科目表
-- 设置初始信息
update 系统参数表 set 取值 = datepart(mm,getdate())
where 参数名称 = '会计期间开始月份'
update 系统参数表 set 取值 = datepart(mm,getdate())
where 参数名称 = '当前会计期间'
commit
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
create proc sf_启用帐户
as
begin tran
-- 清除原来数据,从新建立帐户
delete from 科目余额表
delete from 本期汇总账簿
delete from 本期明细账簿
delete from 损溢表
delete from 分录表
delete from 分录表历史
delete from 凭证表
delete from 凭证表历史
-- 设置本期汇总账簿及科目余额表
insert into 本期汇总账簿 select 科目代码,0,期初余额,
0,0,0,0,期初余额,余额方向 from 帐簿初始化表
update 本期汇总账簿 set 会计期间=b.取值 from
系统参数表 as b where 参数名称='当前会计期间'
insert into 科目余额表(科目代码, 期初借方余额, 期初贷方余额,
本期借方发生额, 本期贷方发生额, 本年借方累计发生额,
本年贷方累计发生额, 本期借方余额, 本期贷方余额,
余额方向)
select 科目代码,累计借方,累计贷方,0,0,0,0,
case when 余额方向='借方' then 期初余额 else 0 end,
case when 余额方向='贷方' then 期初余额 else 0 end,
余额方向 from 帐簿初始化表
update 科目余额表 set 会计期间=b.取值 from
系统参数表 as b where 参数名称='当前会计期间'
commit
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
create proc sf_期末结帐
as
begin tran
-- 先将没有过帐的凭证过帐
exec sf_凭证过帐
declare @kjqj int -- 当前会计期间
select @kjqj = 会计期间 from 本期汇总账簿
-- 计算科目余额表,可以统计资产负债表/损溢表等
update 科目余额表 set 本期借方发生额 = b.本期借方合计,
本期贷方发生额 = b.本期贷方合计,
会计期间 = b.会计期间, 余额方向 = b.余额方向
from 科目余额表 as a, 本期汇总账簿 as b
where a.科目代码 = b.科目代码 and a.会计期间=b.会计期间
update 科目余额表 set
本年借方累计发生额 = 本年借方累计发生额 + 本期借方发生额,
本年贷方累计发生额 = 本年贷方累计发生额 + 本期贷方发生额,
本期借方余额 = 期初借方余额 + 本期借方发生额,
本期贷方余额 = 期初贷方余额 + 本期贷方发生额
where 会计期间 = @kjqj
-- 更新会计期间
update 系统参数表 set 取值 = 取值 + 1 where 参数名称='当前会计期间'
-- 将本期汇总账簿和明细账簿倒入历史,实例程序不演示
----------------------------------------------
-- 清除汇总账簿和明细账簿,进入新的会计期间
update 本期汇总账簿 set 会计期间 = 会计期间 + 1, 期初余额=余额,
本期借方合计 = 0, 本期贷方合计 = 0, 余额 = 0
delete from 本期明细账簿
-- 新会计期间的科目余额表
insert into 科目余额表(科目代码, 期初借方余额, 期初贷方余额,
本期借方发生额, 本期贷方发生额, 本年借方累计发生额,
本年贷方累计发生额, 本期借方余额, 本期贷方余额,
余额方向,会计期间)
select 科目代码, 本期借方余额, 本期贷方余额,0,0,0,0,
本期借方余额, 本期贷方余额, 余额方向,会计期间+1
from 科目余额表 where 会计期间 = @kjqj
commit
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
create proc sf_计算资产负债表 @kjqj int
as
begin tran
-- 计算资产负债表,这里提供计算的方法供演示
-- 没有列出的明细项目都归到其他资产和其他负债里
-- 注意,这里按照科目代码统计,主要说明资产负债表的含意和计算方法
-- 如果科目代码不是这样,改存储过程需要作相应的修改
delete from 资产负债表 where 会计期间 = @kjqj
insert into 资产负债表(会计期间) values(@kjqj)
update 资产负债表 set 现金及现金等价物 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期借方余额,0)-isnull(本期贷方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and
科目代码 >= 101 and 科目代码 <= 111)
as b where a.会计期间 = @kjqj
update 资产负债表 set 应收账款 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期借方余额,0)-isnull(本期贷方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and
科目代码 >= 121 and 科目代码 <= 129 and 科目代码<>125)
as b where a.会计期间 = @kjqj
-- 注意坏账准备为贷方
update 资产负债表 set 坏账准备 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and
科目代码 = 125)
as b where a.会计期间 = @kjqj
update 资产负债表 set 应收账款净值 = 应收账款 - 坏账准备
update 资产负债表 set 流动资产总计 = 现金及现金等价物 + 应收账款净值
update 资产负债表 set 固定资产原值 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期借方余额,0)-isnull(本期贷方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and 科目代码 =171)
as b where a.会计期间 = @kjqj
-- 注意累计折旧为贷方
update 资产负债表 set 累计折旧 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and 科目代码 = 175)
as b where a.会计期间 = @kjqj
update 资产负债表 set 固定资产总计 = 固定资产原值 - 累计折旧
update 资产负债表 set 其他资产 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期借方余额,0)-isnull(本期贷方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and
科目代码 >= 131 and 科目代码 <= 195 and 科目代码<>171
and 科目代码 <> 175)
as b where a.会计期间 = @kjqj
update 资产负债表 set 资产总计 = 流动资产总计 + 固定资产总计 + 其他资产
-- 计算负债及所有者权益
-- 负债类级别都是贷方金额
update 资产负债表 set 应付账款 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and
科目代码 >= 201 and 科目代码 <= 204 )
as b where a.会计期间 = @kjqj
update 资产负债表 set 预收账款 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and
科目代码 = 206)
as b where a.会计期间 = @kjqj
update 资产负债表 set 应付工资 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and 科目代码 = 215)
as b where a.会计期间 = @kjqj
update 资产负债表 set 其他负债 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and
科目代码 >= 209 and 科目代码 <= 281 and 科目代码 <> 215)
as b where a.会计期间 = @kjqj
update 资产负债表 set 负债总计 = 应付账款 + 预收账款 + 应付工资 + 其他负债
-- 计算所有者权益
update 资产负债表 set 实收资本 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and 科目代码 = 301)
as b where a.会计期间 = @kjqj
update 资产负债表 set 资本公积 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and 科目代码 = 311)
as b where a.会计期间 = @kjqj
update 资产负债表 set 赢余公积 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and 科目代码 = 313)
as b where a.会计期间 = @kjqj
update 资产负债表 set 未分配利润 = b.金额 from 资产负债表 as a,
(select sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0)) as 金额
from 科目余额表 where 会计期间 = @kjqj and
科目代码 = 321 or 科目代码 = 322 )
as b where a.会计期间 = @kjqj
update 资产负债表 set 所有者权益总计 = 实收资本 + 资本公积 +
赢余公积 + 未分配利润
update 资产负债表 set 负债及所有者权益总计 = 负债总计 + 所有者权益总计
commit
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -