みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
FMP12 win7で使用しています。
http://www1.axfc.net/u/3273753?key=fmp12
お見せするのも恥ずかしいのですが、3室あるOPE室の予約台帳を
試行錯誤しながら作成しております。
予約入力が1レコードとなっているテーブル[予約カード]に時刻を入力すると、
力業で計算フィールドに空白又はテキスト""、”<"、"-"、">"の三種類が入力され、
<--->のようなタイムラインもどきが作成されます。
こんなにたくさんの計算フィールドを使っていたら、重くて仕方なくなるのではないか?
と心配はしておりますが、繰り返しフィールドの勉強は避けて来てしまったため、
他に良策が思い浮かばなかったゆえです。
1つめの質問は、もっとエレガントなタイムラインの作成方法はございませんか?
です。
さて、もっと深刻な問題がございまして。。。
1日の利用状況を<---><--------><-->のような1本のタイムラインで表現したく、
フィールド[OPE室]デリレーションしたテーブルにList関数を用いて
<--->
<-------->
<-->
のような同日・同室のレコードからフィールドを無理矢理連結して
<---><--------><-->
というフィールドを作成しました(テーブル[タイムライン:1][タイムライン:2][タイムライン:3])
ですがこの方法だと、3本のラインを同時に表示して3室の中から空き状況を確認する、
というレイアウトが上手く作れません。
同日のレコードを表示するポータルを3つ並べ、に"n番ルーム"だけ表示するフィルタをかける、
という方法も考えたのですが、これ以上力業をつかうのはどうかと・・・
皆様のご意見をいただければ幸いです。
繰り返しフィールドを利用したLookupクロス集計で時間範囲はOR照合リレーションを適用するのが一番シンプルで楽そう、かな。
Offline
平日には、各部屋に1件以上の予約が入っている、という条件で、繰り返しフィールドの集計を行うのが、タイムラインを表示するには簡単かも。
少し工夫をすると、タイムラインから詳細も表示できます。
https://dl.dropboxusercontent.com/u/926 … .fmp12.zip
Offline
こんなのでもいいかも知れない。
日付は無視して時間も15時までしかない上にバッティングも無視の
手抜きサンプル。
Offline
書き忘れた。入力は15分単位限定。
Offline
たくさんのアドバイス、ありがとうございます。
ただいま拝見させて頂いております。
少々お時間頂きます。。。
みなさん、本当にありがとうございました。
やはり繰り返しフィールドを使うとシンプルに作れそうだ、ということで
この週末いろいろ勉強してみました。
予約がきつきつな状況で、例えば
1件目:8:00〜8:30
2件目:8:30〜9:00
というケースが多々あるため、条件付き書式で色をつけるやり方だと
どこで1件目が終わり、2件目が始まるのかが解りません。
なんとか繰り返しフィールドを使いつつ、"<"、"-"、">"でタイムラインを表現する方法はありませんでしょうか?
また、タイムライン上をクリックすると、予約カードが表示される様にしたいのですが、
繰り返しフィールドはボタンにすると上手くいかないですよね?
そういう場合はやはり、ボタンフィールド+スクリプト引数
の力業になってしまうでしょうか?
サンプルファイルを変更しています。
https://dl.dropboxusercontent.com/u/926 … .fmp12.zip
日毎のシリアル番号を振って、それで色を変える様にすると完全でしょう。(記号よりは見易いと思います)
タイムラインのクリックで、詳細が表示される様になっています。
これを応用すると、タイムラインから空き時間にはめ込む様に予約を入力する事も可能です。
問題は、日跨ぎの手術が有った場合に対応できない事でしょうか。(2レコードに分解すればいいのですが)
Last edited by Shin (2014-07-14 13:03:04)
Offline
これは素晴らしい!!
なるほど、色を変えるのはわかりやすいですね。
それと・・・繰り返しフィールドの番号を取得して、トリガで飛ばす
というのも大変参考になりました。
参考にさせて頂きます。
・・・たいへん申し上げにくいのですが、以前Shinさんが
他の方への回答として公開なさっていたサンプルファイルに
似たようなものがありました。。
私にもう少し理解力があったならば、今回お手を煩わせることもなかったと思うのですが...
本当にありがとうございます。
そのサンプルファイルを探したのですが、直ぐに見つからなかったので、作り直しました。
見つかれば、もっと高機能に仕上げてあるのですが。
Offline
Shinさん、重ね重ね申し訳ございません。
頂きましたサンプルの場合、どのようにバッティング
(すでに選択した時間・室枠に予約が入っている場合)
を検出したら良いのでしょうか?
[変数]は計算フィールド(予定)のt0、t1を参考にして、
not isempty[変数] で検出・・・となりますでしょうか?
あるいはもっと良い方法がありますでしょうか?
ダブルブッキングのチェックとしては、
開始時刻のチェックは、日・部屋・開始時刻の自己リレーションで、その時刻より小さいレコードの最大の物の終了時刻と比較する、
終了時刻のチェックは、日・部屋・終了時刻の自己リレーションで、その時刻より大きいレコードの最小の物の開始時刻と比較する、
という方法で出来るはずです。
Offline
Shinさんありがとうございました。
おかげさまでダブルブッキングのチェックが出来るようになりました。
ただ・・・以下の条件では検出が出来ず困っております。
[同日][同室]
ID:1 8:00開始 30分 8:30終了
ID:2 8:30開始 30分 9:00終了
この状態で、ID:1の予定を60分にすると、タイムラインが重なってしまうため、
チェックがかかるようにするまではできました。
しかしID:1のタイムラインがID:2のタイムラインを突き抜けて
しまう場合、ID:1の予約カード画面でOP時間を90分以上に変更
した時に出来ません。
ID:2の画面側では、ご回答#14の条件で検出できているのですが・・・
オリジナルテーブル
[日][室] [開始時間]
|| || ^
[日][室] [開始時間]
自己リレーション
の様にリレーションし、
終了予定時刻 > min(自己リレーション:終了予定時刻)
で検出をかけると上手くいきそうなのですが、
当日最後の予約カード画面で引っかかります。
自分より開始時間の遅い予約はありませんから。。。
もうおとなしく諦める覚悟もできておりますが、
(みなさんのお知恵を借りて)ここまで出来たのでそれもどうかと。。。
本当にお手すきの時で結構ですので、なにか良いヒントを下されば幸いです。
自己解決できました…
お騒がせいたしました。
サンプルファイルを変更しています。
https://dl.dropboxusercontent.com/u/926 … .fmp12.zip
これを応用すると、タイムラインから空き時間にはめ込む様に予約を入力する事も可能です。
Shinさん、間が開いてしまいましたがご覧になられるでしょうか?
先に貴重なサンプルをご呈示頂きまして、思うような予約システムが完成いたしました。
しかし心残りがございまして。。。
上記引用にある部分です。
自分なりに考えてはみたのですが、空き時間部分の「時間」を繰り返しの計算フィールドから
取得することがどうしてもできません。
理想としては、空き部分をクリックするとその時間が予約カード「開始時間」フィールドに
自動入力されることなのですが、どのようにしたら実現できるでしょうか?
クリックした時に渡す引数をいくつか増やすか、トリガーで起動されたスクリプトの最初で条件を取得しておきます。
それを、受け取った側で判断して、空白かどうかを判断し、空きでしたら、新規レコード、と言う風に分岐すれば良いでしょう。
https://dl.dropboxusercontent.com/u/926 … .fmp12.zip
もう少し進化させると、時間を跨がせない様に、終了時刻の指定も出来ます。(https://fm-aid.com/bbs2/viewtopic.php?id=1616)
Last edited by Shin (2014-07-25 22:36:37)
Offline
Shinさん、何度も本当にありがとうございました。
タイムラインをポータル化して予約カード画面に並べていたので
Get ( アクティブフィールド内容 ) と
Get ( アクティブ繰り返し位置番号 ) は取得できない!
と勝手に思い込んでいました(^^ゞ
リスト画面なら問題ないですよね・・・
スクリプトパラメータでの取り出しと
Get ( スクリプト引数)の切り出し、大変勉強になりました。
(>_<)さん、Shinさん、解決済みになってしまっていますがまだご覧になっているでしょうか?
ちょうど同じような予約システムを作成中で、大変参考になります。
私はタイムラインの下に、予約の開始時間マスに「患者名」等を表示させたいのですが、
どのようにしたら良いのか困っています。
もしご覧でしたらご教授願えませんでしょうか?
サンプルでは、予定、と言う計算フィールドに、手術予定のシリアル番号を持たせています。これの代わりに、患者IDを持たせて氏名をルックアップ、FM13以降でしたら、患者氏名を持たせて集計フィールドをテキスト集計にすれば良いでしょう。
ただ、おそらくまれなこととは思いますが、同一人の1日複数手術、特に複数科での連続手術、というのがあると、処理がややこしくなるかもしれません。
Offline
Shinさんありがとうございました。
私の場合は手術ではありませんし、「同一人の1日複数手術、特に複数科での連続手術」
といったケースは発生しないのでひとまず平気です。
予約カードのテーブルに Int(s_予定)Get ( 計算式繰り返し位置番号 )])
で予約カードのIDを取り出し、そこからLookupでもいけそうですね。
ところでこうすると予約の開始時間マス意外、全てのマスに指名が表示されてしまうのですが、
これはどのように回避したらよろしいでしょうか? アイデアが浮かびません。
あぁ、そうでした。
アイデアとして、条件付き書式で、自分より繰り返しが1個下の内容と自分を比較し、同じならば文字を透明にする、という事で良いでしょう。
Offline
Shinさんありがとうございました。
無事表示出来るようになりました。
重ねての質問になってしまいますが、繰り返しフィールドの幅に表示しきれない内容を、透明にした文字のフィールドの上に被さるようにして全体を表示する、
なんてことは出来ませんでしょうか?
繰り返しフィールドの中では無理でしょうね。
代わりに、その繰り返しフィールドの中身をテキストに取り出して、前にタブを繰り返し位置数だけ付加しておきます。それを重ねて表示させれば良いです。
Offline
サンプルファイルを変更しています。
https://dl.dropboxusercontent.com/u/926 … .fmp12.zip
日毎のシリアル番号を振って、それで色を変える様にすると完全でしょう。(記号よりは見易いと思います)
タイムラインのクリックで、詳細が表示される様になっています。これを応用すると、タイムラインから空き時間にはめ込む様に予約を入力する事も可能です。
問題は、日跨ぎの手術が有った場合に対応できない事でしょうか。(2レコードに分解すればいいのですが)
[解決]となっておりますが、大変参考になる情報をありがとうございます。
Shin様のアイディア、シリアル番号を振って・・・ですと、
予約の件数が10件以上になったときに不具合が出てしまいます。
素人判断ですが、s_予定の値が
110.1 111.2 112.3 ... 119.10 120.11 となっていき、
119.10と110.1が同じ、と見なされてしまうことが原因かも知れません。
s_予定の
DayRoomSerial[1] / 10
の部分を
DayRoomSerial[1] / 100
にすることで、ひとまず回避できそうなのですが・・・
色別けの条件付き書式以外の部分で何か他の箇所に不具合が出る可能性など
ございませんでしょうか?
一応、当方でもテストしている状況ですがよろしくお願いいたします。
[ Generated in 0.013 seconds, 7 queries executed - Memory usage: 581.8 KiB (Peak: 618.7 KiB) ]