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

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

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

You are not logged in.

Announcement

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


#1 2018-04-11 06:28:38

あさり
Member

日付が変わるごとに値をプラス1していく

点呼簿を作成しています
テーブル一つの単純なもので
ID 日付 名前 注意事項ID
といったフィールドがあります

別途注意事項テーブルをつくり、それに30のマスタを格納しておきます
点呼簿にそれをリレーションする注意事項IDを自動入力したいのですが
点呼簿の日付が変わるごとに、複数のレコードであっても同じ注意事項にして、
順番に表示(リレーションで)させていくにはどうやったらよいでしょうか?

点呼簿の注意事項IDが上記の条件がかわるごとにプラス1されて
30になると、また1からはじまるような計算式になるのでしょうか?
そのようなことはできますか?

1月1日 Aさん 注意事項1
1月1日 Bさん 注意事項1
1月2日 Aさん 注意事項2

という具合にしたいです

Offline

#2 2018-04-11 08:47:25

Shin
Member

Re: 日付が変わるごとに値をプラス1していく

1月1日 Aさん 注意事項1
1月1日 Bさん 注意事項1
1月2日 Aさん 注意事項2
1月3日 Aさん 注意事項3
1月3日 Bさん
の様な場合、3日 Bさんはどうなるのですか。

Offline

#3 2018-04-11 15:34:22

あさり
Member

Re: 日付が変わるごとに値をプラス1していく

その場合は
1月3日 Bさん 注意事項3
となります
連休で日付が飛んだ場合でも

1月3日 Bさん 注意事項3
1月10日 Aさん 注意事項4
1月10日 Bさん 注意事項4

としたいです

Offline

#4 2018-04-11 16:49:34

Shin
Member

Re: 日付が変わるごとに値をプラス1していく

日付で自分以下への自己りレーションします。
リレーション先の日付で値一覧をつくり、ValueListItems() で値一覧の内容を取り出し、その数を数えればいいです。さらに、Mod() で処理します。

Offline

#5 2018-04-11 17:30:09

チポ
Member

Re: 日付が変わるごとに値をプラス1していく

自己リレーション
  日付 > 日付
            日付の降順ソート指定
とすると直前の日付のレコードを参照できます。

Offline

#6 2018-04-11 19:32:44

あさり
Member

Re: 日付が変わるごとに値をプラス1していく

>リレーション先の日付で値一覧をつくり、

レコードが増えていくと、動作にも支障がでますか?

Offline

#7 2018-04-12 01:22:32

あさり
Member

Re: 日付が変わるごとに値をプラス1していく

チポさん
やってみましたが、すべて一番小さい日付が表示されてしまいます

元日付 < 自己リレ用日付
とすると、すべて次の日付が表示されます

この仕組自体がよく理解できていので
再度アドバイスおねがいします

Offline

#8 2018-04-12 01:59:29

Shin
Member

Re: 日付が変わるごとに値をプラス1していく

何百万になれば、遅くなるかもしれません

Offline

#9 2018-04-12 02:07:18

あさり
Member

Re: 日付が変わるごとに値をプラス1していく

単純に、1から30まで増えていき、30になったら1に戻るという計算フィールドを作成して
日付で自己リレーションして同じ日付は同じ数値になるようにすればいけそうな気がしてきましたが
どうでしょうか?

どのような計算式にしたらよいですか?

Offline

#10 2018-04-12 09:09:32

チポ
Member

Re: 日付が変わるごとに値をプラス1していく

リレーションの設定で照合順を指定できます。

ヘルプのリンクです
  http://www.filemaker.com/help/16/fmp/ja … ect_header

これで日付の降順ソート指定すると直前の日付を最初に照合します。

Offline

#11 2018-04-12 10:23:15

Shin
Member

Re: 日付が変わるごとに値をプラス1していく

説明より、サンプルを見てください。
https://www.dropbox.com/s/vzeu7irtju0h1 … 7.zip?dl=0

Offline

#12 2018-04-12 16:52:47

あさり
Member

Re: 日付が変わるごとに値をプラス1していく

チポさん
1/1
4/1
5/1
があったとして自己リレーションで表示させると1/1のは空欄
4/1と5/1には1/1がリレーションされます

不等号を逆にすると、すべて、次のレコードがリレーションされ
最後の5/1は空欄になってしまいます

Shinさん
サンプルありがとうございます
何百万になると遅くなるかもしてないということですが、
これは仕方ないことなんですかね
遅くなる、といっても使えないレベル、という意味でしょうから
トレードオフですね

Offline

#13 2018-04-12 17:08:47

チポ
Member

Re: 日付が変わるごとに値をプラス1していく

リレーションでソート指定しましたか?

Offline

#14 2018-04-12 17:43:01

あさり
Member

Re: 日付が変わるごとに値をプラス1していく

リレーションシップ編集の
レコードのソートにチェックして
日付を追加、降順ということですよね?

どちらのテーブルでも設定したり、片方だけやったりしたけど
前のレコードを表示することだけができません
次のレコードは表示させることができます

Offline

#15 2018-04-12 18:09:33

チポ
Member

Re: 日付が変わるごとに値をプラス1していく

テーブル::日付 > テーブル 2::日付
                                     日付の降順ソート指定

テーブル      はデフォルトのテーブルです
テーブル 2   はデフォルトのコピーです

ソート指定はテーブル 2だけで十分です。

こうなっていますか?

Offline

#16 2018-04-12 19:02:37

あさり
Member

Re: 日付が変わるごとに値をプラス1していく

なりました
どこかが間違っていたのでしょうね

前のレコードを表示させることはできましたが
これをつかいどうやってマスタをループ表示させたらよいのでしょうか?

Offline

#17 2018-04-12 23:47:14

あさり
Member

Re: 日付が変わるごとに値をプラス1していく

自分なりの解決策を考えました

日付で自己リレーション
同日最小IDという計算フィールドを作成し、リレーションされた同じ日付の中からMIN()で最小のIDを求める
別途計算フィールドに、Mod( 同日最小ID -1;30)+1 とする

上記のようすると1~30まででループさせて表示させることはできました

レコードを削除したときには、そのレコードに設定されていた注意事項がスキップされたかたちになる、
ということ以外は不具合はなさそうに感じますが、みなさんが見た感じでは問題なさそうですか?

Offline

#18 2018-04-13 09:16:25

チポ
Member

Re: 日付が変わるごとに値をプラス1していく

ID
がなんなのか分かりませんが、おそらくうまく行かないと思いますよ。

私の提案は、
直前の日付のレコードの注意事項番号に1を加えて、それが31になったら1に戻す。
という方法です。

Offline

#19 2018-04-13 15:41:10

あさり
Member

Re: 日付が変わるごとに値をプラス1していく

私のものでは、どういうところがまずいですか?
IDはレコードのユニークキーです
適当にレコードを増やしていってもうまく動いているようですが、
気がついていない、後でおかしくなる要素があるということでしょうか?

チポさんの提案はifで31なら1とするんですか?

Offline

#20 2018-04-13 16:29:13

チポ
Member

Re: 日付が変わるごとに値をプラス1していく

例を挙げてみましょう

> 同日最小IDという計算フィールドを作成し、リレーションされた同じ日付の中からMIN()で最小のIDを求める
> 別途計算フィールドに、Mod( 同日最小ID -1;30)+1 とする

このフィールドを Min とNoとします

  ID  日付  名前  Min  No
  1    1/1   A      1     1
  2    1/1   B      1     1
  3    1/2   A      3     3
  4
  5  3〜6まで1/2とします
  6
  7    1/3   C     7      7
   ・・・・

この様に同一日付に複数のレコードがあると、Noが飛んでしまいますね。


私の方法は、
前レスの自己リレーションを使って、
Noの自動入力の計算式
  Mod ( テーブル 2::No ; 30 ) + 1
これでいいでしょう。

テーブルで最初の日付のレコードに対処が必要かな。。

Offline

#21 2018-04-14 02:48:26

あさり
Member

Re: 日付が変わるごとに値をプラス1していく

たしかにそのような欠点がありますね
アドバイス大変参考になりました

テーブルの最初のレコードだけは手入力でいれます(一度だけですので)

チポさんの方法を試させてもらいました
日付順に入力するときは問題ないようですが

日付 No
1/1    1
1/2  2   
1/3  3
1/4  4   
1/9    5

となっているときに
あとから 1/8 を入力すると、1/8 も No5 となってしまいます

すでに入力されている日付を後から追加した場合、つまり
1/4 を追加入力した場合は、Noは4になり問題ありません

いままでにない日付が追加された場合、この場合ですと
1/8 に対しては 6 にするようなことはできますか?

1/8 を入力したときに自己リレーションで返されるのが、一つ前の日付 1/4 となり
その No に +1 したものが計算されるので、そうなるのだと思います

再計算させて、1/8 を No5 に、1/9 を  6 にずらす、というのでは、その修正前に印刷したものとの
整合性がとれなくなるので(一度設定されたNo(注意事項)は変わってはいけない)少々まずいです

なにか対策法がありますでしょうか?

Offline

#22 2018-04-14 09:44:14

Shin
Member

Re: 日付が変わるごとに値をプラス1していく

#15に、その答えは書いてありますよ。

その注意事項の運用順は、そんなに厳格に暈蝿する必要があるのですか。30項目の使い回しなので、日付の項目をみていけば、長い目で見れば均等になるはずですが。

Offline

#23 2018-04-14 18:15:47

あさり
Member

Re: 日付が変わるごとに値をプラス1していく

ループ自体はそこまで厳格になる必要はないのですが、注意事項は毎日変わらないといけないので、
後から入力すると、同じ注意事項が連続することになるので困っています

#15 の自己リレーション・降順でやっていますが、このような症状になってしまいます
#15 を応用するということでしょうか?

Offline

#24 2018-04-16 05:45:30

あさり
Member

Re: 日付が変わるごとに値をプラス1していく

一晩考えてみましたが
#21#23 の問題を
#15で解決する方法かわかりませ

繰り返しの質問になってしまいますが
注意事項は、1から30まできっちり順番にくる必要はありません(後から若い日付を入力するとズレますし)が
現状では連続した日付で連続した注意事項になってしまうので、それは困る、ということです
わがままですみません

Offline

#25 2018-04-16 09:07:16

チポ
Member

Re: 日付が変わるごとに値をプラス1していく

そのような要望は先に書いていただかないと。。

私の方法では、途中の日付には対応できませんね。

Shinさんの方法か、
スクリプトで初出の日付か否かを判定して、番号を入力。
とかでしょうか。。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 616.94 KiB (Peak: 633.84 KiB) ]