cancel
Showing results for 
Search instead for 
Did you mean: 

「レポートのロードに失敗しました」について

Former Member
0 Kudos

お世話になっております。

このフォーラムにて同じ質問がありまして内容を拝見致しましたが

明確な原因が判明していないようでしたので再度質問させていただきます。

以下の環境でアプリケーションを実行するとある特定の件数で

「レポートのロードに失敗しました」が発生します。(再現性100%)

<環境>

WindowsXP SP2 

Visual Basic.NET 2003

ACCESS2003

IBM Rational Robot

帳票出力先はMicrosoft Office Document Image Writer

<画面説明>

VB.NETで作成した画面でデータ入力を行い、その内容を

データベースに書き込みレポートをロードし帳票を印字している。

<動作説明>

Rational Robotを使用し画面を自動で操作し、連続して帳票を

出力している。

つまり、データ入力u21D2印刷u21D2データ入力u21D2印刷・・・の繰り返し

上記操作を行うと247件目で「レポートのロードに失敗しました」が

発生します。

画面は複数ありA画面では発生するがB画面では発生しません。

5画面試して発生したのは2画面のみです。(これは325件目で発生)

画面の差異は入力項目数が異なるだけで印刷部分の処理は

共通関数を使ってます。

<ロジック>

    'レポートファイル(.rpt)のパス名を取得

Dim strRptFile As String 'レポートファイル名(フルパス)

Dim tempReport As New CrystalReport1

Dim iCnt As Short

    strRptFile=XXXX.rpt

tempReport.FileName = strRptFile

For iCnt = 0 To tempReport.Database.Tables.Count - 1

tempReport.Database.Tables.Item(iCnt).Location = gstrLclMDB

Next

tempReport.PrintToPrinter(1, True, 0, 0)

      ・

      ・

    tempReport.Close() u2190CLOSEはちゃんと行ってます。

  上記ロジックではdisposeを行っておりませんがDisposeを入れても

  結果は同じでした。

<調査>

以下の調査を実施

①プリンタ先をOffice Image・・ではなくAdobe PDFに変更・・・事象発生

②プリンタ先をImageではなく紙に変更・・・事象発生

③ROBOTを使用せずに画面のみで実行(プリンタ先はImage)・・・295件目で発生

④ROBOTを使用せずに画面のみで実行(プリンタ先は紙)・・・800件でも発生せず

上記結果よりプリンタがImageの場合かRobotを使用した場合、発生することが判明。

ちなみにパフォーマンスモニタでメモリ、CPUの状態を見ましたが一番異常値が

出ていたのは事象が発生しない上記④でした。

気になった数値としてはPrivilegedTimeがTotal User Timeの150%から200%に

なっていましたが(適正値は15%)上記④は200%ぐらいだったので問題ないのかな

という感覚です。

原因特定が難しいのですが「レポートのロードに失敗しました」が発生する

要因として何が考えられるのでしょうか?

・存在しないレポートをロードした場合

・レポートのロードを行ったあと、CLOSEを行わずに連続してロードした場合

 の2件は今回は該当しません。

あとオブジェクトの開放が行われているかですがVB.NETは意識しなくても

オブジェクトの開放は標準機能で行われているとありましたので問題ない

と思ってます。

ご教授宜しくお願い致します。

Accepted Solutions (1)

Accepted Solutions (1)

former_member583013
Active Contributor
0 Kudos

toshihiro hirata 様、

>上記結果よりプリンタがImageの場合かRobotを使用した場合、発生することが判明。

となっている以上、Crystal Reports 側の問題と仮定するのは難しいですべ。Crystal Reports ではプリンタドライバが Adobe Acrobat や Microsoft XPS のような仮想プリンタなのか、通常のプリンタなのかは全く意識していません。Acrobat の場合は Reader を単独で使っているだけでも、プロセスが残ったりする事はよくあることですから Acrobat 側の問題の可能性が高いと思います。

レポートがロードできない問題の原因も千差万別なのですが、この場合はプリンタドライバ自身が利用しているメモリーが開放されずに問題を起こしていると思われます。CLOSE ではなく、レポートのオブジェクト自身を破棄してみてください。呼び出し側のレポートオブジェクトが居なくなる事でプリンタドライバ側も開放されるかもしれません。

残念ながら、Robot に関してはわかりません。Robot 利用時にしか発生しない問題は、Robot 側の制御に問題があると考えるのが自然ですね。

SCN フォーラムモデレーター

Former Member
0 Kudos

ご指摘ありがとうございます。

CLOSEのかわりにレポート自信のオブジェクトの破棄を試してみましたが結果は同じでした。

メモリについても500M増設して合計1Gで試してみましたが結果は同じ247件目でエラーが発生します。

あとアプリケーション・ヒープ不足エラーというのをネットで見かけましたので下記文献にあるように拡張して試しましたが結果は同じでした。

http://www.atmarkit.co.jp/fwin2k/win2ktips/071desktopheap/desktopheap.html

ということはメモリ関連ではないのかな?と思ってます。

私も最初に疑ったところ(何かがオブジェクトを開放してない)でしたが・・・

ちなみにパフォーマンスモニタで実行中のデータを取る限りではメモリ不足にはなって

いないようです。

あと下記のパターンで1回だけ発生していることが確認されてます。

 OS、画面は全く同じ環境でプリンタ紙出力のパターン。

 尚、この端末にはROBOTはインストールされてません。

 ちなみにプリンタはIBM Infoprint 1336J RPCS

つまりROBOTも使用せずにプリンタもイメージでなく紙への出力です。

入力はオペレータが行ってます。

発生頻度は約2年間で1回です(ほぼ毎日使用してる画面です)

※レポート自信の破棄ですが

 Dim tempReport As New CrystalReport1

   ・

   ・

 tempReport.Dispose

 と認識しておりますが間違ってないですよね。

11/20追記

プリンタドライバに問題があるのかどうかを調べるため以下を試してみました。

tempReport.PrintToPrinter(1, True, 0, 0) の部分をコメントにしてプリンタには

出力せずに繰り返し処理を行った場合。

結果は308件目でレポートロードエラーが発生しました。

ということでプリンタドライバ自身が利用しているメモリーが開放されずに問題を起こしている?

の可能性は低くなったと思われます。

Edited by: toshihiro hirata on Nov 20, 2008 5:10 AM

former_member583013
Active Contributor
0 Kudos

>発生頻度は約2年間で1回です(ほぼ毎日使用してる画面です)

エラーの原因は色々あるので、1 回だけ発生したものは別の原因と考えたほうが良いかと思います。

>tempReport.Dispose

>と認識しておりますが間違ってないですよね。

Dispose の上で、オブジェクトの参照を破棄して、新たに New を行うようにしてみてください。過去には Dispose だけでは解決できなかったエラーが、廃棄 u2192 New で改善した例がかなりあります。

New u2192 ロード u2192 Viewer 表示 u2192 ボタンクリック u2192 ReportSource = nothing u2192 破棄 u2192 nothing を繰り替えす簡単なプログラムを作成し、400 回以上動作させましたが問題はありませんでした。

ProcessExplorer で Virtual Size を確認しながらでしたが、増減を繰り返す(340 ~ 360M 程度)だけで大きなメモリーリークもありませんでした。

SCN フォーラムモデレーター

Former Member
0 Kudos

返信ありがとうございます。

現在のロジックはNewu2192Closeu2192New・・・の繰り返しになっておりますがこれをご指摘のように

Newu2192Disposeu2192破棄(Nothing)u2192New・・・・に修正して再実行してみましたが結果は変わらず247件目でレポートロードエラーとなりました。

引き続き調査は行いますが迷宮入りの可能性が高くなった感じがします。

ほかに何かご助言等ございましたらお願いします。

former_member583013
Active Contributor
0 Kudos

>ほかに何かご助言等ございましたらお願いします。

現在も ROBOT 利用時のみに発生しているのですよね。利用していない環境での再現性が確認できなければこれ以上の調査は難しいですね。

>ということでプリンタドライバ自身が利用しているメモリーが開放されずに問題を起こしている?

の可能性は低くなったと思われます。

レポートのプリンタ設定は「プリンタなし」ではなく、Document Writer が指定されていますか?

その場合、印刷処理を行わなくてもプリンタの情報は取りに行くので、影響が無いとは言い切れません。

あと、他のプリンタドライバ(HP, EPSON, CANON など)で発生するかを確認してみてください。

SCN フォーラムモデレーター

Former Member
0 Kudos

返信ありがとうございます。

ROBOTを使用しない状態では再現性はかなり低いですが発生はしております。

VB.NETの画面だけで2000回まわすようにして動作させたら1800件目付近で

レポートロードエラーが発生しました。(2回やって1回発生という頻度です)

プリンタドライバを他社にかえて試すという方法ですが現在IBM社のプリンタしか

なく、試せません。

ロードエラーが発生するのは仕方ないのでエラー発生時VB.NET側でリトライして

回避させようと試みたのですがダメでした。(連続でエラーとなってしまう)

エラーが発生する件数はわかっているので件数制限で運用してもらうように

お客様にお願いすることになりそうです。

former_member583013
Active Contributor
0 Kudos

>プリンタドライバを他社にかえて試すという方法ですが現在IBM社のプリンタしかなく、試せません。

適当なプリンタドライバをインストールするだけでも確認は可能です(スプールに溜まりますが)。

環境的に追加は許可されませんか。

もしくは VMware または VirtualPC を利用する事は可能ですか?

あと、1800回と言う事ですが、実運用で想定されている運用方法でしょうか?

SCN フォーラムモデレーター

Former Member
0 Kudos

>適当なプリンタドライバをインストールするだけでも確認は可能です(スプールに溜まりますが)。

>環境的に追加は許可されませんか。

>もしくは VMware または VirtualPC を利用する事は可能ですか?

許可を取って試してみたいと思います。

>あと、1800回と言う事ですが、実運用で想定されている運用方法でしょうか?

上記は実運用では想定していない運用なので問題はないと思ってます。

ROBOT運用で発生してしまう(200件台という浅いところでの発生は)のは

運用上、問題ありです。

以上

Former Member
0 Kudos

>あと、他のプリンタドライバ(HP, EPSON, CANON など)で発生するかを確認してみてください。

NECのMultiWriter 2150というプリンタで試してみましたが308件目で

レポートロードエラーが発生しました。

若干件数は多く(60件ほど)処理されましたが結果は同じでした。

Answers (2)

Answers (2)

former_member583013
Active Contributor
0 Kudos

更新が無い為、Answered に変更させていただきます。

SCN フォーラムモデレーター

former_member583013
Active Contributor
0 Kudos

1件だけ過去のケースで ROBOT が関連するものがありました。厳密に言えば、ROBOT を使うことで問題を早く発生させているので、今回の問題に似ていると思われます。

その問題は ASP.NET でしたが、この問題に関しては VB.NET とだけ書いてあるだけで、WinForm か WebForm かがわかりませんので該当しない可能性もあります。

([質問をする前、する時、した後に|; をご覧ください)

そのケースでは 32bit の限界である 2G のメモリーをスレッドで使い切ってしまっていました。これは Crystal Reports のメモリーリーク ではなく ASP.NET の Cache によるものでしたので、Crystal Reports 側では何の対応もせず、ユーザーのアプリケーションで積極的に Cache の破棄を行うように回答をしています。

もし、Cache を使用しているならば Session への変更を、Session を利用されている場合は、Session のタイムアウトを早めるか、意図的に Session の破棄を行ってみてください。

SCN フォーラムモデレーター

Former Member
0 Kudos

>その問題は ASP.NET でしたが、この問題に関しては VB.NET とだけ書いてあるだけで、WinForm か WebForm かがわかりませんので該当しない可能性もあります。

こちらはWinFormとなりますので該当しないと思いますが現象としては

非常に似てますね。

大変貴重な情報です。ありがとうございます。

former_member583013
Active Contributor
0 Kudos

WinForm の仕組みから考えると、可能性は低そうですね。

いっそ、100 回毎にアプリケーションの再起動では駄目なのですか? ROBOT が前提で自動で回すだけであれば再起動自体が問題になることは無いように思えます。

現時点では、これ以上提供可能な情報は持ち合わせていません。何か新しい情報が見つかればお知らせください。

なお、アップデートが無いまま約 2 週間経過した時点で「Answered」のステータスに変更させて頂きます。それ以降に何か情報が見つかった場合は、新規の質問としてください。

SCN フォーラムモデレーター

Former Member
0 Kudos

>いっそ、100 回毎にアプリケーションの再起動では駄目なのですか? ROBOT が前提で自動で回すだけであれば再起動自体が問題になることは無いように思えます。

200件区切りで処理を行っていただく(つまり再起動ということ)案をお客様に提示したのですが

それでは自動運用させている意味がないということで難色を示されました。

ではROBOT側で200件毎に自動でVB.NET側の画面を終了させて再度起動させてみてはどうかと

考えてみましたが制御がかなり難しく新たなバグを引き起こす可能性がありましたので止めました。

結論としては解決策がないので200件区切りで運用して頂く方向になりそうです。

尚、ROBOTの方は現在新バージョンへの移行に向けて作業中(来年頭の予定)ですので

新バージョンにて問題が解決したら報告したいと思います。

ありがとうございました。