みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Mac13.3.1 FP Ver.19での使用条件です。
講座の担当者の年間データ作成で困っています。
週5日、4クラス、1限目~6限まで講座があります。
ある一日の講座の担当者を割り振る際、3限連続する場合にメッセージを出させたいです。
1つの講座の担当者は複数名になることがあり、
4月20日 Aクラス 1限目 木下・鈴木
4月20日 Aクラス 2限目 山田
4月20日 Aクラス 3限目 西山・山田
中略
4月20日 Bクラス 1限目 鈴木・山田
4月20日 Bクラス 2限目
4月20日 Bクラス 3限目
でBクラス1限目に「山田」を入力した際にメッセージを出させるイメージです。
自己参照で、「日付」と改行処理した「担当者」をリレーションキーとして使い、重複データを探すのかと考えましたが上手くいきません。
お知恵を拝借できればと思います。よろしくお願いします。
Offline
日付と限-1(もうひとつ別のリレーションで限-2を使う)でリレーションして、2つのリレーションで両方とも同じ担当者がいればメッセージを出す、でいいのでは。
himadanee様 ありがとうございます。
「2つのリレーションで両方とも同じ担当者がいれば」の部分があまり分かっていません。
連続を判別するフィールドの計算式?を教えていただければ幸いです。
Offline
フィールド名が書いてないので...「1限目」のフィールドは?
そのフィールドから-1と-2する計算フィールド(テキストならSerialIncrementで可)を作って、それぞれでリレーションします。
すると(クラスは関係ないので)「4月20日 3限目」のレコードからは「4月20日 2限目」「4月20日 1限目」が関連レコードになるので、担当者フィールドを参照します。
>改行処理した「担当者」をリレーションキーとして使い
も併用してもいいでしょう。そうすると、「担当者フィールドを参照」しないで関連レコードの有無だけで判定できます。
himadanee様、
お付き合いいただき、ありがとうございます。うーん、私の理解が浅いようで、上手くいきません。
関係するフィールドは以下です。
日付(日付)
クラス(クラス)
限(数字)
講座名(テキスト)
担当者(テキスト)
担当者_改行(計算)→ 担当者が複数名の時に「担当者」フィールドを改行区切り
ここに
限_1(計算)→ 限-1
限_2(計算)→ 限-2
を索引設定済のフィールドとして作成しました。
自己参照のリレーションで
日付と日付、
担当者_改行、
限と限_1、そして限と限_2、
をつなげています。
三連続を判定するフィールドとして、
判定(計算)→
とここが分かりません。
リレーションの構成がまちがっているのでしょうか?
おそらくは、おっしゃっている、「関連レコードの有無」の理解が不足しているのでしょうが・・・
すみません、ご教示いただければ助かります。
Offline
ちょっと最後の質問とは別の話なのですが、最初に「Bクラス1限目に「山田」を入力した際にメッセージを出させるイメージ」と言ってたんでー1とー2でリレーションという方法を考えましたが、
順番に入力するとは限らないですよね?
例でいえば「4月20日 Aクラス 2限目 山田」を最後に入力したときにも何かしらメッセージが出ないとまずいのでは?
himadanee様、
おっしゃる通りです。言葉足らず、説明不足ですみません。
必ずしも順番通りの入力ではなく、「同じ担当者が3つの講座を連続して持つという条件」が揃ったことを判定したいのです。
Offline
> 担当者_改行
これがやりにくいので、
1担当者1レコードとします。
現状変えられないのなら、別テーブルで。。
さらに、時限照合用に計算フィールド・繰り返し3回を作り
時限
時限+1
時限+2
となるようにします。
リレーション
日付 = 日付
and
担当者 = 担当者
and
時限 = 時限照合用
これで、三回連続した、最後のレコードの
Countが3になります。
もう一つリレーションを
日付・担当者
として、
上記のCountのMaxが3
でアラートを出せばいいのでは。
Offline
講座テーブル 担当テーブル 担当テーブル2
日付 = 日付 = 日付
時限 = 時限
担当 = 担当
というリレーションを組みます。担当者は、一人1時限ごとに1レコードのテーブルにします。
担当テーブルの担当フィールドの制限の計算式に、
Let (
[
ls = UniqueValues ( List ( 担当テーブル 2::時限 ) ) ;
bs0 = List ( 時限 - 2 ; 時限 - 1 ) ;
bs1 = List ( 時限 - 1 ; 時限 + 1 ) ;
bs2 = List ( 時限 + 1 ; 時限 + 2 )
] ;
Max (
ValueCount ( FilterValues ( ls ; BS0 ) ) ;
ValueCount ( FilterValues ( ls ; BS1 ) ) ;
ValueCount ( FilterValues ( ls ; BS2 ) )
) < 2
)という式を設定します。
レコードを確定しようとしたときに評価されて、アラートが出ます。
https://www.dropbox.com/s/zxh7pm3qzgiu4 … 2.zip?dl=0
Last edited by Shin (2023-05-05 23:35:45)
Offline
チポ様 Shin様
ありがとうございます。少々お時間をいただいて、挑戦してみます。
結果はまた報告させていただきます。
重ねてありがとうございました。
Offline
チポ様、
チポ様のやり方をためてしているのですが、
さらに、時限照合用に計算フィールド・繰り返し3回を作り
時限
時限+1
時限+2
となるようにします。
の部分が分かりません。計算の繰り返しフィールドで、「時限+1」「時限+2」のように、個別の計算式を定義することができるのでしょうか?
Offline
「時限フィールド」の値の書式が
1限目
2限目
・・・
として、
繰り返しフィールドの計算式です
Serialincrement ( 時限フィールド[1] ; Get ( 計算式繰り返し位置 ) - 1 )
繰り返しは必ず3回にします。
SerialIncrement関数のヘルプです
https://help.claris.com/ja/pro-help/con … ement.html
使い方を覚えてください。
Offline
チポ様、
ありがとうございます。その部分はできました。引き続きチャレンジしてみます。
Offline
チポ様、
もう一つ助けてください。
リレーション
日付 = 日付
and
担当者 = 担当者
and
時限 = 時限照合用
これで、三回連続した、最後のレコードの
Countが3になります。
の、最後、Countが3になる、の部分の計算式が分かりません。知識不足ですみません。どのような式になりますでしょうか?
Offline
Count ( 自己リレーション::担当者 )
のようなのでいいでしょう。
Count関数のヘルプです
https://help.claris.com/ja/pro-help/content/count.html
Offline
チポ様、
ありがとうございます。上手くいきそうです。お助けいただき、ありがとうございました。
Offline
Pages: 1
[ Generated in 0.014 seconds, 9 queries executed - Memory usage: 599.34 KiB (Peak: 616.25 KiB) ]