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

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

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

You are not logged in.

Announcement

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


#1 2020-12-12 01:18:52

原田
Guest

一つのカード(レコード)から複数のレコードを生成するリレーションは

契約書のテーブル(ファイル)と顧客名簿のファイルがあり、
顧客名簿は新規レコードができると顧客コードを自動入力するようにしました。
一つのレイアウトから当事者AとBを入力して、AとBの顧客名簿のレコードを生成したいと考えてます。
契約書ファイルと顧客名簿のファイルを顧客コードをキーにリレーションし、
新規レコードの作成を許可としました

契約書のレイアウトにリレーションにより顧客名簿の顧客名フィールドを表示し、
契約書の新規レコードから顧客名Aを入力すると、顧客名簿テーブルのレコードが
生成され、顧客コードも入ります。
しかし、ここ契約書テーブルの同じレコードの同じレイアウトから顧客Bのレコード
が作れません。

契約書テーブルに2つのフィールドAとBを表示して2つのレコードを生成できるでしょうか?

説明が拙くて申し訳ありませんファイルメーカーは14です。

#2 2020-12-12 02:12:08

Moz
Member

Re: 一つのカード(レコード)から複数のレコードを生成するリレーションは

リレーションの作成オプションを有効にしていれば、リレーション先に複数のレコードを作成できます。

ファイルの構造がよく分かりませんが、ひとつの契約書に対して当事者が複数いる場合、
顧客側に契約書の主キーを外部キーとして持たせるほうが適します。
(一対多の場合、多側が一側の主キーを外部キーとして持ちます)

また、契約書は随時増えていくレコード、顧客は顧客につき1レコード(顧客マスタとすることが多い)です。
このふたつを直接リレーションさせるというのは筋が悪いです。
→このままでは同じ顧客が複数の契約書に絡む場合、顧客マスタに同じ顧客が増えますね......

契約書-当事者-顧客マスタのような形であれば、当事者が何人になろうと問題ありません。
ポータルで当事者を表示すれば作成オプションが有効なら何人でも追加できます。

なお、ファイルを分けているように見えますが何故でしょうか?

Offline

#3 2020-12-12 08:54:25

Shin
Member

Re: 一つのカード(レコード)から複数のレコードを生成するリレーションは

当事者の定義は、顧客側の担当者という意味でしょうか? 契約先は、複数の会社などとの契約でしょうか? また、それを入力するフィールドの位置は?
顧客が同一グループ(1会社など)の個人ごとのマスターという構成でしたら、そちらも、会社で1レコード、その中の社員で1レコード、という2段の構造にした方がいいのでは。

Offline

#4 2020-12-12 12:10:48

原田
Guest

Re: 一つのカード(レコード)から複数のレコードを生成するリレーションは

Moz様
早速のご教授ありがとうございます。
以前から使用していた顧客名簿のファイルがありまして、
今回契約書のデータファイルをまとめようと考えました。
そこで、契約書のファイルをつくり、そこから
顧客名簿にアクセスして契約書の入力時に
顧客名簿も増やせればと考えたのでファイルが2つあります。
どうもリレーションというかデータ構造の考えが拙いようで
契約書から顧客へという方向が良くないみたいです。

>顧客側に契約書の主キーを外部キーとして持たせるほうが適します。
>(一対多の場合、多側が一側の主キーを外部キーとして持ちます)
>また、契約書は随時増えていくレコード、顧客は顧客につき1レコード(顧客マスタとすることが多い)です。
>>このふたつを直接リレーションさせるというのは筋が悪いです。
工夫してみます。

Shin様 ありがとうございます。
この場合契約当事者は法人か個人ですが、顧客とイコールで、必ず1対1の契約です。
しかし法人の場合は担当者があるので、ご指摘の構造にした方が良いですね。
やってみます。

#5 2020-12-12 12:34:11

Shin
Member

Re: 一つのカード(レコード)から複数のレコードを生成するリレーションは

契約書を作るついでに顧客テーブルを入力するのではなく、先に顧客テーブルで顧客を選択し、新規でしたらレコードを作成しておきます。その後、契約書を、顧客テーブルから作るようにすると、データベースとしては流れが良くなります。その時点で、法人でしたら、担当者テーブルから担当者を選択しておき、そのコードを契約書に取り込むようにされるといいでしょう。

ただ、実務では、新規の契約書、顧客名の入力、担当者の入力、という流れが多いでしょうから、その機能を追加してあげるといいです。
https://www.dropbox.com/s/kk90brpmbt1dt … 2.zip?dl=0
顧客名を設定すると、担当者を設定できる画面が表示されます。* の入力で、新規顧客を登録できます。自然な流れの動きですが、内部はちょっと凝った動きをさせています。

顧客テーブルを他のソリューションでも利用するのでしたら、別ファイルでもいいと思いますが、そのテーブルを外部データソースとしてリレーションマップにオカレンスを持たせておくと、同ファイルの中にあるような動きになります。

Last edited by Shin (2020-12-14 16:17:08)

Offline

#6 2020-12-13 11:45:00

原田
Guest

Re: 一つのカード(レコード)から複数のレコードを生成するリレーションは

Shin様
わざわさ参考ファイルをおつくりいただき、感謝に耐えません。ありがとうございます。
マックだけのアプリだった時代からファイルメーカーで個人商店の業務DBを作っては
使ってきましたが、なにぶんFM8とかのファイルをアップデートして使っているので
新しい機能を使えていません。
それでも使い続けられるところがファイルメーカーの良さですが。
作る私のアタマが古いままです。

お教えのように、DBの設計についての基礎的考え方が足らないですし
テーブルオカレンスの構造というかスキームがよく理解できていません。
参考ファイルをいろいろいじって勉強させてもらっています。

MOz様のお教えで、顧客ファイルにキーフィールドを置きそこからのリレーションで
契約ファイルに顧客名のフィールドを持ってくること。
リレーション図では顧客テーブルを2つ(エイリアス?)作ってリレーションをつなぎ
当事者A,Bそれぞれを契約ファイルから生成できるようになりました。
いまいちなぜこうなったのか理解できていませんし、ご指摘のように
ダブってレコードができます。
中間テーブルのような事をご指摘いただいたとは思いますが
いますこし研究してみます。
ありがとうございました。

#7 2020-12-14 15:09:28

Shin
Member

Re: 一つのカード(レコード)から複数のレコードを生成するリレーションは

中間テーブルは必要無いでしょう。顧客名テーブルと別に、当事者テーブルを作るときれいに運用できるはずです。

私のファイルでは、契約書→顧客名が1:1リレーションになっています。さらに、契約書→当事者が1:多のリレーションになっており、顧客名→当事者が1:多のリレーションになっています。(どちらもコードでのリレーションです)このようなキーの持たせ方が一番シンプルではないでしょうか。
当事者の設定は、サンプルファイルで実装しているように、顧客名で絞り込んだリストから行わせるのが、楽で間違いが少なくと思いますよ。

Last edited by Shin (2020-12-14 16:19:47)

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, 8 queries executed - Memory usage: 538.09 KiB (Peak: 543 KiB) ]