ลูกค้าโรงงานทุกรายที่เราเริ่มงานด้วย มักถามคำถามแรกเหมือนกันว่า Odoo จะจัดการ bill of materials แบบที่สเปรดชีตเดิมทำได้ไหม ทั้งสินค้ากึ่งสำเร็จรูป (sub-assembly) ส่วนประกอบแบบ phantom และขั้นตอนการผลิตนับสิบขั้นในหนึ่ง routing คำตอบตรงไปตรงมาคือทำได้ แต่ต้องวางโครงสร้าง Odoo manufacturing BOM ให้ถูกต้องตั้งแต่วันแรก เพราะถ้า BOM ผิด ตัวเลขทุกอย่างที่ตามมา ไม่ว่าจะเป็นต้นทุน ระยะเวลาผลิต หรือกำลังการผลิต จะผิดตามไปด้วยทั้งหมด
บทความนี้จะพาไล่ดูวิธีที่เราวางระบบ BOM หลายระดับ routing work center และการคิดต้นทุนใบสั่งผลิตในโปรเจกต์จริง รวมถึงจุดที่คนมักพลาด
ทำไม Odoo Manufacturing BOM คือรากฐานของทุกอย่าง
BOM ไม่ใช่แค่รายการชิ้นส่วน แต่ใน Odoo มันคือตัวขับเคลื่อนใบสั่งผลิต การจองวัตถุดิบ routing และสุดท้ายคือต้นทุนที่ไปลงบนสินค้าสำเร็จรูป ถ้า BOM ระบุปริมาณส่วนประกอบผิด ต้นทุนของทุกหน่วยที่ผลิตจะต่ำไปหรือสูงไปอย่างเงียบๆ และมักไม่มีใครสังเกตเห็นจนกว่ารายงานกำไรขั้นต้นจะดูผิดปกติในอีกหลายเดือนต่อมา
เราเริ่มโปรเจกต์ผลิตทุกครั้งด้วยการนั่งคุยกับทีมหน้างานและนักบัญชีต้นทุนพร้อมกัน ไม่ใช่แยกคุยทีละฝ่าย ทีมหน้างานรู้ขั้นตอนการผลิตจริง ส่วนนักบัญชีรู้ว่าต้นทุนต้องรวมไปถึงอะไรบ้าง สองมุมมองนี้มักไม่ตรงกันในวันแรก และการปรับให้สองฝั่งเข้าใจตรงกันก่อนเริ่มตั้งค่าระบบ จะช่วยประหยัดเวลาแก้งานซ้ำได้หลายสัปดาห์ในภายหลัง
BOM หลายระดับ: จัดการ Sub-Assembly ให้ถูกวิธี
สินค้าจริงส่วนใหญ่ไม่ได้มีแค่ระดับเดียว เช่น เก้าอี้สำเร็จรูปตัวหนึ่งมีโครงเก้าอี้เป็น sub-assembly มีเบาะเป็นอีก sub-assembly และมีอุปกรณ์ยึดต่างหาก Odoo รองรับโครงสร้างแบบนี้ได้โดยตรง ส่วนประกอบใน BOM หนึ่งตัวสามารถเป็นสินค้าที่ผลิตเองพร้อม BOM ของตัวเองได้ และ Odoo จะคลี่โครงสร้างออกมาได้ลึกเท่าที่ต้องการ
มีทางเลือกการออกแบบสองแบบที่สำคัญตรงนี้
- Sub-assembly แบบมีสต็อก — ผลิตแยกเป็นใบสั่งผลิตของตัวเอง เก็บเข้าสต็อก แล้วค่อยถูกเบิกใช้โดย BOM แม่ ใช้วิธีนี้เมื่อ sub-assembly นั้นขายแยกได้เองด้วย ผลิตล่วงหน้าเป็นล็อตก่อนมีออเดอร์ หรือต้องผ่านการตรวจคุณภาพของตัวเอง
- Kit / Phantom BOM — บรรทัด sub-assembly จะคลี่ออกเป็นส่วนประกอบย่อยโดยตรงในใบสั่งผลิตแม่ โดยไม่มีใบสั่งผลิตแยกหรือสต็อกของสินค้ากึ่งสำเร็จรูปนั้น ใช้วิธีนี้กับชุดบรรจุภัณฑ์หรือการจัดกลุ่มง่ายๆ ที่ไม่เคยมีสถานะเป็นสต็อกด้วยตัวเอง
จุดที่เราเห็นความสับสนมากที่สุดคือการผสมสองวิธีนี้ในต้นไม้สินค้าเดียวกัน ถ้า sub-assembly บางครั้งต้องมี work order ของตัวเอง (เช่น เพื่อกักสินค้าไว้ตรวจคุณภาพ) แต่บางครั้งก็ไม่ต้อง ควรทำเป็น BOM แบบมีสต็อกจริง ไม่ใช่ phantom แม้จะทำให้มีใบสั่งผลิตเพิ่มขึ้นอีกใบในสายงานก็ตาม
ข้อจำกัดหนึ่งที่ควรพูดตรงๆ คือ BOM หลายระดับที่ลึกมากจะทำให้โครงสร้างใบสั่งผลิตอ่านยากขึ้นสำหรับหน้างาน พนักงานที่ต้องเลื่อนดูส่วนประกอบที่ซ้อนกันห้าระดับ อาจหลงทิศว่ากำลังประกอบอะไรอยู่ตรงนี้จริงๆ เราแก้ปัญหานี้ด้วยการทำ routing แต่ละระดับให้กระชับ และฝึกหัวหน้างานให้ทำงานจากหน้าจอ work order ไม่ใช่จากมุมมอง BOM ดิบ
Routing และ Work Center: จุดที่เวลาและต้นทุนเกิดขึ้นจริง
BOM ที่ไม่มี routing บอกได้แค่ว่าสินค้าประกอบด้วยอะไรบ้าง แต่ routing จะบอกว่าสินค้าถูกผลิตขึ้นมาอย่างไร มีขั้นตอนอะไรบ้าง เรียงลำดับแบบไหน ทำที่ work center ไหน และแต่ละขั้นตอนใช้เวลาเท่าไร ตรงนี้เองที่ Odoo Manufacturing แสดงคุณค่าที่เหนือกว่าการตั้งค่าแบบมี BOM อย่างเดียว
work center แต่ละตัวใน Odoo มีอัตราต้นทุนของตัวเอง (ต่อชั่วโมง) มีกำลังการผลิต และสามารถกำหนดปฏิทินเวลาทำงานได้ เมื่อยืนยันใบสั่งผลิต Odoo จะสร้าง work order ตามขั้นตอนใน routing และพนักงานสามารถบันทึกเวลาที่ใช้จริงในแต่ละขั้นตอนผ่านแท็บเล็ตหรือแผงควบคุมหน้างานได้
ตัวอย่าง routing ที่เราตั้งค่าให้ลูกค้าโรงงานขึ้นรูปโลหะขนาดกลางรายหนึ่งมีลักษณะดังนี้
| ขั้นตอน | Work Center | เวลาที่คาดไว้ | ตัวขับเคลื่อนต้นทุน |
|---|---|---|---|
| ตัดชิ้นงาน | CNC-01 | 12 นาที | เวลาเครื่องจักร |
| เชื่อม | WELD-02 | 25 นาที | แรงงาน + เครื่องจักร |
| พ่นสี | PAINT-01 | 15 นาที | แรงงาน + วัสดุสิ้นเปลือง |
| ตรวจคุณภาพ | QC-01 | 8 นาที | แรงงานเท่านั้น |
ส่วนต่างระหว่างเวลาที่คาดไว้กับเวลาจริงเป็นหนึ่งในตัวเลขที่มีประโยชน์ที่สุดในระบบทั้งหมด เมื่อเวลาเชื่อมจริงเกินกว่าค่าประมาณใน routing ถึง 40 เปอร์เซ็นต์อย่างสม่ำเสมอ นั่นอาจหมายถึง routing ที่ไม่เคยถูกปรับหลังเปลี่ยนกระบวนการผลิต หรือ work center ที่ต้องการกำลังการผลิตเพิ่ม ไม่ว่าจะเป็นกรณีไหนก็เป็นเรื่องที่ควรคุยกัน และ Odoo จะแสดงให้เห็นเองโดยอัตโนมัติ เมื่อพนักงานบันทึกเวลาจริงแทนที่จะคลิกผ่าน work order โดยไม่บันทึกระยะเวลา
การติดตามต้นทุนจริงของใบสั่งผลิต
นี่คือส่วนที่ทีมผลิตส่วนใหญ่สนใจจริงๆ และก็เป็นส่วนที่มักตั้งค่าผิดบ่อยที่สุดเช่นกัน ต้นทุนของสินค้าที่ผลิตใน Odoo มาจากสามแหล่ง
- ต้นทุนส่วนประกอบ — มูลค่าของวัตถุดิบและ sub-assembly ทุกตัวที่ถูกเบิกใช้ ตามวิธีคิดต้นทุน (FIFO เฉลี่ย หรือมาตรฐาน) ที่ตั้งไว้บนหมวดหมู่สินค้าแต่ละประเภท
- ต้นทุนการปฏิบัติงาน — อัตราต้นทุนต่อชั่วโมงของ work center คูณกับระยะเวลาจริง (หรือที่วางแผนไว้ในกรณีใช้ standard costing) ของแต่ละขั้นตอนใน routing
- ค่าโสหุ้ย (Overhead) หากต้องการรวมเข้าไป — บางทีมเพิ่มอัตราค่าโสหุ้ยการผลิตต่อชั่วโมงหรือต่อหน่วยเข้าไปจากสองข้อข้างต้น แต่เราแนะนำให้เริ่มแบบเรียบง่ายก่อน แล้วค่อยปรับละเอียดขึ้นเมื่อมีข้อมูลจริงแล้ว
ถ้าใช้ standard costing ใบสั่งผลิตจะลงบัญชีต้นทุนส่วนประกอบและต้นทุนการปฏิบัติงานตามค่ามาตรฐานเมื่อเสร็จสิ้น และส่วนต่างระหว่างค่ามาตรฐานกับค่าจริงจะปรากฏเป็นส่วนต่าง (variance) ที่ตรวจสอบได้ตอนปิดงบประจำเดือน ส่วนถ้าใช้ FIFO หรือเฉลี่ยในฝั่งส่วนประกอบ ต้นทุนส่วนประกอบจริง ณ เวลาที่เบิกใช้ จะไหลเข้าสู่ใบสั่งผลิตโดยตรง ซึ่งให้ตัวเลขที่แม่นยำกว่าต่อแต่ละล็อต แต่จะเคลื่อนไหวมากกว่าระหว่างรอบการผลิตของสินค้าตัวเดียวกัน
เราแนะนำ standard costing ให้กับลูกค้าที่ต้องการต้นทุนสินค้าที่คาดเดาได้แน่นอนสำหรับการเสนอราคา และแนะนำ FIFO หรือเฉลี่ยให้กับลูกค้าที่ราคาวัตถุดิบผันผวนมากพอจนค่ามาตรฐานคงที่จะทำให้ทีมขายเข้าใจผิดได้ ไม่มีวิธีไหนถูกเสมอไป ขึ้นอยู่กับพฤติกรรมการจัดซื้อจริงของแต่ละธุรกิจ
ข้อแลกเปลี่ยนหนึ่งที่ควรรู้ไว้คือ standard costing อ่านง่ายในรายงาน แต่ซ่อนแรงกดดันที่แท้จริงเมื่อราคาวัตถุดิบขึ้น เพราะบัญชี variance จะรับภาระแทนตัวต้นทุนสินค้าเอง ถ้าผู้จัดการจัดซื้อไม่เคยดูบัญชี variance เลย standard costing อาจบดบังปัญหากำไรขั้นต้นไว้ได้นานหลายเดือนโดยไม่รู้ตัว
Backflush การเบิกใช้แบบแมนนวล และสิ่งที่ถูกติดตามจริง
Odoo ให้เลือกตั้งค่าการเบิกใช้ส่วนประกอบแบบ backflush อัตโนมัติเมื่อใบสั่งผลิตเสร็จสิ้น หรือให้ยืนยันการเบิกใช้ด้วยตนเองต่อส่วนประกอบพร้อมติดตามล็อตหรือซีเรียล สำหรับสินค้าที่มีข้อกำหนดกำกับดูแล เช่น อาหาร ยา หรือสินค้าที่ต้องตรวจสอบย้อนกลับได้ การยืนยันแบบแมนนวลพร้อมติดตามล็อตคุ้มค่ากับการคลิกเพิ่มต่อส่วนประกอบ เพราะให้การตรวจสอบย้อนกลับได้ทั้งไปข้างหน้าและย้อนหลังอย่างแท้จริง ตั้งแต่ล็อตวัตถุดิบจนถึงล็อตสินค้าสำเร็จรูป
สำหรับงานประกอบปริมาณมากที่ไม่มีข้อกำกับดูแลเข้มงวด การ backflush อัตโนมัติตามปริมาณใน BOM เร็วกว่าและเพียงพอแล้ว ข้อแลกเปลี่ยนคือ backflush จะสมมติว่าปริมาณที่ใช้จริงเท่ากับปริมาณใน BOM เป๊ะ ถ้าพนักงานหน้างานใช้วัตถุดิบมากกว่าปกติเล็กน้อยเพราะของเสีย backflush จะรายงานของเสียต่ำกว่าความจริง และสต็อกส่วนประกอบจะเริ่มคลาดเคลื่อนจากความเป็นจริงไปเรื่อยๆ จนกว่าจะมีการนับสต็อกจริงครั้งต่อไป
วางโครงสร้าง BOM แรกให้ถูกต้องตั้งแต่ต้น
แนวทางบางอย่างที่เราใช้ซ้ำเกือบทุกโปรเจกต์ผลิต
- สร้างต้นไม้ BOM บนกระดาษหรือสเปรดชีตร่วมกับหัวหน้าสายการผลิตก่อน ยังไม่ต้องคีย์แม้แต่บรรทัดเดียวลงใน Odoo
- แยก sub-assembly แบบ "ผลิตเก็บสต็อก" ออกจากแบบ "ผลิตตามออเดอร์" ตั้งแต่ต้น เพราะมีผลต่อว่า Odoo จะสร้างใบสั่งผลิตซ้อนอัตโนมัติ หรือจองสต็อกที่มีอยู่แล้ว
- กำหนดระยะเวลาแต่ละขั้นตอนใน routing จากการศึกษาเวลาจริง ไม่ใช่การเดา แม้จะเป็นเพียงการจับเวลาคร่าวๆ หน้างานสักหนึ่งวันก็ยังดีกว่า
- ตัดสินใจวิธีคิดต้นทุนต่อหมวดหมู่สินค้าก่อนใช้งานจริง ไม่ใช่หลังจากปิดงบประจำเดือนแรกไปแล้วด้วยสมมติฐานเดิม
- อัปเดตปฏิทิน work center ให้ตรงกับความจริงเสมอ work center ที่ตั้งว่าพร้อมใช้งานตลอด 24 ชั่วโมงทุกวัน ทั้งที่จริงเดินแค่กะเดียว จะทำให้การคำนวณกำลังการผลิตและระยะเวลาผลิตทั้งหมดคลาดเคลื่อนตามไปด้วย
ถ้ากำลังย้ายระบบจากระบบ MRP เดิมหรือ BOM แบบสเปรดชีต ควรเตรียมใจว่าการทำความสะอาดข้อมูล BOM เองอาจใช้เวลานานกว่าการตั้งค่า Odoo เสียอีก เราเคยเจอกรณีที่การตรวจสอบข้อมูล BOM ใช้เวลานานกว่าการตั้งค่าโมดูลผลิตถึงสามเท่า เพียงเพราะ BOM เก่าสะสมส่วนประกอบที่เลิกใช้แล้วและปริมาณที่ไม่มีใครตรวจสอบมานานหลายปี ควรแยกงานตรวจสอบนี้เป็นเฟสของโปรเจกต์ของตัวเองพร้อมกรอบเวลาชัดเจน แทนที่จะแอบยัดรวมไว้ใน "สัปดาห์ขึ้นระบบจริง" เฉยๆ
แนวทางทั่วไปของเราสำหรับ การวางระบบ Odoo ทุกโปรเจกต์คือตั้งค่าตามมาตรฐานก่อน และปรับแต่งเฉพาะจุดที่เครื่องมือ routing และ BOM มาตรฐานไม่สามารถสะท้อนกระบวนการจริงได้จริงๆ ซึ่งในงานผลิต กรณีแบบนี้เกิดขึ้นน้อยกว่าที่หลายทีมคิดไว้ล่วงหน้ามาก ถ้ากระบวนการผลิตของคุณจำเป็นต้องมี logic เฉพาะที่เกินกว่า routing และ work order มาตรฐานจะรองรับได้ นั่นคือเรื่องที่ควรคุยกันในขอบเขตของการปรับแต่ง Odoo มากกว่าการหาทางแก้ปัญหาเฉพาะหน้าต่อเข้ากับ BOM มาตรฐาน
ก่อนขึ้นระบบจริงครั้งต่อไป ลองดึงต้นไม้ BOM เต็มและ routing ของสินค้าสำเร็จรูปสักหนึ่งตัว แล้วไล่ดูทีละขั้นตอนร่วมกับคนที่ดูแลสายการผลิตจริง ถ้าลำดับขั้นตอนบนกระดาษไม่ตรงกับสิ่งที่เกิดขึ้นจริงที่ work center ให้แก้ routing ก่อนขึ้นระบบจริง อย่ารอให้รายงาน variance ใบแรกตั้งคำถามที่ไม่มีใครตอบได้



