ディスカッション
【Netsuite】キットパッケージの利用可能数を保存検索で算出する
Qiita向け記事を投稿しました。
【Netsuite】キットパッケージの利用可能数を保存検索で算出する
以下に同様の内容を記載しておきます。
はじめに
NetSuiteの「キットパッケージ(Kit/Package)」は、複数の商品(メンバーアイテム)をまとめて扱える便利な機能です。
Kit/Package Items
ただし、キット自体には在庫数の概念がありません。
そのため、
- このキットは今いくつ出荷できるのか?
- 利用可能数はいくつなのか?
といった判断が難しく、運用で悩むケースが多いです。
本記事では、保存検索を使ってキットの利用可能数を算出する方法を紹介します。
課題
キットパッケージには以下の特徴があります。
- キット単体の在庫は存在しない
- メンバーアイテムの在庫に依存する
- 一部のアイテムが不足していると全体が作れない
つまり、キットの利用可能数は構成アイテムごとの「利用可能数 ÷ 必要数」を計算し、その最小値で決まります。
考え方
商品Aと商品Bから構成されるキットの利用可能数は、以下の考え方で求められます。
各メンバーアイテムの「利用可能数 ÷ 必要数」の最小値
例:
| アイテム | 利用可能数 | 必要数 | 作れる数 |
|----------|------------|--------|----------|
| A | 10 | 2 | 5 |
| B | 8 | 4 | 2 |
この場合、キット全体としては 2個まで 出荷可能です。
保存検索の設定
検索タイプ
- アイテム検索
条件
- 種類:キット/パッケージ
- 概要:最小:計算式:0より大きい:式:FLOOR(NVL({memberitem.locationquantityavailable},0) / NULLIF({memberquantity},0))
※在庫が作れる場所のみを表示したい場合は概要も設定してください。
すべての場所で利用可能数を表示したい場合は不要です。
結果列
- 名前 概要の種類→グループ
- 計算式(数値)→以下の数式を設定します。
FLOOR(NVL({memberitem.locationquantityavailable},0) / NULLIF({memberquantity},0))
概要の種類→最小
この設定でキットパッケージの名前ごとで、在庫保管場所での利用可能数が表示されるようになります。
ポイント
① NULL対策
NVL(...,0)→ 在庫NULLを0扱いNULLIF(...,0)→ 0除算防止
② 切り捨て(FLOOR)
小数は切り捨てる必要があります。
例:5.8個 → 5個しか作れない
概要設定(ここが一番重要)
この列を 概要タイプ「最小(Minimum)」 にします。
これで メンバーアイテムの中で「一番作れないアイテム」を基準に結果がでる
完成イメージ
- キットごとに「利用可能数」が1行で表示される
- 実際に出荷可能な数量がわかる
よくある落とし穴
❌ 単純にSUMしてしまう
→ 全く意味が変わる(NG)
❌ 概要を設定しない
→ メンバーアイテムごとの最小値がバラバラに出る
❌ locationquantityavailableを使わない
→ キットには在庫の考えがないので、結果がでない
❌キット品は他のキットのコンポーネントとして使用されている場合がある
→ 計算で出された数値の取り扱いには注意が必要です。
応用
- 倉庫別に出したい場合 → ロケーションでグループ化
- サブリストに適用することでキットパッケージのアイテム画面から利用可能数を確認
まとめ
- キットの在庫は「最も不足している構成アイテム」で決まる
- 保存検索で再現するには👉
MIN(FLOOR(memberitem.locationquantityavailable / memberquantity)) NVLとNULLIFは必須
最後に
複数のアイテムを1つの商品として在庫管理したい場合は、「アセンブリアイテム」を検討するのも有効です。
ただし、アセンブリアイテムは、在庫にする過程で、組立(Build)を行った時点でコンポーネント在庫が消費されるため、出荷前であっても管理在庫とのズレが発生する可能性がある点に注意が必要です。
一方で、キットと異なり在庫を持つことができるため、在庫管理がしやすくなるというメリットがあります。