#tables#ic
ทะเบียน Serial Number สินค้า (ic_serial)
หน้าที่: 1 แถวต่อ 1 หมายเลข Serial ของสินค้าที่ควบคุมด้วย Serial (ic_inventory.ic_serial_no = 1, ทะเบียนสินค้า (ic_inventory)) เก็บ "สถานะปัจจุบัน" ว่าอยู่ในสต๊อกหรือออกไปแล้ว อยู่คลัง/ที่เก็บไหน และข้อมูลผลิต/ประกัน ตารางนี้ เป็นค่า derive จาก เลขเครื่อง/Serial ตามรายการเอกสาร (ic_trans_serial_number) (log การเคลื่อนไหว) — ไม่ควรแก้ตรง
คอลัมน์ที่เห็นในโค้ด
| column | ความหมาย | ที่มา |
|---|---|---|
ic_code |
รหัสสินค้า (ทะเบียนสินค้า (ic_inventory).code) | stock_tools.go:591 |
serial_number |
หมายเลข Serial; (ic_code, serial_number) เป็น unique index ตามคอมเมนต์ |
stock_tools.go:589-590 |
ic_unit |
หน่วยนับของสินค้า (หน่วยนับที่ใช้ของสินค้า (ic_unit_use).code) | stock_tools.go:591,271 |
status |
0 = ในสต๊อก, 1 = ออกจากสต๊อก (derive จากบรรทัดเคลื่อนไหวล่าสุด: calc_flag = 1 รับ = 0, อย่างอื่น = 1) |
stock_tools.go:599-604, report_menu_ic.go:1054 |
wh_code, shelf_code |
คลัง/ที่เก็บของบรรทัดรับล่าสุด | stock_tools.go:606-611 |
void_date, product_year, product_week |
วันหมดประกัน/ปีและสัปดาห์ที่ผลิต (ดึงจากบรรทัดรับแรกสุด; ไม่มีบรรทัดรับ = เคลียร์) | stock_tools.go:612-621 |
description |
รายละเอียด/ชื่อ (รายงาน Serial อ่านคอลัมน์นี้) | report_menu_ic.go:1053 |
roworder |
ลำดับแถวจริง ใช้เป็น tie-breaker | stock_tools.go:273-274 |
วิธีที่ระบบสร้าง/ปรับ (serialRebuildSQL, stock_tools.go:580-622)
เรียกผ่าน rebuildSerialTx (stock_tools.go:624) หลังบันทึก/ลบ/ยกเลิกเอกสารทุกครั้งที่แตะสินค้านั้น ดู ลำดับการบันทึกเอกสาร (Transaction Save Flow) ลำดับ:
- ตั้ง
last_statusของ เลขเครื่อง/Serial ตามรายการเอกสาร (ic_trans_serial_number) ให้ตามหัวเอกสาร หัวเอกสารสินค้า/ซื้อ/ขาย (ic_trans) - ลบแถว
ic_serialที่ไม่มีบรรทัดเคลื่อนไหวที่ยังมีผลเหลือ (ไม่นับ flag 76 ตรวจนับ และ 14/16 ที่inquiry_type <> 0) - เพิ่มแถวที่ยังไม่มี (เลือกบรรทัดแรกสุดต่อ Serial)
- ซิงก์
cust_codeของบรรทัด Serial ให้ตรงหัว - ตั้ง
statusจากบรรทัดเคลื่อนไหวล่าสุด โดยนับเฉพาะserialMoveFlags: flag 54, 60, 56, 58, 70, 72, 66, 68, 12, 310, 44; 14/16 ที่inquiry_type = 0; 48 ที่inquiry_type0 หรือ 1; 46 ที่inquiry_type = 0 - ตั้ง
wh_code/shelf_codeจากบรรทัดรับล่าสุด; ตั้งvoid_date/product_year/product_weekจากบรรทัดรับแรกสุด
พอร์ตจาก C# _docFlowThread.cs _serialNumberQueryList (คอมเมนต์ stock_tools.go:569-573) เรียกซ้ำกี่รอบผลเท่าเดิม
ใครอ่าน
- สแกน/ตรวจนับ Serial:
serialLookupSQLค้น Serial (ไม่สนตัวพิมพ์) แล้ว join สินค้าและอัตราแปลงหน่วยเพื่อเติมบรรทัดเอกสาร 76 (stock_tools.go:269-275) ดู เอกสารสต็อกพิเศษ: ยอดยกมา ปรับปรุง Lot และตรวจนับ (Opening Stock, Lot Adjust, Stock Count) - รายงาน: Item_by_serial, Serial_number และยอดคงเหลือแบบ Serial (เฉพาะ
status = 0ที่ยอดสินค้าไม่เป็นศูนย์) (report_menu_ic.go:1024-1098) - ตรวจข้อมูลระบบ: เครื่องมือเช็คบรรทัดที่
is_serial_number <> 1ทั้งที่สินค้ามีic_serial_no = 1(sysproc_ic_checks_data.go:68)
ใครเขียน
- เฉพาะ
rebuildSerialTxตามด้านบน ic_serialอยู่ในlegacyClientWritable(write_policy_legacy.go:27) จึงเขียนผ่าน/query/execได้จากหน้าจอ master แต่ในโค้ดที่อ่านไม่พบหน้าจอที่ทำอย่างนั้น (ไม่ชัดจากโค้ด)- เปลี่ยนรหัสสินค้าแก้
ic_codeของตารางนี้ (workflow.go:143) และตารางนี้ถูกลบพร้อมสินค้า
ข้อควรระวัง
- Serial เดียวกันแต่เอกสารขัดแย้งกัน (เช่น หน่วยต่างกัน) → unique index บังคับให้เก็บบรรทัดแรกสุดเท่านั้น (
stock_tools.go:589-590) - ตารางนี้ ไม่ใช่ยอดคงเหลือ: ยอดสินค้ามาจาก รายการสินค้าในเอกสาร (ic_trans_detail) ส่วน
ic_serialใช้ระบุตัวตนรายเลข ดู การคำนวณยอดสต็อกคงเหลือใหม่ (Stock Balance Rebuild) - หน้าจอรายงานเขียนคอมเมนต์ว่าเอกสาร C# พิมพ์สถานะ "ในสต๊อค" ทั้งสองค่า ที่นี่แก้เป็น 0 = ในสต๊อค / อื่น = ออกจากสต๊อก (
report_menu_ic.go:1046-1048)
ที่มาในโค้ด
backend/internal/application/process/stock_tools.go:176-275,:568-640backend/internal/application/process/report_menu_ic.go:1024-1098backend/internal/application/process/sysproc_ic_checks_data.go:68backend/internal/application/process/workflow.go:143backend/internal/domain/query/write_policy_legacy.go:27