คำนวณยอดสต๊อกใหม่ (Rebuild Stock) ทำอะไรบ้าง ต้องกดเมื่อไหร่
ตอบสั้น: เมนู "คำนวณยอดสต๊อกใหม่" (menu_ic_recalc) คำนวณยอดคงเหลือและต้นทุนถัวเฉลี่ยใหม่ทั้งหมดจากบรรทัด ic_trans_detail ที่ยังไม่ถูกยกเลิก ตามปกติไม่ต้องกด เพราะการบันทึกหรือลบเอกสารแต่ละใบจะคำนวณสินค้าในเอกสารนั้นให้อยู่แล้ว ให้ใช้เมื่อยอดไม่ตรง หลังแก้หน่วยนับหรืออัตราส่วน หรือหลังนำเข้าหรือแก้ข้อมูลตรงในฐานข้อมูล
รายละเอียด
เมนูนี้เรียก RebuildStock ซึ่งทำงานทั้งหมดใน transaction เดียว ถ้ามีข้อผิดพลาดใดเกิดขึ้น จะไม่มีอะไรถูกบันทึกเลย ขั้นตอนเป็นดังนี้
backfillStockTransferInTxสร้างหรือซิงก์บรรทัดรับโอน 70 ของใบโอน 72 ที่ยังขาดอยู่updateUnitRatioDetailTx(ทำเสมอ เว้นแต่ส่งตัวเลือกปิดไว้): บันทึกstand_value/divide_valueที่เป็น 0 ให้เป็น 1, สินค้าunit_type0/2 บังคับเป็น 1/1, สินค้าunit_type1/3 ใช้อัตราจากic_unit_useของหน่วยในบรรทัด- เลือกสินค้าที่จะคำนวณ ถ้าไม่ได้ระบุจะใช้ทุกตัวที่ไม่ใช่สินค้าบริการ (
item_type5) rebuildStockTxคำนวณic_inventory.balance_qty/balance_qty_2ใหม่ และไล่ต้นทุนถัวเฉลี่ยใหม่ทุกบรรทัด (ดู ต้นทุนสินค้าคิดแบบไหน ถัวเฉลี่ยเคลื่อนที่คำนวณยังไง) แล้วอัปเดตic_inventory.average_cost
กรองเฉพาะบางสินค้า (Process Command)
docno=เลขที่เอกสารคำนวณเฉพาะสินค้าในเอกสารนั้นรหัสเริ่ม:รหัสสิ้นสุดคำนวณช่วงรหัสรหัส1,รหัส2คำนวณหลายรหัส หรือใส่รหัสเดียวก็ได้
action อื่นในหน้าจอเดียวกัน: update_trans_detail, recheck_trans_flow, check_so_doc_success (ปิดใบสั่งขาย 36 ที่ส่งครบแล้ว) และ recheck_doc_flow ทั้ง 4 action นี้ทำงานแยก ไม่ได้คำนวณสต็อก
บรรทัดที่นับเข้าสต็อก: last_status = 0, ไม่ใช่สำเนาเอกสาร, item_type 0/4/6 และ trans_flag อยู่ในชุดเคลื่อนไหวสต็อก รายละเอียดอยู่ที่ การคำนวณยอดสต็อกคงเหลือใหม่ (Stock Balance Rebuild) และ ยอดคงเหลือสินค้า และต้นทุนเฉลี่ย (stock balance / balance_qty / average_cost / sum_of_cost)
ข้อควรระวัง
- การคำนวณผ่านเมนูนี้มีเวลาจำกัด 60 วินาที (
context.WithTimeout) ถ้าข้อมูลมากจนเกินเวลา ทุกอย่างจะ rollback ให้แบ่งรันเป็นช่วงรหัสแทน - เมนูนี้ไม่ได้สร้าง GL ใหม่ ถ้าต้นทุนของเอกสารสต็อกเปลี่ยน ต้องรัน "ประมวลผล GL ใหม่" ต่อ (ดู ต้องกดประมวลผลลงบัญชี (Rebuild GL) ใหม่เมื่อไร มันลบอะไรทิ้งบ้าง)
- ขั้นปรับอัตราส่วนหน่วยจะเขียนทับ
stand_value/divide_valueในบรรทัดเอกสารเก่าให้ตรงกับic_unit_useปัจจุบัน ถ้าเพิ่งแก้อัตราส่วนหน่วยในการ์ดสินค้า ยอดและต้นทุนย้อนหลังจะเปลี่ยนตามทั้งหมด
ดูเพิ่ม
- การคำนวณยอดสต็อกคงเหลือใหม่ (Stock Balance Rebuild)
- เครื่องมือสต็อก กลุ่ม route stocktools (Stock Tools)
- ทำไมต้นทุนของเอกสารเก่าเปลี่ยนเอง ทั้งที่ไม่ได้แก้เอกสารนั้น
- ยอดในรายงานไม่ตรงกับงบทดลอง (สต็อก ลูกหนี้ เจ้าหนี้) ต้องเช็กอะไรบ้าง
- ขายเป็นกล่อง/โหล แต่สต็อกนับเป็นชิ้น ระบบแปลงหน่วยยังไง
ที่มาในโค้ด
frontend/src/config/smlMenu.json:2580เมนูmenu_ic_recalc"คำนวณยอดสต๊อกใหม่"backend/internal/application/process/service.go:548RebuildStockทำงานใน transaction เดียว timeout 60 วินาทีbackend/internal/application/process/service.go:577rebuildStockWithOptionsTxแยก action และลำดับขั้นตอนbackend/internal/application/process/service.go:619updateUnitRatioDetailTxปรับอัตราส่วนหน่วยbackend/internal/application/process/service.go:654รูปแบบ Process Command (docno=,:,,)backend/internal/application/process/service.go:1007rebuildStockTxbackend/internal/application/process/stock_rebuild.go:86backfillStockTransferInTx