みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Fmpro12を使用しています。
今、患者の入浴時間と訓練の時間が重ならないように条件付き書式でチェックする仕組みを作ろうと思います。
訓練時間テーブル
・訓練患者名(繰り返し10)
・時間
・担当(繰り返し10)
入浴時間テーブル
・入浴患者(繰り返し3)
・時間
・入浴名(繰り返し3)
1つのテーブルに対して、1つのレイアウトを作ってそれぞれ定義しています。
何がしたいかというと、
訓練患者名レコードに入ってる患者の名前が、
「入浴時間テーブルのレイアウトの入浴患者レコードと一致したら塗りつぶし色を変える」としたいです。
訓練時間テーブルのレイアウトは、
レコード数 20
時間が8時から30分刻みでレコードが配置されています。
入浴時間テーブルのレイアウトも同じように、
レコードが配置されています。
ここで、訓練フィールドに、「入浴時間と重なったなら色を変える」としたいです。
例えば、訓練フィールドに、
GetNthRecord(訓練患者名 ; 1) = GetNthRecord(入浴時間::入浴患者 ; 1)
と条件付き書式を定義しても、お互いのレコードに同じ患者名が入っているのにも関わらず、
色が変わってくれません。
色々、条件の計算式を変えてやってみましたが、できませんでした。
どうすれば、条件付き書式の色を変えられますか?
Offline
繰り返し複数キーで個別照合する統合リレーション1本とLookup関数を利用した作例です。
多少テクニカルな手法ですが、造りを極くシンプルにできるのが大きな特徴です。、
●サンプル「繰り返しフィールドの条件付き書式.fmp12」→ https://yahoo.jp/box/IKbX3l
Last edited by Hiro (2018-05-30 15:43:41)
Offline
Hiro様、サンプルまで作成していただきありがとうございます。
ルックアップ関数を使ってこんな風にできるのですね。
勉強になります。
ただ、1つ悩みがありまして、
訓練時間のレコードは、
8:40
9:00
9:20
・・
・
と20分刻みでレコードが作成されます。
しかし、入浴は、
9:00
9:30
10:00
・・・
というように30分刻みで予定がされています。
入浴は30分かかるので、同じ患者が入浴が9:00からだったら、9:00~9:30までの間の
訓練の時間と重なったら色をつけたいのです。
つまり、訓練が9:00のレコードと、9:20のレコードですね。
このレコードが9:00からの入浴レコードと重なることになります。
これができないと思ったので、
レコードの番号を指定して、
9:00から入浴があった場合、訓練時間のレコードは9:00と9:20の2レコードに色をつければいいかな。
と単純に考えていたのですが・・・
初めの相談の趣旨と少し乖離してしまい申し訳ありません。
何かいい方法はありますでしょうか?
Offline
ならば、「訓練時刻」を「入浴時刻」へ補正シフトする「訓練テーブル::照合時刻」計算フィールドを作り、
リレーションのキーフィールド「訓練::時刻」を、この「訓練::照合時刻」へ入れ替えるだけで良いでしょう。
計算式は、→ Time(Hour(時刻); Substitute(Minute(時刻);[20;0];[40;30]); 0)
結果は、
8:40 → 8:30 ※入浴時刻にありませんが、機能上は問題ありません。
9:00 → 9:00
9:20 → 9:00
9:40 → 9:30
10:00 → 10:00
一応、修正済サンプルを上書きアップしておきます。
●サンプル「繰り返しフィールドの条件付き書式.fmp12」→ https://yahoo.jp/box/IKbX3l
Last edited by Hiro (2018-05-31 01:02:08)
Offline
Hiroさんのサンプルを見ていないので、もし間違えていましたらご容赦を。。
> 9:00 → 9:00
> 9:20 → 9:00
> 9:40 → 9:30
9:20は、
9:00と9:30の両方に重なるのでこれではダメでは?
現在の時刻は開始時刻ですから、
これに終了時刻フィールドを加えて、
時間内の重複を照合するリレーションにすればいいのでは。
Offline
> #5 チポさん
> 9:20は、
> 9:00と9:30の両方に重なるのでこれではダメでは?
はじめ私も懸念したのですが、どうも検証が甘かったですネ、^^;;
20分代の時刻枠のみの特殊ケースだから、そこだけマルチキー
にするのが楽かな、
〇:20 → 〇:00 ¶ 〇:30
その式は、(計算結果:テキスト指定で)
List(
Time(Hour(時刻); Substitute(Minute(時刻);[20;0];[40;30]); 0);
Case(Minute(時刻)=20
;Time(Hour(時刻); Substitute(Minute(時刻);[20;30]); 0)
)
)
一応、修正済サンプルを上書きアップしておきます。
●サンプル「繰り返しフィールドの条件付き書式.fmp12」→ https://yahoo.jp/box/IKbX3l
Offline
チポ様、Hiro様、本当にありがとうございます。
おかげ様で少しずつやりたいことができてきました。
もう1点伺っていいしょうか?
訓練を9:00から入って、入浴が9:20の場合なども条件付き書式で色を変えることができますでしょうか?
というのも、訓練を先に入っていて、その後、お風呂の時間と重なるのも防ぎたいのです。
1回の訓練は30分は実施します。
1回の訓練時間は30分の設定で構いません。
9:00から訓練に入れば、9:30まで。
9:30のお風呂と時間は重なっても、訓練が終わったらそのままお風呂に行くので
色は変えない。
色々、要望ばかりで申し訳ありませんが教えて頂けると助かります。
Offline
条件の後出しはおやめになった方がよろしいかと。。
訓練は20分ごとに始まるが、30分間かかる。
ということでしょうか?
ならば、私の前レスの終了時刻を使えばいいでしょう。
Offline
> 訓練を9:00から入って、入浴が9:20の場合なども条件付き書式で色を変えることができますでしょうか?
> というのも、訓練を先に入っていて、その後、お風呂の時間と重なるのも防ぎたいのです。
・うむ? 入浴が9:20?
・入浴時刻は30分刻みではないのですか?
・『訓練時刻が9:40の場合に、入浴時刻が9:30と10:00の患者を検知』と言う事ではないですか?
条件が定まらないと前に進みません。
Offline
Hiro様、すいません。
>『訓練時刻が9:40の場合に、入浴時刻が9:30と10:00の患者を検知』と言う事ではないですか?
その通りです。
間違っていました。
Offline
ならば、前式を以下に変更すれば良いです。
・ 9:00 → 9:00
・ 9:20 → 9:00 ¶ 9:30
・ 9:40 → 9:30 ¶ 10:00
・ 10:00 → 10:00
List(
Time(Hour(時刻); Substitute(Minute(時刻);[20;0];[40;30]); 0)
;
Case(
Minute(時刻)=20
;Time(Hour(時刻); 30; 0)
;
Minute(時刻)=40
;Time(Hour(時刻)+1; 0; 0)
)
)
※【追伸】 考えてみたら、式はもっと短縮化もできますネ。
List(
Time(Hour(時刻); Substitute(Minute(時刻);[20;0];[40;30]); 0)
;
Time(Hour(時刻); Substitute(Minute(時刻);[20;30];[40;60]); 0)
)
++ または、++
List(
Time(Hour(時刻); Substitute(Minute(時刻);[20;0];[40;30]); 0)
;
Case(Minute(時刻);
Time(Hour(時刻); Substitute(Minute(時刻);[20;30];[40;60]); 0)
)
)
一応、修正済サンプルを上書きアップしておきます。
●サンプル「繰り返しフィールドの条件付き書式.fmp12」→ https://yahoo.jp/box/IKbX3l
Last edited by Hiro (2018-06-02 00:38:46)
Offline
Hiro様
おかげさまで入浴に関する時間かぶりの条件付き書式ができました。
本当にありがとうございました。
Offline
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 592.57 KiB (Peak: 609.48 KiB) ]