【Access小品】灵机一动-- 一个有趣的算法
时 间:2015-02-06 16:57:04
作 者:煮江品茶 ID:10802 城市:武汉
摘 要:【Access小品】灵机一动 -- 一个有趣的算法
正 文:
我们知道会计采用借贷记账法,其中资产、成本及费用类科目增加计入借方,减少计入贷方,而负债、权益、收入类科目相反,并以此实现借贷平衡。这样就在计算期末余额的绝对值上,会出现前一类科目的计算公式与后一类科目的计算公式中,出现正负号相反的问题。比如,计算应收账款和应付账款的期末余额,计算公式分别如下:
应收账款期末余额=期初余额+借方发生额合计-贷方发生额合计
应付账款期末余额=期初余额-借方发生额合计+贷方发生额合计
假设我们有一个查询中存在这样几个字段:科目编号,科目名称,类型(True/False),期初余额,借方发生额合计,贷方发生额合计,其中类型为True表示资产、成本及费用类科目,为False表示负债、权益、收入类科目。那么我们求期末余额的话,是可以这样来写的:
select *,iif(类型=True,期初余额+借方发生额合计-贷方发生额合计,期初余额-借方发生额合计+贷方发生额合计) as 期末余额
from 查询1
问题在于,我们是否一定需要用iif函数呢?我想应该可以不用。因为我们知道在Access中,True=-1,False=0,如果能利用布尔值的这个特性,那就可以简化算法。现在的问题是需要将数组{-1,0},变换为{-1,1},只要这个变换能实现,那么就可以容易的写出算式了。我们可以这样来变换:
2×{-1,0}=>{2×(-1),2×0}=>{-2,0}+1=>{-2+1,0+1}=>{-1,1}
也就是说:
2×{-1,0}+1=>{-1,1}
基于这样的变换,我们的查询就可以简化为:
select *,期初余额+(贷方发生额合计-借方发生额合计)*(类型*2+1) as 期末余额
from 查询1
我是比较讨厌用iif函数的,所以通常遇到iif函数,我就试图转换一个算法来解决问题,这种转换我觉得很有趣味。
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access制作的RGB转CM...(09.22)
- Access制作的RGB调色板...(09.15)
- Access制作的快速车牌输入...(09.13)
- 【Access高效办公】统计当...(06.30)
- 【Access高效办公】用复选...(06.24)
- 根据变化的日期来自动编号的示例...(06.20)
- 【Access高效办公】按日期...(06.12)
- 合并列数据到一个文本框的示例;...(05.06)
- 通过命令按钮让Access列表...(04.24)

学习心得
最新文章
- 【Access有效性规则示例】两种...(10.10)
- EXCEL表格扫描枪数据录入智能处...(10.09)
- Access快速开发平台--多行文...(09.28)
- 关于从Excel导入长文本数据到A...(09.24)
- Access制作的RGB转CMYK...(09.22)
- 关于重装系统后Access开发的软...(09.17)
- Access制作的RGB调色板示例(09.15)
- Access制作的快速车牌输入改进...(09.13)
- Access颜色编号管理数据库--...(09.10)
- 分享一个Access报表最后一页始...(09.03)