1

Crystal Report について質問があります。ストアド プロシージャからデータを取得した既存のレポートがあります。データは次のようになります。

部門|グループ レベル 1|グループ レベル 2 |グループ レベル 3|値
------+-------------+-------------------+------- ------+--------
IT |資産 |流動資産 |現金 |100
CORP |資産 |流動資産 |現金 |200
IT |資産 |流動資産 |売掛金 |300
CORP |資産 |流動資産 |売掛金 |400
IT |資産 |固定資産 |土地 |500
CORP |資産 |固定資産 |土地 |600
IT |負債 |流動負債|賃金 |100
CORP |負債 |流動負債|賃金 |200
IT |負債 |流動負債|税金 |100
CORP |負債 |流動負債|税金 |100
IT |負債 |長期 |社債 |300
CORP |負債 |長期 |社債 |400

実際のデータには、2 つだけでなく、さらに多くの区分がある場合があります。新しいレポートでは、次のようなレポートが必要です。

                          | | それ | それ 株式会社
流動資産
現金 | 100 | 200
売掛金 | 売掛金 300 | 400
総流動資産 | 400 | 600

固定資産
土地 | 500 | 600
総固定資産 | 500 | 600

総資産 | 900 | 1200

流動負債       
賃金 | 100 | 200
税金 | 100 | 100
流動負債合計 | 200 | 300

長期
債券 | 300 | 400
長期合計 | 300 | 400

総負債 | 500 | 700

そのため、レポートは分割数に応じて右側に展開されます。1 ページに最大 10 部門を保持できると仮定します。次に、部門が 15 ある場合、最初のページには部門 1 から 10 が表示され、2 ページ目には部門 11 から 15 が表示されます。分割数は自由です。また、項目はかなり多いです (多くの流動資産、負債などが存在する可能性があります)。

今のところ、ストアド プロシージャで書式設定を行ってみたので、返されるデータは次のようになります。

ページ番号 | グループ レベル 1 | グループ レベル 2 | グループ レベル 3 | ディビジョン 1 | 値 1 | ディビジョン 2 | 値 2
------+---------------+---------------+--------- ------+---------+---------+-------+--------
1 | アセット | 現在の資産 | 現金 | それ | それ 100 | 株式会社 | 200
1 | アセット | 現在の資産 | 売掛金 | 売掛金 それ | それ 300 | 株式会社 | 400

等々。部門 11 から 15 では、ページ番号を 2 に設定します。次に、Crystal Report で、ページ番号、グループ レベル 1、グループ レベル 2、およびグループ レベル 3 でグループ化します。したがって、Crystal レポートにはすべてが表示されます。ページ番号に基づいてページに。

問題は次のとおりです。
- 項目が多い場合、1 ページに収まらない場合があります。たとえば、1 ページが最大 30 行に収まると仮定すると、40 行ある場合、10 行が 2 ページ目に表示されます。しかし、2 ページ目には区分 11-15 の最初の 30 項目を表示し、3 ページ目には区分 1-10 の最後の 10 行を表示し、4 ページ目には区分 11-15 の最後の 10 行を表示したいと考えています。 .
- Crystal Report の累計は、グループが変更されるたびにリセットされます。40 個のアセットがあるとします。次に、3 ページ目と 4 ページ目にある 40 個のアセットの後に、アセットの合計が表示されます。現在の合計が正しく表示されるように計算するにはどうすればよいですか? (3ページ目と4ページ目には異なる部門の合計が表示されるはずなので、直接合計することはできません)。

この問題の解決策や、データをフォーマットするためのより良い方法はありますか?

ありがとう。

4

3 に答える 3

0

あなたの正確な問題は何ですか?

  1. レポートをフォーマットするか、現在の合計を計算しますか?

以下のプロセスを実装する

  1. 「Grouplevle1」でグループを作成し、Group1 ヘッダーを非表示にしないでください
  2. 「Grouplevel2」でグループを作成し、Group2 ヘッダーを抑制しないでください。2 つのテキスト フィールドを作成し、「IT」と「Corp」と記入して、レポートに配置します。
  3. 「Grouplevel3」でグループを作成し、group3 ヘッダーを抑制します
  4. 式を書き、以下のコードを追加します

    If Divison="IT" Then Value Else o wirte 別の式を作成し、以下のコードを追加します

    IF Divison="Corp" Then value Else 0

両方のフォーラムを詳細に配置し、すべてのセクションに要約を追加します。また、詳細セクションを非表示にします

すべてのグループ フッターに必要なテキストを記入

これで問題が解決します。

于 2013-08-13T05:38:20.380 に答える
0

一般的に、これは私が最終的に問題を解決する方法です:

1. Define how many divisions (NumColumn) to be displayed in a single page.
2. Create a table to store the mapping of the division. The table has column that stores PageOffset and ColumnNo. PageOffset stores the number of page to be added when displaying a particular division. For example, if there are 15 divisions, and a page can only accommodate 10 divisions, then the first 10 divisions will have `PageOffset = 0` and the last 5 divisions will have `PageOffset = 1`. The ColumnNo is the position of a division in the report column. So first division will have value of 1, second division will have value of 2 and so on. 11th division will have the value of 1, etc.
3. Create a result table. For each column in the report, we have 2 database field, value and total.
4. Loop for each record, sorted by the group.
    Select the position of the division from the table in step 2. If `ColumnNo = 1` insert a row in the result table. E.g. for division 1 and 11 it will create rows in result table.
    After that update the row data, based on the position of the division. So for division 1-10 will update the row created by division 1, division 11-15 will update row created by division 11.
5. Count the number of items in each group and store it into a table.
6. Define how many rows (RowsInPage) to be displayed in a single page.
7. Set PageAdd = 0 and RowsLeft = RowsInPage
8. Loop for each group
    Retrieve the number of rows needed for this group
    Add the page number of each row with PageAdd
    Decrement RowsLeft
    If RowsLeft = 0
        Increment PageAdd
        Set RowsLeft = RowsInPage
    End If
9. Loop for each group
    Loop from 1 to NumColumn
        Update the total field for each division. This total field value will be put in the report as the running group total for that particular division.
于 2013-11-07T07:46:08.330 に答える
0

クロスタブを使用することをお勧めします。

設定:

  • 列:Division
  • 行: Group Level 1Group Level 2Group Level 3
  • 要約フィールド:Value

正しい間隔を得るには、行グループ化フィールドを試してみる必要があります。列のサイズ変更についても同じことを行います。

于 2013-08-13T20:55:13.073 に答える