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 を呼び出します。
    • 例えば、在庫が補充されたタイミングで、「受注残」として残っている在庫予約データを自動で消し込みしたい場合に、上記のメソッドは利用できるかもしれません。。

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

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

前回の続きで、もう少しシステムポリシーをイジってみます。

ドキュメントページ設定 について

システムポリシー詳細画面に「ドキュメントページ設定」というセクションがありますが、何を設定して良いのやらよく分かりませんでした。。

f:id:yonet77:20120218224853p:plain

一応ヘルプを見るとこんな感じに書かれています。

販売見積書、請求書等の帳票としてカスタム帳票(Visualforce Page)を作成した場合、対応する各ページにカスタム帳票を指定することで、システムからの出力がカスタム帳票に切り替わる。標準の帳票を使用する場合は、各ページの指定を空白とする。

なるほど。自前で帳票用のページを作成すれば、それを指定することもできるということか。
・・というわけで、自前でVisualforce Pageを作成して、ページ名を埋め込んでみたけれど...エラー。
f:id:yonet77:20120219232216j:plain

おいおい、どういうことだッ・・・!?と色々と問い合わせたところ、

ページ名を埋め込む際、先頭に "c__" を付与する必要がある

ということが分かりました。(せめてヘルプに書いておいて欲しかったな。。)
というわけで、気を取り直してこんな感じに直したら、確かに差し替えられました!
f:id:yonet77:20120219232916j:plain


ちなみに、PDF用のVisualforce Pageを自作する際には、StandardController(標準コントローラ)に販売オーダーや購買オーダー等、帳票を差し替えたいgOMのオブジェクトを指定して、必要に応じて拡張コントローラを用意しておけば大丈夫です。
gOMでは、販売オーダー、購買オーダーの画面で、PDFを添付する/送付する機能が標準で実装されていて、なかなか良さげです。
それを利用するにはPDFの差し替えは必須となりますが、こんな注意が必要ですよー、というお話でした。

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

前回の続き・・ということで。
システムポリシーで設定しておくと良いかなーと思ったことで、「消費税」について書き留めておきます。

消費税の設定

gOMでは商品の単価は、基本的に「税抜」として扱ってます。そのため金額計算時には消費税計算を考慮する必要があります。
(課税対象であれば、ですが。まぁ、大抵課税対象ですよね。。)

gOMでは税額計算機能も、もちろん備えてます。

でも、システムポリシーとかみても、「消費税」というキーワードは全くないので、どこで設定すれば良いのか・・?と分からなくなりますよね。というか、自分は分かりませんでした。。。てへぺろ

で、結局どこで設定するのか?というと、「VAT(Value-Added Tax、付加価値税)」を使います。
ココでも紹介されているように、消費税は欧米でいうところのVATに相当するみたいです。

VATレコードの作成

gOMの「コードメンテナンスタブ」→「VAT」タブから作ります。
f:id:yonet77:20120217183106p:plain

VATレコードを作った後、そのままVAT税率も作ります。VAT税率に実際の税率(今だと5%)を登録します。
これは税率が変わっても対応できるように、「VAT」という枠と「VAT税率」という税率を格納するオブジェクトを親子関係で結んでいるのだと思います。
出来上がると、こんなイメージかと・・・(作成後の画面です。。)
f:id:yonet77:20120217183438p:plain

実際試してないですが、gOMでは有効日が最新のVAT税率を使ってくれる・・と思います。

消費税用のVATをデフォルト設定にする

上記で作成したVATを自動で使ってもらうよう、システムポリシーに設定します。
システムポリシーの画面で、以下2つの項目を設定します。

  • 「VATを有効化する」にチェックを入れる
  • 「デフォルトVAT」に作成したVATを設定する

f:id:yonet77:20120217185554p:plain



設定は以上になります。
こんな感じで設定しておくと、販売オーダーの明細(所謂、受注明細)を作ったときに、「課税情報」のVAT項目に上で作成した消費税用のVATが自動セットされ、VAT税額として消費税額が計算されるようになります。
(こんな感じです)
f:id:yonet77:20120217185953p:plain

予め設定しておいた方が良いかなーと思う「消費税」の設定についてでした。


ちょっと面倒な問題点など

ただ、gOMの仕組み上、面倒な問題点があります。(以下、実際に遭遇した問題点です。。)

1. 小数が発生したときに、切り上げ/切り捨て/四捨五入してくれない
元々、米国発祥であるあたりから、金額項目は小数第二位まで指定できるようになっています。
※商品原価はもっと細かく指定できますが。

そのため、「2.50」といった小数付きの消費税額が計算されてしまいます。
おそらく、取引先マスタの方に端数計算処理のパターン(切り上げ/切り捨て/四捨五入)を登録しておいて、税額計算する際に端数処理するようトリガを仕込む・・といった感じになると思います。


2. 消費税を計算する単位が「明細」単位に固定されている
企業によっては、税額計算する単位が

  1. 明細単位
  2. 注文単位
  3. 締単位

と分かれるケースがあると思いますが、それに対応できません。。。
特にgOMでは「締」という概念がないため、「締単位」で税額を計算する、といった話は拡張する感じですかねー。
(そのあたりの話も今後できたらいーなーと考えてますが。。)


「1.」のあたりとかは、日本向けにローカライズするときには標準機能として備わっていて欲しいところですね。
今後のgOMに期待!
(次回は未定です)

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

Hatena Blog に移行してみました。古い記事は(ほとんどないけど)こちらになります。

最近、お仕事でGlovia Order Management (on Salesforce)をカスタマイズすることが多いので、備忘録として自分がハマったポイントなど書き溜めておこうと思います。

 

  • 前提

CRM機能を利用する、という前提にしてます。CRMを使わずにGloviaのみ使う・・という場合は「商談」が使えないくらいかと思います。

 

  • インストールしてから利用できるようになるまで

インストールしてからいくつか設定しないと、そのままでは使えないのです。

以下、必要最低限(と思う)作業を紹介します~。

 

  • 日本語の有効化

設定画面上で、「管理者設定」→「トランスレーションワークベンチ」→「翻訳設定」に移動します。

翻訳設定を「有効化」します。

※元々、Glovia Order Management(以下、gOM)は米国発祥のパッケージなのでオブジェクトの名称や項目名は全て英語表気になっています。

もちろん、日本語化することで日本語として利用できますので、そのための設定を行う感じです。 

 

  • システムポリシーの作成

gOMの設定を司るオブジェクトのレコードを作成します。

このデータがgOMのシステム設定という感じです。

 

作り方は

「コードメンテナンス」タブ→「システムポリシー」タブ→「システムポリシーを生成」をクリック

という順番です。

これでデフォルト設定のシステムポリシーが出来上がります。

 

  • 取引先関連情報の作成

「取引先関連情報」はgOM側で管理している取引先マスタになります。CRM側の取引先と1:1で対応していて、CRM側の取引先を拡張したオブジェクト・・というイメージです。

なお、CRM側の取引先と1:1であることが前提でプログラムが作られているので、こうなっていない場合、何か処理したときにエラーが発生したりします。

あと、Salesforce標準のの「取引先のマージ」を利用すると、マージしたCRM側の取引先に「取引先関連情報」が複数紐付くようになるので、後で削除する等の処置が必要です。(要注意です)

 

作り方は

「コードメンテナンス」タブ→「システムポリシー」タブ→「取引先関連情報を生成」をクリック

という順番です。

これで、既に作成しているCRM側の取引先に対して、1件の取引先関連情報が作成されます。

※新たに取引先を作成した場合は、取引先関連情報は自動生成されます。

  

  • 商品関連情報の作成

取引先関連情報と同様に、gOM側で管理している商品マスタに該当します。CRM側の商品と1:1で対応していて、CRM側の商品を拡張したオブジェクト・・というイメージです。

これも1:1であることが前提となっています。

 

作り方は

「コードメンテナンス」タブ→「システムポリシー」タブ→「商品関連情報を生成」をクリック

という順番です。

これで、既に作成しているCRM側の商品に対して、1件の商品関連情報が作成されます。

※新たに商品を作成した場合は、商品関連情報は自動生成されます。

 

ちなみに、上記3つの設定は以下の画面で行います。(システムポリシーは既に作成済の画面です)

 ↓

f:id:yonet77:20120216232819p:plain

 

  • gOMで追加しているボタンの追加など

CRM側の商談から販売オーダーを作成するための変換機能が元々備わっています。

「カスタムボタン」という形で提供されているので、商談オブジェクトのページレイアウトを編集して、gOMが追加しているボタンをレイアウトに追加します。

※この他、関連リストも適宜追加すると良いでしょう。

 

 

最低限必要な設定はこんなところでしょうか。。。

とりあえずこれで販売オーダーを作る、等の基本機能が利用できるかと思います。

※ちなみに、gOMインストール後にメールで自動送信される設定ガイドに詳しく書かれてます。

 

 

実際に利用する上で、こういう設定しておいた方が良いかなー・・というモノは次回に。。

(例えば、消費税の設定とか)