記事の概要
Odoo 17のInventoryモジュールは、標準機能で多くの倉庫管理ニーズを満たしますが、特定の業務要件に対応するにはカスタマイズが必要です。第5回ではレポートとデータ分析を学びました。第6回では、Odoo Studioを使ったノーコードのカスタマイズと、PythonおよびXMLを使用したプログラミングによるカスタマイズを解説します。カスタムフィールドの追加やワークフローの変更を通じて、業務に最適化したWMSを構築する方法を紹介します。
Odoo Studioによるノーコードカスタマイズ
Odoo Studioは、プログラミング知識がなくてもカスタムフィールドやワークフローを追加できる強力なツールです(Enterprise版推奨)。これにより、独自の業務要件に柔軟に対応できます。
Odoo Studioの基本操作
-
Odoo Studioの有効化:
- 「設定」→「Odoo Studio」を有効化。
- 左上のStudioアイコンをクリックして編集モードに。
-
カスタムフィールドの追加:
- 「在庫」→「製品」に移動し、任意の製品を開く。
- Studioで「フィールド追加」を選択。
- 例: 「サプライヤーコード」というテキストフィールドを追加。
-
ビューのカスタマイズ:
- 製品フォームビューに「サプライヤーコード」を表示。
- ドラッグ&ドロップでフィールドの位置を調整。
-
ワークフローの変更:
- 「在庫」→「在庫調整」に新しいボタン(例: 「緊急補充」)を追加。
- ボタンに簡単なアクション(例: 在庫補充)を設定。
実践: サプライヤーコードの追加
-
Odoo Studioで製品モデル(
product.template
)に移動。 - 新しいテキストフィールド「サプライヤーコード」を追加。
- 製品フォームにフィールドを表示し、検索フィルタに追加。
- 例: Tシャツにサプライヤーコード「SUP123」を入力し、保存。
注意点:
- Odoo StudioはEnterprise版限定。Community版ではコードで同様の機能を実装。
- カスタマイズはバックアップ後にテスト環境で実施。
PythonとXMLによるカスタマイズ
PythonとXMLを使用したカスタマイズは、柔軟性が高く、複雑な要件に対応可能です。以下は、カスタムモジュールの作成手順です。
カスタムモジュールの構造
-
モジュールの作成:
- Odooの
addons
ディレクトリに新しいモジュール(例:custom_inventory
)を作成。 - 基本構造:
custom_inventory/ ├── __init__.py ├── __manifest__.py ├── models/ │ └── custom_product.py ├── views/ │ └── product_views.xml
- Odooの
-
マニフェストファイル(
__manifest__.py
):
{
'name': 'カスタム在庫管理',
'depends': ['stock'],
'data': ['views/product_views.xml'],
'installable': True,
}
-
カスタムフィールドの追加(
models/custom_product.py
):
from odoo import models, fields
class ProductTemplate(models.Model):
_inherit = 'product.template'
supplier_code = fields.Char('サプライヤーコード')
-
ビューのカスタマイズ(
views/product_views.xml
):
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record id="product_template_form_view_inherit" model="ir.ui.view">
<field name="name">product.template.form.inherit</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"/>
<field name="arch" type="xml">
<field name="barcode" position="after">
<field name="supplier_code"/>
</field>
</field>
</record>
</odoo>
モジュールのインストール
- Odooの
addons
ディレクトリにcustom_inventory
を配置。 - 「アプリ」→「データベース更新」を実行。
- 「カスタム在庫管理」を検索し、インストール。
実践例:
- 製品フォームにサプライヤーコードフィールドを追加。
- スマートフォンにコード「SUP456」を入力し、保存。
- 「在庫」→「製品」で新しいフィールドを確認。
注意点:
-
XMLの継承は正確な
ref
IDを指定。 - モジュールのアップグレード前にデータベースをバックアップ。
ワークフローのカスタマイズ
業務特有のワークフロー(例: 承認プロセス)を追加することで、効率を向上させます。以下は、在庫調整に承認ステップを追加する例です。
承認プロセスの追加
-
Odoo Studio:
- 「在庫」→「在庫調整」に移動。
- 新しいステータス「承認待ち」を追加。
- ボタン「承認」を追加し、ステータスを「検証済み」に変更。
-
コード(
models/custom_inventory.py
):
from odoo import models, fields, api
class StockInventory(models.Model):
_inherit = 'stock.inventory'
state = fields.Selection(selection_add=[('pending', '承認待ち')])
def action_approve(self):
self.write({'state': 'done'})
-
ビュー(
views/inventory_views.xml
):
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record id="stock_inventory_form_view_inherit" model="ir.ui.view">
<field name="name">stock.inventory.form.inherit</field>
<field name="model">stock.inventory</field>
<field name="inherit_id" ref="stock.view_inventory_form"/>
<field name="arch" type="xml">
<button name="action_validate" position="after">
<button name="action_approve" string="承認" type="object" class="oe_highlight"/>
</button>
</field>
</record>
</odoo>
実践: 承認プロセスのテスト
- 在庫調整を作成(例: Tシャツ50個を追加)。
- ステータスを「承認待ち」に設定。
- 管理者アカウントで「承認」ボタンをクリックし、在庫を更新。
注意点:
- ワークフロー変更は、既存プロセスの整合性を確認。
- 権限設定で、承認ボタンのアクセスを制限可能。
実践: カスタマイズのシナリオ
以下のシナリオで、カスタマイズを一括実践します:
-
Odoo Studioでカスタムフィールド:
- 製品に「優先度」フィールド(選択リスト: 高、中、低)を追加。
- フォームビューに表示し、Tシャツに「高」を設定。
-
カスタムモジュールの作成:
- サプライヤーコードフィールドを追加。
- スマートフォンにコード「SUP789」を入力。
-
ワークフローの変更:
- 在庫調整に「緊急補充」ボタンを追加。
- ボタンクリックで、自動補充ルールをトリガー。
コード例(緊急補充ボタン):
from odoo import models, api
class StockInventory(models.Model):
search = 'stock.inventory'
def action_emergency_replenish(self):
orderpoint = self.env['stock.warehouse.orderpoint'].search([
('product_id', 'in', self.product_ids.ids)
])
orderpoint.action_replenish()
結果確認:
- 「在庫」→「製品」でサプライヤーコードと優先度を確認。
- 「在庫」→「在庫調整」で承認待ちステータスと緊急補充ボタンを確認。
トラブルシューティング
カスタマイズで発生しがちな問題と解決策をまとめます:
- Odoo Studioでビューが壊れる: 編集前にビューをバックアップ。元に戻すで復元。
- コードエラー: PythonやXMLの構文エラーを確認。Odooログを調査。
-
モジュールがインストールできない: 依存モジュール(例:
stock
)を確認。__manifest__.py
を再チェック。 - パフォーマンス低下: カスタムフィールドのインデックス設定を検討。
Odooの公式ドキュメントやフォーラムで詳細な解決策を確認できます。
まとめと次回予告
Odoo StudioとPython/XMLを使ったカスタマイズにより、Inventoryモジュールを業務に最適化しました。カスタムフィールドやワークフローの追加を通じて、柔軟で効率的なWMSを構築できます。
次回は、販売、購買、製造モジュールや外部システム(例: Shopify、3PL)との統合を解説します。シームレスなデータ連携で倉庫管理をさらに強化する方法を学びます。ぜひお楽しみに!
この記事が役に立ったら、いいねやストックをお願いします!Odoo WMSのシリーズを一緒に学びましょう!