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

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

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

You are not logged in.

Announcement

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


#1 2024-01-16 19:46:05

へっぽこ太郎
Guest

特定期間の日付を取得し、レコードを作成したい。

Filemakerを最近使い始めた者で、使用しているのはFilemaker Proの最新バージョンです。

表題の通り、二つのフィールドで指定した範囲の期間を抽出し、ポータル上のレコードとして取得したいと考えております。

ーー例ーー
フィールドA 2024/01/01
フィールドB 2024/01/14
上記の期間である14日間を1日ずつ取得、レコードとして別テーブル上(ポータル)へ反映させたいです。
ーーーーー

無知な質問で恐縮ではございますが、ご協力頂けますと幸いです。
宜しくお願い致します。

#2 2024-01-16 20:45:49

himadanee
Guest

Re: 特定期間の日付を取得し、レコードを作成したい。

抽出とか取得とかは、既存のレコードについていうときに使う用語だと思いますが...
実際はレコードを作成したいわけですか?

#3 2024-01-16 23:18:26

Shin
Member

Re: 特定期間の日付を取得し、レコードを作成したい。

ポータルのリレーションに、比較リレーションにすればいいでしょう。
フィールドA ≦ 日付
フィールドb ≧ 日付
にして見てください。

Offline

#4 2024-01-17 09:01:09

チポ
Member

Re: 特定期間の日付を取得し、レコードを作成したい。

表題に
  レコード作成
とありますから、その方法を、、

ポータルのリレーションの説明がありませんが、
  レコードの作成を許可
とできるのなら、そう設定して、
ポータル行の順に日付を入力していけばいいですね。

それができないのなら、関連テーブルで、
  新規レコード作成
  日付入力
  照合フィールド等その他入力
のような手順になるでしょう。

どちらにしてもスクリプトで可能でしょう。

Offline

#5 2024-01-17 12:22:21

へっぽこ太郎
Guest

Re: 特定期間の日付を取得し、レコードを作成したい。

皆さん、ご返答ありがとうございます。
言葉足らずな部分があり申し訳ありません。

リレーションはシリアルで組んであり、ポータル上で新規レコードは作成できる状態です。

テーブルαにフィールドAとフィールドBはあり、 そこで指定した期間を
テーブルβ(ポータル)のフィールドCに1日毎の新規レコードとして自動で反映させるシステムにしたいです。
なので期間が増えれば増えただけポータル行は増えていく形になります。

ーーー例ーーー
フィールドA [2024/01/01]
フィールドB [2024/01/14]

    ーポータルー
フィールドC-1 [2024/01/01]
フィールドC-2 [2024/01/02]
フィールドC-3 [2024/01/03]
フィールドC-4 [2024/01/04]
・・・
ーーーーーーー

説明が下手で恥ずかしい限りではございますが、お力をお貸し頂けますと幸いです。

#6 2024-01-17 13:22:23

チポ
Member

Re: 特定期間の日付を取得し、レコードを作成したい。

それなら私の最初の方法でいいのですが、
スクリプトにできませんか?

Offline

#7 2024-01-17 13:41:48

へっぽこ太郎
Guest

Re: 特定期間の日付を取得し、レコードを作成したい。

チポ様

スクリプトを作りたいのは山々なのですが、如何せん初心者なものでどう作ったらよいものかと…。
お手数をおかけしてしまい恐縮ですが、ご指導頂けないでしょうか…。

#8 2024-01-17 13:49:57

Shin
Member

Re: 特定期間の日付を取得し、レコードを作成したい。

表示側のテーブルに複数レコードがあった場合に、日付側のレコードは共通でいいのですか。例えば、レコード1で 1/1~1/5、レコード2で 1/3~1/6 が指定してある場合、1/3〜1/5のレコードは共通ですか?それとも、別々のレコードが必要ですか。
実運用で、表示側がメンバーで、日付側がメンバーごとの日毎のスケジュールでしたら、共通レコードではまずいですよね。

リレーション先のテーブルは、日付でみて、連続日付のレコードがある、という事でいいでしょうか。
そちらのテーブルで、フィールドBの日付までレコード複製を繰り返すのが簡単でしょうね。
次のようなスクリプトを動かします。(フィールドBにトリガーを仕掛けて、OnObjectExit で動かせば自然でしょう)

Loop
	関連レコードへ移動 [ 関連レコードのみを表示 ; テーブル: 「テーブル2」 ; 使用するレイアウト: 「テーブル2」 (テーブル2) ; 新規ウインドウ ] 
	Exit Loop If [ Get ( 最終エラー ) = 0 ] 
	フィールド設定 [ テーブル2::日付 ; テーブル::g_日付0 ] 
	レコード/検索条件確定 [ ダイアログあり: オン ] 
End Loop
レコードのソート [ 記憶する ; ダイアログあり: オフ ] 
レコード/検索条件/ページへ移動 [ 最後の ]
Loop
	レコード/検索条件複製
	フィールド設定 [ テーブル2::日付 ; テーブル2::日付 + 1 ] 
	Exit Loop If [ テーブル2::日付 ≥ テーブル::g_日付1 ] 
End Loop
ウインドウを閉じる [ 現在のウインドウ ] 

ただ、途中が抜けていた場合の処理が面倒です。ですから、ファイルを開いたときに、テーブル2側に十分なレコード(例えば未来1年先まで)を作ってしまった方が簡単になるでしょう。

または、テーブル2側で日付フィールドが常時ユニークになるようにフィールドの制限をつけておきます。テーブル1に、
Let (
    d = フィールドA[1] - 1 + Get ( 計算式繰り返し位置番号 ) ;
    Case ( d ≤ フィールドB ; d )
)
という計算フィールド(繰り返し)をつくっておき、繰り返しをレコードに分解するようにインポートする、という方法もいいかもしれません。

https://www.dropbox.com/s/qlwukbgw6mgtd … 2.zip?dl=0

Last edited by Shin (2024-01-17 16:35:56)

Offline

#9 2024-01-17 14:30:41

チポ
Member

Re: 特定期間の日付を取得し、レコードを作成したい。

フィールAとBに入力があり
  A<B
  ポータル行がすべて空白
を条件として、、

スクリプトです
  ポータル内の行へ移動[最初の]
  Loop
    フィールド設定 [フィールドC ; フィールドA + Get (アクティブポータル行番号) - 1]
    Exit Loop If [ フィールドC >= フィールドB ]
    ポータル内の行へ移動[次の]
  End Loop

Offline

#10 2024-01-17 14:50:02

へっぽこ太郎
Guest

Re: 特定期間の日付を取得し、レコードを作成したい。

チポ様

途轍もなくご丁寧な説明、ありがとうございます。

日付側のレコードについては日付が重複することはないので共通で問題ありません。

理解が浅いので教えて頂いた内容を自分のものにするのに時間がかかると思いますが、試してみます。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 524.33 KiB (Peak: 529.23 KiB) ]