สมอง SML

คลังความรู้ / ถาม-ตอบ

#faq#ic#stock#cost#moving-average#troubleshoot

ทำไมต้นทุนของเอกสารเก่าเปลี่ยนเอง ทั้งที่ไม่ได้แก้เอกสารนั้น

ตอบสั้น: ต้นทุนในบรรทัดเอกสารเป็นค่าที่ระบบคำนวณขึ้นใหม่ได้ตลอด ไม่ใช่ค่าที่ล็อกตายตัว ทุกครั้งที่บันทึก แก้ ลบ หรือยกเลิกเอกสารของสินค้าตัวใด ระบบจะไล่คำนวณต้นทุนถัวเฉลี่ยของสินค้าตัวนั้นใหม่ตั้งแต่รายการแรก ดังนั้นเอกสารที่ลงวันที่ย้อนหลังจะเปลี่ยน sum_of_cost / average_cost ของเอกสารที่ลงวันที่หลังจากนั้นทั้งหมด

รายละเอียด

ทุกครั้งที่บันทึกหรือลบเอกสาร ระบบจะเรียก rebuildTransDerived ซึ่งทำงานตามลำดับนี้

  1. rebuildStockTx คำนวณสต็อกใหม่เฉพาะรหัสสินค้าที่อยู่ในเอกสาร (ทั้งรายการเดิมและรายการใหม่) โดยไล่บรรทัดเคลื่อนไหวทั้งหมดของสินค้านั้นตั้งแต่ต้น แล้วเขียน sum_of_cost, average_cost ทับลงทุกบรรทัดที่ค่าเปลี่ยน รวมถึงบรรทัดของเอกสารอื่น และอัปเดต ic_inventory.average_cost
  2. rebuildGLTx สร้าง GL ใหม่ เฉพาะเอกสารที่บันทึก
  3. ถ้าเป็นใบโอน 72 จะซิงก์หัวเอกสารรับโอน 70 ด้วย

กรณีที่ทำให้ต้นทุนเปลี่ยนบ่อย

ถ้าต้องการให้บรรทัดใดไม่เปลี่ยนเลย ระบบมีกลไก "ล็อกต้นทุน" ที่ใช้ค่า sum_of_cost_fix แทนการคำนวณ

ข้อควรระวัง

ดูเพิ่ม

ที่มาในโค้ด

  • backend/internal/application/process/trans.go:593 rebuildTransDerived คำนวณสต็อกใหม่ แล้วสร้าง GL ของเอกสารนี้ใหม่
  • backend/internal/application/process/service.go:1007 rebuildStockTx คำนวณใหม่ต่อรหัสสินค้า
  • backend/internal/application/process/service.go:1162 ลำดับวันที่ เวลา และ calc_flag ที่ใช้ไล่รายการ
  • backend/internal/application/process/service.go:286 เริ่มนับใหม่เมื่อจำนวนสะสม ≤0
  • backend/internal/application/process/service.go:1459 GL เอกสารสต็อกใช้ผลรวม sum_of_cost เมื่อ total_amount = 0
  • backend/internal/application/process/service.go:1278 อัปเดต ic_inventory.average_cost