みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっております。
質問よろしくお願いします。(Filemaker19)
端末で注文するとレシートプリンターから注文書が出てくるというシステムを作りました。
しかし、私が作ったものだと、複数端末で同時に注文した場合、注文書のレシートが出てこないことがあったので、
これを回避するため考えたのが、注文時にLoopで何かしらの確認フィールドを見に行き、確認フィールドが空なら"1"を入れ先に進む、
既に"1"が入っていれば3秒待機後、Loopの最初に戻りまた確認。空なら先に進み"1"を記入、注文後は確認フィールドを空にするというものです。
注文するレコードが違うため、別途1レコードしかないテーブルを用意し、そこに確認フィールドを設置し、経由しています。
この方法でとりあえずは注文印刷がバッティングすることなく動いてはいるのですが、何やら邪道という気がして
更に何らかで誰も注文していないのに確認フィールドに"1"が残った場合、無限ループに陥るのでその辺も怖いです。
上記方法よりもっといい方法は無いでしょうか?
お力添えをお願いします。
1レコードテーブルにフラグを置いて同時に処理する数をコントロールする手法は良くある手法のひとつです。
邪道ということはないでしょう。どこかで邪道と書かれていましたか?
ご推察どおり処理が未遂の場合にフラグが残るので、手動でクリアできる仕掛けなどは必要です。
無限ループではなく試行回数が一定数を超えたらエラーダイアログで止めるなど対策は色々あります。
別ウインドウで1レコードテーブルのレコードを開き([レコード/検索条件を開く])処理が終わったらウインドウを閉じるやり方もあります。
FileMaker の標準の排他機能を利用して、他の端末で開こうとしてエラー301ならば処理中と判定します。
このやり方はフィールドの値を変えませんので失敗したクライアントが落ちた場合でも値を戻すという処理は不要です。
Offline
印刷の待ち列を作る方法もありますよ。注文が確定すれば、その注文番号をテーブルに保存、印刷管理端末はそのテーブルから、未印刷のレコードを探して、印刷、済みフラグを立てる、という動きです。端末が1台余分に必要ですが、ユーザーは、注文を確定すれば、その結果を待つ事無く、すぐに次の作業に入れます。
Offline
お二人ともご回答いただきありがとうございます。
Mozさん
そうだったんですね。自分で思いついた方法だったのでこれが正攻法だとは知りませんで、邪道と思っていました。
ループを回数制限にして、手動でフラグ消しやウィンドウを使って閉じるで手動フラグ消しする必要ないというもの
非常に参考になりました。
Shinさん
現状は端末が4台ほどでスタッフが扱っていますので、Mozさんの方式で進めますが、
端末を各テーブルに置いてお客様が操作というようなことになった場合にエラーで待たせるわけにはいかないので
Shinさんの方法はそういう時に良いですね。
助かりました!お二人ともありがとうございました!
憶測ですが、レシートプリンターが httpプロトコルを使っているモノなら、スクリプト:URLから挿入 で実行すれば良いのかも。
Offline
qb_dpさん
EPSONの公開しているFilemaker用のファイルのサンプルを使っているのですが
URLから挿入は最終的に使ってあります。これが排他処理に使えるのでしょうか?
スクリプト:URLから挿入 は、応答を待つのでイケるかと思ったのですが...
Offline
EPSON のアプリが、待ち行列処理を行っていないのかもしれませんね。
ならば、FM で待ち行列処理を行ってもどうしようもないです。対策は、十分な時間をあけて送信しておく、だけでしょうね。
Offline
チラッとマニュアルを見てみました。印刷結果が取得出来るようです。
// スキーム情報
変数を設定 [$scheme; 値 : "tmprintassistant://tmprintassistant.epson.com/print?"]
// 印刷処理後の遷移先アプリ (FileMaker プロジェクト ) のパス
変数を設定 [$success; 値 : "fmp://$/print_sample.ja.fmp12"]
// 印刷結果出力先のアプリ(FileMaker プロジェクト ) のパス
変数を設定 [$error; 値 : "fmp://$/print_sample.ja.fmp12?script=callback"]
Offline
Pages: 1
[ Generated in 0.006 seconds, 10 queries executed - Memory usage: 517.54 KiB (Peak: 522.08 KiB) ]