- PR -

印刷処理が不安定。。。

投稿者投稿内容
のすけ
常連さん
会議室デビュー日: 2006/11/14
投稿数: 28
投稿日時: 2006-12-18 11:40
ActiveReportsを用いた印刷処理について、ご質問致します。

<前提>
◆.NETFrameworkのバージョン: 2.0
◆Visual Studio .NETのバージョン: 2005
◆オペレーティングシステム: WindowsXP Professional
◆OSサービスパック使用状況: Service Pack 2
◆開発言語: Visual Basic .NET

<要件>
サーバ側でActiveReportsオブジェクトを作成、当該ActiveReportsオブジェクトをWebViewer(ActiveXビューワ)に引き渡し、クライアントでWebViewer(ActiveXビューワ)レポート実行によりリスト出力する。

<質問>
印刷処理が不安定なのですが、原因及び回避策が分かりません。
具体的には、下記サンプルロジックで、印刷されない(何らの紙もプリンタ出力されない)「場合がある」という事象が発生しており、困っております。
「場合がある」というのは、正しく(印字内容も正で)リスト出力される場合もあれば、印刷されない(何らの紙もプリンタ出力されない)場合もあり、そこに規則性が見出せないという状況を意味しています。

<補足>
同プロジェクトをWEBサイト発行してWEBサーバ(下記前提)に登載、クライアントより同サイトから印刷処理を行った場合も同様です。
◆オペレーティングシステム: Windows2000Server
◆IISのバージョン: 5.0
なお、IISの設定(マッピングなど)につき、ヘルプ通りに設定されていることは確認済です。

どなたか、原因および回避策がお分かりの方がいらっしゃいましたら、ご教示頂けると幸いです。
以上、宜しくお願い申し上げます。

<サンプルコード>

【sample.aspx.vb】(btnPrint_Clickメソッドにて実装)
'印字内容を設定
Dim htPrintValue As New Hashtable
Dim lblBikou1 As Label = Me.fmvKakutei.Row.FindControl("BIKOULabel")
htPrintValue.Add("strBikou1Val", lblBikou1.Text.Trim)
'自動印刷用のWebViewer1を表示、使用可に設定
WebViewer1.Visible = True
WebViewer1.Enabled = True
'帳票印刷実行
Dim rpt As New doSampleList(htPrintValue)
rpt.Run(False)
WebViewer1.ClearCachedReport()
WebViewer1.Report = rpt
'デバッグ用にビューワサイズを拡大
WebViewer1.Height = 800
WebViewer1.Width = 800
'←ここでWebViewerを画面表示させると、中身が「空っぽ」の場合がある。
'←これが問題と思われる。

【sample.aspx】
<script type="text/javascript" language="JavaScript" for="mWebViewer1_ActiveX" event="LoadCompleted">
//帳票自動出力
comFunc_autoPrintReport();
</script>

【comFunc_autoPrintReport()】:jsファイルにて実装。
document.all("mWebViewer1_ActiveX").Printer.PaperSize = 9; //PaperSize=9 : A4
document.all("mWebViewer1_ActiveX").Printer.Orientation = 1; //Orientation=1 : 縦
document.all("mWebViewer1_ActiveX").Printer.DisplayProgressDialog = false;
document.all("mWebViewer1_ActiveX").PrintReport("False");
未記入
ベテラン
会議室デビュー日: 2003/06/26
投稿数: 76
投稿日時: 2006-12-18 17:07


[ メッセージ編集済み 編集者: 未記入 編集日時 2007-01-19 19:48 ]
のすけ
常連さん
会議室デビュー日: 2006/11/14
投稿数: 28
投稿日時: 2006-12-18 17:31
ぜうすさん、ご返答ありがとうございます。

実は以前、ControlLoadedイベントで実装しており、別の不具合が発生していたのですが、メーカーのサンプルを見てみると、LoadCompletedが用いられており、これを実装するとその不具合については回避できたのでした。。。

というわけで、原因は別のところにあるようです。。。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-12-19 22:14
引用:

のすけさんの書き込み (2006-12-18 11:40) より:
ActiveReportsを用いた印刷処理について、ご質問致します。


ごめん。悪いけど、日本語の勉強を、先にやってきてください。
→質問いたします。

「ご質問」って、自分の行動に「御」はつけません。


追加:
使い慣れない言葉を無理に使うと、よけにわからなくなります。
いつも使っている言葉でかまわないので、状況を説明することに労力をかけてください。

この書き方だと、「状況説明も悪い」と取られるかも。いや、そっちは十分です。
「必要以上に丁寧にしなくていい」ということで、お願いします。

[ メッセージ編集済み 編集者: Jitta 編集日時 2006-12-19 22:17 ]

[ メッセージ編集済み 編集者: Jitta 編集日時 2006-12-19 22:31 ]
のすけ
常連さん
会議室デビュー日: 2006/11/14
投稿数: 28
投稿日時: 2006-12-20 11:33
<1>印刷処理が不安定。。。の件

自己解決しました。
WebViewer(ActiveXビューワ)レポートを実行するscriptを<head>タグの中に書いていたことが原因のようです。同scriptを<body>タグの最後に実装すると、不安定性は解消されました。
お騒がせ致しました。

<2>Jittaさんのご指摘の件

Jittaさん、ご指摘ありがとうございます。
(←この「ご」は正しいはず!)

「ご質問」の言葉の件ですが、これはなかなか難しい問題かと思います。

確かに、Jittaさんのおっしゃる通り、原則として、自分の行動に「御」はつけません。「ご質問をする」は明らかに間違った日本語だと思います。(「を」が入っているところがポイント。)

しかし、「ご質問する」あるいは「ご質問致す(致します)」だとどうでしょうか。
「ご〜する」(「お〜する」)というの謙譲語のルールがありますので、 「ご質問する」という日本語に間違いはないと考えます。

Jittaさんは、おそらく「質問」を名詞として捉える、という前提に立った議論を展開されていると思われます。これに対し、私は「質問する」という動詞に着目した用法での言葉遣いだったと言えるのではないでしょうか。

常々、敬語は難しいと思いながらも、美しい日本語を使いたいという気持ちはありますので、こうした日本語のご指摘も大変ありがたく思います。上記の考え方に誤りがあれば、ご指摘頂けると幸いです。(←「頂ける」の使い方、正しいでしょうか?)

あと、状況説明は十分とのお言葉、ありがとうございます。自信がつきました。

今後とも宜しくお願い致します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-12-20 21:25
話それますが。

> 私は「質問する」という動詞に着目した用法での言葉遣いだったと言えるのではないでしょうか。
違います。自分の動作か、相手の動作か、というところです。
「自分の行動に」と書いています。行動することは、名詞ではありません。

 あ、「ご質問」としか書いていないからか。失礼しました。「質問する」という行動は、自分が行うものです。したがって、ここは謙譲語を用いることとなり、「質問いたします」。
 また、自分が講師などをして、聴衆に質問がないか尋ねるとき。このとき、「質問する」のは聞いてくださっている相手なので、「ご質問は、ありますか」または「質問は、ございませんか」となります。ここで「ご質問は、ございませんか」とならないのは、「ご質問」と「ございます」で二重敬語になるためです。

 もっとも、最近では「ご用意いたしました」など、普通に使っちゃうんですけどね。
(用意するのは自分なので、「ご」は付けない)

 で、私は「質問するからって、敬語使う必要ないやん」派です(いつからそんな派が出来たんだ!というツッコミは無し)。
 少なくとも私は、質問内容から「こういうところが間違えやすいんだ」という情報をいただいています。また、疑問に思ったことを調べて知識とさせていただいています。
 つまり、Give & Take が成り立っています。対等でいいじゃない。
(だから、Take(もらう)する以上、Give(あげる)してよ。と言うのです)


本題の方:
引用:

WebViewer(ActiveXビューワ)レポートを実行するscriptを<head>タグの中に書いていたことが原因のようです。同scriptを<body>タグの最後に実装すると、不安定性は解消されました。


う〜ん?どこかに「script 要素は head 要素に埋め込もう」みたいな話題があったんだけど。。。

 もしかして、読み込み時に実行されるようなスクリプトになっていますか?もしそうなら、body の onload イベントで励起されるようにすれば、完全に安定しますよ。

って、あ・・・先輩に、根拠を質してください。
また、「なぜ?」ってところを考えるようにしてください。

_________________
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-12-22 00:06
引用:

Jittaさんの書き込み (2006-12-20 21:25) より:
う〜ん?どこかに「script 要素は head 要素に埋め込もう」みたいな話題があったんだけど。。。


このスレッドのことですね。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=34919&forum=7

こっちは解決したのかな?>のすけさん

引用:

 もしかして、読み込み時に実行されるようなスクリプトになっていますか?もしそうなら、body の onload イベントで励起されるようにすれば、完全に安定しますよ。


ダウトで御座います。(ヘンな敬語)

引用:

のすけさんの書き込み (2006-12-18 11:40) より:
【sample.aspx】
<script type="text/javascript" language="JavaScript" for="mWebViewer1_ActiveX" event="LoadCompleted">
//帳票自動出力
comFunc_autoPrintReport();
</script>


このスクリプトは、<object>タグに埋め込んだActiveXコントロールが発するLoadCompletedイベントに合わせて
comFunc_autoPrintReport()というfunctionをコールしているわけで、
「bodyのloadが完了している」ことではなく、「ActiveXコントロールのloadが完了している」ことが重要なのです。
#bodyのload完了時にbody内のobjectタグのActiveXコントロールのload完了て保証されるんでしょうか?
#ここらへん自分で確かめてないので、「ダウト」の直訳通り「疑わしい」というレベルのつっこみです。

もしobjectタグが
<object id=XXX etcetc... onLoadCompleted="comFunc_autoPrintReport()">
みたいな書き方をサポートしているならこれでおkだと思うんですが、
確か上記引用コードはヘルプだったかGrapeCityのサイトだったかに載ってる公式のサンプルコードだったような…
だとしたらそっちに合わせといた方が無難ですよね。

で、<script>タグ内は「読み込まれた時点」ではなく、
「forのidのobjectタグのActiveXコントロールのeventに書いたイベントが発生した時点」で実行されるんだけど、
タグ内のコード自体は逐次実行される形式だから、<object>タグより後に書いた方が無難でしょう。
<object>タグはbody内にあるので、必然的に<script>タグもbody内に書くことになります。
#記憶だけで書いてるので100%正しい自信はありません。悪しからず…あくまで参考程度に捕らえてください。
のすけ
常連さん
会議室デビュー日: 2006/11/14
投稿数: 28
投稿日時: 2006-12-22 13:56
>Jittaさん、ぼのぼのさん、ご返信ありがとうございます。

<1>本スレッドに関して

scriptを<body>タグの最後に実装すればよいと判断した根拠ですが、ぼのぼのさんが書かれた通り、「タグ内のコード自体は逐次実行される形式だから」という理解でした。
<object>タグを使用していたかどうか、

ちなみに、onLoadイベントは最初に実装していたのですが、 これがうまくいかず(メーカーのサンプルに基づき)onLoadを放棄して、LoadCompletedにしました。
(当時、Web開発超初心者ゆえ、「そんなものなのか」と思う程度でした。。。)
ただ、Jittaさんが提示された「bodyの」onLoadで試していたか、記憶に曖昧です。
ひょっとしたらJittaさん方式でうまくいくかもしれませんね。
※本日、給休暇につき、ロジック、環境ともに無い状態ですので、中途半端な回等となりりますこと、ご了承下さい。

<2>引用されたスレッドに関して

「こっちは解決したのかな?」と問われましたのでお答えします。
「解決しました。」
申し訳ございません。「投稿日時: 2006-11-28 11:09」の内容で私の中では問題解決となっておりました。しっかりと事後報告すべきでした。
その後、多くの方が議論されたようで(一部、拙い日本語ゆえ、私の伝えたいことが誤解されていた部分もありましたが…)、これからじっくりと読むこととします。

ぼのぼのさんは、問題分析の手法(プロセス)まで提示して頂いたようで、感謝しております(まだ読んでないですが。。。)。ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)