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

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

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

You are not logged in.

Announcement

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


#1 2019-12-06 18:14:41

ウィン
Member

土日のみ表記カレンダーを作り方

下記のスクリプトは月曜日スタートのカレンダーとして作り使用しています。
日付・横繰り返しフィールド[1] +1 + (Get(計算式繰り返し位置番号) - 1)

土日のみを表示して使いたいのですがどのようなスクリプトを記述すればいいのでしょうか?

Offline

#2 2019-12-06 18:57:31

Shin
Member

Re: 土日のみ表記カレンダーを作り方

繰り返し7のものを使っているのでしたら、それの6と7だけを表示すればいいです。

Offline

#3 2019-12-06 19:27:33

ウィン
Member

Re: 土日のみ表記カレンダーを作り方

一ヶ月のカレンダーで繰り返し[42]のもので土日のみの「6.7」「13.14」「20.21」「27.28」「34.35」「41.42」の表示を使えば良いと言うのは最もな話なのですが、基本1から8(1から6や1から9の場合もある)までの繰り返しで平日をすっ飛ばした土日のみの表示方法はないものかと模索していました。
なぜ欲しかったのかと言うと、日付配列(横)と縦配列で土日の予定をポータルに表示させるため、ポータル表示にフィルタをかけ配列1-2や2-2など式を簡潔にしたかったのです。
無いようであれば繰り返し[42]を設定して6-1や20-2などにして表示したいと思います。

Offline

#4 2019-12-06 19:31:16

ウィン
Member

Re: 土日のみ表記カレンダーを作り方

ちなみに・・・以前ここで質問されていたものの応用で使ってみたいと思っていました。
https://fm-aid.com/bbs2/viewtopic.php?id=7897

Offline

#5 2019-12-07 01:56:36

Hiro
Member

Re: 土日のみ表記カレンダーを作り方

「起算日」日付フィールドに年月を指定する日付が入っているものとして、
目的の「土日のみ表記カレンダー」繰り返し計算フィールドの計算式は、

Let(
[
   #1st=Date(Month(起算日[1]); 1; Year(起算日[1]));
   #dow=DayOfWeek(#1st - 1);
   #dyt=#1st - #dow + Choose(Get(計算式繰り返し位置番号);"";6;7;13;14;20;21;27;28;34;35;41;42)
];
   Case(Month(#1st)=Month(#dyt); #dyt)
)

Last edited by Hiro (2019-12-07 02:04:10)

Offline

#6 2019-12-07 08:30:19

ウィン
Member

Re: 土日のみ表記カレンダーを作り方

土日のみの表記が出来ました。ありがとうございます!
非常に入力がしやすいものになりました。

もう一つだけ欲を言いますと2019/12を指定しますと11/30が土曜となり1列目が空欄になってしまいます。前月週末(または翌月週末)を含めた表示方法はありますでしょうか?

Last edited by ウィン (2019-12-07 08:31:19)

Offline

#7 2019-12-07 12:41:05

Hiro
Member

Re: 土日のみ表記カレンダーを作り方

>#6 『2019/12を指定しますと11/30が土曜となり1列目が空欄になってしまいます。前月週末(または翌月週末)を含めた表示方法はありますでしょうか?』

月を跨ぐ[土・日]ペアだけは、隣接異月であっても日付表示する式

Let(
[
   #1st=Date(Month(起算日[1]); 1; Year(起算日[1]));
   #last=Date(Month(起算日[1])+1; 0; Year(起算日[1]));
   #dow=DayOfWeek(#1st - 1);
   #dyt=#1st - #dow + Choose(Get(計算式繰り返し位置番号);"";6;7;13;14;20;21;27;28;34;35;41;42)
];
   Case(
      Month(#dyt)=Month(#1st); #dyt;
      WeekOfYearFiscal(#dyt;2)=WeekOfYearFiscal(#1st;2); #dyt;
      WeekOfYearFiscal(#dyt;2)=WeekOfYearFiscal(#last;2); #dyt
   )
)

Offline

#8 2019-12-07 12:56:37

ウィン
Member

Re: 土日のみ表記カレンダーを作り方

完璧です!凄いです!Hiroさんのおかげで今のソリューションは完成します。
心から感謝申し上げます。

前回のスクリプトの内容をいくら分析して改変しても空欄を埋めることは出来ませんでした。
どうしたらこのような式が思いつくのか…凄すぎて尊敬いたします。

本当にありがとうございました!!

Offline

#9 2019-12-07 15:20:50

ウィン
Member

Re: 土日のみ表記カレンダーを作り方

項目別週間予定表v2で色々と試させていただいております。
予定に条件付き書式を適用させて使おうと思ったのですが、予定フィールドに値が入っている場合には色を付けると指定してみたのですが、全ての予定が染まってしまいます。
ターゲットはあくまでもそのレコードのみなのですが、どのような計算式を与えてあげれば、ターゲットのフィールドのみに色付け出来るでしょうか?

Offline

#10 2019-12-08 01:18:55

Hiro
Member

Re: 土日のみ表記カレンダーを作り方

>#9
質問の意図も意味も良く分かりません。
・意図は何?:「予定フィールドに値が入っている」なら一目瞭然で、わざわざ条件付書式で着色する意味が不明!
・設定の具体説明は?:「色を付けると指定してみたのですが」のその指定の具体的説明が何もありません。
・この質問は本スレットの質問内容に即したものですか?別件なら別途スレットを新たに立てた方がベターかと、

Offline

#11 2019-12-08 09:03:27

ウィン
Member

Re: 土日のみ表記カレンダーを作り方

説明が不足しており申し訳ございません。
項目別週間予定表を改変して下記のURLに掲載されている画像のようにいたしました。
画像をご覧いただけば、基本土日のみの表示が欲しかった訳がわかると思います。
項目配列を競走番号配列にし、日付配列の方法を変えて週末のみの表示に変更し、引数の1.1や1.4が競馬の日別1-1や1-4に当たるので項目別予定表のHiroさんの技法が今作っているものに大変応用できると思い参考にさせていただくことにしました。

出走予定馬の馬名データが入った場合、条件付き書式により背景を赤く染めて分かりやすくしようと思っていました。
データ入力した際、馬名はフィールドに表示され特に問題はなかったのですが、条件付き書式で not is Empty = ( 馬名フィールド )を指定した途端問題が発生しました。
馬名が入っていない馬名フィールドも赤く染まってしまいました。
単純にフィールドに値が入ったのだから、全ての馬名フィールドに適用されてしまっているのだろうとわかるのですが、どのような手法を取れば解決出来るのか悩んでおります。

http://frds.html.xdomain.jp/%E3%82%B9%E … %83%88.png
http://frds.html.xdomain.jp/%E3%82%B9%E … 83%882.png

このような場合どのようにしたらいいのかご教示頂けたら幸いです。お手数おかけしますが宜しくお願いいたします。

Last edited by ウィン (2019-12-08 09:20:05)

Offline

#12 2019-12-08 11:52:58

Hiro
Member

Re: 土日のみ表記カレンダーを作り方

未だ良く分かりませんが、
着色対象フィールドの特定化ができていないのかな? 取り合えず、
条件式を、 not IsEmpty(Self) にして試してみて?

Offline

#13 2019-12-09 18:54:24

ウィン
Member

Re: 土日のみ表記カレンダーを作り方

not IsEmpty(Self)と入力したらあっさりと解決しました。

今回は「;7;8;13;14;15;20;21;27;28」の9日間
場合によっては「;6;7;13;14;20;21;27」の6日間となったり変動します。
その変動に対応できるようにしたいのですが、
Choose(Get(計算式繰り返し位置番号);"";6;7;13;14;20;21;27;28;34;35;41;42)の
;"";6;7;13;14;20;21;27;28;34;35;41;42はグローバル変数化出来るものなのでしょうか?

Offline

#14 2019-12-09 21:30:42

Hiro
Member

Re: 土日のみ表記カレンダーを作り方

月ごとに開催日が違うのであれば、別途「月別開催日カレンダー」テーブルが必要です。
「起算日」キーのリレーションでそれを参照して目的計算式に適用すれば良いでしょう。
例えば、
●「月別開催日カレンダー」テーブルは、ひと月/1レコードとして、
・起算日:[2019/11/01] 開催日位置番号配列:[7|8|13|14|15|20|21|27|28|||]
・起算日:[2019/12/01] 開催日位置番号配列:[6|7|13|14|20|21|27|||||]
●リレーションは、
「本テーブル::起算日[yyyy/mm/01]」 = 「月別開催日テーブル::起算日[yyyy/mm/01]」
(※起算日は双方とも年月初日yyyy/mm/01書式であることを前提)
●目的の式を以下に変更
・#dyt=#1st - #dow + Choose(Get(計算式繰り返し位置番号);"";6;7;13;14;20;21;27;28;34;35;41;42)

・#dyt=#1st - #dow + 月別開催日テーブル::開催日位置番号配列

Offline

#15 2019-12-09 22:49:59

ウィン
Member

Re: 土日のみ表記カレンダーを作り方

凄く汎用性に優れた手法ですね。
月跨ぎ日別12日開催する場合もあるので開催日位置番号配列フィールドを予め12にしておき、開催回と場所に合わせた配列数値を入れておけば良いわけですよね。
あとはポータルの引数によって何日の何Rって合わせられるようになったので便利でわかりやすくなりました。

その肝心のポータルなんですが、元のソリューションでは動作に問題ないのに、他のソリューションと組み合わせて使おうと複製をしたのですが、複製した先でポータルをクリックしてもOnObjectEnterのスクリプトトリガが発火しなくなってしまいました。
オブジェクトがアクティブになってくれないのです…

ファイルメーカーは本当に高性能なデータベースですね。アイデアを具現化できる素晴らしいソフトだと思います。ニーズが増えてくると便利な半面、非常に高い知識と技術が必要になってきますね。
それでも一つ一つクリアして形になったときの達成感はいいもんですね。

またここの掲示板の皆様はとても親切で優しい方ばかりだと思います。いつも質問ばかりで申し訳ない気持ちがあるのですが、本当に感謝しています。
もっともっと頑張って皆様みたいに人に教えられるよう志して行きたいと思います。

Offline

#16 2019-12-10 14:04:38

ウィン
Member

Re: 土日のみ表記カレンダーを作り方

開催日位置番号配列:[7|8|13|14|15|20|21|27|28|||]
開催日位置番号配列:[7]ひとつでは読み取り、日付配列に入るのですが、区切り線を入れて複数指定した途端消えてしまうのですがなぜでしょう?

Let(
[
   #1st=Date(Month(開催起算日[1]); 1; Year(開催起算日[1]));
   #last=Date(Month(開催起算日[1])+1; 0; Year(開催起算日[1]));
   #dow=DayOfWeek(#1st - 1);
   #dyt=#1st - #dow + 月別開催日カレンダー::開催日別番号配列
];
   Case(
      Month(#dyt)=Month(#1st); #dyt;
      WeekOfYearFiscal(#dyt;2)=WeekOfYearFiscal(#1st;2); #dyt;
      WeekOfYearFiscal(#dyt;2)=WeekOfYearFiscal(#last;2); #dyt
   )
)

http://frds.html.xdomain.jp/1210.png
ゲストログインで完全アクセス
http://frds.html.xdomain.jp/%E9%96%8B%E … 3%AB.fmp12

Last edited by ウィン (2019-12-10 14:13:46)

Offline

#17 2019-12-11 12:38:35

Hiro
Member

Re: 土日のみ表記カレンダーを作り方

  • 「 開催日位置番号配列 」フィールドは、その名が示す通り「 繰り返し[12回]の数値フィールド 」です。
       

  • 安易な改造を試みる前に、過去ログ元本サンプルの構造解析・原理把握をしっかり行ってください。
    貴方がタタキ台にした元サンプルは「項目別週間予定表v2.fmp12」で、その名が示す通り単位表示カレンダーです。
    あなたの目的は月次開催日カレンダーなのだから、当然「週」関連要素を「月」関連へとの修正が必須です。

Offline

#18 2019-12-12 20:21:12

ウィン
Member

Re: 土日のみ表記カレンダーを作り方

>「 開催日位置番号配列 」フィールドは、その名が示す通り「 繰り返し[12回]の数値フィールド 」です。
[7|8|13|14|15|20|21|27|28|||]が何を意味していたのか理解できていませんでした。修正しましたらスムーズな動作をしてくれました。

構造解析・原理把握すべく1行ずつしっかりと読み、スクリプト書籍片手にデータがどのような流れで動いていくのか把握に努めています。Hiroさんの高度な知識に少し甘えていました。本当にすいません。

しかしながら一生懸命読み解いてもどうしてもわからないのです…
日別配列フィールドのスクリプトが「起算日[1] + (Get(計算式繰り返し位置番号) - 1)」時は特に動作に問題なかったのですが、Let関数を用いたスクリプトと書き換えて使ってみた瞬間から3列目以降変更禁止エラーが出てしまい入力が不可能になってしまいます。
レコードは1つ追加されるのですがフィールドは空のままになってしまいます。

新規レコード追加のスクリプトはオブジェクト名($prmの流れ)をターゲットにしたデータ入力の為のフィールド設定なので問題はないと思っています。

http://frds.html.xdomain.jp/20191212_1.png
http://frds.html.xdomain.jp/20191212_2.png

自分が何かに気づいていないためだと思います。何かヒントでもいただければ幸いです。

Offline

#19 2019-12-12 21:59:41

Hiro
Member

Re: 土日のみ表記カレンダーを作り方

説明代わりに校正済ファイルを返却します。
取り合えず、分かる部分のみ修正してあります。

●校正済返却ファイル「開催スケジュール.fmp12」 → https://1drv.ms/u/s!AlaCGhTKTWEOp3XgTxZ … s?e=8ksHOg

Last edited by Hiro (2020-05-12 15:51:47)

Offline

#20 2019-12-12 22:29:20

ウィン
Member

Re: 土日のみ表記カレンダーを作り方

理想ばかりに囚われ、スクリプト(引数)も満足に理解しようとせず、身の丈に合わない実力以上のものを作ろうとしていました。
コピペばかりせず、プログラムをしっかり読みながら、以前とは違うアプローチで楽しみながら学んでいきたいと思います。

日別配列の取得方法かと思っていたのですが、起算日、日付キーが根本的に違っていたのですね。週の関連要素の修正とは土台となる起算日とキーだったのですね。

ご厚意に感謝申し上げます。
本当にありがとうございました!

Last edited by ウィン (2019-12-12 22:44:19)

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 621.04 KiB (Peak: 637.95 KiB) ]