/** * WPML compatibility functions * * @global array $duplicated_posts Array to store the posts being duplicated. * * @package Yoast\WP\Duplicate_Post * @since 3.2 */ add_action( 'admin_init', 'duplicate_post_wpml_init' ); /** * Add handlers for WPML compatibility. */ function duplicate_post_wpml_init() { if ( defined( 'ICL_SITEPRESS_VERSION' ) ) { add_action( 'dp_duplicate_page', 'duplicate_post_wpml_copy_translations', 10, 3 ); add_action( 'dp_duplicate_post', 'duplicate_post_wpml_copy_translations', 10, 3 ); add_action( 'shutdown', 'duplicate_wpml_string_packages', 11 ); } } global $duplicated_posts; // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: Renaming a global variable is a BC break. $duplicated_posts = []; /** * Copy post translations. * * @global SitePress $sitepress Instance of the Main WPML class. * @global array $duplicated_posts Array of duplicated posts. * * @param int $post_id ID of the copy. * @param WP_Post $post Original post object. * @param string $status Status of the new post. */ function duplicate_post_wpml_copy_translations( $post_id, $post, $status = '' ) { global $sitepress; global $duplicated_posts; remove_action( 'dp_duplicate_page', 'duplicate_post_wpml_copy_translations', 10 ); remove_action( 'dp_duplicate_post', 'duplicate_post_wpml_copy_translations', 10 ); $current_language = $sitepress->get_current_language(); $trid = $sitepress->get_element_trid( $post->ID ); if ( ! empty( $trid ) ) { $translations = $sitepress->get_element_translations( $trid ); $new_trid = $sitepress->get_element_trid( $post_id ); foreach ( $translations as $code => $details ) { if ( $code !== $current_language ) { if ( $details->element_id ) { $translation = get_post( $details->element_id ); if ( ! $translation ) { continue; } $new_post_id = duplicate_post_create_duplicate( $translation, $status ); if ( ! is_wp_error( $new_post_id ) ) { $sitepress->set_element_language_details( $new_post_id, 'post_' . $translation->post_type, $new_trid, $code, $current_language ); } } } } // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: see above. $duplicated_posts[ $post->ID ] = $post_id; } } /** * Duplicate string packages. * * @global array() $duplicated_posts Array of duplicated posts. */ function duplicate_wpml_string_packages() { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: renaming the function would be a BC-break. global $duplicated_posts; foreach ( $duplicated_posts as $original_post_id => $duplicate_post_id ) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: using WPML native filter. $original_string_packages = apply_filters( 'wpml_st_get_post_string_packages', false, $original_post_id ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: using WPML native filter. $new_string_packages = apply_filters( 'wpml_st_get_post_string_packages', false, $duplicate_post_id ); if ( is_array( $original_string_packages ) ) { foreach ( $original_string_packages as $original_string_package ) { $translated_original_strings = $original_string_package->get_translated_strings( [] ); foreach ( $new_string_packages as $new_string_package ) { $cache = new WPML_WP_Cache( 'WPML_Package' ); $cache->flush_group_cache(); $new_strings = $new_string_package->get_package_strings(); foreach ( $new_strings as $new_string ) { if ( isset( $translated_original_strings[ $new_string->name ] ) ) { foreach ( $translated_original_strings[ $new_string->name ] as $language => $translated_string ) { do_action( // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: using WPML native filter. 'wpml_add_string_translation', $new_string->id, $language, $translated_string['value'], $translated_string['status'] ); } } } } } } } } Odoo 在庫レポーティング – Raqqa

Odoo 在庫レポーティング

在庫

📌 4️⃣ まとめ表

項目表示条件コメント
履歴(Inventory Moves/Valuation)在庫移動履歴がある入荷/出荷/内部移動があれば表示
補充(最小在庫ルール)商品マスタにルール設定済みスケジューラ実行で自動補充
ロケーション列複数ロケーションで履歴があるない場合は省略表示されることがある
予測列(Forecast)Stockable Productで履歴があるサービス/消耗品は非表示の場合あり

✅ オペレーションタイプ(Operation Types)で設定できること

項目設定内容意味・影響範囲
名称(Name)オペレーションタイプの名前ユーザーが画面で識別するための表示名(例:Receipts, Delivery Orders, Internal Transfers)
コード(Reference Code)英数字の短縮コードシステム内部で識別するコード
動作の種類(Type of Operation)受入(Receipts)、出荷(Delivery)、内部転送(Internal Transfer)、製造関連(Production)などこのオペレーションがどのフローに使われるかの種別
デフォルトのソースロケーション(Default Source Location)移動元ロケーションの初期値例:受入なら Vendor Location、出荷なら Stock
デフォルトの宛先ロケーション(Default Destination Location)移動先ロケーションの初期値例:出荷なら Customer Location、内部転送なら別の倉庫や棚
予約方法(Reservation Method)– 手動(At Confirmation)
– 自動(When Available)
– 直前(Before Scheduled Date)
商品の引当タイミングを制御
バッチ処理(Batch Transfer)このオペレーションタイプで複数ピッキングをまとめてバッチ処理可能か出荷処理などを一括でまとめて行う場合に利用
追跡オプション(Show Detailed Operations)詳細なオペレーション(移動ライン単位での数量追跡)の有効化個別のシリアル番号やロット追跡が必要な場合に必須
パッケージング(Show Packages)パッケージ単位での処理を表示するか梱包単位での管理を行う場合に有効
プランニング(Show Reserved, Planned, and Done quantities)予約済・計画済・完了済の数量を表示ピッキング画面で詳細表示が必要な場合に有効
移動自動検証(Automated Validation)このオペレーションの完了処理を自動で行うかワンクリックで移動を自動的に完了させたい場合
移動ラベル(Operation Type Label)処理のラベルをカスタマイズバーコード処理や印刷物で使われる場合
関連倉庫(Warehouse)このオペレーションが紐づく倉庫倉庫ごとに異なるオペレーションタイプを作成可能

📦 オペレーションタイプの利用例

オペレーションタイプ動作ソースデスティネーション
Receipts(受入)購買品の入荷処理Vendor LocationWH/Input(倉庫の受入エリア)
Delivery Orders(出荷)顧客への出荷処理WH/StockCustomer Location
Internal Transfers(内部転送)倉庫間/棚間の在庫移動WH/InputWH/Stock など
Manufacturing(製造用)製造のための移動WH/Stock(原材料)WH/Production(作業場)
Returns(返品)返品受入処理CustomerWH/Stock(返品在庫)

✅ Odooのロケーション設定項目一覧(主なもの)

項目名意味使用例・コメント
ロケーション名(Location Name)ロケーションの表示名例: WH/Stock、Store A、Shelf B1
親ロケーション(Parent Location)このロケーションが含まれる上位のロケーション階層構造を作るために使用
ロケーションタイプ(Location Type)ロケーションの性質(内部/顧客/サプライヤ/ビューなど)詳細は後述
会社(Company)このロケーションが属する会社マルチカンパニー運用時に指定
削除可能(Is a Scrap Location?)スクラップ処理用ロケーションかどうか破棄用の特別な場所として利用
返品用ロケーション(Is a Return Location?)返品処理用ロケーションか顧客やサプライヤからの返品先を明示
削除可能(Removal Strategy)ピッキング時の引当ルール(FIFO, LIFOなど)在庫の引当順序を制御
パッケージ管理(Is a Package Location?)梱包単位での管理を行うか梱包単位の移動・管理を行う場合に有効
ロット/シリアル番号必須(Tracking Option)ロット・シリアルの管理が必要か食品、医療品、高額品で有効化
容量管理(Capacity, Weight Limits)容積・重量の上限拡張用途で利用可能

親ロケーション(Parent Location)の役割と使いどころ

🎯 親ロケーション = ロケーションの階層構造を作るための枠組み

Odooでは、ロケーションを階層構造で管理できます。

  • 例:
    • WH(倉庫)
      └ WH/Stock(在庫棚)
      └ WH/Stock/Shelf A(棚A)
      └ WH/Stock/Shelf B(棚B)
  • 親ロケーションを設定することで、集計やトレースが「親ロケーション単位」でできる

📦 実際の使いどころ

シーン
倉庫と棚の階層管理倉庫(WH)を親、棚(Shelf)を子にする
店舗ごとの管理本部倉庫を親、各店舗を子ロケーションとして登録
在庫レポートでの集計親ロケーション単位での在庫数を集計・確認できる
内部転送の出発・到着地設定ロケーション階層を持つと移動先を選びやすい
複数ロケーション間のトレース階層構造で「どの倉庫のどの棚か」が明確に

✅ ロケーションタイプの補足

タイプ説明
内部ロケーション(Internal Location)通常の在庫管理用ロケーション倉庫、棚、店舗など
サプライヤロケーション(Vendor Location)購入元を表す仮想ロケーション仕入先からの入荷元
顧客ロケーション(Customer Location)出荷先の仮想ロケーション顧客への納品先
ビュー(View Location)実際の在庫は持たないが、階層の親として機能する仮想ロケーション倉庫(WH)などの上位
スクラップロケーション(Scrap Location)廃棄用の特別なロケーション破損品、返品不良品
生産ロケーション(Production Location)製造の中間地点として使用製造作業場、アッセンブリライン

✅ 入庫規則(Putaway Rules)の基本的な役割

機能説明
目的商品が倉庫に入荷したときの保管ロケーションを自動的に決める
設定対象商品、商品カテゴリごとに設定可能
設定場所倉庫設定 > 入庫規則(Putaway Rules)
使用タイミング入荷時(Receipts)、内部転送時など、在庫がロケーションに入る際

📦 使い方のイメージ

例:スマホ販売業での活用

商品入荷先ロケーション(デフォルト)入庫規則での自動振り分け先
iPhone 13WH/Input(入荷エリア)WH/Stock/Shelf A
iPhone 14WH/InputWH/Stock/Shelf B
アクセサリWH/InputWH/Stock/Accessories
  1. 入荷時はまず**WH/Input(入荷エリア)**に届く
  2. 入庫処理を進めると、入庫規則に従って各棚(Shelf A/B/Accessories)へ自動でロケーションが指定される

✅ 入庫規則の設定項目

項目名説明
製品(Product)特定の製品に限定する場合に設定(空欄ならカテゴリで適用)
製品カテゴリ(Product Category)特定カテゴリの商品に適用する場合(例:スマートフォン、アクセサリ)
ソースロケーション(Source Location)入庫元のロケーション(通常はWH/Inputなど)
宛先ロケーション(Destination Location)入庫先ロケーション(商品が最終的に配置される棚など)

✅ 入庫規則の項目詳細(保管先・サブロケーション・カテゴリ)

項目名意味・使い方コメント
保管先(Destination Location)最終的に商品が移動されるロケーション例: WH/Stock/Shelf A。
入荷時は一時的にWH/Inputに入り、ルールに従いこの保管先に移動される。
サブロケーション(Sub-location)階層的なロケーション構造で、保管先の下位ロケーションを指定する場合保管先を親ロケーション、サブロケーションを子ロケーションとして分ける用途。通常は保管先だけで十分なことが多いが、さらに細分化する場合に使う。
カテゴリ(Product Category)特定の商品カテゴリに属する商品に適用するルール例: 「スマートフォン」カテゴリの全商品はShelf Aに入れる、など。
カテゴリを指定すると、個別の製品を指定しなくてもそのカテゴリの全商品に適用可能。
製品(Product)個別の製品単位で適用する場合に指定例: 「iPhone 14」だけはShelf Bに入れるなど、カテゴリよりも優先度が高い。
ソースロケーション(Source Location)この入庫規則が適用される出発ロケーション通常はWH/Inputや外部ロケーション(Vendor)を指定。
削除フラグ(Removal Strategy)補充時の引当方法(FIFO/LIFOなど)入庫規則とは直接は関係しないが、出庫時にどの商品から引き当てるかを定義する場合もあり。

✅ 「保管先」と「サブロケーション」の違い

項目意味使い分けの例
保管先(Destination Location)商品が最終的に移動する場所(親ロケーション含む)例: WH/Stock(在庫エリア全体)
サブロケーション(Sub-location)保管先のさらに細かい場所例: WH/Stock/Shelf A、WH/Stock/Shelf B

つまり、

  • 「保管先」で大枠(例: 在庫エリア全体)を指定
  • 「サブロケーション」でさらに詳細(例: 棚や区画)を指定

ただし!
👉 通常は保管先だけで十分な場合が多く、サブロケーションはより複雑な倉庫構造で必要になるケースが多いです。


✅ まとめ

入庫規則は「どの製品やカテゴリの商品を、どのロケーションに振り分けるか」を決める仕組み。
保管先は最終配置場所を決め、サブロケーションはその中での詳細な区分を補助的に指定できる。

配送方法の入力項目と意味(詳細解説)

項目意味・使い方備考/例
配送方法この配送方法の名前ユーザーが選択する名称(例:UPS Express、佐川急便、店舗受取)
ウェブサイト?この配送方法をWebショップで利用できるか有効にするとECサイトで選択可能になる(例: ShopifyやOdoo Web)
全てのウェブサイトどのウェブサイトで利用できるかマルチウェブサイトを使う場合の制御
プロバイダー配送料金の計算方法を決定固定価格 / 外部配送API / ルールベース(※Enterpriseのみ外部連携可)
固定価格一律の送料を設定例: 全国一律500円の場合は500.00を入力
会社この配送方法が使用できる会社マルチカンパニーでの制御
オーダ金額が次以上で無料?一定金額以上の注文で送料無料にする閾値例: 10000円以上なら送料無料(設定例:10000.00)
配送プロダクト配送料の科目として扱う商品例: “送料”という商品を作成し、ここに設定することで売上計上できる
追跡リンク?追跡用URLのフォーマット例: https://ekartlogistics.com/shipmenttrack/<shipmenttrackingnumber>
<shipmenttrackingnumber>は出荷時に自動置換
利用可能この配送方法を有効にするかチェックONで使用可能になる
説明この配送方法の説明ユーザー向け説明文(例: 「佐川急便による通常配送」)
遷移後(After Shipping)出荷完了後の処理指定出荷時の特別な処理を定義(例: APIでの連携動作、※Enterprise向け)
この配送方法を利用できる国配送エリア制限(例: 日本のみ、米国のみ)
ステータス配送方法の稼働状態利用可能/停止中など
郵便番号プレフィックス?配送エリアを郵便番号の頭文字で制御例: 100- → 東京都、900- → 沖縄県
コンテンツ配送方法の詳細な内容説明用メモなど(画面上の表示には出ない場合あり)
最大重量?この配送方法で配送可能な最大重量例: 30kgまで。超える場合は選択不可になる
最大容積?この配送方法で配送可能な最大容積体積(m³)で制限
必須タグ?商品に必要なタグ例: 「冷凍」タグ必須配送(商品にタグが必要)
除外済タグ?除外対象のタグ例: 「大型商品」タグが付いた商品はこの配送方法を選択不可
都道府県または郵便番号を選択する前に、国を選択して下さい。制御の補足説明UI上の注意書き(エラー防止のため)

配送方法の主な機能イメージ

  • 配送条件の制限
    • 国、郵便番号、重量、容積、商品タグで制御
  • 送料計算方法
    • 固定価格
    • 無料条件(金額閾値)
    • 外部API(FedEx, DHL等)※Enterprise
  • 出荷後の追跡対応
    • 追跡番号をリンクに埋め込む
  • 販売オーダーや請求書への反映
    • 配送料を「配送プロダクト」として売上計上可能

ER図

🧾 主なテーブルの説明

  • product_template / product_product:商品の基本情報とバリエーションを管理します。
  • stock_move:在庫の移動を記録します。入出庫や内部移動などが含まれます。
  • stock_move_line:在庫移動の詳細な行を管理します。ロットやシリアル番号などの情報を含みます。
  • stock_picking:在庫のピッキング(出荷や受領)を管理します。
  • stock_location:倉庫内のロケーション(場所)を管理します。
  • stock_valuation_layer:在庫評価の履歴を管理します。会計との連携に使用されます。
  • stock_quant:現在の在庫数量をロケーションごとに管理します。

✅ Odoo在庫モジュール主要テーブルと代表的なフィールド


📦 1️⃣ product_product(製品:在庫単位)

フィールド名内容
id製品ID(Variant ID)
product_tmpl_id製品テンプレート(product_templateへのリンク)
default_code製品コード(SKU)
barcodeバーコード
name製品名
type製品タイプ(Stockable, Consumable, Service)
list_price販売価格
standard_price原価(標準原価)
uom_id単位(単位マスタへのリンク)

📦 2️⃣ stock_location(ロケーション)

フィールド名内容
idロケーションID
nameロケーション名(例: WH/Stock)
location_id親ロケーション
usageロケーションタイプ(internal, vendor, customer, view, scrap, production)
company_id所属会社

📦 3️⃣ stock_move(在庫移動ヘッダー)

フィールド名内容
id移動ID
product_id製品ID
location_id移動元ロケーション
location_dest_id移動先ロケーション
quantity_done実際に移動した数量
stateステータス(draft, confirmed, done)
date移動日
picking_id紐づくピッキング(stock_picking
reference参照番号(SO/PO名など)

📦 4️⃣ stock_move_line(在庫移動の詳細行)

フィールド名内容
id移動ラインID
product_id製品ID
lot_idロット/シリアル番号
qty_done移動数量
location_id移動元ロケーション
location_dest_id移動先ロケーション
picking_idピッキングID

📦 5️⃣ stock_picking(出荷・受入のトランザクション)

フィールド名内容
idピッキングID
nameピッキング番号(例: WH/OUT/0001)
partner_id取引先(顧客/仕入先)
location_id移動元ロケーション
location_dest_id移動先ロケーション
scheduled_date予定日
stateステータス(draft, waiting, done)
picking_type_idオペレーションタイプ(入荷/出荷/内部転送)

📦 6️⃣ stock_quant(現在の在庫数量)

フィールド名内容
idレコードID
product_id製品ID
location_idロケーションID
quantity在庫数量(On Hand)
reserved_quantity予約済数量
lot_idロット番号(あれば)
package_idパッケージID(あれば)
owner_id所有者(あれば)

📦 7️⃣ stock_valuation_layer(在庫評価履歴)

フィールド名内容
idレコードID
product_id製品ID
value評価額(金額)
quantity数量
stock_move_id関連する在庫移動
description説明
account_move_id関連する仕訳(会計連携時)
create_date作成日時

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です