关于月结存年结存功能的设计原理 首先,基础的会计假设就是持续经营,我个人认为没必要每个月做月结存。按以下库存变化的实例来说,先看结构: 存续表 (注意,结存数量这个字段并不一定要存在) ----------------------------- 日期 进出数量 结存数量 备注 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 原创文章,作者本人对文章保留一切权利。 如需转载必须征得作者同意并注明本站链接
|