对于当前行中的Crystal Report存储以前行值(Store Previous row val

2019-09-18 04:55发布

我想检索当前行中上一行值,就像下面(2008水晶报表):

+------------+-----------------+----------+------------+----------------+
| Date       | PreviousBalance | Loan     | Collection | CurrentBalance |
+============+=================+==========+============+================|
| 14/02/2012 | 00.00           | 10000.00 | 00.00      | 10,000.00      |
| 15/02/2012 | 10,000.00       | 00.00    | 500.00     | 9,500.00       |
| 16/02/2012 | 9,500.00        | 00.00    | 500.00     | 9,000.00       |
| 18/02/2012 | 9,000.00        | 5,000.00 | 00.00      | 14,000.00      |
+------------+-----------------+----------+------------+----------------+

Answer 1:

这是很容易,它似乎是:

  1. 创建两个运行总计一为贷款{#TLoan}为外地{table.Loan} ,一个用于收集{#TCol}为外地{table.Collection}

  2. 创建一个公式: {@Total}具有以下内容:

{#TLoan}-{#TCol}

这将有CurrentBalance值。

  1. 创建另一个公式: {@Prev}与以下内容:

{@Total}-{table.Loan}+{table.Collection}

这将有PreviousBalance值。

使用这种方法不需要复杂的公式,结果是预期。

希望能帮助到你!



Answer 2:

使用的previous()函数好像这将是该解决方案的不二之选,但是由于公式不能互相引用循环(即{@CurrentBalance}不能引用{@PreviousBalance} ,反之亦然)也不能是递归这是更难实现这种方式比第一似乎。

相反,你应该使用一个变量来跟踪事务之间的平衡。 您可以通过创建3个公式,并把他们在您的报告中的相应部分做到这一点。

// {@initVars} - Initialize balance variable
//This formula should be placed in your report header
whileprintingrecords;
numbervar balance:=0

// {@previousBalance} - Display previous line's balance
//This formula should be placed in your Details section
whileprintingrecords;
numbervar balance;

// {@currentBalance} - Display current balance after transactions
//This formula should be placed in your Details section
evaluateafter({@previousBalance});
numbervar balance := balance + {table.LoanAmount} - {table.CollectionAmount}


Answer 3:

我认为有多种方式。 怎么样:

previous({Table.Field})

或者你可以有一个运行总计然后执行{#total} - {Table.Field}



Answer 4:

在存储过程中,通过使用函数从表中读取并返回以前的平衡,并将其存储在变量中然后内部的存储过程读出的当前的余额存储内部变量先前平衡。 使用union读取以前的和分离行目前并让他们在报告中。



Answer 5:

尝试:

// {@PreviousBalance}
If PreviousIsNull({@CurrentBalance}) Then
  0
Else
  Previous({@CurrentBalance})


Answer 6:

从存储过程(如果使用的是一个),如果不使用SP你扳排序的数据表或数据按日期ASC设置命令由日期ASC中的数据,或,然后必须确定分组标准(客户端Id)至组信息的一个客户端,例如在这样的排序,正如你提到的分组,可以从组(字段资源管理器 - >组名称字段 - >插入组)记录



Answer 7:

请看看这个链接 。 您还没有指定的底层数据源,所以我找到了MS SQL的样本。

如果你没有为了查询/编辑存储过程对数据库的访问,你可以写一个foreach循环,并计算相应的值。 问题是,报告通常汇总,切片和过滤数据。 的“以前”和“下”的概念失去了它在这方面的意思。



文章来源: Store Previous row value for current row in Crystal Report