关于累计余额自动计算的问题
时 间:2011-04-25 14:25:42
作 者:不详 ID:304 城市:哈尔滨
摘 要:财务人员传统记账时,每一笔账后面都有一个“余额”,俗称“累计余额”,但那都是用计算器算出来的。现在会计都会电算化了,财务软件中的累计余额都是电脑自动计算。这里以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交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)