初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2016-08-15 08:26:36

やまほん
Member

年月のみのドロップダウンリスト

タイトルどおりなんですが、
年月をドロップダウンで指定したいです。

値一覧で設定すればいいんでしょうけど、選択肢として表示するのは
今日を中心として過去と未来の1年ずつの2年分のカレンダーです。
今日なら2015/8月から2017/8月の25ヶ月。
この25か月分を動的値一覧としてシンプルに出す方法はないでしょうか?

何年も先までの分を予め用意して、今日の日付から計算させてリレーションでひっぱるしかないですか?

Offline

#2 2016-08-15 11:42:26

nice-guy
Member

Re: 年月のみのドロップダウンリスト

凡人の発想で。
別テーブルにその都度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

#3 2016-08-15 12:38:32

チポ
Member

Re: 年月のみのドロップダウンリスト

> 動的値一覧として

> 何年も先までの分を予め用意して、今日の日付から計算させてリレーションでひっぱる
これのどこが気に入らないのでしょうか?
100年後まで作っても、高々1,200レコード程度ですよ。

入力も最初の1レコードだけで、後はレコード作成(複製でも)で自動入力できますよ。

Offline

#4 2016-08-15 18:26:14

Hiro
Member

Re: 年月のみのドロップダウンリスト

無駄なレコードの増設や面倒な更新作業をせずに済む方法。

●計算フィールド「年月一覧」を作り、これに目的の年月リストを動的に自動生成します。
計算式は、

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

#5 2016-08-15 19:41:19

やまほん
Member

Re: 年月のみのドロップダウンリスト

nice-guyさん、チポさん、Hiroさん、ありがとうございます。

チポさんのおっしゃるとおり、それが一番早くて確実かもしれません。
先人の方の知恵で何か他の方法がないかな~と思って質問しました。

nice-guyさんの方法に近いものを作ろうとしていました。
Hiroさん、式までありがとうございます。

どの方法でいくか迷っています。
まずはありがとうございました。

Offline

#6 2016-08-16 10:37:26

旅人
Member

Re: 年月のみのドロップダウンリスト

2015/08月や201508などにしないとできなさそう・・・

Offline

#7 2016-08-16 11:07:10

calcer
Guest

Re: 年月のみのドロップダウンリスト

桁数をそろえないと順番がバラバラになる、という意味ですね?

#8 2016-08-16 11:21:20

Hiro
Member

Re: 年月のみのドロップダウンリスト

> 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

Registered users online in this topic: 0, guests: 1
[Bot] claudebot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.010 seconds, 11 queries executed - Memory usage: 518.95 KiB (Peak: 523.48 KiB) ]