みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもとても参考にさせていただいております。
今レコードが150ほどありチェックボックスを作っています。
チェックボックスにチェックを入れたらその順番通りにフィールドAにシリアルNoが入るようにするにはどうしたらよいでしょうか?
このフィールドAはチェックを入れた時のみ動作し、チェックを外したらシリアルNoは消える用紙できればと思います。
環境はMac10.9でfilemakerpro14を使用しています。
宜しくお願い致します。
Offline
ちなみに前はフィールドAにEvaluate ( " Get ( タイムスタンプ )" ; チェック )でチェックした順番で時刻が入るようにしていました。
このタイムスタンプの所をシリアルNoのような感じに出来たらと思います。
Offline
チェックを外したらほかのレコードのシリアルNoはどうしますか?
タイムスタンプでリレーションして、過去のチェック数+1にすればいいけど
tim様
ありがとうございます。
チェックを外したらですが、考えてみましたらシリアルはそのままでも大丈夫です。
ただ再度チェックを入れた時にシリアルが上書きされれば問題ありません。
なのでシリアルNoと記載しておりますが、チェックを入れた時のみの仮Noな感じです。
Offline
やり方の一例です。
フィールドを3つ作成
フィールド:UUID|テキスト|計算値自動入力 既存値を置き換え|Get ( UUID )
フィールド:gUUID|テキスト|グローバル
フィールド:index|計算:非保存|Left ( gUUID ; Position ( gUUID ; UUID ; 1 ; 1 )-1 )
フィールド:index|計算:非保存|PatternCount ( Left ( gUUID ; Position ( gUUID ; UUID ; 1 ; 1 )-1 ) ; ¶ ) + If ( PatternCount ( gUUID ; UUID ) ; 1 ; 0 )
チェックを「入」「切」するスクリプト
If ( PatternCount ( table::gUUID ; table::UUID ) ;
Substitute ( table::gUUID ; [¶ & table::UUID;""];[table::UUID & ¶;""];[table::UUID ;""] ) ;
table::gUUID & If ( IsEmpty ( table::gUUID ) ; ""; ¶ ) & table::UUID)
フィールド:index にクリックした順番で通し番号が入ります。
初期化は、フィールド:gUUID を空に。
間違えていたので修正しました。
修正:2017/02/07 14:33
誤:
フィールド:index|計算:非保存|Left ( gUUID ; Position ( gUUID ; UUID ; 1 ; 1 )-1 )
正:
フィールド:index|計算:非保存|PatternCount ( Left ( gUUID ; Position ( gUUID ; UUID ; 1 ; 1 )-1 ) ; ¶ ) + If ( PatternCount ( gUUID ; UUID ) ; 1 ; 0 )
Last edited by qb_dp (2017-02-07 14:38:18)
Offline
シリアルというフィールドがあるという前提で
自己リレーション X で設定して
スクリプトを作成
・If[メインのテーブル名:チェックフィールド=”ON”] <== ONは実際に使われている値一覧の値を使う
・フィールド設定[メインのテーブル名::シリアル;Max(自己リレーションのテーブル名;;シリアル)+1] <==各テーブル名は実際のものに置き換え
・EndIF
このスクリプトをメインのレイアウトの チェックフィールドにスクリプトトリガを設定
OnObjectModify とします。
これで、チェックが入ると自動的に過去の最大のシリアッル+1が入力されます。
Offline
チェックボックスでリレーションして、
シリアルの入力値の自動化の計算式
Evaluate ( "Case ( not IsEmpty ( チェックボックス ) ; Max ( リレーション::シリアル ) + 1 )" ; チェックボックス )
でいいのでは。
新たなフィールドも、スクリプトも不要です。
Offline
皆様ありがとうございます。
チポ様から教えていただいたのを試してみたのですが、確かに数字は入るのですがタイムスタンプのような20170207123592感じになってしまいました。
チェックを入れるとここに1ずつ順番に加算されていきます。
今やったのはチェックボックスで自己リレーション、フィールドAの入力値の自動化から計算式でEvaluate ( "Case ( not IsEmpty ( チェックボックス ) ; Max ( 作品2::フィールドA ) + 1 )" ; チェックボックス )
とやりました。
テーブル名は元は作品となっております。
何か間違っていましたらご指摘いただければと思いますので宜しくお願い致します。
Offline
既存のレコードのフィールドAにタイムスタンプが入っているのが有るのでは?
Offline
試してませんが、qb_dpさんのようにグローバルフィールドを使ったりしないと、ファイルが共有されてる時にうまくいかなくなりやすい。スタンドアロンな回答でいいのか気にすべき。
ありがとうございます。
こちらの見落としでタイムスタンプが入力されているレコードがあり出来る事が出来ました。
ちなみになのですが、今1〜順番に入るのですが、これを01〜にする事は出来るでしょうか?
このフィールドで最終的にはソートをかけたたいのですが、現状でソートをすると1、11、12、13、2、3、4、5〜のようになっています。
初めにまとめて記載すれば良かったのですが申し訳ありません。
Offline
チェックを外したらですが、考えてみましたらシリアルはそのままでも大丈夫です。
ただ再度チェックを入れた時にシリアルが上書きされれば問題ありません。
ココちょっと気になるのですが、
MAX値加算方式だと、
1~5まで、チェックして番号を振って、「3」のチェックを外す、「3」は、そのまま。
再度チェックを入れた時、上書き「3」が「6」に変わる。
「3」が欠番になる。
のようなことが起こるので、
・「3」を上書きして「5」が入ってほしいが「6」が入る。
・上書きの場合は、番号の振り直しの必要が出て来る。
等などがあるので運用方法によっては、返って面倒では。
UUID グローバル の方法では、
1~5まで、チェックして番号を振って、「3」のチェックを外すと4,5 は、自動で繰り上がります。
また、たくさん設定したあとで、「2」にしたいときは、「UUID」を「フィールド:gUUID」の2行目に挿入するだけ。
また、timさんのおっしゃっているように、ファイル共有でも個々のユーザーで個別のチェックが可能です。
変更しているのは、グローバルフィールドだけなので、レコードも汚さないですし。
Offline
qb_dp様
ありがとうございます。
先ほどシリアルはそのままでも大丈夫としましたが、やはりそのままだと面倒な事に気がつきました。
申し訳ございませんでした。
Offline
私の方法は共有でも大丈夫と思いますが、今テスト出来ません。。
共有でしたら充分テストしてからにしてください。
> 現状でソートをすると1、11、12、13、2、3、4、5〜のようになっています
このフィールドがテキストタイプになっているのでは、
数字にすれば番号順にソートされます。
Offline
皆様
ありがとうございました。
無事に全て解決する事が出来ました。
Offline
んん?
> シリアルはそのままでも大丈夫としましたが、やはりそのままだと面倒な事に気がつきました
途中のレコードのチェックを外したとき、その番号以降のシリアルを振り直して欠番をなくす。
ということでしょうか?
ならば計算フィールドにすればいいのですが。。
Offline
自分の前レス
> ならば計算フィールドにすればいいのですが
ダメですね。
qb_dpさんのような考え方が必要でしょうか。。
Offline
すみません、再度質問しようとしたらログインが出来なかったので似た名前で投稿致します。
昨日解決したと思ったのですが、動作がおかしい所があるので再度お願い致します。
昨日教えて頂いた計算式でチェックをするとシリアルが順番で入るようになったのですが、
レコードによってはチェックを外した時にもシリアルは消えずにNoが加算されるレコードがあります。
この症状が出るレコードと出ないレコードがあるのですがこれがなぜだか分からないのですがどうしたらいいのでしょうか?
チェックを外した時のシリアルですが、出来ればその番号以降は振り直して欠番が無くなるのが理想ですが、
外した場合にシリアルが消えれば問題ありません。
私の計算では
> not IsEmpty ( チェックボックス )
この様に、チェックボックスフィールドが空欄か否かを判定しています。
チェックボックスの値が入力されるとシリアルが振られ、
空欄になるとシリアルの値が削除されます。
このフィールドのチェックを外しても他の値が入っていると、
書かれた様にシリアルが振れ直されます。
チェックボックスはどのようになっていますか?
Offline
チェックボックスは値一覧で「有り」のみの一つだけ設定してあります。
チェックで自己リレーションを張って、Evaluate ( " Get ( タイムスタンプ )" ; チェック ) をそのまま使い、リレーションの比較条件にしておきます。そのリレーション先のレコード数を数えれば良いでしょう。ただし、1秒以内に複数クリックされない事が条件になります。
https://www.dropbox.com/s/eyhn1bqq0rpn8 … 7.zip?dl=0
Offline
チェックボックスのフィールドを
レイアウトに普通の編集ボックスにしてもう一つ配置してその内容を見てください。
何かゴミが付いていませんか?
Offline
皆様ありがとうございます。
今チポ様のご指摘通り編集ボックスにして調べてみたら入力されているレコードがありました。
それを削除して試したら大丈夫そうです。
お手数おかけしました、解決する事が出来ました。
Offline
出来ればその番号以降は振り直して欠番が無くなるのが理想ですが、
下記の方法であれば、「理想」の動作になりますよ。(^^;)
https://fm-aid.com/bbs2/viewtopic.php?pid=36521#p36521
Offline
qb_dp様
ありがとうございます。
こちらも試してみようと思います。
色々と丁寧に教えて頂きとても助かっております。
Offline
Pages: 1
[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 571.78 KiB (Peak: 592.69 KiB) ]