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. {#TLoan}フィールドの Loan用とフィールド{table.Loan}の Collection{#TCol}用に1 つずつ、合計を 2 つ作成します{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) を決定して、たとえば、前述の順序とグループ化で1つのクライアントの情報をグループ化すると、レコードをグループ化できます(フィールドエクスプローラー->グループ名フィールド->グループの挿入)

于 2014-06-03T08:38:30.710 に答える
0

このリンクを見てください。基礎となるデータソースを指定していないため、MS SQL のサンプルを見つけました。

ストアド プロシージャをクエリ/編集するためにデータベースにアクセスできない場合は、foreach ループを記述して適切な値を計算できます。問題は、レポートは通常、データを要約し、スライスし、フィルタリングすることです。「前」と「次」の概念は、その文脈では意味を失います。

于 2014-06-05T22:51:55.783 に答える
0

試す:

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