【FileMaker】FileMaker Goで原価をその場で確認する

工場や店舗に出ているときなど、発注作業をしているときに「この商品の原価、どうだったっけかな、、、」という場面でバーコードやQRコードをピッとするだけで原価がわかると仕入れコストと利益の確認できますね。

今回は、[前回](https://qiita.com/tyuma/items/47a661f4e6a0671e2e50)作った読み取りアプリに平均原価法の一つである移動平均法で原価を計算する機能を追加します。
この記事を最初に読んだ方は、前回の記事を先に確認して実装してみてください。
移動平均法、現場ごとに色々と加味しないといけない製造間接費などもあると思うのですが、今回はその辺度外視で単純に仕入れ原価を計算するというサンプルにしています。

# 今回実装する動き
既に出来上がっているアプリの動きを見てみましょう。
今回は、これを実装します。

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

# 実装・実装環境
FileMaker 19.4.1でサンプルを作っていますが、特にfmp12が扱えるバージョンであればおおよそ（？）実装できると思います。

# 前回に付け足し
その前に、前回の入庫チェックに追加です。
前回は、都度入庫でチェックしていましたが、「納入番号」を導入し、納入番号が同じ入庫をチェックするようにしました。

![スクリーンショット 2021-12-17 22.05.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/1adf16f9-9f39-ff6c-cde7-b3ef4e8ab20d.png)

入庫リストの左端に追加しています。
![スクリーンショット 2021-12-17 22.05.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/4c1952fc-1ab7-baee-17cc-5aa23573719c.png)

リレーションシップとして、入庫チェックリストにも同様に「納入番号」を追加しています。
![スクリーンショット 2021-12-17 22.18.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/c02ed3a0-40dc-3137-8090-66c6317eec26.png)


この納入番号を導入するにあたり、入庫チェック数を計上するリレーションシップグラフも追加しています。
![スクリーンショット 2021-12-17 22.07.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/e071f5ca-216a-3eb0-f406-3646bd0682cf.png)

入庫チェック状態を確認する入庫リストは、こんな感じになります。
![スクリーンショット 2021-12-17 22.06.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/4955af19-a6ff-ef6c-960b-32bfe7b6836b.png)

ついでなので、実際に入庫チェックしたデータを保存する入庫チェックリストも整えてみました。
商品番号ごとにリストにし、同じ商品番号内ではチェックした日時の降順で表示しています。
納入番号もわかるように表示しています。
![スクリーンショット 2021-12-17 22.09.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/70677c79-1f02-5f80-873e-b971a2a74c4b.png)

集計リストは、レイアウト＞パート設定で定義できます。
集計するときは、どこを集計するか（ソート）をしっかりと頭の中に描きましょう。
このリストでは、itemNo(商品番号)ごとに入庫チェック状態を確認したいので、itemNoをソート対象とする小計を追加します。
![スクリーンショット 2021-12-17 22.13.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/17743f64-b1ea-dcf0-ee02-db5446efc31e.png)

こんな感じです。
![スクリーンショット 2021-12-17 22.13.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/9b8c47a6-e1cd-1d1c-6c77-25325291b343.png)

入庫チェックリストへ遷移したときには、集計した状態で表示したいので、ソート順をonLayoutEnterスクリプトトリガに指定します。
![スクリーンショット 2021-12-17 22.14.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/d03eb6c9-eb35-e4fb-9f9c-34f1ac79ec4a.png)

このリストや原価計算で使う計算式や集計は、以下のようにフィールド設定で行っておきます。
![スクリーンショット 2021-12-17 22.20.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/b3ef5b43-1714-2271-6b5d-62d54b970c07.png)


まだ記事にはしていませんが、出庫もわかるように入出庫数と合計金額欄で条件付き書式を設定しています。
入庫は青、出庫は赤です。
![スクリーンショット 2021-12-17 22.16.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/e8d9ed18-81e4-590e-ef8b-5273e0fa9716.png)


この入庫チェックリストで商品名を表示するために、リレーションシップを追加しています。
![スクリーンショット 2021-12-17 22.07.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/e39bc7ed-2d42-636e-48ae-7169cde89585.png)

追加した分、結構ありますね。
でも、ここからが今回のお題、原価チェックです。

# 原価チェックしたい商品を読み取る機能を追加
前回はバーコードリーダーを使いましたが、今回は使っている端末(iPad)のカメラ機能を使ってQRコードを読み込み、原価チェックをしていきます。
追加したテーブルは、「原価推移表」テーブルで、チェックした原価計算結果を履歴として保存するテーブルです。
棚卸しのようなイメージです。
![スクリーンショット 2021-12-17 22.54.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/a97ae3e3-41d3-7f3c-7d41-11a753b3c0d0.png)

リレーションシップは、以下のようになります。
赤枠部分が、原価チェックする部分です。
![スクリーンショット 2021-12-17 23.34.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/af1e1700-3f30-8e2e-2d74-f564be171c88.png)

原価チェックをするレイアウトは、このリレーションシップを使ってチェックと商品情報の表示、計算された移動平均法の原価計算結果を表示します。
![スクリーンショット 2021-12-17 22.48.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/2a0093e4-e060-156c-f30d-72078a74d48c.png)

チェックする番号が入るフィールドをクリアするのに、レイアウトが表示されたらクリアするように実装します。
![スクリーンショット 2021-12-17 22.42.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/0572d0f9-2c2a-7477-4c71-c2559ecd7826.png)

ボタンが上下に２つあります。
上にはカメラマークのボタン、下には「記録」とあります。
カメラマークはバーコードを読み込むボタンです。
「記録」は何かというと、計算した移動平均原価を原価の履歴に記録していきます。

## カメラマークボタン
「[デバイスから挿入](https://help.claris.com/ja/pro-help/content/insert-from-device.html)」スクリプトステップを使います。
前回はバーコードリーダーからだったので、単純にフィールドに読み込ませましたが、今回はもう一つのバーコードの読み込み方法であるカメラを使ったやり方です。
![スクリーンショット 2021-12-17 22.43.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/2cdebd79-a9e8-85a3-16e0-91e38c21585a.png)

itemNogという、カメラから読み込んだ数値を保存・表示するフィールドにonObjectModifyスクリプトトリガを指定し、数値が入力されてもキーボードがたちあがらないようにします。
![スクリーンショット 2021-12-17 22.59.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/458aaf68-dda3-73a5-1324-916221313e9c.png)

## 記録ボタン
記録ボタンは、単に原価を確認するだけでなく、今後の移動平均の価格の推移を得るために記録しておきます。
グラフを作ったり集計結果を外部に公開するときに役に立ちますよ。

記録をするときのリレーションシップグラフです。
入力された商品番号とともに、原価推移表に記録していきます。
![スクリーンショット 2021-12-17 23.34.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/a9901360-7f74-b63a-d733-22c17092a193.png)

そして、今回もローコードです。
全部で9行です。
チェックした内容を、原価推移表に追加するスクリプトです。
![スクリーンショット 2021-12-17 22.44.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/b3d26e1b-da34-54fa-abf0-a768f18fe3fe.png)

# チェックした原価を推移表にする
原価推移表は、入荷チェックリストと作りは似ています。
というか、TO(テーブルオカレンス)が違うだけで、ほぼ同じです。
![スクリーンショット 2021-12-17 23.04.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/108c6d26-80fc-fdea-cfdc-cfb58d642478.png)

記録ボタンのリレーションシップを使っていきます。
小計パートは、itemNo（商品番号)で集計していきます。
![スクリーンショット 2021-12-17 23.05.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/b96a72e3-d7ff-1df4-3573-f23b503cc3ab.png)

レイアウトは、そんなに凝ったことはしていないです。
![スクリーンショット 2021-12-17 23.05.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/cf86be7a-99ea-4250-da6b-d18f71558215.png)

商品名を表示するために、こちらもitemNoをキーにリレーションシップで繋いだitemNameを引っ張ってきています。
![スクリーンショット 2021-12-17 23.04.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/d78a6519-9691-17dd-f6ed-b6dd983dd88e.png)

onLayoutEnterでソートをしておくのを忘れずに。
これをしておかないと、小計パートが計算されず、思ったようなリストに仕上がりません。
![スクリーンショット 2021-12-17 23.42.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/05e20e6e-e9a1-5094-e1d0-b0b5b2ad0623.png)

実装は、ここまでです。
駆け足でしたが、コードは1行か、数行しか書いていないことがお分かりでしょうか！？

# メインメニュー
ついでなので、メインメニューも作ってみました。
![スクリーンショット 2021-12-17 23.50.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/2602ec42-0060-1997-cd2f-aeaf2b0163c5.png)

原価確認や、原価推移表に遷移できるようになってます。
![スクリーンショット 2021-12-17 23.50.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/a3835b28-afd9-dd45-54e0-574cbbbf158c.png)

![スクリーンショット 2021-12-17 23.51.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/249198ea-982d-e73b-ffe2-e08d7326b3ce.png)

# 動かしてみる
では、実際どんな感じか動かしてみましょう。
前回使ったQRコードの読み込みでやってみました。

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

ちょっとわかりづらいですが、QRコードを読みこんで原価を確認した後、「記録」ボタンをタップして原価推移表に記録しています。

# ちょっとずつね
前回に追加して、さらに入庫時の処理が深くできるように仕上がってきましたね。
こんな感じで一つずつの機能を追加しながら実務に役立つアプリを作っていきませんか？
コードもそんなに書かないですし、ぶっちゃけ基本的な機能しか使っていませんが、コードを手入力とか入庫チェックを手作業で、、、という煩わしさはだいぶ軽減できると思います。

実務に合わせて実装してみてくださいね。