1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Odoo 17で倉庫管理を極める | 第7回: Inventoryモジュールと他のモジュール・外部システムとの統合

Posted at

記事の概要

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は、ShopifyWooCommerceなどの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のデータ構造をマッピング。

実践: 統合シナリオ

以下のシナリオで、モジュールと外部システムの統合を実践します:

  1. 販売との統合:
    • 顧客BがShopifyでスマートフォン50台を注文。
    • Odooで販売オーダーを生成し、東京倉庫から出庫。
  2. 購買との統合:
    • スマートフォンの在庫が50台以下で、発注書を自動生成。
    • 200台を入庫し、在庫数量を更新。
  3. 製造との統合:
    • スマートフォン100台を生産、部品表で原材料を消費。
    • 完成品を大阪倉庫に入庫。
  4. Eコマースと3PL:
    • ShopifyでTシャツ100個の注文を受注。
    • 3PL倉庫(ShipBob)から出荷し、在庫同期を確認。

結果確認:

  • 「在庫」→「在庫評価」で、東京倉庫大阪倉庫の在庫を確認。
  • Shopifyと3PLのダッシュボードで、在庫と注文の同期を確認。

トラブルシューティング

統合で発生しがちな問題と解決策をまとめます:

  • 在庫同期の不一致: 販売オーダー入庫データのタイミングを確認。ログでエラーを調査。
  • API接続エラー: APIキーやエンドポイントを再確認。ネットワーク設定をチェック。
  • 3PLデータ形式の不一致: データマッピングを調整。Odooのデータモデルを参照。
  • パフォーマンス低下: 同期頻度を最適化し、大量データ処理に注意。

Odooの公式ドキュメントやフォーラムで詳細な解決策を確認できます。


まとめと次回予告

Odoo 17のInventoryモジュール販売購買製造Eコマース3PLと統合することで、シームレスな倉庫管理を実現しました。APIを活用したデータ同期により、業務の効率化と正確性が向上します。

次回は、Odoo WMSの実運用におけるベストプラクティスと、パフォーマンス最適化エラー対応コミュニティ活用を解説します。実運用で成功するためのノウハウを学びます。ぜひお楽しみに!


この記事が役に立ったら、いいねストックをお願いします!Odoo WMSのシリーズを一緒に学びましょう!

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?