みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
タイトルどおりなんですが、
年月をドロップダウンで指定したいです。
値一覧で設定すればいいんでしょうけど、選択肢として表示するのは
今日を中心として過去と未来の1年ずつの2年分のカレンダーです。
今日なら2015/8月から2017/8月の25ヶ月。
この25か月分を動的値一覧としてシンプルに出す方法はないでしょうか?
何年も先までの分を予め用意して、今日の日付から計算させてリレーションでひっぱるしかないですか?
Offline
凡人の発想で。
別テーブルにその都度25件データを作成し、そのフィールドの値を値一覧にしたらどうでしょうか。
カレンダー(名前は適当)という別テーブルを作成し、カレンダー(名前は適当)というフィールドを作成する。
スクリプトを作成
全レコード表示
対象レコード削除(ダイアログなし)
変数を設定($count ;0)
Loop
新規レコード作成
フィールド設定(カレンダー;Date(Month(Get(日付))-12+$count;Day(Get(日付));Year ( Get(日付) )))
レコード/検索条件確定(ダイアログなし)
変数を設定($count ;$count+1)
ExitLoop If[ $count=25]
End Loop
このスクリプトを起動時など適当なところで実行させる
このTO を表示させたいTO との間にリレーションを設定する。適当なフィールドとカレンダーテーブルのカレンダーフィールドとの間にデカルト積(×リレーション)を設定
あとは値一覧でこのカレンダーというフィールドを設定すればOK
表示フォーマットは適当に設定してください。
Offline
> 動的値一覧として
> 何年も先までの分を予め用意して、今日の日付から計算させてリレーションでひっぱる
これのどこが気に入らないのでしょうか?
100年後まで作っても、高々1,200レコード程度ですよ。
入力も最初の1レコードだけで、後はレコード作成(複製でも)で自動入力できますよ。
Offline
無駄なレコードの増設や面倒な更新作業をせずに済む方法。
●計算フィールド「年月一覧」を作り、これに目的の年月リストを動的に自動生成します。
計算式は、
Let([
$dt=Get(日付);
$dt=Date(Month($dt);1;Year($dt)-1);
$i=0;
$res="";
$fnc="Case($i=25; $res;
Let([
$ym=Date(Month($dt)+$i;1;Year($dt));
$ym=Year($ym) & \"/\" & Month($ym);
$res=List($res;$ym);
$i=$i+1
]; Evaluate($fnc))
)"
];
Evaluate($fnc)
)
Get(日付)の日替わり自動更新のため、計算結果は「非保存」に設定。
●この非索引フィールド「年月一覧」で値一覧を組めるようにするため、
デカルト積[X]の自己リレーションを組みます。
この[X]リレーションを介しての動的値一覧として、目標の値一覧を組んで、お終い。
(※なお、値一覧の設定の際「非索引は無効だよ」といったFM警告が出ますが無視してOK!)
また、日付の日替わり自動更新を「起動時トリガスクリプト」で処理すれば、
計算フィールド「年月一覧」はグローバルフィールドにしての運用も出来ます。
Offline
nice-guyさん、チポさん、Hiroさん、ありがとうございます。
チポさんのおっしゃるとおり、それが一番早くて確実かもしれません。
先人の方の知恵で何か他の方法がないかな~と思って質問しました。
nice-guyさんの方法に近いものを作ろうとしていました。
Hiroさん、式までありがとうございます。
どの方法でいくか迷っています。
まずはありがとうございました。
Offline
2015/08月や201508などにしないとできなさそう・・・
Offline
桁数をそろえないと順番がバラバラになる、という意味ですね?
> 2015/08月や201508などにしないとできなさそう・・・
御意!
テキストのソート順になるので字数を揃えないと意図した年月順にならない。
式を訂正してください。
Let([
$dt=Get(日付);
$dt=Date(Month($dt);1;Year($dt)-1);
$i=0;
$res="";
$fnc="Case($i=25; $res;
Let([
$ym=Date(Month($dt)+$i;1;Year($dt));
$ym=Year($ym) & \"/\" & Right(100+Month($ym);2);
$res=List($res;$ym);
$i=$i+1
]; Evaluate($fnc))
)"
];
Evaluate($fnc)
)
Offline
Pages: 1
[ Generated in 0.010 seconds, 11 queries executed - Memory usage: 518.95 KiB (Peak: 523.48 KiB) ]