みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FileMakerで受付システムを構築して利用しています。
バージョンはFMP19、OSはwindows 10 でメモリは4GBのPCを利用しています。
当システムでは①顧客情報テーブル②来館履歴テーブル③サービス内容テーブルで構成されております。
STEP1:①顧客情報テーブルのレイアウトから来館ボタンを押すと②来館履歴テーブルで新しい来館履歴レコードが作成されるようになっております。
STEP2:その後の来館履歴テーブルのレイアウトで登録ボタンを押すと、来館履歴に紐付いたサービス内容が登録され、またサービスや来館の情報の一部が①顧客情報テーブルの所定のフィールドに転記されます。
STEP1では①顧客情報テーブルのレイアウトの上に②来館履歴テーブルのレイアウトがカードウインドウが表示されており、
STEP2ではスクリプトによって②来館履歴テーブルのレイアウトから③サービス内容テーブルのレイアウトに切り替わり処理が進むようになっております。STEP2の終わりにカードウインドウが閉じられ変数で保存していた値を①顧客情報テーブルのレイアウトに転記しています。
ここで通常はもとの顧客情報のレコードに正しく転記できるのですが、たまに顧客情報のレコードが移動してしまい(レコード番号1へ移動していると思われます)、別の顧客情報のレコードへ転機されることで、正しく転記処理が行われないことがあります。(常にではなく、おおむね正常に動いており、まれにこの現象が発生します)
正しい顧客情報テーブルのレコードからレコードが移動してしまう理由がわかりましたら教えていただきたいと思っています。
サービス内容テーブルから、リレーションを通して凝却情報テーブルをみると、目的の顧客情報レコードへアクセスできるはずです。変数を介さずに、直接フィールド設定すればいいのでは。
レコード位置が動く件は、何らのスクリプトが別に動いているとしか考えにくいでしょう。たまにあるのが、別ウィンドウでダブルクリックされてしまって、最初のクリックでウインドウが閉じられ、第2クリックで元のウインドウがクリックされてしまう、という動きです。
Offline
リレーションはどのようになっていますか?
レコードが移動していると思われるときは、実際にスクリプト終了時に表示されているレコードも1レコード目のレコードですか?
レコードが移動した以外にフィールド設定のターゲットのテーブルオカレンスが間違っている可能性も考えられます。
※カードウインドウでは元のウインドウを選択してレコードを切り替えることができないため
(スクリプトで元のウインドウを選択してもカードウインドウ表示中は元のウインドウの操作はできません)
Offline
>>Shin 様
早速のご返信ありがとうございます。
「リレーションを通して凝却情報テーブルをみると、目的の顧客情報レコードへアクセスできるはずです。変数を介さずに、直接フィールド設定すればいいのでは」
→おっしゃるとおりだと思うのですが、記載したのと同様の現象により顧客情報テーブルの正しいレコードに処理できない事案があったため、変数を介しレイアウトを切り替えてから転記する形をとっています。
顧客情報テーブルのレイアウト(顧客詳細レイアウト)ではスクリプトトリガ(OnLayoutEnter)として、全レコード表示とソートを行っていますが、レコードの移動は行っておりません。それ以外のレイアウトではスクリプトトリガは設定しておりません。
ダブルクリックの件は初めてお聞きしたのですが、最初のクリックでウインドウが閉じられるとは、ウインドウを閉じるをしこんでいるボタンを押した場合という意味でしょうか。
>>Moz 様
ご返信ありがとうございます。
リレーションについてですが、
①顧客情報テーブル(主キー:会員番号)ーーー②来館履歴テーブル(主キー:来館ID、外部キー:会員番号)ーーー③サービス内容テーブル(主キー:サービスID、外部キー:来館ID)
となっております。
実際にスクリプト終了後に表示されているレコードは、正しいレコード(対象としたいレコード)でした。
ただし来館に伴うサービス内容の転記(例えば回数券を購入した場合、回数券の残り回数に今回の回数券分を足す処理をしていますが、回数券の残り回数のフィールドは顧客情報テーブルにあります)は、今回の処理に関係のない顧客情報テーブルのレコード番号1のレコードへ転記されていました。
テーブルオカレンスの間違いについてはご指摘の通り自分がやりがちなミスですが、今回のスクリプトについては正しく処理されることがほとんどですし、間違ってはいないと考えています。
カードウインドウについては親ウィンドウのウインドウ選択ができない点は初めて知り、勉強になりました。ありがとうございます。
PCのスペックが高くない(特にメモリが4GB)ですがこちらの影響はありますでしょうか。
FMPの推奨スペックは上回っていますが、関連レコードへ移動するときなど時間がかかるときもありますし(リレーションなどその他の問題かもしれませんが…)、心配だなとは思っています。
PCのスペックは関係ないでしょう。
書かれた説明ではその理由が分かりませんが、、
来館履歴に回数券の出入りがあるのなら、
顧客情報でその合計を求めればいいので転記の必要もなくなるのでは。
Offline
> 記載したのと同様の現象により顧客情報テーブルの正しいレコードに処理できない事案があった
リレーションそのものの問題があるのでは。
Offline
>>チポ 様
PCのスペックには関係がないとのこと、ありがとうございます。
「顧客情報でその合計を求めればいい」とは、リレーションを利用し回数券利用の回数を計算フィールドを用いるということでしょうか。
回数券の残り回数は、10回回数券購入→10回分増える、回数券で施設利用→1回分減る、回数券の有効期限もあり、このような運用としていますが、良いやり方があれば伺いたいです。
>>Shin 様
リレーションは再度見直してみます。
顧客情報ー来館履歴も、来館履歴ーサービス内容も1対多になっているので、理由がわからないのですが
スクリプトトリガの件も含めて検討します。
ひとまず現時点では、顧客情報テーブルのレイアウトに戻った際に、会員番号で検索して間違いなく正しいレコードにいるように対策しました。
皆さまご回答ありがとうございます。
間違った入力は、再現できますか。再現できれば、リレーションの誤りでしょう。再現できなければ、なんらかのファイルの中のデータの異常を考えないといけないかと思います。索引テーブルの損傷かもしれません。
回数券の残り回数は、
回数券購入回数 * 10 - 回数券利用回数
という簡単な式です。
Offline
来館履歴に、回数券購入したときの有効期限日付のフィールドを作ります。
顧客情報に本日を入力するグローバルフィールドを作り、
リレーション
顧客情報::顧客 = 来館履歴::顧客
and
顧客情報::本日 <= 来館履歴::有効期限
としてこのカウントが回数券の有効冊数です。
Offline
>>Shin様、チポ様
詳細な説明ありがとうございます。
>>Shin様
間違った入力は再現できておりません。
事象が起きた直後に確認のため同様の操作をしても、意図したとおりに処理されてしまうため原因が予想できませんでした。
索引の損傷が疑われるとのことでしたが、
https://fmhelp.filemaker.com/help/13/fm … 40.12.html
こちらの一貫性チェックを行うべきでしょうか?
ファイル内部の整理もかねて、最小化保存を行ってみるといいようです。または、フィールド定義で、索引無しに設定変更して一旦保存、再度索引設定を行ってみてもいいと思います。
Offline
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 550.39 KiB (Peak: 571.3 KiB) ]