クイックレポート書式をデータとして読み込む

Go down

クイックレポート書式をデータとして読み込む

投稿 by Shuichi Masuno on 2017-10-21, 1:36 pm

随分前(v11)の頃にクイックレポートのテンプレートをデータとして、データベース内に読み込み、必要に応じて取り出して使用できるようにしていました。


   USE CHARACTER SET("Shift-JIS";1)
RECEIVE PACKET($DocNum;$Temp;70000)
CLOSE DOCUMENT($DocNum)
DELETE DOCUMENT(Document)
CREATE RECORD([Templates])
[Templates]Name:=Path_or_file (Document;0)
[Templates]DocType:=bNewLab
[Templates]FileNum:=Table($FilePtr)
[Templates]Template:=$Temp
SAVE RECORD([Templates])
データからの読み込みはシステム変数のDocument に展開してクイックレポートをプリントする。

SEND PACKET($DocNum;[Templates]Template)
CLOSE DOCUMENT($DocNum)
QR REPORT($FilePtr->;Document)
こんな感じで、問題なく動いていたのですが、V16にアップグレードしてから、QR REPORT($FilePtr->;Document)の段階で Attempt to read beyond end of stream のエラーが出るようになってしまいました。ユニコードの関連かと思いUSE CHARACTER SET("Shift-JIS";1) 等を入れてみたりして試してみましたが、解決出来ません。
どなたか ヒントがありましたら、救済下さい。

Shuichi Masuno

投稿数 : 4
登録日 : 2017/08/20

トップに戻る Go down

Re: クイックレポート書式をデータとして読み込む

投稿 by miyako on 2017-10-23, 12:09 pm

クイックレポートはUSE CHARACTER SETの影響を受けません。

http://doc.4d.com/4Dv16/4D/16.2/USE-CHARACTER-SET.301-3434218.ja.html

HTMLテンプレートでは,

text/html;charset="<!--#4DQRCharSet-->"

のように記述されているかと思いますが,
この部分は常に"UTF-8"で置換されるはずです。

http://doc.4d.com/4Dv16/4D/16.2/QR-SET-HTML-TEMPLATE.301-3433676.ja.html

「v11の頃」は,非Unicodeモードで動作されていたのでしょうか。
64ビット版の4Dに非Unicodeモードはありません。

http://doc.4d.com/4Dv16/4D/16/Using-4D-Developer-Edition-64-bit-versions.300-3080161.ja.html

64ビット版の4Dを使用するのであれば,Unicodeモードを前提にメソッドを記述する必要があります。

Unicodeモードの設定は,下記の方法で調べることができます。

$isUnicodeMode:=1=Get database parameter(Unicode mode)

64ビット版かどうかは,下記の方法で調べることができます。

$is64Bit:=Version type ?? 64 bit version

http://doc.4d.com/4Dv16/4D/16.2/Version-type.301-3433354.ja.html

USE CHARACTER SET(...;1)はRECEIVE PACKET,
USE CHARACTER SET(...;1ではなく0)はSEND PACKETに対して作用します。

とはいえ,前述したようにクイックレポートはUTF-8で固定ですので,
Shift_JISのテンプレートと併用することは難しいかもしれません。

なお,Shift_JISは,狭義のSJISを指しますので,
「WIndows-31J」または「x-mac-japanese」でベンダーを指定したほうが,扱える文字種が増えます(Mac版の場合)。

まずは,お使いのv16が64ビット版かどうか,Unicodeモードで動作しているのかどうかを確認されるのはいかがでしょうか。

miyako

投稿数 : 211
登録日 : 2016/07/05

トップに戻る Go down

Re: クイックレポート書式をデータとして読み込む

投稿 by Shuichi Masuno on 2017-10-24, 10:21 am

miyako様
ご指摘ありがとうございます。申し遅れましたが、私が現在4Dを使用している環境は、MAC OS High Sierra(昨日Sierraよりアップデートしましたところ、4Dのストラクチャーファイルの日本語表示がおかしくなりました)。4DはV16R3  64ビット ユニコードは 返値1とありましたので、Unicode モードと判断します。 RQは昔のレポートをそのまま使用した物ではなく、新しい環境下で作成したQRです(QR内のタイトル表示には、日本語英語が混在しています)。 それをSend packet でテキストフィールドにセーブ、又をreceive packet で取り出してと言ったと作業で、メソッドは以前のメソッドの一部を転用しました。この環境、プロセスで何処で文字環境を考慮するべきか教えて頂けると、ありがたく思います。 宜しくお願いします、

Shuichi Masuno

投稿数 : 4
登録日 : 2017/08/20

トップに戻る Go down

Re: クイックレポート書式をデータとして読み込む

投稿 by miyako on 2017-10-24, 1:20 pm



4Dのストラクチャーファイルの日本語表示がおかしくなりましたとのことですが,どのように「おかしくなった」のでしょうか。

なお,v11の場合,ストラクチャエディターのフォントはArial固定でしたが,現在は自由に変更することができます。
(スクリーンショットはArial)

v11当時,Arial名義で日本語フォントをインストールする,という乱暴な裏技がありましたが,その副作用は考えられないでしょうか。

http://www.4d.com/jp/blog/structure-japanese.html

miyako

投稿数 : 211
登録日 : 2016/07/05

トップに戻る Go down

Re: クイックレポート書式をデータとして読み込む

投稿 by miyako on 2017-10-24, 1:32 pm

QRをSEND PACKETでテキストフィールドにセーブ,またはRECEIVE PACKETで取り出して・・・

とのことですが,

クイックレポートは「ツール」メニューからエディターを表示し,
出力先を「HTML」に変更した上で,
「開く」をクリックして,
あるいはエディターを閉じようとして
「ドキュメントをディスクに保存しますか? / 保存する」
で作成されたものと考えて良いでしょうか。

このファイル(拡張子「4QR」)はバイナリファイルですので,
(いかなるエンコーディングを指定しても)
テキストフィールドに読み込むことはできません。

BLOBフィールドに保存するか,
それが無理な場合,
BASE64エンコードするなどして,
バイナリからテキストに変換する必要があります。

例:

DOCUMENT TO BLOB($path;$data)
BASE64 ENCODE($data;[Templates]Template)

逆:

BASE64 DECODE([Templates]Template;$data)
BLOB TO DOCUMENT($path;$data)

QR REPORT($FilePtr->;$path)

miyako

投稿数 : 211
登録日 : 2016/07/05

トップに戻る Go down

Re: クイックレポート書式をデータとして読み込む

投稿 by Shuichi Masuno on 2017-10-25, 12:03 pm

以前やっていた方法では、クイックレポートの書式を、SendPacketでテキストフィールドに書き出して保存。取り出すときはReceivePacketで取り出してシステム変数Docuent に展開 してレポート印刷、といったやりかたでした。{このテクニックは古いTech Tipで見つけたものを転用)
しかし現在の4D ではBlobフィールドを使うのが自然な方法と理解出来ました。 
今のV16では、ランゲージリファレンスにはクイックレポート関連のコマンドが以前とは比較にならないほど用意されています。 その中で、QR BLOB TO REPORT ( area ; BLOB ) のようにarea と言う表現が度々出てきますが、この area の意味がよく判らないのですが、マニュアルの何処に関連の情報{areaのいみ、指定の方法、サンプルメソッドなど)が記載してありますでしょうか?

それとHigh Sierraにアップグレードしたら、ストラクチャーファイルが文字化けした件ですが、詳しく言いますと、アップグレード後データベースを開いたところ、テーブル名の日本語表示は正常に日本語で表示されましたが、メソッド名に日本語を使っていた物は文字化け若しくは、表示不可能で”????”となってしまったと言うことです。

Shuichi Masuno

投稿数 : 4
登録日 : 2017/08/20

トップに戻る Go down

Re: クイックレポート書式をデータとして読み込む

投稿 by Shuichi Masuno on 2017-10-27, 3:55 am

使っている、64ビット版ではプラグインエリアQRを割り当てても、プロパティエディタに選択可能なアイテムもあらわれず、どうしてQRを挿入できるのかと迷ったあげく、試しに32ビット版4Dで同じ事をやってみたところ、プラグインエリアにQRエディタが表示されて、QRの作成、表示も出来るようになりました。これで、今まで疑問に思っていたことがほとんど理解出来ました。
マニュアルによると64ビット版にはプラグインは一切インストールされていないという記述と、QRは標準でインストールされていると記述されている部分があり、多分32ビット版にはQRが標準でインストールされており、64ビット版は未だQRの組み込みがされていないと言うのが正しい様に見受けられます。64ビット版に何らかの方法で32ビット版のようにQRがフォーム内で使用できるようにインストールする方法は紹介されていますでしょうか?

Shuichi Masuno

投稿数 : 4
登録日 : 2017/08/20

トップに戻る Go down

Re: クイックレポート書式をデータとして読み込む

投稿 by miyako on 2017-11-06, 11:30 am

こんにちは。

ご自分のフォームにクイックレポート(64ビット版)を組み込む方法は,下記のページに概略されています。

http://doc.4d.com/4Dv16/4D/16.1/Managing-quick-reports.300-3373565.ja.html

簡単に手順を述べると,

1 「サブフォーム」オブジェクトをフォームに配置します。
2 「詳細フォーム」プロパティに「%report」とタイプ入力します。
3 「出力サブフォーム」プロパティを外します。
4 変数タイプを「数値」に設定します。
5 必要であれば,縦横リサイズを許可します。
6 変数名はデフォルトで空欄(推奨)なので,そのままにしておきます。

変数名がない(推奨)ので,ポインター経由でレポート参照を取得します。

$area:=(OBJECT Get pointer(Object named;"subform")->)
QR SET AREA PROPERTY($area;qr view contextual menus;1)

つまり,ウィジェットのデータソース(バインド変数)には,QRオフスクリーンエリアの参照がそのまま返されています。64ビット版は,ユーザーインタフェース関連の実装がプラグインからウィジェットに変更されただけなので,画面出力と関係のない部分は,v2003の32ビット版プラグインと実質的に同一です。

なお,数値型プロセス変数をウィジェットのデータソース(バインド変数)に設定したのであれば,これまでどおり,ポインターを使用せずに直接そのプロセス変数が使用できます。

miyako

投稿数 : 211
登録日 : 2016/07/05

トップに戻る Go down

Re: クイックレポート書式をデータとして読み込む

投稿 by Sponsored content


Sponsored content


トップに戻る Go down

トップに戻る


 
Permissions in this forum:
返信投稿: 不可