iT邦幫忙

2025 iThome 鐵人賽

DAY 10
1
Odoo

一起認識 Odoo:開源 ERP 的另一種選擇系列 第 10

《老張的工單排不完?MRP 用不下去時,Odoo Manufacturing 的務實解》|Day 10

  • 分享至 

  • xImage
  •  

🏁 開場:老張的白板,擦了又重排

https://ithelp.ithome.com.tw/upload/images/20250910/20178346tYG3VsY7y8.png

小王月底要結清帳,但最終能不能準時,還得看製造部的數字。

老張是製造部主管。每天早上,他站在產線前的大白板前,手裡那支快沒水的白板筆又擦又寫。

  • 昨天才排好的生產計畫,被客戶急單一插,整個順序重來。
  • 倉庫小李來電:某批料還沒進,這條線得停工
  • 線長抱怨:A 線連轉三天,B 線卻閒著沒活

晚上 9 點,財務小王訊息追著來:「老張,哪些完工?哪些停工? 我月底報表交不出去啊!」

這些混亂,正是 MRP 沒落地 的日常;也是採購阿美、庫存小李、財務小王最後都卡在老張的原因。


❓ 為什麼傳統 MRP 在 SME 常常「用不下去」?

  1. 資料要求過高:MRP 假設公司有完整 BOM / Routing / 產能配置,但很多中小廠的料號還停留在紙本或口頭傳承,甚至靠老師傅的記憶,一換人就斷線。

  2. 規劃過度理想:系統追求「最少換線、最高稼動率」,可現實是「老闆今天插一張急單,整個排程馬上重來」,模型一夜就崩。

  3. 導入與維護門檻高:顧問費、導入週期、人力維運都昂貴,最後很多廠無奈說:「系統有裝,但產線還是回到白板跟人工排班」。


🧩 MRP 的四個關鍵字(SME 版本)

  • BOM(物料清單):從「最小必要料」起步,逐步補完。

  • Routing(工藝路線):先登記主工站與節拍,不必一開始把每秒工序寫滿。

  • Lead Time(前置期):用「供應商承諾+安全天數」粗估,先跑再校正。

  • Make/Buy(自製/外包):一開始就標記,系統才能自動觸發採購或外包。

👉 :先能跑,再變好;不要等完美數據才上線。


🛠️ Odoo Manufacturing 的務實解

  1. 逐步建立 BOM 與工單:可從銷售訂單直接產生工單,一邊生產一邊補資料。

  2. 瓶頸工站可視化:工單看板即時顯示進度,主管一眼看到瓶頸,不用猜。

  3. 輕量 APS:不追求「完美優化」,而是快速重排以應對急單。

  4. 與庫存/採購自動串接:工單建立即檢查原料需求,缺料自動觸發採購/調撥,避免開工當天才發現少一顆螺絲。


✨ 開箱即用、低門檻

Odoo 製造模組多數功能屬 開箱即用:建 BOM、產生工單、看板排程、缺料提醒裝好就能用。

SME 不必等資料完備才導入,而是先跑起來、邊做邊校正——這就是 Odoo 與傳統 MRP 的最大差異:低門檻、務實可行的起步方案


💻 技術示範:工單「缺料清單」

不會寫程式也沒關係,這功能在 Odoo 製造模組裡本來就能從介面操作。下面只是展示如何用程式把缺料數據一次抓出來,給老張早會 3 分鐘用。

👉 用法:在 Odoo 主機上開啟 odoo-bin shell -d your_db 後,貼上即可。

from pprint import pprint

def get_mo_shortages(env, mo_id):
    mo = env['mrp.production'].browse(mo_id).exists()
    mo.ensure_one()

    shortages = []
    for mv in mo.move_raw_ids:  # 原料需求
        need = mv.product_uom_qty or 0.0
        reserved = mv.reserved_availability or 0.0
        short = max(0, need - reserved)  # 確保不會出現負數
        if short > 0:
            shortages.append({
                "product_code": mv.product_id.default_code or "",
                "product_name": mv.product_id.display_name,
                "uom": mv.product_uom.name,
                "need": need,
                "reserved": reserved,
                "short": short,
            })
    return shortages

# 示範抓一張在製工單
mo = env['mrp.production'].search([('state','in',('confirmed','progress'))], limit=1)
if mo:
    pprint(get_mo_shortages(env, mo.id))
else:
    print("沒有在製工單。")

📌 範例輸出(假設工單缺 10 顆螺絲):

工單 MO0001 缺料清單:
[{'product_code': 'SCREW-01',
  'product_name': '螺絲 M3',
  'uom': 'pcs',
  'need': 100,
  'reserved': 90,
  'short': 10}]


🎯 結語:務實,才能每天把線跑起來

Odoo 讓老張不必再擦白板重排,缺料自動提醒、瓶頸一眼可見,

工單能照節拍推進,生產終於回到可控的節奏。

👉 不過,工單一旦重排,加班就少不了。製造部的工單問題解決了,但壓力卻落在人資這一端。下一篇,我們就跟著人資芳芳,看看 Odoo HR 如何把這些臨時班表,轉化為透明又合規的出勤與薪資。


上一篇
《財務小王的逆襲:Odoo Accounting 讓月底不再卡關》|Day 9
下一篇
《人資芳芳的班表戰爭:Odoo HR 如何做到合規與績效落地》|Day 11
系列文
一起認識 Odoo:開源 ERP 的另一種選擇15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言