【FileMaker】FileMakerで差分クエリチックに表示 – 対象外のみを表示

請求書に該当する納品書番号が全て入っているか?入っていないものはあるか?という、いわゆる差分チェックについてです。
Accessでは「差分クエリ」というやつですね。
ちなみにAccessは触ったことありますが詳しくやってません。

では、やっていきましょう。

用意するもの

サンプルとして、「納品書」「請求書」テーブルを用意しました。
スクリーンショット 2020-02-23 23.01.19.png
単純化するために、フィールドを同一にしてあります。

リレーションシップ

これらのリレーションシップを構築しておきます。
スクリーンショット 2020-02-23 22.54.39.png
今回は納品書番号と請求書番号が一致するもの、というリレーションシップです。

テストデータ

納品書には6件、請求書には4件のデータがあります。
ここでの例として、「請求書テーブルに納品書全ての納品書番号があるかどうかを確認する」ことにします。
スクリーンショット 2020-02-23 23.04.10.png
このテストデータでは、目視で2件、請求書に入っていませんね。

スクリプト

では、これを検出するスクリプトです。
スクリーンショット 2020-02-23 22.56.00.png
画像のコメントにもありますが、要は、請求書からみて納品書に過剰にあるものをリストアップする、という内容をスクリプトにします。
このスクリプトが正常に動くには、リレーションシップグラフで「=」でnoDataをリレーションシップしてあることが大前提です。
この同一のnoDataを抽出したのち、「それ以外を表示してくれ」と最後の行で指定するわけです。

実行してみる

はい、無事請求書にない納品書をリストアップできました。
スクリーンショット 2020-02-23 22.56.15.png

できれば両方並べて表示したい

やりたいですよねぇ。。。
その方が見た目わかりやすいですし。

※ここから先は、FileMaker Pro Advanced 17以降の「「マスタ/詳細レイアウトのポータル」機能を利用して作成しています。それ以前のバージョンの場合は、自己リレーションシップを構築して同様の動きが実装可能です。また、納品書テーブルのリストのみを表示する場合は、特に自己リレーションシップの構築は不要です。

ということで、こんな感じでどうでしょう?
まず、納品書テーブルに「なかったよ」フラグを追加します。
スクリーンショット 2020-02-23 23.20.10.png

次に、差分リストを表示するレイアウト用にリレーションシップを構築します。
先ほどの「=」のテーブルオカレンスを利用すると対象のものしか表示しませんので、ここではあえて「照合フィールドの値に関係なく、左側のテーブルのすべてのレコードを右側のテーブルのすべてのレコードに一致させる」意味の「x」でリレーションします。

スクリーンショット 2020-02-23 23.20.18.png

新規で作ったリレーションシップを使って、レイアウトを作成します。
スクリーンショット 2020-02-23 23.20.34.png
フラグがついているのがわかりやすいように、条件付き書式を設定しておきます。
スクリーンショット 2020-02-23 23.21.32.png

スクリプトは、先ほどのスクリプトに3行追加します。
抽出された対象外レコードにフラグを一括で設定し、差分リストを構築したレイアウトを表示します。
スクリーンショット 2020-02-23 23.36.19.png
繰り返し実行する場合は、先にフラグのクリアも実行しておきます。(上記スクリプト3行目)

こんな感じで表示されます。
スクリーンショット 2020-02-23 23.39.53.png

差分チェック、Accessようにウィザードがあるわけではありませんが、この数行のスクリプトで同じようなことができますので、ぜひやってみてください。

追記 2020/02/26

サンプルファイルをGithubへアップしてあります。
FileMaker Sample
上記サイトから、”Sample_DefferenceQuery.fmp12″をダウンロードしてください。