2013-07-25

簡単? FileMakerで在庫管理(6) ―― 場所別在庫レコードの作成方法

 ブログ記事「簡単? FileMakerで在庫管理(3) ―― 倉庫など場所別に在庫数を把握する」では、倉庫等の場所別の在庫数算についてご紹介しました。
 今回は、同機能のキモとも言える場所別在庫レコードの作成方法についてユーザ様よりお問い合わせをいただいたので、以下にその概要をご紹介します。

場所別在庫レコードの作成方法

1.場所別在庫テーブルとそのレコードの作成方針


 先の記事で紹介した場所別在庫算出方法では、下図のような場所別在庫テーブルが必要となります。



 ここで必要十分なレコードは、在庫場所テーブルと商品テーブルのデカルト積となります。


例:
在庫場所TBのレコード
A(倉庫)
B(倉庫)
C(倉庫)

商品TBのレコード
X(商品)
Y(商品)
Z(商品)

場所別在庫TBレコード
AX
AY
AZ
BX
BY
BZ
CX
CY
CZ

 さて、場所別在庫テーブルでデカルト積となるようにレコードを生成すると、各倉庫の在庫(=[c場所別在庫数])に漏れはなくなりますが、倉庫に一度も入出庫が発生していない商品がある場合、余分なレコードが存在することになってしまいます。

 たとえば、倉庫Aにおいて商品Xは入出庫したことがあるが、商品Y、Zについては入出庫が一度も発生していない場合、AXレコードは必要ですが、AY、AZレコードは、通常は不要です。
 処理速度が遅くテーブル結合が貧弱な FileMaker では、余分なレコードを極力作成しないように設計すべきでしょう。

 ということで、今回の仕様においては、入出庫登録を行う際に場所別在庫テーブルに当該商品のレコードの登録有無をチェックして、未登録の場合のみ、レコード登録を行うようにします。


2.実装概要


◇リレーションシップ

場所別在庫_入出明細#出庫 (新設、出庫明細TBと場所別在庫TBのリンク用)
場所別在庫_入出明細#入庫 (新設、入庫明細TBと場所別在庫TBのリンク用、下図)
[このリレーションを使用して、このテーブルでのレコード作成を許可]の✔を忘れずに

◇スクリプト

g確定Btn (変更、OnRecordCommitで実行されるスクリプト)
  • 入庫/出庫画面のレコード確定(OnRecordCommit)時に、入出明細ポータルをチェックし、場所別在庫レコードが存在しなければ、同レコードを作成します。
    下図の赤いフィールドは場所別在庫_入出庫明細#入庫::在庫場所IDフィールドですが、これが空欄であるということは、[在庫場所ID]=5(座間倉庫)の当該商品の場所別在庫レコードが存在しないということを意味します。その場合は、[入庫場所ID]の値を[場所別在庫_入出庫明細#入庫::在庫場所ID]に入れ、場所別在庫レコードを作成します。
  • 本スクリプト実行時になんらかのエラーが発生した場合は、エラーが発生した旨のダイアログを表示し、ダイアログ内の“OK”ボタンでレコード確定を中止し、“レコード復帰”ボタンで明細行の作成をキャンセルするようにします。
    場所別在庫レコードの作成に失敗しているにも関わらず入出明細レコードのみ確定されると、その入庫数分の在庫はシステムから消失してしまうので注意が必要です。

3.その他

  • 万が一、関連する場所別在庫レコードがない入出明細レコードが発生した場合に備え、入庫/出庫テーブルに[c在庫場所ErrMsg]フィールドを作成し、エラーが発生した場合にのみ画面に表示する、というのは用心深い良いプラクティスと言えるでしょう。
  • 場所別在庫テーブルは巨大化しやすいので、場所別在庫が0で且つ入出庫が最近発生していない場所別在庫レコードを削除するバッチ処理を検討しておくことが望ましいです。

2013-07-24

簡単? FileMakerで在庫管理(5) ―― 倉庫間移動

 当ブログの在庫関連記事 簡単? FileMakerで在庫管理(3) ―― 倉庫など場所別に在庫数を把握するでは、「FMEasy在庫 R1.0」をベースに倉庫などの在庫場所別に在庫数を算出する方法について概容を説明しました。

 そんな折、「FMEasy在庫 R1.0(開発版)」のユーザ様から、倉庫間移動に関するご質問を頂戴しましたので、今回はその手法をご紹介します。

商品の倉庫間移動


 まず、下図の青色で囲った部分をご覧ください。



 出庫画面に移動先を入力するための[移動先ID]フィールドを配置しています。
 倉庫間移動が発生する場合、ユーザは移動先のIDを入力した後、“倉庫移動”ボタンをクリックします。すると、出庫画面で入力した出庫明細と同内容のデータが入庫にも作成されるという流れになります。


下準備


 取引先マスタに「倉庫間移動」という管理項目を登録しておきます。
 このとき、倉庫間移動の[取引先ID]は「41」であったと仮定してみます。


倉庫移動スクリプト


 倉庫移動ボタンに割り当てるスクリプト仕様はおおまかに以下のとおりです。
  1. $moveTo 変数に移動先IDをコピー。
  2. 出庫明細(ポータル)内のすべての商品ID/出庫数を $prodArrayに変数配列として格納。
  3. 新規ウインドウで入庫レイアウトを開き、新規レコードを作成。
  4. [入庫場所ID]フィールドには変数1、[仕入先ID]フィールドには「41」を入力。同時に[入庫日]、[担当ID]、[伝票区分]にも適切な値を入力。
  5. $prodArray 変数に格納した出庫明細の要素を、入庫明細の商品ID/入庫数に展開。同時に各[在庫場所ID]には $moveTo 変数に保持されている値を設定。
  6. 入庫レコード確定。

 このスクリプトの実行結果は下図のようになります。



注:
  • 入庫明細作成時、場所別在庫テーブルに座間倉庫用の商品が登録されているかチェックし、無ければ登録する。 ここをミスると、商品がシステム上から消失してしまうので、要注意。
  • 入庫画面の[備考2]に移動元のIDと[場所名](倉庫名)を記録するとわかりやすい。
  • 取引先テーブルに各倉庫名を登録、さらに在庫場所テーブルに[取引先ID]フィールドを新設し、そこに各在庫場所に対応する[取引先ID]値を記録し、[仕入先ID]には上記「41」の代わりに、その倉庫の[取引先ID]を入力するのも良い。
  • 社内倉庫間の移動であるから、[仕入単価]は適切に処理 ― 例えば0を入力― する。
  • 倉庫が隣接しておらず、日単位のタイムラグが発生する場合、“倉庫移動”実行タイミングや[入庫日]の値を考慮すること。

2013-06-28

IIS7 でサイトページの内容の一部を自動的に書き換える方法

 Apache では、mod_layout モジュールを使ってページ内容の一部を書き換えたり、URL を変更したりすることができますが、 IIS7 単体ではできません。

 しかし、Microsoft サイトで提供されている URL 書き換えモジュール(URL Rewrite Module) を使うと、同様の操作が可能となります。

 今回は、この URL 書き換えモジュールを使って、ページの文末を書き換える方法について説明します。


1. URL Rewrite Module 2.0 をマイクロソフト公式ダウンロードサイトよりダウンロードし、IIS7 を運用中のサーバにインストールします。

Microsoft URL Rewrite Module 2.0 for IIS 7 (X64) ダウンロード
Microsoft URL Rewrite Module 2.0 for IIS 7 (X86) ダウンロード


 インターネット インフォメーション サービス (IIS) マネージャを起動すると、以下のように、URL 書き換えアイコンが表示されていればインストール成功です。



2. サーバ全体で書き換えを適用する場合は、左ペインのサーバ名をクリックしてから、URL 書き換えアイコンをダブルクリックします。

 URL 書き換えの規則を管理するウィンドウに切り替わりますので、画面下部の「HTTP 応答のヘッダーまたはコンテンツに適用される送信規則」のセクションをクリックし、次に右ペインより「規則の追加...」をクリックします。



3. 送信規則のセクションで「空の規則」が選択されていることを確認し、“OK” をクリックします。


  送信規則の編集ウィンドウに切り替わります。



4. 名前と必須条件を決めます。

 [名前(N)] に任意の名前を入力し(下図では adcode)、[必須条件(P)]の一覧より「<新しい必須条件の作成...>」を選択すると、下図のように必須条件編集ダイアログが表示されます。



 ここで、[名前] に任意の条件名を入力し(下図では bodyEnd)、[仕様] は「正規表現」が選択されていることを確認してから、“追加”ボタンをクリックすると、下図のような正規表現指定ダイアログが表示されますので、以下のように入力します。



 [条件の入力(C)] {RESPONSE_CONTENT_TYPE} (デフォルト)
 [入力文字列が次の条件を満たしているかどうかをチェック] パターンに一致する(デフォルト)
 [パターン(T)] ^text/html
 [大文字と小文字を区別しない] チェック付き(デフォルト)

 ここまで入力が終わったら、“OK” ボタンをクリックすると、必須条件の追加ダイアログに戻りますので、内容を確認してから “OK” をクリックして閉じます。



5. 書き換え用のテキストを設定します。

 画面中央の[パターン]に書き換えるタグを入力し(下図では
)、アクションのセクションでは、[アクションの種類(Y)] は「書き換え」(デフォルト)、[アクションのプロパティ]には任意の文字列を入力します。


 ここでは、ページの末尾を Powered by Tsuchiya Planning Company </body> で書き換えるという規則を指定したものです。

 ヘッダ部分を書き換えるのであれば、[パターン] を </head>、にし、[アクションのプロパティ] に任意の文字列や制御コードと記述し、</head> で閉じるようにします。
 すべての操作が終わったら、ウィンドウ右上の“適用”をクリックします。


6. ページをロードして、設定が反映されていることを確認します。

 試しに、http://localhost/iisstart.htm にアクセスしてみましょう。
 以下のように、指定した文字列がページの最後に表示されていれば成功です。




 この方法を応用すると、サイトのすべてのページにアクセス解析のトラッキングコードを自動挿入したり、ページの先頭や末尾に広告を自動挿入したりすることができます。