2022年4月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
無料ブログはココログ

CrystalReports

CrystalReportsでPDFファイルに出力する際のエラー

久しぶりにCrystalReports(VS2015付属)のプログラムを修正したところ、
ExportToStreamメソッドで以下のエラーが出て出力できない。

[エラー内容]
ファイル C:\Users\hoge\AppData\Local\Temp\hoge {2313131-12F6-4AF0-8923-0328A3C9A333}.rpt のエラー :
この操作はサポートされていません。

WindowsUpdateのKB3102429が邪魔しているらしい。
アンインストールしたらエラーがでなくなった。

CrystalReports ReportDocumentインスタンス作成時のエラー

VS2005付属のCrystalReportsでインスタンス作成時に
「CrystalDecisions.CrystalReports.Engine.ReportDocument' のタイプ初期化子が例外をスローしました。」
( private ReportDocument mReport = new ReportDocument();)
というエラーが発生するようになった。
ついさっきまでエラーなく実行できていたはずなのに・・・
インストーラを作成して、インストールとアンインストールのテストを繰り返していたのがいけなかったのかなぁ。

VS2005の「機能の追加と削除」でCrystalReportsを一旦削除して、再びインストールしたら直った。

CrystalReports ASP.NETでPDF出力

ASP.NETでCrystalReportsを利用する場合に、CrystalViewerを利用する方法がありますが、
データ件数が多かったり、サブレポートを使用していたりするとViewerのレスポンスが悪く、パフォーマンス的に問題になることがあります。(推測ですがページ移動する毎に再度データを読み込んだりしているのでは・・・)
PDFに出力すると、レポート自体をイメージで出力するのでレスポンスが改善される場合があります。

ASP.NETからPDF出力する簡単な例(C#)
※VS2003

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;

// rptName:ファイル名指定します
// (例) ExportToPDF(@"C:\Inetpub\wwwroot\WebApplication1\CrystalReport1.rpt");

private void ExportToPDF (string rptName)
{
    ReportDocument Report = new ReportDocument();

    // レポートファイルの読み込み
    Report.Load(rptName);

    // オプションを取得および設定
    ExportOptions exportOpts;
    exportOpts = Report.ExportOptions;
    exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat;
    exportOpts.FormatOptions = new PdfRtfWordFormatOptions();

    ExportRequestContext req = new ExportRequestContext();
    req.ExportInfo = exportOpts;

    // ストリームへエクスポート
    System.IO.Stream outStream = Report.FormatEngine.ExportToStream(req);

    byte[] bLength = new byte [outStream.Length];
    outStream.Read(bLength, 0, (int)outStream.Length);
    outStream.Close();

    Response.ClearHeaders();
    Response.ClearContent();
    Response.ContentType = "Application/pdf";

    // ダイアログ表示
    Response.AddHeader("content-disposition","attachment; filename=test.pdf");

    // HTTP 出力ストリームに書き込み
    Response.BinaryWrite(bLength);
    Response.End();

}

・Report.FormatEngine.ExportToStreamでストリームにエクスポートしています。
・Response.ContentTypでPDFを指定します。
・Response.BinaryWriteでクライアントに送信しています。


2007/07/28 追記

// ダイアログ表示
Response.AddHeader("content-disposition","attachment; filename=test.pdf");


CrystalReports .NET(2005) 日付型をグループ項目にしたときの注意点

初期設定ではブレイクが日ごとではなく、週単位になっているから注意。

グループヘッダーを右クリック、「グループエキスパート」を選択
セクションの出力を「毎週」から「毎日」に変更

Cr_date1 Cr_date2

CrystalReports サブレポートのパラメータ指定

VisualStudio.NET(2002)付属のCrystalReportsでサブレポートのパラメータを指定するには

ParameterFieldDefinition parField = Report.DataDefinition.ParameterFields["パラメータ名","サブレポート名"];

と指定します。

CrystalReport For .NET

セットアップを作成して配布後、
「Cannot find keycodeV2.dll, or invalid keycode」というエラーがでる場合はキーコードが登録されていない。

http://japan.crystaldecisions.com/support/crystalreports9/faq_dotnet.asp#net_keycode_error

CrystalReports8 プレビュー時のエラー

ASPでCrystalReports8.0 を使ってWEB上からCrystalReportsViewerからプレビューを表示するようにしていたのですが、
別PCから同時にプレビュー実行すると以下のようなエラーになりました。

Microsoft VBScript 実行時エラー '800a0046'
書き込みできません。
xxxx.asp,行83

83行目の処理のコードは
session("oRpt").Database.LogOnServerEx "p2soledb.dll", Session("Dbserver"), Session("Dbname"), Session("Dbuid"), Session("Dbpass"), "OLE DB", Session("Dbconnect")
というようにSQL-Serverの接続設定をしていました。
いろいろ調査したのですが、英語のサイトなどにも情報がなかった。
確かな裏付けはないのですが、
C:\Windows\Crystal\p2soledb.dllのアクセス権でeveryoneをフルコントロールにしたら解決しました。

CrystalReports8 VB6でディストリビューションウィザードを使用して配布パッケージを作成

注意点

・CRPE32_RES_JP.DLL を CRPE32.DLL と同じフォルダにコピーする。

・接続データベースDLLを追加する
ADO接続(P2smon.dll)
OLE DB接続(P2soledb.dll)
DAO接続(P2bdao.dll)

参考URL
http://www.agtech.co.jp/support/faq/legacy/crystal_reports_legacy/v80j/all.html

2011/03/17追加
ODBC接続(P2sodbc.dll)

VisualStudio2005付属のCrystalReportsのデプロイ方法

(※x86のコンピュータを前提にしています)

1.マージモジュールのダウンロード

http://support.businessobjects.com/fix/merge_modules.asp#07
(アドレスが変わっています)
http://resources.businessobjects.com/support/additional_downloads/runtime.asp#07
の「Crystal Reports for .NET Framework 2.0 x86 Redistributable Package (32 bit)」
からダウンロードします。

2.ダウンロードしたZipファイルを解凍します。
CR Deployment using .NET Framework 2.0 Merge Modules.doc
CrystalReportsRedist2005_x86.msm
2つのファイルができあがります。

3.CR Deployment using .NET Framework 2.0 Merge Modules.docを参考にSetupパッケージを作成します。

(セットアッププロジェクトにCrystalReportsRedist2005_x86.msmを追加する)

CrystalReports 小数点以下の数値があるときは小数点第2位まで表示する

対象となるフィールドを右クリック→「フィールドの書式設定」→「数値」タブ→「ユーザ設定」→「数値」タブ→「端数処理」を「0.01」に変更します。
「小数点以下の桁数」の右側の「x-2」とかいうのをクリックして以下の式を入力します。

WhilePrintingRecords;
If {対象フィールド} - Truncate ({対象フィールド}) = 0 then
    1
Else
    If {対象フィールド} - Truncate ({対象フィールド},1) = 0 then
        1.0
    Else
        1.00


(上記の方法ではうまく表示されない場合があります)
2012/7/24 小数点以下の桁数指定方法修正


WhilePrintingRecords;
If {対象フィールド} - Truncate ({対象フィールド}) = 0 then
    0
Else
    If {対象フィールド} - Truncate ({対象フィールド},1) = 0 then
        1
    Else
        2