ACCESS中关于月结存年结存功能的设计原理

关于月结存年结存功能的设计原理

<script language="javascript" type="text/javascript"> function addtitle(){ var straddtitle = "关于月结存年结存功能的设计原理"; if (straddtitle.length!==0){ document.title=document.title + "《" + straddtitle + "》;专题号:72FAB11E11DCE7F3"; } } </script>

 

关于月结存年结存功能的设计原理

首先,基础的会计假设就是持续经营,我个人认为没必要每个月做月结存。按以下库存变化的实例来说,先看结构:


存续表        (注意,结存数量这个字段并不一定要存在)
-----------------------------
     日期     进出数量 结存数量                    备注
  2004-12-1      10       10
  2004-12-2      -5       5
  2004-12-3       6       11
  2004-12-31     -2       9
                               此处空一行,表示月结存时间,月结存的数量为9,实际表中不存在这样的行
   2005-1-1      -1       8
  2005-1-31      -2       6
                               此处空一行,表示月结存时间,月结存的数量为6,实际表中不存在这样的行
   2005-2-1       5       11
-----------------------------


结存表
-----------------------------
     日期     结存数量
  2004-12-31      9
  2005-1-31       6
  2005-2-28      11
-----------------------------


在1月中某天查询2005年1月份数据的时候只要

select 日期,0 as 进出数量,结存数量, '期初结存' as 备注 from 结存表 where 日期=#2004-12-31# union all select 日期,进出数量,结存数量 from 存续表

而查询某笔明细的时候直接

select * from 存续表 where 日期=#某日期#

之所以要建立一个结存表,就是为了减少日后的查询量,提高速度。其实,如果不考虑计算机运算性能的情况下,查询 2005年1月份的期初数据时完全可以用代码

select sum(进出数量) from 结存表 where 日期 <#2005-1-1#


来实现,然后再用几个 UNION ALL 语句连接,就可以得到 2005年1月某天的结存数量和明细了。

从上面的数据结构大家就可以看出,其实月结存只是 INSERT INTO 结存表 一个日期和结存数量进去

insert into 结存表 (日期,结存数量) values(#结存日期#,结存日存续表的数量)

注意,上述只是一个简单的结存数量,如果在实际情况中需要生成某个时点的复杂报表,比如资产负债表,其原理也是在某时点统计所有数据,然后按时间存放在“资产负债表”中

当然,实际开发中情况可能复杂得多,但是基本原理和上述情况是一致的。我本人在实际工作中也同样使用上述结构,而且相比要做年结存的软件来说,查上年数据在当前软件界面中就能查询,无需切换,大大方便了用户的使用

access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值