4

我想检索当前行中的前一行值,如下所示(Crystal Report 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      |
+------------+-----------------+----------+------------+----------------+
4

7 回答 7

3

这比看起来容易:

  1. 创建两个运行总计,一个用于 Loan{#TLoan}字段{table.Loan},一个用于 Collection{#TCol}字段{table.Collection}

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

{#TLoan}-{#TCol}

这将具有 CurrentBalance 值。

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

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

这将具有 PreviousBalance 值。

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

在此处输入图像描述

在此处输入图像描述

希望能帮助到你!

于 2014-06-06T08:19:44.287 回答
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}
于 2014-06-04T16:48:02.400 回答
1

我认为有很多方法。怎么样:

previous({Table.Field})

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

于 2012-06-17T16:47:30.137 回答
1

在存储过程中,使用从表中读取并返回先前余额并将其存储在变量中的函数将先前的余额存储在变量中,然后在存储过程中读取当前余额。使用union在单独的行中读取上一个和当前,并在报告中获取它们。

于 2014-06-05T09:02:30.560 回答
0

从存储过程(如果您使用一个)按日期 ASC 对数据进行排序,或者如果您不使用 SP,您可以按日期 ASC 对数据表或数据集进行排序,那么您必须确定 GROUPING 标准(ClientId)以将一个客户的信息分组,例如按照您提到的排序和分组,您可以将记录分组(字段资源管理器->组名称字段->插入组)

于 2014-06-03T08:38:30.710 回答
0

尝试:

// {@PreviousBalance}
If PreviousIsNull({@CurrentBalance}) Then
  0
Else
  Previous({@CurrentBalance})
于 2014-05-30T12:24:20.517 回答
0

请看这个链接。您尚未指定基础数据源,因此我找到了 MS SQL 示例。

如果您无权访问数据库以查询/编辑存储过程,您可以编写一个 foreach 循环并计算适当的值。问题是报告通常会汇总、切片和过滤数据。“之前”和“之后”的概念在这种情况下失去了意义。

于 2014-06-05T22:51:55.783 回答