在现金流量报告中替换存储过程的想法

时间:2008-09-29 18:36:52

标签: delphi stored-procedures report

我们有一个现金流量报告,基本上属于这种结构:

Date |Credit|Debit|balance|
09/29| 20   | 10  | 10    |
09/30| 0    | 10  | 0     |

主要问题是平衡,因为我们正在为数据使用DataSet,所以很难计算DataSet上的余额,因为我们总是需要前一天的余额。

此数据也来自几个表,并且很难维护此过程,因为数据库元数据经常变化。

任何人都可以给我一些不同的解决方案吗?对于这个问题?

此报告显示在DataGrid上。

3 个答案:

答案 0 :(得分:1)

这对你来说可能是一个太大的变化或不合适,但现金流量报告向我表明,你可能正式或非正式地维持某种总分类账。如果你是,那么也许我对此很天真,但我认为你应该将总分类帐详细信息保存为单个表格,其中包含最少的列数,如ID,日期,帐户,来源和金额。

来自不同表格的所有数据都表明有几种不同类型的事件影响您的现金。对我来说,在他们自己的表中表示这些不同类型的事件(如应收账款或应付账款或库存或其他)是有道理的,但诀窍是在其他表中没有任何货币列。相反,让他们引用总记录详细信息中记录数据的行。如果您强制执行此操作,那么无论其他表的更改如何,现金流都将始终如一。

仍然必须解决余额转发问题,你必须考虑所涉及的交易数量和系统所需的响应能力,但至少你可以决定如何处理它一次而不必随着系统其他部分的发展而进行更改。

答案 1 :(得分:0)

在代码方面,你有两个相对简单的选项,但它们都涉及迭代数据集。

选项1:用于数据绑定之前的循环。 对于数据表中的每一行,将信用/借方加/减到前一行的余额,并将其分配给数据表的相应单元格。

选项2:在数据绑定期间计算。 首先,你有一个可以保存你的值的全局变量。在数据绑定之前将它设置为零。对于每个项目或altitem,将信用/借方加/减到全局变量,并将其分配给数据网格的相应单元格。

答案 2 :(得分:0)

请注意,这通常意味着网络流量的大幅增加,这可能会降低整个应用程序的性能(因为您必须获取所有这些数据才能在客户端上处理)。

另一种方法是创建(在您喜欢的实现中)中间层应用程序,您可以在数据库服务器或单独的网段中发送请求并执行此处理。

如果有SP进行此计算,通常是因为它触及大量数据,目的是避免这种情况在网络中传播。