โครงสร้างการจัดการหลายคลังในระบบ Odoo Inventory
ลูกค้าที่มาปรึกษาเรื่องนี้บ่อยที่สุดคือโรงงานที่โตเร็วเกินระบบเดิม เช่น ผู้ผลิตชิ้นส่วนพลาสติกในระยองที่เริ่มจากคลังเดียว แล้วขยายเป็นคลังวัตถุดิบ คลังสินค้าระหว่างผลิต (WIP) และคลังสินค้าสำเร็จรูปแยกอาคารกันภายในสองปี พอมีสามคลังพร้อมกัน สเปรดชีตที่เคยพอไหวก็เริ่มพังทันที เพราะไม่มีใครรู้ว่าสต็อกจริง ณ ตอนนี้อยู่ที่ไหนกันแน่
ใน Odoo คำว่า "คลัง" (Warehouse) กับ "สถานที่จัดเก็บ" (Location) เป็นคนละชั้นกัน ตัว Warehouse คือหน่วยธุรกิจระดับใหญ่ที่ผูกกับรหัสย่อ เช่น RY สำหรับคลังระยอง, SP สำหรับคลังสมุทรปราการ แต่ละ Warehouse จะมีชุด Location ของตัวเองเป็นต้นไม้ลำดับชั้น ตั้งแต่ Stock หลัก ไปจนถึงชั้นวางย่อยที่สุด
จุดที่หลายคนมองข้ามคือเรื่อง Routes ระหว่างคลัง Odoo รองรับการตั้งค่าให้คลังหนึ่งรับสินค้าจากอีกคลังหนึ่งอัตโนมัติ (Resupply from another warehouse) ซึ่งมีประโยชน์มากสำหรับโรงงานที่มีคลังกลางกระจายไปคลังสาขา เช่น กรณีบริษัทชิ้นส่วนอิเล็กทรอนิกส์ที่มีคลังกลางที่บางนา แล้วส่งของไปคลังย่อยที่นครราชสีมาและสมุทรสาครทุกสัปดาห์ ถ้าตั้ง Route ถูกต้อง ระบบจะสร้างใบโอนย้ายอัตโนมัติเมื่อสต็อกที่คลังปลายทางต่ำกว่าจุดสั่งซื้อ โดยไม่ต้องมีใครนั่งเช็กมือ
แต่ Route แบบนี้ไม่ได้เหมาะกับทุกสถานการณ์ ถ้าตั้งจุดสั่งซื้อ (reordering rule) หลวมเกินไป ระบบจะสร้างใบโอนย้ายล็อตเล็กๆ ถี่จนพนักงานขับรถส่งของงงว่าทำไมต้องวิ่งทุกสองวัน แทนที่จะรวมเป็นเที่ยวใหญ่เที่ยวเดียวต่อสัปดาห์ตามที่วางแผนไว้แต่แรก และสำหรับ SKU ที่หมุนช้าหรือสั่งเป็นล็อตใหญ่นานๆ ครั้ง การตั้ง Route อัตโนมัติแบบนี้มักสร้างงานเกินจำเป็น ควรปล่อยให้เป็นการโอนย้ายแบบสั่งเองตามรอบที่วางแผนไว้ดีกว่า
รายละเอียดการตั้งค่า Warehouse และ Location แบบเต็มดูได้จากเอกสารทางการของ Odoo หัวข้อ Warehouses and locations (https://www.odoo.com/documentation/18.0/applications/inventory_and_mrp/inventory/warehouses_storage/inventory_management/warehouses_locations.html) ซึ่งอธิบายลำดับชั้นและวิธีเชื่อมโยง Route กับแต่ละคลังไว้ชัดเจน
ตั้งค่าสถานที่จัดเก็บ (Locations) และโซน (Zones) ตามโรงงาน
การตั้งโครงสร้าง Location ที่ดีต้องเลียนแบบผังโรงงานจริง ไม่ใช่ตั้งตามใจผู้ดูแลระบบ ตัวอย่างที่ใช้ได้ผลกับโรงงานอาหารแปรรูปแห่งหนึ่งในสมุทรสาคร คือแบ่งเป็นสี่โซนหลักภายใต้คลังเดียว:
- โซนวัตถุดิบ (Raw Material) — รับของจากซัพพลายเออร์ ก่อนผ่าน QC
- โซนกักกัน (Quarantine) — ของที่รอผลตรวจแล็บ ห้ามเบิกเข้าไลน์ผลิตจนกว่าจะปล่อยผ่าน
- โซนระหว่างผลิต (WIP)
- โซนสินค้าสำเร็จรูปรอจัดส่ง
จุดสำคัญคือโซนกักกันต้องตั้งเป็น Location แยกจริง ไม่ใช่แค่ติดป้ายกระดาษบนพาเลท เพราะถ้าเป็น Location คนละตัวใน Odoo ระบบจะไม่ให้ทำใบเบิกจากโซนนั้นเข้าคำสั่งผลิตโดยไม่ผ่านขั้นตอนย้ายสถานที่ก่อน ซึ่งเป็นการล็อกด้วยระบบ ไม่ใช่ล็อกด้วยวินัยพนักงาน
อีกเรื่องที่คุ้มค่าเวลาตั้งค่าไปพร้อมกันคือ Putaway Rules คือกฎว่าเมื่อรับของประเภทหนึ่งเข้ามา ระบบจะเสนอ Location ปลายทางให้อัตโนมัติ เช่น วัตถุดิบที่ต้องแช่เย็นจะถูกชี้ไปที่โซนควบคุมอุณหภูมิเสมอ ไม่ต้องพึ่งความจำพนักงานคลังหน้างาน สำหรับโรงงานที่มี SKU เกินพันรายการขึ้นไป การตั้งกฎนี้ล่วงหน้าประหยัดเวลาได้จริงเมื่อรับของแต่ละล็อต
ข้อควรระวังคือ Putaway Rules ไม่ใช่ของที่ตั้งครั้งเดียวแล้วจบ เมื่อโรงงานเพิ่ม SKU ใหม่หรือปรับผังชั้นวาง กฎเดิมจะไม่ปรับตามอัตโนมัติ ต้องมีคนรับผิดชอบตรวจทานเป็นระยะ ถ้าไม่มีใครดูแล กฎที่ตั้งไว้เมื่อสองปีก่อนอาจชี้ Location ผิดผังจริงไปแล้วโดยไม่มีใครรู้ตัว จนกว่าจะมีของกองผิดที่หน้างานให้เห็นเป็นๆ
กระบวนการนับสต็อกจริง (Physical Inventory Count) ทีละขั้นตอน
การนับสต็อกใน Odoo มีสองแบบที่ใช้ต่างวัตถุประสงค์กัน คือนับเต็มคลัง (Full Physical Count) ที่มักทำปีละครั้งตอนปิดงบ กับนับแบบหมุนเวียน (Cycle Count) ที่นับทีละโซนต่อเนื่องตลอดปี
ขั้นตอนที่ใช้ได้จริงกับโรงงานขนาดกลางส่วนใหญ่:
- ตัดสินใจก่อนว่านับแบบเต็มคลังหรือแบบหมุนเวียน แล้วกำหนดวันที่ตัดยอด (cut-off date) ให้ชัด เพราะช่วงนับจะมีผลต่อรายการเคลื่อนไหวสต็อกที่ยังไม่ปิดงาน
- หยุดการเคลื่อนไหวสต็อกในโซนที่จะนับชั่วคราว หรืออย่างน้อยแจ้งทีมผลิตให้เบิก-จ่ายเสร็จก่อนเวลาที่กำหนด
- เปิดหน้า Inventory Adjustments ใน Odoo แล้วกรองตาม Location ที่จะนับ ระบบจะดึงยอดตามบัญชี (Quantity on Hand) มาแสดงเป็นเส้นฐาน
- พิมพ์ใบนับสต็อก (Count Sheet) หรือใช้แท็บเล็ต/สแกนเนอร์เดินนับตามจริง โดยไม่บอกยอดในระบบให้ทีมนับเห็นล่วงหน้า เพื่อลดอคติในการนับ
- กรอกยอดที่นับได้จริงลงในช่อง Counted Quantity ของแต่ละบรรทัด
- ตรวจสอบผลต่างก่อนกดยืนยัน ถ้าผลต่างเกินเกณฑ์ที่ตั้งไว้ (เช่นเกิน 2% ของมูลค่า SKU นั้น) ให้นับซ้ำรอบสองก่อนโพสต์เข้าระบบ
- กด Apply เพื่อให้ระบบสร้างสมุดรายวันปรับปรุงสต็อกอัตโนมัติ ซึ่งจะกระทบบัญชีมูลค่าสินค้าคงเหลือทันที
สำหรับคลังที่มี SKU เกิน 3,000 รายการ การนับเต็มคลังปีละครั้งมักใช้เวลาหยุดสายการผลิตยาวเกินไป Odoo จึงแนะนำแนวทาง Cycle Count คือแบ่งนับ SKU กลุ่ม A (มูลค่าสูง หมุนเวียนเร็ว) ทุกเดือน กลุ่ม B ทุกไตรมาส กลุ่ม C ปีละครั้ง
ข้อที่มักถูกมองข้ามคือการแบ่งกลุ่ม A/B/C เองก็มีต้นทุน ต้องมีคนนั่งจัดหมวดสินค้าตามมูลค่าและความถี่การเคลื่อนไหวให้ถูกต้องตั้งแต่แรก แล้วต้องทบทวนซ้ำทุก 6-12 เดือน เพราะสินค้าขายดีวันนี้อาจกลายเป็นของค้างสต็อกปีหน้า ถ้าตั้งกลุ่มแล้วปล่อยทิ้งไว้ไม่เคยแก้ Cycle Count จะนับผิดจุด นับของกลุ่ม C บ่อยเกินความจำเป็นแต่พลาดของกลุ่ม A ที่ควรจับตาจริงๆ Odoo อธิบายวิธีตั้งค่าความถี่นับตามกลุ่มไว้ในเอกสาร Cycle counts (https://www.odoo.com/documentation/18.0/applications/inventory_and_mrp/inventory/warehouses_storage/inventory_management/cycle_counts.html) แต่การจัดกลุ่มให้ถูกต้องและดูแลต่อเนื่องเป็นงานที่ต้องทำเอง ไม่มีปุ่มไหนทำให้อัตโนมัติ
การใช้บาร์โค้ดและอุปกรณ์มือถือเพื่อเพิ่มความแม่นยำ
การนับด้วยกระดาษแล้วมานั่งคีย์เข้าเครื่องทีหลัง คือจุดที่ความผิดพลาดเกิดมากที่สุดในทุกโรงงานที่เคยเข้าไปช่วยวางระบบ ตัวเลขที่คีย์ผิดหลักเดียว เช่น 1,250 กลายเป็น 1,520 ทำให้ยอดปรับปรุงสต็อกคลาดเคลื่อนหลักหมื่นบาทได้ง่ายๆ
แอป Odoo Barcode แก้ปัญหานี้ตรงจุด พนักงานสแกนบาร์โค้ดสินค้าแล้วกรอกจำนวนที่นับได้ทันทีหน้างาน ไม่ต้องพักไว้แล้วมาคีย์ซ้ำที่หลัง โรงงานชิ้นส่วนยานยนต์แห่งหนึ่งในระยองที่เปลี่ยนจากกระดาษมาใช้สแกนเนอร์ Zebra รุ่นราคาราวเครื่องละ 18,000-25,000 บาท พบว่าเวลานับสต็อกทั้งคลังลดจากสามวันเหลือประมาณวันครึ่ง ผลต่างจากการคีย์ผิดหายไปเกือบหมด
ที่จริงไม่จำเป็นต้องซื้อสแกนเนอร์มืออาชีพเสมอไป สำหรับคลังขนาดเล็กหรือ SKU ไม่กี่ร้อยรายการ ใช้แอป Odoo Inventory บนสมาร์ตโฟนทั่วไปสแกนผ่านกล้องก็เพียงพอ ต้นทุนแทบเป็นศูนย์เพราะพนักงานส่วนใหญ่มีมือถือกันอยู่แล้ว ข้อจำกัดคือความเร็วในการสแกนต่อครั้งจะช้ากว่าสแกนเนอร์เฉพาะทางพอสมควรเมื่อต้องนับปริมาณมากต่อเนื่องหลายชั่วโมง
ใครสนใจตั้งค่าการปรับสต็อกผ่านบาร์โค้ดแบบละเอียด รวมถึงวิธีตั้งชื่อบาร์โค้ด (nomenclature) ให้ตรงกับสินค้าที่มีหลายหน่วยนับ เอกสาร Apply inventory adjustments with barcodes ของ Odoo อธิบายไว้ครบ (https://www.odoo.com/documentation/18.0/applications/inventory_and_mrp/barcode/operations/adjustments.html)
การจัดการความแตกต่างระหว่างสต็อกที่ระบบกับสต็อกจริง
คำถามที่สำคัญกว่า "ทำไมยอดไม่ตรง" คือ "จะหาสาเหตุก่อน หรือปรับยอดทิ้งไปเลย" สาเหตุที่เจอบ่อยในโรงงานไทยมักหนีไม่พ้นการลืมบันทึกใบเบิก ของเสียจากไลน์ผลิตที่ไม่ได้บันทึกเป็นรายการ Scrap หรือของหน้าตาคล้ายกันวางปนกันจนนับผิด ส่วนกรณีของสูญหายหรือถูกขโมยเป็นเรื่องที่ต้องแจ้งฝ่ายบุคคลหรือรักษาความปลอดภัยต่อ ไม่ใช่แค่ปรับบัญชีแล้วจบ
หลักที่แนะนำเสมอคือตั้งเกณฑ์ผลต่างไว้ล่วงหน้า เช่น ถ้าผลต่างต่อ SKU ไม่เกิน 1-2% ของมูลค่า ให้ปรับยอดผ่าน Inventory Adjustment ได้เลยโดยหัวหน้าคลังอนุมัติ แต่ถ้าเกินเกณฑ์ ต้องเปิดเคสสอบสวนก่อน ไม่ใช่กดปรับยอดทิ้งทันที เพราะการกด Apply ใน Odoo จะสร้างสมุดรายวันปรับมูลค่าสินค้าคงเหลือทันที ซึ่งกระทบต้นทุนขายในงบการเงินโดยตรง ถ้าปรับผิดแล้วมาแก้ทีหลังจะยุ่งกว่าเดิมมาก
โรงงานแห่งหนึ่งในสมุทรปราการเคยเจอผลต่างสต็อกวัตถุดิบเหล็กแผ่นสูงถึง 3.2% ของยอดมูลค่าทั้งคลังตอนนับปลายปี ทีมบัญชีรีบกดปรับยอดตามที่นับได้ทันทีเพราะกลัวปิดงบไม่ทัน ภายหลังพบว่าสาเหตุจริงคือมีใบโอนย้ายระหว่างคลังที่ค้างอยู่ในสถานะ "รอยืนยัน" มาสามสัปดาห์ ทำให้ระบบยังนับของนั้นเป็นของคลังต้นทาง ทั้งที่ของถูกขนไปคลังปลายทางแล้วจริง กรณีแบบนี้ถ้าไม่สอบสวนก่อนปรับยอด จะกลายเป็นตัดต้นทุนผิดคลังไปเลย
รายงาน (Reports) ในการติดตามคลังจากหลายแห่ง
เมื่อมีหลายคลังพร้อมกัน คำถามที่ผู้บริหารถามบ่อยที่สุดคือ "ตอนนี้ของอยู่ที่ไหนบ้าง รวมกี่บาท" ซึ่ง Odoo ตอบได้จากรายงานหลักสามตัว
รายงาน Stock Valuation แสดงมูลค่าสินค้าคงเหลือแยกตามวิธีคิดต้นทุนที่ตั้งไว้ (FIFO, AVCO หรือ Standard Cost) กรองแยกตามคลังหรือตามหมวดสินค้าได้ทันที เหมาะสำหรับฝ่ายบัญชีที่ต้องกระทบยอดกับงบการเงินก่อนยื่นกรมพัฒนาธุรกิจการค้า
รายงาน Forecasted Inventory ช่วยดูว่าสต็อกที่มีอยู่ตอนนี้บวกกับของที่กำลังเข้า จะพอส่งมอบตามคำสั่งซื้อที่ค้างอยู่หรือไม่ มีประโยชน์มากเวลาต้องตัดสินใจว่าจะโอนย้ายสินค้าระหว่างคลังหรือสั่งซื้อเพิ่ม
ส่วนรายงาน Moves History หรือ Stock Ledger ใช้ตอนสอบสวนผลต่างสต็อกอย่างที่พูดถึงในหัวข้อก่อนหน้า เพราะดูย้อนได้ทุกรายการเคลื่อนไหวของ SKU นั้นตั้งแต่รับเข้าจนถึงจ่ายออก พร้อมระบุว่าใครเป็นคนทำรายการและเวลาไหน
ข้อจำกัดที่ต้องรู้คือรายงาน Stock Valuation แม่นเท่ากับวิธีคิดต้นทุนที่ตั้งไว้เท่านั้น ถ้าตั้งหมวดสินค้าเป็น FIFO ทั้งที่ธุรกิจจริงหมุนสต็อกแบบ AVCO หรือตั้งผิดหมวดตั้งแต่แรก ตัวเลขในรายงานจะดูสวยแต่ไม่ตรงกับต้นทุนจริงเลย และ Odoo จะไม่มีสัญญาณเตือนใดๆ ว่าการตั้งค่าผิด ต้องอาศัยคนที่เข้าใจบัญชีต้นทุนตรวจสอบเองเป็นระยะ สำหรับบริษัทที่มีคลังกระจายหลายจังหวัด การตั้ง Dashboard แบบ Pivot View เปรียบเทียบมูลค่าสต็อกระหว่างคลังแบบเดือนต่อเดือนยังมีประโยชน์อยู่ แต่ต้องใช้คู่กับการตรวจสอบวิธีคิดต้นทุนเป็นระยะ ไม่ใช่ปล่อยดูตัวเลขอย่างเดียวแล้วเชื่อทั้งหมด
ภาพรวมของรายงานทั้งหมดในแอป Inventory อยู่ในเอกสาร Odoo หัวข้อ Warehouses & storage reporting (https://www.odoo.com/documentation/18.0/applications/inventory_and_mrp/inventory/warehouses_storage/reporting.html) ถ้าต้องการรายละเอียดเพิ่มเติมเป็นรายรายงาน



