สมอง SML

คลังความรู้ / หน้าจอทีละจอ

#screens#master

กำหนดหน่วยนับสินค้า (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 ทำงานเฉพาะเมื่อแท็บนี้แสดงอยู่

ลำดับการทำงาน

  1. เปิดจอ: ดึงรายการ select code, name_1, name_2 from ic_unit [where ...] order by code (ค้นได้ทั้ง 3 คอลัมน์) แล้วโหลดรายการแรกเข้าฟอร์มทันที (shouldAutoSelect, :114-160; ตามพฤติกรรม _manageMasterCodeFull ของโปรแกรมเดิม)
  2. กดแก้ไข / ดับเบิลคลิกแถว: มีกล่องถาม "ต้องการแก้ไขข้อมูลใช่หรือไม่" พร้อมช่องติ๊ก "ต้องการแสดงหน้าจอนี้อีกในครั้งต่อไป" (จำค่าในเบราว์เซอร์ คีย์ sml_lock_for_edit_show_again; ถ้าเบราว์เซอร์บล็อก localStorage จอยังทำงานปกติ :82-105)
  3. เปลี่ยนรายการขณะแก้ค้าง: ถาม "มีการแก้ไขข้อมูลอยู่ ต้องการเปลี่ยนรายการหรือไม่" ปุ่ม "เปลี่ยนรายการ" / "ยกเลิก" (confirmDiscardIfDirty, :186-200)
  4. บันทึก (save, :320-428): ไม่มีสิทธิ์ขึ้น "ไม่มีสิทธิ์บันทึกข้อมูล"; รหัสว่างขึ้น "ข้อมูลไม่สมบูรณ์ : รหัสหน่วยนับ"; ชื่อว่างขึ้น "ข้อมูลไม่สมบูรณ์ : ชื่อหน่วยนับ"; รายการใหม่นับ ic_unit ว่ามีรหัสซ้ำ (ไม่สนตัวพิมพ์) ถ้ามีขึ้น รหัสหน่วยนับ [X] มีอยู่ในระบบแล้ว ไม่สามารถเพิ่มซ้ำได้; สำเร็จขึ้น "บันทึกข้อมูลเสร็จเรียบร้อย" แล้วโหลดรายการใหม่
  5. ลบ (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)

ที่มาในโค้ด