【文章內(nèi)容簡介】
CONSTRAINT [PK_憑證表] PRIMARY KEY CLUSTERED ( [憑證編號] ) ON [PRIMARY] GOALTER TABLE [dbo].[分錄表] WITH NOCHECK ADD CONSTRAINT [PK_分錄表] PRIMARY KEY CLUSTERED ( [編號] ) ON [PRIMARY] GOALTER TABLE [dbo].[帳簿初始化表] WITH NOCHECK ADD PRIMARY KEY CLUSTERED ( [科目代碼] ) ON [PRIMARY] GOALTER TABLE [dbo].[本期匯總帳簿] WITH NOCHECK ADD CONSTRAINT [PK_本期匯總帳簿] PRIMARY KEY CLUSTERED ( [科目代碼] ) ON [PRIMARY] GOALTER TABLE [dbo].[分錄表] ADD CONSTRAINT [FK_分錄表_憑證表] FOREIGN KEY ( [憑證編號] ) REFERENCES [dbo].[憑證表] ( [憑證編號] ), CONSTRAINT [分錄表_科目代碼_fk] FOREIGN KEY ( [科目代碼] ) REFERENCES [dbo].[科目表] ( [科目代碼] )GO其他外鍵、主鍵等約束參看配書光盤腳本 創(chuàng)建存儲過程系統(tǒng)使用了“sf_初始化帳戶”、“sf_啟用帳戶”、“sf_憑證過帳”、“sf_期末結(jié)帳”和“sf_計算資產(chǎn)負債表”5個存儲過程,實現(xiàn)的功能分別為新建帳套、啟用帳套、憑證過帳確認、期末結(jié)帳和運算指定會計期間的資產(chǎn)負債表等功能。具體計算方法在下面的腳本中有詳細的注釋,讀者可以參考這些注釋。create proc sf_初始化帳戶as begin tran 清除原來數(shù)據(jù),從新建立帳戶 delete from 帳簿初始化表 設置帳戶初始基本數(shù)據(jù) insert into 帳簿初始化表 (科目代碼,科目名稱,累計借方,累計貸方,期初余額,余額方向) select 科目代碼,科目名稱,0,0,0,余額方向 from 科目表 設置初始信息 update 系統(tǒng)參數(shù)表 set 取值 = datepart(mm,getdate()) where 參數(shù)名稱 = 39。會計期間開始月份39。 update 系統(tǒng)參數(shù)表 set 取值 = datepart(mm,getdate()) where 參數(shù)名稱 = 39。當前會計期間39。mitGOcreate proc sf_啟用帳戶as begin tran 清除原來數(shù)據(jù),從新建立帳戶 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 會計期間= from 系統(tǒng)參數(shù)表 as b where 參數(shù)名稱=39。當前會計期間39。 insert into 科目余額表(科目代碼, 期初借方余額, 期初貸方余額, 本期借方發(fā)生額, 本期貸方發(fā)生額, 本年借方累計發(fā)生額, 本年貸方累計發(fā)生額, 本期借方余額, 本期貸方余額, 余額方向) select 科目代碼,累計借方,累計貸方,0,0,0,0, case when 余額方向=39。借方39。 then 期初余額 else 0 end, case when 余額方向=39。貸方39。 then 期初余額 else 0 end, 余額方向 from 帳簿初始化表 update 科目余額表 set 會計期間= from 系統(tǒng)參數(shù)表 as b where 參數(shù)名稱=39。當前會計期間39。mitGOcreate proc sf_憑證過帳as begin tran 設置本期匯總帳簿信息 update 本期匯總帳簿 set 本期借方合計 = 本期借方合計 + , 本期貸方合計 = 本期貸方合計 + , 本年借方累計 = 本年借方累計 + , 本年貸方累計 = 本年貸方累計 + , 余額 = 余額 + case when 余額方向=39。借方39。 then (借方 貸方) else (貸方 借方) end from 本期匯總帳簿 as a, (select 科目代碼, sum(借方) as 借方, sum(貸方) as 貸方 from 分錄表 as f, 憑證表 as p where = group by ) as b where = 設置本期明細帳簿信息 insert into 本期明細帳簿(分錄編號,會計期間,憑證字號, 憑證編號, 摘要, 科目代碼, 借方, 貸方, 數(shù)量, 單價, 結(jié)算方式, 結(jié)算號, 結(jié)算日期) select 編號,會計期間,憑證字號, , 摘要, 科目代碼, 借方, 貸方, 數(shù)量, 單價, 結(jié)算方式, 結(jié)算號, 結(jié)算日期 from 憑證表 as p, 分錄表 as f where = p. 憑證編號 計算余額 update 本期明細帳簿 set 余額方向= from 科目表 as a where = 通過游標循環(huán)計算余額 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 內(nèi)部編號,科目代碼, 借方,貸方,余額方向,余額標記,會計期間 from 本期明細帳簿 where 余額標記 is null order by 內(nèi)部編號 open mycursor fetch next from mycursor into @bh,@dm,@jf,@df,@fx,@bj,@kjqj while (@@fetch_status=0) begin select @ye = 余額 from 本期明細帳簿 where 內(nèi)部編號 in (select max(內(nèi)部編號) from 本期明細帳簿 where 內(nèi)部編號 @bh and 科目代碼=@dm and 余額標記 = 39。是39。) 沒有,本期第一條明細,從科目余額表取余額 if(@ye is null) select @ye = case when 余額方向=39。借方39。 then 本期借方余額 本期貸方余額 else 本期貸方余額 本期借方余額 end from 科目余額表 where 會計期間 = @kjqj and 科目代碼 = @dm select @ye = isnull(@ye,0) update 本期明細帳簿 set 余額=case when @fx=39。借方39。 then @ye + @jf @df else @ye + @df @jf end, 余額標記=39。是39。 where 內(nèi)部編號=@bh fetch next from mycursor into @bh,@dm,@jf,@df,@fx,@bj,@kjqj end close mycursor deallocate mycursor 更改狀態(tài) update 憑證表 set 過帳狀態(tài) = 39。已過39。 放入歷史 insert into 憑證表歷史 select * from 憑證表 insert into 分錄表歷史 select * from 分錄表 清除已過帳數(shù)據(jù),注意,應放到程序中清除,因為要統(tǒng)計憑證張數(shù)/分錄張數(shù)和金額 統(tǒng)計后刪除 delete from 分錄表 delete from 憑證表mitGOcreate proc sf_期末結(jié)帳as begin tran 先將沒有過帳的憑證過帳 exec sf_憑證過帳 declare @kjqj int 當前會計期間 select @kjqj = 會計期間 from 本期匯總帳簿 計算科目余額表,可以統(tǒng)計資產(chǎn)負債表/損溢表等 update 科目余額表 set 本期借方發(fā)生額 = ,本期貸方發(fā)生額 = , 會計期間 = , 余額方向 = from 科目余額表 as a, 本期匯總帳簿 as b where = and = update 科目余額表 set 本年借方累計發(fā)生額 = 本年借方累計發(fā)生額 + 本期借方發(fā)生額, 本年貸方累計發(fā)生額 = 本年貸方累計發(fā)生額 + 本期貸方發(fā)生額, 本期借方余額 = 期初借方余額 + 本期借方發(fā)生額, 本期貸方余額 = 期初貸方余額 + 本期貸方發(fā)生額160