熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

經典案例 財務管理系統(6)[1]

2013-11-23 17:35:35  來源: Delphi編程 

   創建存儲過程

  系統使用了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

[]  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/24741.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.