ขายเป็นกล่อง/โหล แต่สต็อกนับเป็นชิ้น ระบบแปลงหน่วยยังไง
ตอบสั้น: แต่ละหน่วยนับของสินค้ามีตัวตั้ง (stand_value) และตัวหาร (divide_value) เก็บไว้ใน ic_unit_use เมื่อบันทึกเอกสาร ระบบจะคัดลอกสองค่านี้ไปไว้ในบรรทัด แล้วคิดสต็อกและต้นทุนจาก จำนวนหน่วยมาตรฐาน = จำนวน × ตัวตั้ง ÷ ตัวหาร เช่น กล่องละ 12 ชิ้น ให้ตั้งตัวตั้ง 12 ตัวหาร 1 ถ้าขาย 2 กล่อง สต็อกจะลด 24 ชิ้น
รายละเอียด
ประเภทหน่วยนับของสินค้า (ic_inventory.unit_type)
- 0 = หน่วยนับเดี่ยว
- 1 = หลายหน่วยนับ
- 2 = หน่วยนับขนาน
- 3 = หลายหน่วยนับ + หน่วยนับขนาน
ตอนบันทึก ทุกบรรทัดจะถูกตรวจกับ ic_unit_use
- ถ้าพบหน่วยนับนั้น จะใช้
stand_value/divide_value/ratioของหน่วยนั้น - ถ้าเป็นหน่วยมาตรฐาน (
unit_standard) แต่ไม่มีแถวในic_unit_useจะใช้ 1/1 - ถ้าไม่พบเลย จะบันทึกไม่ได้ และขึ้นข้อความ "ไม่พบหน่วยนับ ... ของสินค้า ..."
หน่วยนับขนาน (unit_type 2/3) เป็นจำนวนอีกชุดที่ไม่ได้แปลงจากหน่วยหลัก เช่น นับเป็นชิ้นและกิโลกรัมไปพร้อมกัน
- ต้องระบุหน่วยขนาน (
unit_code_2) ถ้าไม่ระบุ ระบบใช้หน่วยแรกจากic_opposite_unit - ถ้าบรรทัดมีจำนวนหลัก ต้องมีจำนวนหน่วยขนาน (
qty_2) ด้วย - ยอดคงเหลือหน่วยขนานเก็บที่
ic_inventory.balance_qty_2(ผลรวมqty_2× ทิศทางสต็อก) ไม่นำไปใช้คิดต้นทุน
ต้นทุน: ถัวเฉลี่ยคิดจากจำนวนหน่วยมาตรฐาน ic_inventory.average_cost จึงเป็นต้นทุนต่อหน่วยมาตรฐาน (ดู ต้นทุนสินค้าคิดแบบไหน ถัวเฉลี่ยเคลื่อนที่คำนวณยังไง) ส่วนราคาขายหาตามรหัสหน่วยที่ใช้ในบรรทัดโดยตรง ถ้าไม่ได้ตั้งราคาของหน่วยนั้น ระบบจะไม่แปลงจากราคาของหน่วยอื่น (ดู ราคาขาย/ส่วนลดที่ขึ้นอัตโนมัติในเอกสาร ดึงมาจากไหน)
ข้อควรระวัง
- ถ้าแก้ตัวตั้ง/ตัวหารของหน่วยนับหลังจากใช้งานแล้ว เอกสารเก่าจะยังใช้ค่าเดิมที่คัดลอกไว้ จนกว่าจะรันเมนูคำนวณสต็อกใหม่ ซึ่งช่อง "ตรวจสอบและปรับปรุง อัตราส่วนหน่วยนับ" (
UpdateUnitRatio) ถูกติ๊กไว้ตั้งแต่ต้น ระบบจะเขียนค่าใหม่ทับทุกบรรทัดของทุกเอกสารโดยไม่จำกัดวันที่ ทำให้จำนวนและต้นทุนย้อนหลังเปลี่ยน (ดู คำนวณยอดสต๊อกใหม่ (Rebuild Stock) ทำอะไรบ้าง ต้องกดเมื่อไหร่) - เมื่อคำนวณสต็อกใหม่ สินค้าประเภท 0/2 จะถูกตั้งตัวตั้ง/ตัวหารเป็น 1 ทุกบรรทัด ไม่ว่าบรรทัดนั้นใช้หน่วยไหน ส่วนประเภท 1/3 จะคัดลอกค่าจาก
ic_unit_use - ตัวตั้งหรือตัวหารที่เป็น 0 หรือว่าง จะถูกแก้เป็น 1 ตอนคำนวณสต็อกใหม่
ดูเพิ่ม
- หน่วยนับ ตัวตั้ง/ตัวหาร และหน่วยนับขนาน (unit / stand_value / divide_value / unit_type)
- หน่วยนับขนาน Serial และการดึงเอกสารอ้างอิง (Parallel Unit, Serial, Ref Document Import)
- กำหนดหน่วยนับสินค้า (UnitScreen)
- หน่วยนับที่ใช้ของสินค้า (ic_unit_use)
- หน่วยนับตรงข้าม/หน่วยขนาน (ic_opposite_unit)
ที่มาในโค้ด
backend/internal/application/process/trans_lines_check.go:129โหลดstand_value/divide_value/ratioจากic_unit_usebackend/internal/application/process/trans_lines_check.go:181ใช้หน่วยนับของบรรทัด ถ้าไม่พบ "ไม่พบหน่วยนับ"backend/internal/application/process/trans_lines_check.go:191บังคับหน่วยขนานและqty_2เมื่อเป็น unit_type 2/3backend/internal/application/process/service.go:214จำนวนหน่วยมาตรฐาน = จำนวน × ตัวตั้ง ÷ ตัวหารbackend/internal/application/process/service.go:619updateUnitRatioDetailTxเขียนตัวตั้ง/ตัวหารทับเอกสารเก่าbackend/internal/application/process/service.go:1066คำนวณbalance_qtyและbalance_qty_2backend/internal/application/process/report_menu_ic.go:886ชื่อประเภทหน่วยนับ 0–3frontend/account/process/SystemProcessWorkbenchScreen.tsx:1495ช่อง "ตรวจสอบและปรับปรุง อัตราส่วนหน่วยนับ" ติ๊กไว้ตั้งแต่ต้น