2014-11-01

受注・受注残管理モジュールを作る(4) 受注残の算出― FMEasy在庫のカスタマイズ


 本稿では商品毎の受注残、可用在庫等をどのように算出するかを説明します。

在庫情報タブ

商品レイアウト上にタブオブジェクトを配置します。在庫情報タブには在庫及び受注残関連フィールドを配置します。


商品テーブルに追加するフィールド
フィールド名 計算式 解説
繰越受注残 数字 繰越処理実行時に、各商品の[繰越日付]時点の[受注残]を記録。尚、繰越処理は未実装。
受注数 計算(数字) Sum(受発注明細_商品::受注数量) [在庫基準日]までの[受注数]計。[受注数]は受注画面上の[数量]または[受注数]
納品数 計算(数字) Sum(入出明細_商品#納品数::出庫数量) [在庫基準日]までの[納品数]計。[納品数]は受注画面上の“出庫移行”ボタンにより出庫登録された商品の数
受注残 計算(数字) Case(IsEmpty(繰越情報::繰越日付) or  g在庫基準日1 < 繰越情報::繰越日付;0; 繰越受注残)
-納品数+受注数
[在庫基準日]の受注残(受注はしたが納品していない商品の数)
可用在庫 計算(数字) 在庫数-受注残 販売先(用途)が決まっていない自由に使用できる商品の数
gcKey1 計算(数字) 1(常に1) 入出明細レコードが受注明細と紐付されているかチェックするためのシステムフィールド。


リレーション


 上図の入出明細_商品#納品数で「gKey1≦受注明細ID」が「真」であれば、その入出明細レコード(出庫した商品)は“出庫移行”ボタンにより受注画面から出庫登録されたことになります。
 逆に「gKey1≦受注明細ID」が偽であれば、その入出明細レコードに対する受注登録がないことになります。

在庫情報の変化

 さて、右図上の在庫状況において、受注画面上で[商品ID]=1の商品明細の[移行数]に「10」を入力し“出庫移行”ボタンを実行する(右図中)と、在庫情報は右図下のように変化します。

 つまり、10 個の商品を出庫登録したのだから、[納品数]は10増えて「11」となり、[受注残]はその分減って「1」となります。

 このとき[出庫数]も 10 増えて「49」に、[在庫数]はその分減って「42」となります。






















以上


(土屋)

2014-10-23

受注・受注残管理モジュールを作る(3)受注残タブの実装― FMEasy在庫のカスタマイズ


 本稿では受注管理モジュールを作成します。受注レイアウトには受注品目入力用の「受注」タブと、受注残管理用の「受注残」タブを配置します。


仕上がりイメージ

受注残関連仕様

下表は上図の受注残関連オブジェクトの仕様になります。
オブジェクト タイプ 説明
伝票区分 数値FD レコード確定時、1:全残(納品した商品無)、2:残有(受注残の商品有)、3:過納(過剰納品した商品有)、4:完納(受注した商品を全て納品)の何れかの値がセットされる。
OnRecordCommitを使用しスクリプトを起動。尚、本フィールドを計算フィールドにすることもできるが、索引が設定できずレコードが増えるに従い検索速度が劣化してしまう。
Id 数値FD
(主キー)
「受発注明細」テーブルの主キー。“出庫移行”ボタン実行時、このキーの値を移行先のテーブルである「入出明細」テーブルの[受注明細ID]に貼り付け、納品数算出用のTO(入出明細_受注#注残)の外部キーとして使用。下表及び下のリレーション図参照。
受注数 数値 =受注タブの[数量]
納品数 計算FD(数値) 当該商品の出庫への移行数合計、下表及び下のリレーション図参照。
受注残 計算FD(数値) 受注数-納品数、本値が0以外(受注残がある)の場合、本フィールドの背面が赤くなるように条件書式を設定すと、受注残がある商品が一目で解る。
移行数 数値FD 当該商品を出庫移行する数量をユーザが指定する。
ボタン 上記[受注残]を[移行数]に貼りつける。
出庫移行 ボタン 各商品を[移行数]分、出庫へ移行・登録する。
FD:フィールド


EasyData15.fmp12 のテーブル定義

名称 タイプ 補足
■受注テーブ
伝票区分 数値 上表参照
■受発注明細テーブル
ID 数値(主キー) 上表参照
納品計 計算(数値) Sum(入出明細_受注#注残::出庫数量)、上表及び下表参照
受注残 計算(数値) 上表参照
移行数 数値 上表参照
■入出明細テーブル
受注明細ID 数値(外部キー) 上表及び下表参照

EasyData15.fmp のリレーション

受発注明細テーブルに、[納品数]=Sum(入出明細_受注#注残::出庫数量)、を作成

EasyApp15.fmpの出庫移行ボタンのスクリプト

出庫移行ボタンは[移行数]で指定した数量分の商品を出庫に移行します ― つまり、受注画面で入力されたデータの一部を出庫(出庫/入出明細テーブル)にコピーします。ポータルを含むデータを他のテーブルにコピーする場合、1.元のデータを一旦変数に格納して変数をコピー先のテーブルに貼りつける方法と、2.元のデータを格納するテーブルからコピー先のテーブルへ取り込む方法、の2つがありますが、後者の方が高速になります。

 以下は後者の方法を用いたスクリプト例です。
(当スクリプトは検証不十分です。利用は自己責任でお願いします。 m( _ _ )m




#
#事前チェック
#
スクリプト実行 [ 「gブラウズ以外実行不可-IwpWD」 ]
スクリプト実行 [ 「gレコード無CK-IwpWD」 ]
スクリプト実行 [ 「gレコード確定強制-IwpWD」 ]
#
#受注ヘッダ情報をUIのグローバルフィールドにセット(後でUIを取り込み、出庫ヘッダを作成する前処理)
#
フィールド設定 [ UI::gCompId; 受注::得意先ID ]
フィールド設定 [ UI::gDeptId; 受注::請求部署ID ]
フィールド設定 [ UI::gPicId; 受注::担当ID ]
フィールド設定 [ UI::gTaxRate; 受注::消費税率 ]
フィールド設定 [ UI::gDate; Get(日付) ]
変数を設定 [ $oriWinName; 値:Get ( ウインドウ名 ) //スクリプトの最後でこのウインドウに戻る為、記憶する ]
#
#移行する受注明細を抽出
#
関連レコードへ移動 [ テーブル: 「受発注明細_受注」; 使用するレイアウト: 「受注明細#取込」 (受発注明細_受注) ] [ 関連レコードのみを表示; 新規ウインドウ ]
変数を設定 [ $orderNo; 値:受注::受注No ]
検索実行 [ 指定された検索条件: レコードの検索; 条件: 受発注明細_受注::受注No: 「$orderNo」 AND 受発注明細_受注::移行数量: 「>-9999999999」 ] [ 記憶する ]
#
#UI→出庫取込
#

関連レコードへ移動 [ テーブル: 「出庫」; 使用するレイアウト: 「出庫」 (出庫) ] [ 関連レコードのみを表示 ]
レコードのインポート [ ソース: 「file:EasyApp15_p」; ターゲット: 「出庫」; 方法: 追加; 文字セット: 「シフト JIS」; フィールドデータのインポート順: ソースフィールド 37 のインポート 出庫::得意先ID ソースフィールド 38 のインポート 出庫::請求部署ID ソースフィールド 39 のインポート 出庫::担当ID ソースフィールド 40 のインポート 出庫::消費税率 ソースフィールド 41 のインポート 出庫::出庫日 ] [ ダイアログなし ]
変数を設定 [ $shipNo; 値:出庫::出庫No ]
#
#受注明細→出庫明細を取込
#
レイアウト切り替え [ 「出庫伝票」 (入出明細_出庫) ]
レコードのインポート [ ソース: 「file:EasyApp15_p」; ターゲット: 「入出明細_出庫」; 方法: 追加; 文字セット: 「シフト JIS」; フィールドデータのインポート順: ソースフィールド 2 のインポート 入出明細_出庫::商品ID ソースフィールド 3 のインポート 入出明細_出庫::販売単価 ソースフィールド 13 のインポート 入出明細_出庫::備考 ソースフィールド 14 のインポート 入出明細_出庫::単位 ソースフィールド 15 のインポート 入出明細_出庫::受注明細ID ソースフィールド 20 のインポート 入出明細_出庫::出庫数量 ] [ ダイアログなし ]
フィールド内容の全置換 [ 入出明細_出庫::出庫No; 計算で置き換える: $shipNo ] [ ダイアログなし ]
フィールド内容の全置換 [ 入出明細_出庫::入出庫日; 計算で置き換える: Get(日付) ] [ ダイアログなし ]
関連レコードへ移動 [ テーブル: 「出庫」; 使用するレイアウト: 「出庫」 (出庫) ] [ 関連レコードのみを表示 ]
ウインドウの調整 [ 収まるようにサイズ変更 ]
ウインドウを選択 [ 名前: $oriWinName; 現在のファイル ]
フィールドへ移動 [ 受発注明細_受注::移行数量 ]
#
#移行数FDはクリアしておく
#
Loop
  Exit Loop If [ 受発注明細_受注::Id = "" ]
  フィールド設定 [ 受発注明細_受注::移行数量; "" ]
  ポータル内の行へ移動 [ 次の; 最後まできたら終了 ]
End Loop
レコード/検索条件確定 [ ダイアログなし ]


以上


(土屋)

2014-10-08

iPad のバーコードスキャンで入庫伝票を作成 ― FMEasy在庫のカスタマイズ

FileMaker Go 13 を使ったバーコード読み取り機能について

 FileMaker Go 13 にはバーコード読み取り機能が付属しています。
 専用のバーコードリーダーをお持ちであれば、もともとデスクトップからバーコード入力できますが、バーコードリーダーをお持ちでなくても、iPhone や iPad のカメラ機能でバーコードを読み取れるようになったのは嬉しいですね。



 外回りが多い営業さんや、倉庫管理をする際にも、モバイル操作でバーコード読み取りができれば、適用範囲も広がりそうです。

 今回は、弊社製品『FMEasy在庫』をカスタマイズすることによって、iPad から商品バーコード(JAN)を読み取りながら、入庫登録ができるようにする方法をご紹介します。


【開発レベル】
中級(レイアウト修正、テーブル修正、スクリプト修正について理解している)

【用意するもの】
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. 作業の際、修正場所を間違えると、既存の機能が動作しなくなる可能性があります。細心の注意を払い、ご自身の責任で行ってください。

『FMEasy在庫』に JAN 読み取り機能を追加する

 今回は、『FMEasy在庫 IWP/WD R1.5』を使って説明を進めていきますが、『FMEasy在庫 R1.0』開発版をご利用の方も、操作は同様となります。

1. 商品レイアウトに [JAN] フィールドを配置

 『FMEasy 在庫』には、[JAN] という名前の予備フィールドがあらかじめ用意されていますので、FileMaker Pro 12/13 を起動して開発者パスワードで EasyApp15.fmp12/EasyApp.fmp12 を開き、下図のように、お好みの位置に [JAN] フィールドを配置してください。



2. iPad からのJAN コード読み取り機能を商品レイアウトに追加


 iPad からから上図の[JAN]フィールドをタップしたときに、バーコード読み取り機能が走るようにします。

 スクリプトエディタを開き、「デバイスから挿入」スクリプトステップを使って[JAN]フィールドにバーコードが挿入されるように指定します。




 このとき、FileMaker Go で [JAN] フィールドをタップしたときのみ、このスクリプトが実行されるようにしますので、一行目の If 文に PatternCount(Get ( アプリケーションバージョン ); "Go") が指定されているところに注目してください。

 バーコードの読み取りが終わったら、次のフィールドに移動するように設計しておくと、システム運用時に使いやすくなるでしょう。

 これをスクリプトトリガとして、商品画面の [JAN] フィールドに設定します。
 イベント発生のタイミングは、OnObjectEnter (タップ時)になります。



 ここまでできたらレイアウトを保存します。

 FileMaker Go 13 で商品レコードにアクセスし、[JAN] フィールドをタップするとカメラに切り替わりますので、JAN のバーコードを読み取ると、JAN コードが登録されます。



 同じ要領で、JAN コードを商品マスタに登録していきましょう。



3. 入出明細テーブルに [JAN] フィールドを追加

 EasyData15.fmp12/EasyData.fmp12 のフィールド定義を開き、入出明細テーブルに [JAN] フィールドをテキスト型で追加します。



4. 入出明細の [JAN] から商品マスタの [商品ID]を呼び出すためのリレーションを追加

 EasyApp15.fmp12/EasyApp.fmp12 のリレーション定義を開き、「入庫レイアウト TOG」のセクションに下図のようにリレーションを追加します。

 入庫_商品#JAN TO の参照テーブルは商品テーブルです。
 商品と入出明細の [JAN] を関連づけます。



5. iPad 用の入庫管理レイアウトを作る

 EasyApp15.fmp12/EasyApp.fmp12 のレイアウトモードで新規レイアウトを作成します。
 FileMaker Pro 13 では、下図のように視覚的にレイアウトを作成できます。

 このとき、表示するレコードは「入庫」、レイアウト名は ipad 用の入庫画面とわかる名前を指定しておきます。

 また、ここでは縦置きを前提にしたレイアウト選択を行っていますが、運用時に縦置きと横置きとでどちらが使い勝手が良くなるかを事前によく検討しておくと、後々のレイアウト調整の手間が省けます。



 レイアウトのテーマや体裁はお好みで結構ですが、明細部分に [入出明細_入庫::JAN] フィールドを配置するのを忘れないようにしてください。

 たとえば、できあがったレイアウトを FileMaker Go 13 で閲覧してみると、以下のようになります。


 上図のように、[商品ID]と[JAN]フィールドは両方配置してください。

6. [JAN] のバーコード読み取りスクリプトを作り、OnObjectEnter のスクリプトトリガとして動作させる

 前述「2. iPad からのJAN コード読み取り機能を商品レイアウトに追加」と同じ操作になりますので、ここでは説明を省略します。
 
7. [商品ID]/[JAN] 相互呼び出しのスクリプトトリガを追加する

 iPad入庫画面で、[商品ID] を入力したら [JAN] を自動的に呼び出し、また[JAN]を入力したら [商品ID]を自動的に呼び出すようにスクリプトを作成します。

 『FMEasy在庫』のような分離モデルを採用したシステムの場合、レコード未確定状態ではフィールド定義のルックアップが正常に動作しないことがありますので、このスクリプトを考慮されるとよいでしょう。

備考: [仕入単価]、[単位]の呼び出しも用意しておくとより確実でしょう。



 スクリプトができたら、iPad入庫画面の [商品ID] と [JAN] のそれぞれに、OnObjectSave のタイミングでスクリプトトリガを設定します。



 これで準備が整いました。


 以降はデモビデオで実際の操作感をご覧ください。

『FMEasy在庫』に iPad から入庫登録をするデモ動画

商品を仕入れたという前提で、iPad入庫画面で商品のバーコードを読み取って JAN コードを入力しているところです。

 

 JAN コードの入力のタイミングで、[商品ID] が自動入力されます。
[数量]を入力すると、制御が次の行に移ることによって[JAN] 読み取りのスタンバイ状態になりますので、連続的な操作でバーコード読み取りができます。


 実際にやってみてわかったことですが、カメラ機能のフォーカスを合せるのに少々コツがいります。
 今回は手ブレ対策として、このように鉄アレイで本体を固定してバーコード読み取りをしました。



補足:
 このような iPad スタンドを使ってみると作業しやすくなるかもしれません。
 鉄アレイに比べれば見た目もグーーーンとおシャレですし、何と言っても角度を変えられますから^^。



※『FMEasy在庫』をカスタマイズするには、開発版が必要となります。


参考記事:
FileMaker Go による iPad/iPhone 向けソリューションの開発ヒント集


『FMEasy在庫』カスタマイズ関連記事:
受注・受注残管理モジュールを作る ― FMEasy在庫のカスタマイズ (1)
受注・受注残管理モジュールを作る ― FMEasy在庫のカスタマイズ (2)