みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Win10でFM15を使用しています。
テーブルA(カレンダー)に、繰り返しフィールドを使用してカレンダーを作成しています。
カレンダーのレイアウトは、よくある卓上カレンダーのように一月ごとに表示されていて、次月または前月ボタンを押すことで月を切り替えるものです。
テーブルB(フォロー記録)に、患者の検査記録(検査日、氏名、検査結果etc)を蓄積しています。
やりたいことは、カレンダーを表示させているレイアウト上に、その日に実施した患者の氏名を表示させることです。
【テーブルA(カレンダー)】
年(ここに入力されている年月から、スクリプトで日付[35]にカレンダーの日付を表示させています。)
月(ここに入力されている年月から、スクリプトで日付[35]にカレンダーの日付を表示させています。)
日付[35]
氏名(ここにその日に検査した患者の氏名を引っぱってきたい。1日に3件前後検査がある日もあれば、検査数が0件の日もあります。)
【テーブルB(フォロー記録)】
検査日
氏名
検査結果
テーブルA::日付 = テーブルB::検査日
でリレーションを組んでいます。
こちらの掲示板等を参考にし、似たような質問を探しましたが、
今回の場合に置き換えて考えることができず、質問させていただきました。
説明不足な点があるかと思いますが、どなたかご教示いただけませんでしょうか。
リレーションでは繰り返しがマルチキーになるので、ルックアップなら個別に適用できますが計算式では全部まとめて関連してしまいます。
スクリプトで35日分一括して検索(関連レコードへ移動)して順次転記する、ぐらいかな。
日付[35] では、すべてのカレンダーは表示できませんよ。最低37は必要です。(直近では10月でお試しください)
それは置いておいて、
日付1 日付2 日付3 ...
氏名01 氏名11 氏名31
氏名02 氏名12 氏名32
氏名03 氏名13 氏名33
としたいのですよね。
記録側で、氏名01 02 03 の一覧を作っておき、繰り返し計算フィールドにそれをルックアップさせるといいでしょう。
https://www.dropbox.com/s/7535pjpch17gu … 2.zip?dl=0
Last edited by Shin (2021-08-16 13:46:44)
Offline
氏名[42]にExecuteSQL関数式を適用して一発計算するのが、一番楽でしょう。
他の設定は一切必要ありません。
また、カレンダー表示するなら6週分の42回の日付枠が必要ですよ。
Offline
私もよく似たレイアウトを作成します。ほぼ標準装備といったレベルで使用しています。
パワープレイとバカにされそうですが、私は37個のポータルを配置してフィルタで振り分けています。作るのは非常に手間ですが、レイアウトの自由度はかなり高くなります。ポータルならポップオーバーを使用して、簡易サマリ的なものを表示させたりすることも可能です。
ただ、この方法で、関連レコードがあまりにたくさんある場合は動作速度が少し遅くなるかもしれません。
Offline
私は37個のポータルを配置してフィルタで振り分けています。作るのは非常に手間ですが、レイアウトの自由度はかなり高くなります。ポータルならポップオーバーを使用して、簡易サマリ的なものを表示させたりすることも可能です。
ポータルを7個だけで同じような表示を追加したサンプルです。
https://www.dropbox.com/s/7535pjpch17gu … 2.zip?dl=0
日付を全置換してもいいかと思います。
Last edited by Shin (2021-08-16 13:46:33)
Offline
shinさん
サンプルファイルありがとうございます。
ポータルを複数行にして横に7つ配置しても get(計算式ポータル行番号)的な関数が無いから、今の方法以外では無理だと思ってました。
まさかList形式でカレンダー表示をするなんて発想はありませんでした。これなら作成時の大幅な時間短縮が可能になりそうです。ご教示ありがとうございます。
Offline
皆さま、ご回答いただき有り難うございます。
ひとまず、Shin様にご教示いただいた、繰り返し計算フィールドにルックアップする方法で対応することができました。
ExecuteSQL関数式を使ったことはありませんが、使いこなせるようになるとできることの幅が広がりそうです。これから勉強してみます。
また、ポータルのサンプルも有り難うございます。
ブランコ様の仰る通り、自由度が高そうです。こちらも試してみたいと思います。
皆さま、本当に有り難うございました。解決とさせていただきます。
終わっていますが、
>#8『ExecuteSQL関数式を使ったことはありませんが、・・・これから勉強してみます。』
今回のようにFMでは難解なケースでも、
SQLを利用するといとも簡単に実装できることもあるので、
一度勉強しておくと非常に便利な機能です。
●ExecuteSQL関数式の作例サンプルを残しておきます。
※ただこの式指定だけですべて完了、超簡単ですネ!!
(テーブルAの「氏名」繰り返し[42回]計算フィールドの設定式)
ExecuteSQL(
"
SELECT ""氏名""
FROM ""テーブルB""
WHERE ""検査日""=?
"
; ""
; "¶"
; 日付
)
●ついでに、「日付」繰り返し[42回]計算フィールドの式例も記して置くと、
(一般的な日曜日始まり6週次の月間カレンダー表示向けとしています)
Let([
#日=Get(計算式繰り返し位置番号) - DayOfWeek(Date(月;1;年))
];
Date(月;#日+1;年)
)
Offline
終わっていますが、
>#8『ExecuteSQL関数式を使ったことはありませんが、・・・これから勉強してみます。』今回のようにFMでは難解なケースでも、
SQLを利用するといとも簡単に実装できることもあるので、
一度勉強しておくと非常に便利な機能です。●ExecuteSQL関数式の作例サンプルを残しておきます。
※ただこの式指定だけですべて完了、超簡単ですネ!!
(テーブルAの「氏名」繰り返し[42回]計算フィールドの設定式)
ExecuteSQL(
"
SELECT ""氏名""
FROM ""テーブルB""
WHERE ""検査日""=?
"
; ""
; "¶"
; 日付
)●ついでに、「日付」繰り返し[42回]計算フィールドの式例も記して置くと、
(一般的な日曜日始まり6週次の月間カレンダー表示向けとしています)
Let([
#日=Get(計算式繰り返し位置番号) - DayOfWeek(Date(月;1;年))
];
Date(月;#日+1;年)
)
Hiro様、わざわざサンプルまで有り難うございます!
ExecuteSQL関数式は、書式を守れば非常に便利ですね。
サンプルも参考にさせていただきながら、勉強を進めます。
Pages: 1
[ Generated in 0.012 seconds, 10 queries executed - Memory usage: 541.32 KiB (Peak: 562.23 KiB) ]