yonet77的な雑記帳

日々思いついたネタなどを書き留めておきます

Glovia Order Management (on Salesforce) を使ってみようか (4)

"Glovia Order Management (on Salesforce) を使ってみようか" も、ジョジョ徐々にシリーズ化されつつある今日この頃ですが、そんなに期待しないで頂きたいッ!(キリッ?
※あくまで、気になった小ネタを適当に出してるだけです。。


んで、本日のネタはこんなあたりで。 ↓

受注管理の範囲では、在庫引当をどうやってんの?

gOMでの「在庫予約」って...?

「在庫引当」というのは、お店で「売約済」とか札が商品に貼られているシーンを目にした方も多いと思いますが、アレです。お客さんからの注文に対して、出荷するための商品を確保する・・といったあたりでしょうか。
それをgOMではどうやってやっているか??というと「在庫予約」オブジェクトを使って実現しています。(こんな画面のヤツです↓ )
f:id:yonet77:20120221005300p:plain

この「在庫予約」オブジェクト、在庫引当の後に続く業務(出庫/梱包/出荷..)でも関わってくるので、gOMでは結構大事なオブジェクトです。むやみに削除したりすると面倒ですし、むやみに削除できないようロックされています。

在庫予約データはいつ、どんな感じに作成されるのか...?

gOMでは、販売オーダーラインを作成するときに、在庫予約を一緒に作成します。
つまり、お客さんからの注文明細を登録するときに、自動的に在庫を引き当てにいってる、ということです。
現状、在庫引当のタイミングを制御したい場合は..カスタマイズするしかないみたいです。まぁ、自動的に在庫引当しても大半は大丈夫だと思います。
在庫切れになった商品を発注して、受入(「受領」という表現を使う企業もありますね)した後に在庫引当するタイミングで、微妙だと思うこともありますが、それは購買オーダーのときにでも紹介できれば、と思います。。。

在庫予約がどんな感じに作成されるのー?? というのが以下のパターンとなります。

  1. 商品が「非在庫品」の場合
    • パターン「A」
  2. 商品が「在庫品」で、注文数<在庫数の場合
    • パターン「B」
  3. 商品が「在庫品」で、注文数>在庫数>0の場合
    • パターン「C」
  4. 商品が「在庫品」で、注文数>在庫数=0の場合
    • パターン「D」
パターン A B C D
作成データ件数 1 1 2 1
在庫品or非在庫品? 非在庫品 在庫品 在庫品 在庫品 在庫品
予約ステータス 予約済 予約済 予約済 受注残 受注残
予約数 0 (注文数) (在庫数) 0 0
受注残数 0 0 0 (注文数-在庫数) (注文数)
非在庫品数 (注文数) 0 0 0 0
  • 補足
    • 商品が "在庫品" or "非在庫品" の判定は、「商品関連情報」オブジェクトの「非在庫品」項目で判定します。
    • "受注残":在庫引当できなかった、というステータスを意味します。在庫が補充された後に、再度在庫引当する必要があります。


これを見ると

  • 商品が「非在庫品」(≒在庫管理しない)ものでも在庫予約は作成します。
  • gOMでは在庫引当する時点で、在庫として存在している分から確保していく、という方針のようです。
    • 倉庫にある分から、販売オーダーラインを登録した順番でどんどん在庫引当しちゃえー!んで、在庫引当できなかったら受注残として別途作成しちゃえー・・という感じでしょうか。
    • なので、注文に対して不足があると、在庫予約を2件作成しちゃいます。在庫引当後、出庫指示〜梱包指示〜出荷指示は、在庫予約の単位で処理されるので、注文としては明細が1件でも、出荷時には2件の明細に分かれる、というケースも発生します。(2つの出荷明細の数を足し合わせたら、注文数に等しくなりますが)
    • 分割されるのがイヤだ!という場合には、一旦作っちゃった後に、分割された在庫予約を2件とも削除して下さい。そして、在庫が補充されて「注文数<在庫数」となった段階で、在庫引当処理を実行する・・という流れになります。

(赤枠のボタンが該当します↓ )
f:id:yonet77:20120221014114p:plain

なお、補足ですが、「受注残」として残った在庫予約データについては、在庫が補充されたタイミングで、受注残を消し込む業務が必要となります。(でないと、後続業務(出庫/梱包/出荷)が回らなくなります)
受注残を消し込む操作は、以下の赤枠のボタンが該当します。在庫予約のリストから、消し込みたい在庫予約を選択して、「受注残消し込み」を実行する感じとなります。
f:id:yonet77:20120221014618p:plain


在庫引当を自前のApexコードから起動させたい場合って...?

さてさて、色々とカスタマイズしていく中で、在庫を引き当てるとか、「受注残」として残っている在庫予約に対して、消し込みするといった処理を実装することも(もしかしたら)あるやもしれませぬ。
ということで、調べてみると、gOMの中で「inventoryReserve」クラスがglobalとして定義されていて、以下のようなメソッドを用意しているとのことでした。

  • 在庫引当処理を実行する:gii.inventoryReserve.reservation(List SalesOrderLineIds)
    • 販売オーダーラインのIdのリストを引数にして、gii.inventoryReserve.reservation を呼び出します。
    • 例えば、在庫引当のタイミングを制御したい場合に、一旦在庫予約は削除しておいて、好きなときに上記のメソッドを呼び出せば、在庫引当のタイミングを制御できるようになるかと思います。
  • 受注残の消し込み処理を実行する:gii.inventoryReserve.clearBackorder(List InventoryReserveIds)
    • 在庫予約のIdのリストを引数にして、gii.inventoryReserve.clearBackorder を呼び出します。
    • 例えば、在庫が補充されたタイミングで、「受注残」として残っている在庫予約データを自動で消し込みしたい場合に、上記のメソッドは利用できるかもしれません。。

※上記以外にも在庫予約データを処理するためのメソッドが用意されていますが、そのうち...(紹介できるといーなーと思いつつ)
次回は未定です。