請求書に該当する納品書番号が全て入っているか?入っていないものはあるか?という、いわゆる差分チェックについてです。
Accessでは「差分クエリ」というやつですね。
ちなみにAccessは触ったことありますが詳しくやってません。
では、やっていきましょう。
用意するもの
サンプルとして、「納品書」「請求書」テーブルを用意しました。
単純化するために、フィールドを同一にしてあります。
リレーションシップ
これらのリレーションシップを構築しておきます。
今回は納品書番号と請求書番号が一致するもの、というリレーションシップです。
テストデータ
納品書には6件、請求書には4件のデータがあります。
ここでの例として、「請求書テーブルに納品書全ての納品書番号があるかどうかを確認する」ことにします。
このテストデータでは、目視で2件、請求書に入っていませんね。
スクリプト
では、これを検出するスクリプトです。
画像のコメントにもありますが、要は、請求書からみて納品書に過剰にあるものをリストアップする、という内容をスクリプトにします。
このスクリプトが正常に動くには、リレーションシップグラフで「=」でnoDataをリレーションシップしてあることが大前提です。
この同一のnoDataを抽出したのち、「それ以外を表示してくれ」と最後の行で指定するわけです。
#実行してみる
はい、無事請求書にない納品書をリストアップできました。
#できれば両方並べて表示したい
やりたいですよねぇ。。。
その方が見た目わかりやすいですし。
※ここから先は、FileMaker Pro Advanced 17以降の「「マスタ/詳細レイアウトのポータル」機能を利用して作成しています。それ以前のバージョンの場合は、自己リレーションシップを構築して同様の動きが実装可能です。また、納品書テーブルのリストのみを表示する場合は、特に自己リレーションシップの構築は不要です。
ということで、こんな感じでどうでしょう?
まず、納品書テーブルに「なかったよ」フラグを追加します。
次に、差分リストを表示するレイアウト用にリレーションシップを構築します。
先ほどの「=」のテーブルオカレンスを利用すると対象のものしか表示しませんので、ここではあえて「照合フィールドの値に関係なく、左側のテーブルのすべてのレコードを右側のテーブルのすべてのレコードに一致させる」意味の「x」でリレーションします。
新規で作ったリレーションシップを使って、レイアウトを作成します。
フラグがついているのがわかりやすいように、条件付き書式を設定しておきます。
スクリプトは、先ほどのスクリプトに3行追加します。
抽出された対象外レコードにフラグを一括で設定し、差分リストを構築したレイアウトを表示します。
繰り返し実行する場合は、先にフラグのクリアも実行しておきます。(上記スクリプト3行目)
差分チェック、Accessようにウィザードがあるわけではありませんが、この数行のスクリプトで同じようなことができますので、ぜひやってみてください。
#追記 2020/02/26
サンプルファイルをGithubへアップしてあります。
FileMaker Sample
上記サイトから、"Sample_DefferenceQuery.fmp12"をダウンロードしてください。