กำหนดหน่วยนับสินค้า (UnitScreen)
จอข้อมูลหลักตัวเล็กที่สุดของระบบ: ตาราง ic_unit มี 3 ช่อง (รหัส, ชื่อไทย, ชื่ออังกฤษ) เขียนด้วยมือแบบเดียวกับ หน้าจอข้อมูลหลักมาตรฐาน (StandardMasterScreen) (รายการซ้าย / ฟอร์มขวา, SQL ตรงผ่าน queryExec) เหมาะใช้เป็นตัวอย่างของวิธีทำงานของจอข้อมูลหลักทั้งตระกูล ดู รายการจอข้อมูลหลักแบบตารางเดียว (IC_MASTER_CONFIGS)
วิธีเปิด
เมนู 1027 "กำหนดหน่วยนับสินค้า" (menu_setup_ic_unit) หมวดตั้งค่า กลไกเมนูดู ทะเบียนหน้าจอและโครงเมนู (Screen registry & smlMenu) หน่วยนับที่สร้างที่นี่ใช้ต่อในตารางหน่วยนับของ ข้อมูลสินค้า (ItemScreen)
ช่องข้อมูลและการตรวจสอบ (icUnit.ts)
| ช่อง | ข้อกำหนด |
|---|---|
รหัสหน่วยนับ code |
ต้องกรอก, ไม่เกิน 25 ตัวอักษร, แปลงเป็นตัวพิมพ์ใหญ่ทุกครั้งที่พิมพ์ (UnitScreen.tsx:774), แก้ได้เฉพาะตอนเพิ่มใหม่ (ปิดช่องเมื่อไม่ใช่รายการใหม่ :779) |
ชื่อ name_1 |
ต้องกรอก ไม่เกิน 100 ตัวอักษร (ตัวอย่างบนจอ: ชิ้น, กล่อง, ลัง, ขวด) |
ชื่อ (ภาษาอังกฤษ) name_2 |
ไม่บังคับ ไม่เกิน 100 ตัวอักษร (ตัวอย่าง: PCS, BOX, PACK) |
Enter ในช่องกรอกเลื่อนไปช่องถัดไป (handleKeyDownNext, :572-590) |
แถบปุ่ม
บันทึก (กดได้เมื่อมีการแก้ไข), ปิดหน้าจอ / ยกเลิกการแก้ไข (Esc) (ในโหมดแก้ไขคือยกเลิก), แก้ไข, เพิ่มใหม่, ลบ, ปิดหน้าจอ แต่ละปุ่มดับตามสิทธิ์ (useScreenRights) และข้อความ tooltip บอก "ไม่มีสิทธิ์..." ดู การตรวจสิทธิ์เมนูของ route process (Process route rights) ตัวนับ "แก้ไขแล้ว N ช่อง" และ "บันทึกล่าสุด <เวลา>" อยู่ในแถบหัว
- คีย์ลัด (
:547-565): Ctrl+S บันทึก (ต้องมีฟอร์ม, อยู่โหมดแก้, มีการเปลี่ยนแปลง, ไม่กำลังบันทึก, มีสิทธิ์) และ Esc ยกเลิกการแก้ไข คอมเมนต์ในโค้ดเรียก F12 แต่ที่ผูกจริงมีแค่ Ctrl+S ทำงานเฉพาะเมื่อแท็บนี้แสดงอยู่
ลำดับการทำงาน
- เปิดจอ: ดึงรายการ
select code, name_1, name_2 from ic_unit [where ...] order by code(ค้นได้ทั้ง 3 คอลัมน์) แล้วโหลดรายการแรกเข้าฟอร์มทันที (shouldAutoSelect,:114-160; ตามพฤติกรรม_manageMasterCodeFullของโปรแกรมเดิม) - กดแก้ไข / ดับเบิลคลิกแถว: มีกล่องถาม "ต้องการแก้ไขข้อมูลใช่หรือไม่" พร้อมช่องติ๊ก "ต้องการแสดงหน้าจอนี้อีกในครั้งต่อไป" (จำค่าในเบราว์เซอร์ คีย์
sml_lock_for_edit_show_again; ถ้าเบราว์เซอร์บล็อก localStorage จอยังทำงานปกติ:82-105) - เปลี่ยนรายการขณะแก้ค้าง: ถาม "มีการแก้ไขข้อมูลอยู่ ต้องการเปลี่ยนรายการหรือไม่" ปุ่ม "เปลี่ยนรายการ" / "ยกเลิก" (
confirmDiscardIfDirty,:186-200) - บันทึก (
save,:320-428): ไม่มีสิทธิ์ขึ้น "ไม่มีสิทธิ์บันทึกข้อมูล"; รหัสว่างขึ้น "ข้อมูลไม่สมบูรณ์ : รหัสหน่วยนับ"; ชื่อว่างขึ้น "ข้อมูลไม่สมบูรณ์ : ชื่อหน่วยนับ"; รายการใหม่นับic_unitว่ามีรหัสซ้ำ (ไม่สนตัวพิมพ์) ถ้ามีขึ้นรหัสหน่วยนับ [X] มีอยู่ในระบบแล้ว ไม่สามารถเพิ่มซ้ำได้; สำเร็จขึ้น "บันทึกข้อมูลเสร็จเรียบร้อย" แล้วโหลดรายการใหม่ - ลบ (
deleteBatch,:432-545): ก่อนลบนับการใช้งานรหัสนั้น 3 ที่ ได้แก่ic_inventory(ฟิลด์unit_standardหรือunit_cost),ic_trans_detail(unit_code) และic_unit_use(code) ถ้าพบแม้ที่เดียวขึ้น "มีการใช้งานรหัสดังกล่าวไปแล้ว กรุณาตรวจสอบ" และไม่ลบ ถ้าไม่พบถามยืนยันต้องการลบ [X] จริงหรือไม่(หลายรายการ:มีข้อมูลที่ต้องลบจำนวน: N รายการ ต้องการลบจริงหรือไม่) ไม่ได้เลือกรายการขึ้น "กรุณาเลือกรายการที่ต้องการลบก่อน" ปุ่มลบในแถบเรียกลบรายการที่เลือกอยู่รายการเดียว (:544)
ตารางที่เกี่ยวข้อง
ข้อมูลหน่วยนับ (ic_unit) (เขียน) · ตรวจการใช้งานจาก ทะเบียนสินค้า (ic_inventory), รายการสินค้าในเอกสาร (ic_trans_detail), หน่วยนับที่ใช้ของสินค้า (ic_unit_use)
ข้อควรระวัง
- การตรวจ "ใช้งานแล้วห้ามลบ" ทำที่หน้าจอด้วย SQL นับ ไม่ได้อาศัยข้อจำกัดของฐานข้อมูล: ตารางที่ไม่ได้อยู่ใน 3 ตารางข้างต้น (เช่น
ic_opposite_unitหรือบาร์โค้ด) ไม่ถูกตรวจ - รหัสถูกตัดช่องว่างหัวท้ายและทำเป็นตัวพิมพ์ใหญ่ก่อนบันทึก (
:332,344)
ที่มาในโค้ด
frontend/account/master/UnitScreen.tsx:46-133state/สิทธิ์;:114-200โหลดรายการ/รายละเอียด;:200-260เตือนก่อนแก้;:320-428บันทึก;:432-545ลบ;:547-585คีย์ลัด;:586-873หน้าจอfrontend/src/config/schemas/icUnit.ts:13-48นิยามช่อง- ดูเพิ่ม: กำหนดบาร์โค้ด เพิ่มบาร์โค้ดแบบเร็ว และตรวจบาร์โค้ด EAN13 (BarcodeSetupScreen, BarcodeFastAddScreen, Ean13CheckerScreen) · กำหนดคลังสินค้า และจอคลังที่เก็บสินค้า (WarehouseScreen) · สารบัญหน้าจอทั้งหมดของ SML Ai Account (ต้นไม้เมนู → หน้าจอ → โน้ต)