【FileMaker】FileMaker Goで出庫チェック

今月は在庫管理をFileMaker Goでやっていくというシリーズで記事を書いてきました。

https://qiita.com/tyuma/items/109fc8c0ca75d7db4571

https://qiita.com/tyuma/items/47a661f4e6a0671e2e50

https://qiita.com/tyuma/items/a23163ff0b86e029e2c8

今回はシリーズの最後ということで、出庫チェックをしていく場面を実装していきます。

# 実装環境
Claris FileMakerで実装し、FileMaker Goで動かしていきます。
今回はFileMaker 19.4.1で実装していますが、外部接続などは行っていないのでfmp12の拡張子を開けるバージョンであれば大丈夫だと思います。
（多分、、、）

# 追加前に確認しておくこと
実装環境以外に確認することがあります。
それは、上記記事まで実装されていることです。
特に、入庫チェック部分については、今回の出庫実装と対となる部分ですので、実装がされた状態で出庫処理を実装してもらえると、ハンズオン的に実装ができると思います。
実装されていなくても、大丈夫！
この記事を読んだ後、自分なりに実装してみてください。

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

# 動作確認
どんな感じで動くか、出来上がりをみてみましょう

https://twitter.com/GuppyWebService/status/1474585289272471553

出庫処理をするのは、入庫処理と同様、バーコードリーダーを使いました。
![スクリーンショット 2021-12-10 23.12.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/1b5a8bab-430f-f19a-f7bc-d9766555ce2c.png)

入庫画面で出庫処理を追加してもいいのですが、入庫と出庫を間違えて読み込んでしまうなどのヒューマンエラーをしないようにレイアウトを分けました。
メニューにも出庫処理に切り替えられるように追加しました。

# 実装
では、実装していきましょう。

## テーブル定義

### テーブル及びフィールド
今回は、新規テーブルの追加はありませんが、出庫用のフィールドを追加しました。
また、アプリの追加開発をしているとよくあるのですが、フィールド名が新規機能を追加することでそぐわなくなってくることがあります。
FileMakerではフィールド名の修正は割と自由にできますが、どこかでTO(テーブルオカレンス）を直書きしているところがあるかもしれませんので、フィールド名を修正する際には、[DDR](https://help.claris.com/ja/pro-help/content/documenting-schemas.html)（DataBase Design Report）を出力して確認しながら作業を進めましょう。
ちなみに、DDRはここから出力できます。
![スクリーンショット 2021-12-25 10.11.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/988e7ffb-4471-5ecc-e670-3a99fbc33b04.png)

今回は、DDRを確認しつつ、少ない機能の段階でしたので、「入庫チェックリスト」テーブルのフィールド名の変更と追加をすることにしました。
![スクリーンショット 2021-12-25 10.26.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/77b0776d-6c97-aa5d-f25c-b4c7b37cb169.png)

その他、簡易的な設計として入庫と出庫を一つの入庫チェックリストで扱う設計にしましたので、入出庫フラグを持つようにしました。
リレーションシップを築くために、入庫リストにグローバルフィールドで出庫f_gと入庫f_gを作りました。
それぞれ、規定値として1,2を設定しています。
![スクリーンショット 2021-12-25 10.59.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/6bb66a2a-42c2-676a-543a-af9700428b48.png)


### リレーションシップグラフ
出庫用のリレーションシップを追加しました。
その他、「入庫チェックリスト」を「入庫チェックリスト | 出庫リスト | 出庫」という名前にしました。
名前は自由に設定できますが、できれば元のテーブル名がわかるような付け方をすると、後でメンテナンスする際にわかりやすいと思います。
名前の付け方はメジャーなものなどあったりしますが、ここでは説明を割愛します。
![スクリーンショット 2021-12-25 10.30.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/a92c98ab-3d47-4b11-218e-338ec56d114c.png)

## レイアウト
出庫チェック用のレイアウトと、出庫状況がわかるリストのレイアウトを作成しました。
入庫時のものとほぼ同様ですので、それらをコピーして作るのも時短できていいと思います。

### 出庫チェック用
実際にバーコードを使って出庫処理をするレイアウトです。
入庫チェック用のレイアウトと同じように作っています。
![スクリーンショット 2021-12-25 10.37.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/9c850d8b-08f3-2bf7-c547-a2c1a9e482e5.png)

レイアウトに配置するのは、今回追加したTOの「入庫チェックリスト | 出庫リスト | 出庫::itemNog」になります。
入庫の時とはTOが違いますので、注意してください。
![スクリーンショット 2021-12-25 10.42.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/8fff9465-cd5a-3394-1d9e-97a8100e6b31.png)

チェックが終わったときにウインドウを閉じたいので、「チェック終了」ボタンでウインドウを閉じるように単一ステップを指定しています。
![スクリーンショット 2021-12-25 10.38.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/ec0b0788-f676-33dd-e5a0-2da930b26264.png)

### 出庫リスト
出庫処理をした後、出庫した数がどれくらいかを確認するリストです。
![スクリーンショット 2021-12-25 10.34.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/e2fd9592-152f-b228-a93f-001e491f2d2d.png)

こちらも出庫用のTOを出庫個数として追加していきます。
![スクリーンショット 2021-12-25 10.35.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/4292a70d-0306-742a-7de4-1922663da613.png)

在庫個数と出庫数を表示する際、TOが違うことに注目してください。
![スクリーンショット 2021-12-25 10.46.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/3e397ba9-bfae-924f-bbb5-068efc7a4438.png)
それぞれのTOにはリレーションシップグラフで定義したようにリレーションフィールドが違います。
リレーションした状態で個数を集計してそれぞれを表示しています。
表示の違いを見るためにも、在庫個数では単純に集計結果を、出庫個数では出庫されていない商品では「０」が表示されるように計算フィールドを配置しています。

「画面リフレッシュ」ボタンは、入庫同様、画面の再表示を単一ステップで指定しています。
![スクリーンショット 2021-12-25 10.36.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/979e099f-4506-43f2-4ffd-645f9421d8f0.png)

出庫処理のボタンは、入庫処理同様、新規レイアウトをカードウインドウで表示するように単一ステップを設定します。
![スクリーンショット 2021-12-25 10.36.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/657a4fd0-12ac-6713-6ff7-4c2504672e2f.png)

### メインメニュー
メインメニューから、出庫リストへ遷移できるようにボタンを追加します。
これで、入庫・出庫それぞれのレイアウトへ遷移できるようになりましたね！
![スクリーンショット 2021-12-25 12.50.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/67e7a4f7-ce74-b1d2-d36d-a3a4fce37cac.png)



## スクリプト

### 出庫チェック
出庫チェックのレイアウトで、バーコードでコードを入力されたら、処理が走るように、スクリプトトリガを設定します。
今回のスクリプトでは、itemCntを出庫ということでマイナスで計算しています。入出庫fで出庫であることを示す出庫f_gを指定しているのでマイナス計算しなくてもいいかな、とも思ったのですが、入出庫fを気にしない設計の場合はマイナスで値を設定する方がお手軽な設計になると思います。
今回は、リレーションシップグラフで入出庫fを元にしたリレーションシップを構築していますので、マイナス計算と入出庫f両方を実装しています。
![スクリーンショット 2021-12-25 10.38.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/81aa1b6f-2549-af0f-c266-bbba97361ced.png)

また、QRコードを読み込んだら１個の出庫というような設計にしていますが、アレンジして個数を入力できるようなレイアウトや処理にするのもいいですね。

### 入庫チェック
同じく、入庫チェックでも入庫fが立つようにスクリプトに1行追加します。
![スクリーンショット 2021-12-25 12.22.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/84797b2b-7dfe-12df-58e8-3c65603e04f9.png)

### 出庫リスト
出庫リストは、今回商品番号順に並べ替えて表示したいと思います。
![スクリーンショット 2021-12-25 12.29.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/b8d0d762-9081-86ac-ca3d-e7c3d57001b8.png)


これで、完成です！

早速やってみてください！

https://twitter.com/GuppyWebService/status/1474585289272471553

メリークリスマス！