『FMEasy在庫』 とiPadによる棚卸と在庫誤差調整(1) ―― 棚卸入力を実装する
棚卸作業をしてみると、システム上の在庫数と、棚卸在庫数(実在庫)が一致しない ― 誤差がでる ― ことはよくあることです。
FMEasy在庫 R1.0/R1.5 に在庫誤差調整伝票作成機能を実装する
今回は『FMEasy在庫 R1.0/R1.5』をカスタマイズし、入庫/出庫の調整伝票を作成することにより在庫誤差調整を行う機能の作成方法をご説明します。
前回と同様、以下の用語を使っていきます。
【用語解説】
在庫数 ― システム上の在庫数。『FMEasy在庫 R1.0/1.5』で入出庫登録を行った結果、算出・表示される商品画面上の[在庫数]。以下の[棚卸在庫]とは異なる可能性がある
棚卸在庫 ― 実際の存在する商品の在庫数、または『FMEasy在庫 R1.0/1.5』に入力されたその値。システム上の在庫数(=[在庫数])とは異なる可能性がある
棚卸 ― 実際に存在する商品の数を(カスタマイズ後の)『FMEasy在庫 R1.0/1.5』に入力すること
在庫誤差調整 ― 「システム上の在庫数」と「棚卸在庫」の誤差を入庫/出庫の調整伝票を作成することにより修正すること、またはその機能
在庫数 ― システム上の在庫数。『FMEasy在庫 R1.0/1.5』で入出庫登録を行った結果、算出・表示される商品画面上の[在庫数]。以下の[棚卸在庫]とは異なる可能性がある
棚卸在庫 ― 実際の存在する商品の在庫数、または『FMEasy在庫 R1.0/1.5』に入力されたその値。システム上の在庫数(=[在庫数])とは異なる可能性がある
棚卸 ― 実際に存在する商品の数を(カスタマイズ後の)『FMEasy在庫 R1.0/1.5』に入力すること
在庫誤差調整 ― 「システム上の在庫数」と「棚卸在庫」の誤差を入庫/出庫の調整伝票を作成することにより修正すること、またはその機能
それでは、こちらの動画をご覧いただいたあとで、実際のカスタマイズ方法をご紹介します。
【開発レベル】
中級(レイアウト修正、テーブル修正、スクリプト修正について理解している)
【用意するもの】
1. 『FMEasy在庫 R1.0』または『FMEasy在庫 IWP/WD R1.5』
『FMEasy在庫』はこちらからダウンロードできます。
2. iPad/iPad Mini
3. FileMaker Go 13 (iPad にインストール)
FileMaker Go 13 はこちらからダウンロードできます。
中級(レイアウト修正、テーブル修正、スクリプト修正について理解している)
【用意するもの】
1. 『FMEasy在庫 R1.0』または『FMEasy在庫 IWP/WD R1.5』
『FMEasy在庫』はこちらからダウンロードできます。
2. iPad/iPad Mini
3. FileMaker Go 13 (iPad にインストール)
FileMaker Go 13 はこちらからダウンロードできます。
注意:
1. 作業を始めるまえに、必ず『FMEasy在庫』のバックアップをお取りください。
2. 作業の際、修正場所を間違えると、既存の機能が動作しなくなる可能性があります。
1. 作業を始めるまえに、必ず『FMEasy在庫』のバックアップをお取りください。
2. 作業の際、修正場所を間違えると、既存の機能が動作しなくなる可能性があります。
1. 在庫誤差調整に必要なフィールドを準備
以下のフィールドを EasyData15.fmp12(R1.0の場合、EasyData.fmp12) の商品テーブルに追加します。
[c在庫誤差](計算) ― 在庫誤差、誤差がある場合、調整の対象となる
式: If(棚卸在庫 = ""; 0; c在庫数 - 棚卸在庫) //[棚卸在庫]が空欄(未入力)の場合、誤差は 無いものとみなす
[c入庫数調整](計算) ― [c在庫誤差] がマイナスのときに、この誤差を入庫対象数とする
式: If(c在庫誤差 < 0; Abs(c在庫誤差); 0)
[c出庫数調整](計算) ― [c在庫誤差] がプラスのときに、この誤差を出庫調整伝票の対象とする
式: If(c在庫誤差 > 0; c在庫誤差; 0)
[gNo](数値型、グローバル) ― 入庫伝票No/出庫伝票No の入出明細取込用一時記憶フィールド、後述のスクリプトで使用
2. 在庫誤差調整伝票作成スクリプトを作成
このスクリプトの仕様は以下の通りです。
1) 在庫基準日を本日の日付(棚卸作業実施日)にする。
2) 棚卸作業を行わなかった商品は調整対象から除外する。
3) [在庫数] - [棚卸在庫] の誤差がプラスの場合は 出庫伝票、マイナスの場合は 入庫伝票 を作成する。
4) [在庫数] - [棚卸在庫] が 0 になる商品については、調整伝票を作成しない。
5) 入庫伝票/出庫伝票 の[伝票区分]は [7:在庫調整](新設)とし、通常の伝票区分とは区別する。
6) 入出明細::備考フィールドに[棚卸担当ID]を記録。
2) 棚卸作業を行わなかった商品は調整対象から除外する。
3) [在庫数] - [棚卸在庫] の誤差がプラスの場合は 出庫伝票、マイナスの場合は 入庫伝票 を作成する。
4) [在庫数] - [棚卸在庫] が 0 になる商品については、調整伝票を作成しない。
5) 入庫伝票/出庫伝票 の[伝票区分]は [7:在庫調整](新設)とし、通常の伝票区分とは区別する。
6) 入出明細::備考フィールドに[棚卸担当ID]を記録。
上記の条件に従ってスクリプトを記述すると、たとえばこのようになります。
スクリプトの流れ上、入力チェックやウィンドウ切替などのステップも含まれていますが、基本的には上記の赤囲みの部分が押さえられていれば調整伝票を作成できるようになります。
① システム在庫を本日時点のものにする
棚卸作業が終わった直後、つまり本日時点のシステム在庫と、棚卸在庫の差違をみるため、[在庫基準日1] に本日の日付を設定します(Get(日付))。
② [c入庫数調整] に値が入っている商品データを検索します。
このデータが入庫伝票作成対象となります。
対象レコードがみつかった場合は、入庫伝票を新規作成し、その[入庫No]を [gNo]に一時記録します。
次に、対象商品データを入庫明細として「入出明細」テーブルに取り込みます。
その際、[入庫No] として[gNo]を取り込みます。
取り込み順は以下のとおりです。
(商品テーブル) | → | (入出明細テーブル) |
---|---|---|
商品ID | → | 商品 ID |
g在庫基準日1 | → | 入出庫日 |
単位 | → | 単位 |
仕入単価 | → | 仕入単価 |
JAN | → | JAN |
棚卸担当ID | → | 備考 |
c入庫数調整 | → | 入庫数量 |
gNo | → | 入庫No |
※データ取り込みのデータ自動入力オプションはオンにします。
③[c出庫数調整] に値が入っている商品データを検索します。
このデータが出庫伝票作成対象となります。
対象レコードがみつかった場合は、出庫伝票を新規作成し、その[出庫No]を [gNo]に一時記録します。
次に、対象商品データを出庫明細として「入出明細」テーブルに取り込みます。
その際、[出庫No] として[gNo]を取り込みます。
取り込み順は以下のとおりです。
(商品テーブル) | → | (入出明細テーブル) |
---|---|---|
商品ID | → | 商品 ID |
g在庫基準日1 | → | 入出庫日 |
単位 | → | 単位 |
販売単価 | → | 販売単価 |
JAN | → | JAN |
棚卸担当ID | → | 備考 |
c出庫数調整 | → | 出庫数量 |
gNo | → | 出庫No |
※データ取り込みのデータ自動入力オプションはオンにします。
ここまでできたら、一度スクリプトを実行してみましょう。
調整伝票が作成されるとともに、商品の[在庫数]と[棚卸在庫]がぴったり一致していれば成功です。
【入庫調整伝票の例】
【出庫調整伝票の例】
【在庫の一致を確認(テスト段階)】
何度かテスト実行して、問題がなければ、上記スクリプト内でコメントアウトされている[棚卸在庫]および[棚卸担当ID]の全置換クリアステップを有効にします。
これにより、棚卸調整在庫が作成された後は、自動的に棚卸情報がクリアされますので、次回の棚卸作業時に[棚卸在庫]および[棚卸担当ID]フィールドがクリアされていないということがなくなります。
【在庫誤差調整伝票スクリプトの配置場所】
在庫誤差調整伝票作成の実行ボタンは、ここでは商品一覧画面に配置してみます。
赤囲みのところにご注目ください。
[棚卸在庫]フィールドを[在庫数]フィールドの下に配置することで、調整伝票作成前に棚卸状況を確認できるようになっています。
そして、“調整実行”ボタンをフッタ位置に配置し、ボタンクリックで調整伝票を一括作成することができます。
“調整実行”ボタンについては、ユーザ権限による制御を追加するなど、誤操作防止策を検討してみてください。
【重要:在庫誤差調整伝票を作成するタイミング】
システム在庫は常に変動しています。
このため、棚卸作業開始~在庫誤差調整伝票作成完了までの間、一般ユーザによるシステムの使用や入出庫作業を禁止する必要があります。
「禁止!」と言っているのにアクセスしてくる困ったちゃんがいる場合、FileMaker Server を停止し、サーバ上で本スクリプトを実行します。
これにより、在庫の誤差がなくなることになります。
なお、繰越処理(在庫や各種残高を繰り越す処理)を行っている場合、繰越処理の中に本スクリプトを組み込むのも Good!と思います。
(亀)