Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > 财务应用

关于累计余额自动计算的问题

时 间:2011-04-25 14:25:42
作 者:不详   ID:304  城市:哈尔滨
摘 要:财务人员传统记账时,每一笔账后面都有一个“余额”,俗称“累计余额”,但那都是用计算器算出来的。现在会计都会电算化了,财务软件中的累计余额都是电脑自动计算。这里以access为例谈一下设计方法,提供一个思路参考。

正 文:

财务人员传统记账时,每一笔账后面都有一个“余额”,俗称“累计余额”,但那都是用计算器算出来的。现在会计都会电算化了,财务软件中的累计余额都是电脑自动计算。这里以access为例谈一下设计方法,提供一个思路参考。
   一、先设计表。表里应该有的字段是:ID、日期、收入、支出、余额等。
   二、建立查询。添加所有字段,且保证ID和日期均为升序。将该查询保存为“排序后查询”(可以任意命名,但代码中要作适当更改)。
   三、建立窗体,将第二步建立的查询作为其子窗体的数据源,并将子窗体命名为“Child0”。
   四、在窗体上加一个按钮,在按钮的“单击”事件里写以下代码,然后保存窗体,可任意命名。

Dim rs As Recordset, y As Double
 '声明设定参数 rs 为 Recordset类型的数据, y 为 数字双精度型数据
 Set rs = New ADODB.Recordset '初始化参数为一个新的ADODB型Recordset
   rs.ActiveConnection = CurrentProject.Connection '把 rs 参数设定为本数据库,并连接
   
 rs.Open "排序后查询", , adOpenKeyset, adLockOptimistic
   '打开我们按一定顺序排好的查询,这样我们才能按次序来进行计算, _
     例题中的 "排序后查询" 是先按<日期>后按<记录ID>排的序,这样会形成唯一的排列顺序,这样做的好处是强制按账目录入的先后顺序进行累计
     rs.MoveFirst '使记录的指针指到第一条记录,(当然我们是看不见的,只在于意义上是这样)
     y = 0
  '设定y为0,作为初始余额值,你可以任意设定,特别是在应用中初始计算值不为0时,就看你是如何灵活应用了
     
 '以下是进行循环计算的程序
   Do Until rs.EOF = True '表是当记录代码循环应用计算,直到最后一条记录为止
    rs!余额 = rs!收入 - rs!支出 + y
   '这个就是计算的公式,但我们有时候 收入或支出是空的,并没有数值,这样为了不产生错误我们可以变一下公式: _
    rs!余额 = NZ(rs!收入) - NZ(rs!支出) + y
    '上一步计算完了,我们就要保存上面这个公式计算的结果到数据库中
   rs.Update
    '这时我们要为下一步计算余额作准备,重新设定 y 值
   y = rs!余额
    '并且把记录指针跳转到下一条记录,千万记住这句, _
     否则程序会一直在上面那条记录反复计算,真到你的ACCESS程序死掉, _
    或者你系统由于内存占光而完完,切记切记!!!!!!!!!!!!
    rs.MoveNext
  Loop '重新回到上面那句: Do Until rs.EOF = True

'当程序到达这里时,表示上面的记算余额已经完成,我们就要关闭 rs 以省下内存空间
  rs.Close
  Set rs = Nothing
Me.Child0.Requery '刷新子窗体
End Sub

   五、在表里录入收支记录,“余额”字段不管。
   六、打开窗体,单击上面的那个加有事件代码的按钮,余额会立马显示在子窗体里,且原表里“余额”也已更新。

   这种方法相对而言比较专业,不懂得电脑语言的人即使照抄也可能会出错。那么,可以使用第二种方法--

   一、先建立表(假设保存名为《财务收支记账》),表除必须有日期、收入、支出、摘要等字段外,还要加一个自动编号字段“ID”。设计好后录入数据。
   二、建立查询。查询中加入必要字段,然后在一空白字段写入表达式--

 

  余额: nz(DSum("收入","财务收支记账","[日期]<#" & [日期] & "#"))+DSum("收入","财务收支记账","[日期]=#" & [日期] & "# And [ID]<=" & [ID])-nz(DSum("支出","财务收支记账","[日期]<#" & [日期] & "#"))-DSum("支出","财务收支记账","[日期]=#" & [日期] & "# And [ID]<=" & [ID])
   

   三、运行这个查询,就可以看到你需要的“余额”字段及其累计余额值了。

   特别说明:以上两种方法,无论哪一种都涉及到排序的问题,也就是必须保证唯一顺序,否则结果会有所不同。切记。



Access软件网QQ交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助