記事の概要
Odoo 17のInventoryモジュールは、他のモジュールや外部システムと統合することで、倉庫管理の効率をさらに向上させます。第6回ではOdoo Studioとコードによるカスタマイズを学びました。第7回では、販売、購買、製造モジュールとの連携、及びEコマース(例: Shopify)や3PL(サードパーティロジスティクス)との統合を解説します。APIを活用したデータ同期や、統合時の注意点も紹介します。
販売モジュールとの統合
販売モジュールとInventoryモジュールの連携により、販売オーダーと在庫をリアルタイムで同期できます。これにより、在庫不足による販売遅延を防ぎます。
販売と在庫の同期
- 販売オーダー作成時に、在庫数量を自動チェック。
- 出庫プロセスが販売オーダーに連動し、在庫数量を即時更新。
-
設定手順:
- 「販売」→「設定」→「在庫管理」を有効化。
- 「在庫」→「設定」→「自動配送」を有効化。
- 例: 顧客がTシャツ50個を注文すると、東京倉庫から自動で出庫。
実践: 販売オーダーの在庫連携
- 「販売」→「販売オーダー」→「新規」で、スマートフォン100台を顧客Aに販売。
- 在庫チェックで在庫数量(例: 150台)が十分か確認。
- 販売オーダーを確定後、配送オペレーションが自動生成。
- 「在庫」→「在庫評価」で、スマートフォンの在庫が50台に減少。
コード例(販売時の在庫チェック):
from odoo import models, api, exceptions
class SaleOrder(models.Model):
_inherit = 'sale.order'
@api.constrains('order_line')
def check_stock_availability(self):
for line in self.order_line:
product = line.product_id
stock = self.env['stock.quant'].search([
('product_id', '=', product.id),
('location_id.usage', '=', 'internal')
])
if sum(stock.mapped('quantity')) < line.product_uom_qty:
raise exceptions.UserError(f'{product.name}の在庫が不足しています。')
注意点:
- 在庫不足時に警告を表示する設定を有効化。
- マルチ倉庫の場合、在庫場所を正しく指定。
購買モジュールとの統合
購買モジュールとInventoryモジュールの連携により、仕入と入庫をシームレスに管理できます。自動補充と連動して発注を効率化します。
購買と入庫の連携
- 発注書作成後、入庫オペレーションが自動生成。
- 入庫完了後、在庫数量が更新され、会計にも反映。
-
設定手順:
- 「購買」→「設定」→「在庫管理」を有効化。
- 「在庫」→「製品」で、補充ルール(例: 最小数量50)を設定。
- 例: Tシャツの在庫が50個以下で、自動で100個の発注書を生成。
実践: 購買と入庫の同期
- 「購買」→「発注書」→「新規」で、スマートフォン200台を発注。
- 発注書を確定後、入庫オペレーションを生成。
- 入庫画面で200台を東京倉庫に登録。
- 「在庫」→「在庫評価」で、在庫が200台増加。
コード例(自動発注のトリガー):
from odoo import models, api
class StockWarehouseOrderpoint(models.Model):
_inherit = 'stock.warehouse.orderpoint'
@api.model
def trigger_purchase(self):
for orderpoint in self.search([('product_qty', '<', 'product_min_qty')]):
purchase = self.env['purchase.order'].create({
'partner_id': orderpoint.product_id.seller_ids[0].name.id,
'order_line': [(0, 0, {
'product_id': orderpoint.product_id.id,
'product_qty': orderpoint.product_max_qty
})]
})
purchase.button_confirm()
注意点:
- 仕入先情報が製品に登録されていることを確認。
- 自動補充ルールは、需要予測に基づいて調整。
製造モジュールとの統合
製造モジュールとInventoryモジュールの連携は、生産と在庫管理を一元化します。完成品や原材料の在庫を効率的に管理できます。
製造と在庫の連携
- 製造オーダーで、原材料を消費し、完成品を入庫。
- 生産完了後、在庫数量が自動更新。
-
設定手順:
- 「製造」→「設定」→「在庫管理」を有効化。
- 製品に**部品表(BOM)**を登録。
- 例: スマートフォンの生産で、ディスプレイとバッテリーを消費し、完成品を入庫。
実践: 製造と在庫の同期
- 「製造」→「製造オーダー」→「新規」で、スマートフォン50台を生産。
- 部品表に基づき、ディスプレイ50個とバッテリー50個を消費。
- 生産完了後、東京倉庫にスマートフォン50台を入庫。
- 「在庫」→「在庫評価」で、原材料と完成品の在庫を確認。
コード例(部品表の登録):
from odoo import models, fields
class MrpBom(models.Model):
_inherit = 'mrp.bom'
def create_bom(self, product_id, components):
bom = self.create({
'product_tmpl_id': product_id.product_tmpl_id.id,
'bom_line_ids': [(0, 0, {
'product_id': comp['product_id'],
'product_qty': comp['quantity']
}) for comp in components]
})
return bom
注意点:
- 部品表に正確な原材料と数量を登録。
- 生産スケジュールと在庫数量の整合性を確認。
Eコマースとの統合(Shopify)
Odoo 17は、ShopifyやWooCommerceなどのEコマースプラットフォームと統合可能です。在庫同期や注文管理を自動化します。
Shopifyとの統合設定
- Odoo App Storeから「Shopifyコネクタ」をインストール。
- ShopifyストアのAPIキー(プライベートアプリ)を生成。
- 「在庫」→「設定」→「コネクタ」でAPIキーとストアURLを入力。
- 在庫と注文をリアルタイムで同期。
実践: Shopifyとの在庫同期
- ShopifyでTシャツ50個の注文を受注。
- Odooの販売オーダーが自動生成。
- 出庫後、Shopifyの在庫数量が更新(例: 100個→50個)。
- 「在庫」→「在庫評価」で、在庫の同期を確認。
コード例(Shopify同期のカスタム処理):
from odoo import models, api
class SaleOrder(models.Model):
_inherit = 'sale.order'
@api.model
def sync_shopify_order(self, shopify_order):
order = self.create({
'partner_id': self.env['res.partner'].search([('name', '=', shopify_order['customer'])])[0].id,
'order_line': [(0, 0, {
'product_id': self.env['product.product'].search([('name', '=', line['name'])]).id,
'product_uom_qty': line['quantity']
}) for line in shopify_order['line_items']]
})
order.action_confirm()
注意点:
- ShopifyコネクタはEnterprise版で最適化。
- APIリクエスト制限に注意し、同期頻度を調整。
3PLとの統合
3PL(サードパーティロジスティクス)との統合により、外部倉庫の在庫管理をOdooで一元化できます。APIを使用してデータ連携を行います。
3PL統合の設定
- 3PLプロバイダのAPIドキュメントを確認(例: ShipBob、DHL)。
- OdooのAPI(REST API)を使用して、在庫や出荷データを同期。
- 「在庫」→「設定」→「外部倉庫」で接続を設定。
実践: 3PLとの在庫同期
- 3PL倉庫(例: ShipBob)にTシャツ100個を保管。
- Odooで在庫数量を同期(APIでデータ取得)。
- 顧客注文時に、3PL倉庫から出荷をリクエスト。
コード例(3PL APIでの在庫同期):
import requests
from odoo import models, api
class StockQuant(models.Model):
_inherit = 'stock.quant'
@api.model
def sync_3pl_stock(self, api_url, api_key):
response = requests.get(api_url, headers={'Authorization': f'Bearer {api_key}'})
if response.status_code == 200:
for item in response.json()['items']:
product = self.env['product.product'].search([('default_code', '=', item['sku'])])
self.create({
'product_id': product.id,
'quantity': item['quantity'],
'location_id': self.env.ref('stock.stock_location_stock').id
})
注意点:
- APIキーのセキュリティを確保。
- 3PLのデータ形式とOdooのデータ構造をマッピング。
実践: 統合シナリオ
以下のシナリオで、モジュールと外部システムの統合を実践します:
-
販売との統合:
- 顧客BがShopifyでスマートフォン50台を注文。
- Odooで販売オーダーを生成し、東京倉庫から出庫。
-
購買との統合:
- スマートフォンの在庫が50台以下で、発注書を自動生成。
- 200台を入庫し、在庫数量を更新。
-
製造との統合:
- スマートフォン100台を生産、部品表で原材料を消費。
- 完成品を大阪倉庫に入庫。
-
Eコマースと3PL:
- ShopifyでTシャツ100個の注文を受注。
- 3PL倉庫(ShipBob)から出荷し、在庫同期を確認。
結果確認:
- 「在庫」→「在庫評価」で、東京倉庫と大阪倉庫の在庫を確認。
- Shopifyと3PLのダッシュボードで、在庫と注文の同期を確認。
トラブルシューティング
統合で発生しがちな問題と解決策をまとめます:
- 在庫同期の不一致: 販売オーダーや入庫データのタイミングを確認。ログでエラーを調査。
- API接続エラー: APIキーやエンドポイントを再確認。ネットワーク設定をチェック。
- 3PLデータ形式の不一致: データマッピングを調整。Odooのデータモデルを参照。
- パフォーマンス低下: 同期頻度を最適化し、大量データ処理に注意。
Odooの公式ドキュメントやフォーラムで詳細な解決策を確認できます。
まとめと次回予告
Odoo 17のInventoryモジュールを販売、購買、製造、Eコマース、3PLと統合することで、シームレスな倉庫管理を実現しました。APIを活用したデータ同期により、業務の効率化と正確性が向上します。
次回は、Odoo WMSの実運用におけるベストプラクティスと、パフォーマンス最適化、エラー対応、コミュニティ活用を解説します。実運用で成功するためのノウハウを学びます。ぜひお楽しみに!
この記事が役に立ったら、いいねやストックをお願いします!Odoo WMSのシリーズを一緒に学びましょう!