สมอง SML

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

#screens#master

กำหนดลูกหนี้ (CustomerScreen) และรายละเอียดสมาชิก (DealerScreen)

หน้าทะเบียนลูกหนี้ฝั่งขาย สองเมนูในกลุ่ม 6001-6011 "ทะเบียนลูกหนี้ สมาชิก และแต้มสะสม": 6001 ข้อมูลหลักของลูกหนี้ (จอเขียนเอง) และ 6003 ข้อมูลสมาชิกที่ผูกกับลูกหนี้ ข้อมูลรายละเอียดเชิงลึก (สินเชื่อ ผู้ติดต่อ รูป) อยู่ที่ รายละเอียดลูกหนี้ สินเชื่อ ผู้ติดต่อ รูปภาพ (CustomerDetailScreen) (6002) กลไกเมนูดู ทะเบียนหน้าจอและโครงเมนู (Screen registry & smlMenu) ตารางดู ทะเบียนลูกหนี้/ลูกค้า (ar_customer), รายละเอียดเงื่อนไขลูกหนี้ (ar_customer_detail), ข้อมูลตัวแทนจำหน่าย/จุดขายของลูกหนี้ (ar_dealer)

วิธีเปิด

รหัส เมนู จอ ผูกที่
6001 กำหนดลูกหนี้ (menu_ar_detail, รหัสเก่า 6.1.1) CustomerScreen screenRegistry.tsx:563-568
6003 รายละเอียดสมาชิก (menu_ar_dealer, รหัสเก่า 6.1.3) DealerScreen screenRegistry.tsx:575-580

6001 กำหนดลูกหนี้

โครงจอ แบ่งซ้าย/ขวา ซ้ายคือรายการลูกหนี้ ค้นจากรหัส/ชื่อ จำกัด 500 แถว ดับเบิลคลิกแถว = แก้ไข (ต้องมีสิทธิ์แก้ไข) กลไกรายการดู รายการข้อมูล ค้นหา lookup และ dialog กลาง (SmlDataList / SmlLookupModal / SmlDialog) ขวาเป็นฟอร์มการ์ดเดียว "ข้อมูลลูกหนี้" ตามลำดับแถวต่อไปนี้ และการ์ดที่สอง "รายละเอียดสมาชิก" (ดูท้ายหัวข้อ) ป้ายหัวจอแสดงรหัสเมนู 6001 กับคำว่า "กำหนดลูกหนี้"

ช่องกรอก (สคีมา arCustomer.ts, อ่านจาก ar_customer เชื่อม ar_customer_detail)

ช่อง ข้อกำหนด
รหัส ไม่เกิน 25 ตัว บังคับ; เพิ่มใหม่ระบบใส่รหัสถัดไปให้ ออกจากช่องแล้วรันรหัสตามรูปแบบ มีปุ่ม "ใส่รหัสถัดไปอัตโนมัติ"
ชื่อ 1 / ชื่อ (อังกฤษ) 1 ไม่เกิน 255 ชื่อ 1 บังคับ
ที่อยู่ ไม่เกิน 255
จังหวัด · อำเภอ/เขต · ตำบล/แขวง ค้นหาจาก erp_province / erp_amper / erp_tambon แสดง รหัส~ชื่อ ไม่เกิน 25 ตัว
รหัสไปรษณีย์ · ประเทศ 10 · 255 (ประเทศเริ่มต้น "ไทย")
โทรศัพท์ · โทรสาร · SMS 150 · 50 · 10
อีเมล์ · เว็บไซต์ 150 · 150
ประเภทลูกหนี้ ค้นหาจาก ar_type
สถานะลูกหนี้ บุคคลธรรมดา (0) / นิติบุคคล (1)
สถานะ ใช้งาน (0) / ไม่ใช้งาน (1)
คำนำหน้า (ค้นหาได้) · ชื่อ · นามสกุล 15 · 50 · 70 (จอนี้ไม่ประกอบชื่อ 1 จากชื่อ+นามสกุลให้ ต่างจาก รายละเอียดลูกหนี้ สินเชื่อ ผู้ติดต่อ รูปภาพ (CustomerDetailScreen))
ระดับราคาสินค้า 0 ไม่เลือก, 1 ราคาขายตารางราคา, 2 ราคาขายตามกลุ่ม, 3-8 ราคาขาย 1-6 (ดูที่มาของราคาที่ เครื่องมือหาราคาและแก้ราคา (Price engine / price center / modify price))
วันเกิด/วันจดทะเบียน · วันลงทะเบียน วันที่
เลขประจำตัวผู้เสียภาษี · เลขที่บัตรประชาชน 50 · 100
สถานประกอบการ · เลขที่สาขา 1 สำนักงานใหญ่ / 2 สาขา; เลขที่สาขาแก้ได้เฉพาะเมื่อเลือกสาขา
หมายเหตุ 255
ตำแหน่งลูกค้า (ลูกหนี้) เลือกบนแผนที่ ประเภท CUSTOMER เก็บละติจูด/ลองจิจูดที่ ar_customer_detail
ข้อมูลเฉพาะธุรกิจ การ์ด BusinessExtFieldsCard (kind customer) ตามประเภทธุรกิจที่เปิดใน กำหนดข้อเลือกพิเศษต่างๆ (OptionsForm) ปุ่มในการ์ดเปิดหน้าตัวเลือก

ค่าเริ่มต้นตอนเพิ่มใหม่ (:316-341): ประเทศ "ไทย", สถานะลูกหนี้ 0, สถานะ 0, ระดับราคา 0, สถานประกอบการ 0, เลขที่สาขา 00000

ปุ่มและคีย์ลัด

  • โหมดดู: แก้ไข, เพิ่มใหม่, ลบ, ปิดหน้าจอ; โหมดแก้: บันทึก, อ่านข้อมูลจากบัตรประชาชน, ปิดหน้าจอ (ยกเลิกการแก้) ปุ่มอ่านบัตรแค่เด้งข้อความ "กรุณาเชื่อมต่อเครื่องอ่านบัตรประชาชนสมาร์ทการ์ด (Smart Card Reader) ก่อนดึงข้อมูล" ไม่มีการอ่านบัตรจริงในหน้าจอ (:878-893)
  • Ctrl+S บันทึก (เมื่ออยู่ในโหมดแก้ มีการแก้ไข และมีสิทธิ์), Esc ยกเลิกการแก้ผ่านกล่องยืนยัน (:761-790) ผูกในจอเอง ไม่ใช่ useShortcuts
  • กดแก้ไขขึ้นกล่อง "เตือน (SML Account)" ว่าโปรแกรมจะตรวจว่ามีผู้อื่นเปิดแก้อยู่หรือไม่ มีช่องติ๊ก "ต้องการแสดงหน้าจอนี้อีกในครั้งต่อไป" (:343-392) หน้าจอไม่ได้ล็อกเรคคอร์ดจริง เป็นเพียงกล่องเตือนตามจอเดิม
  • สิทธิ์ เพิ่ม/แก้ไข/ลบ ตัดปุ่มตามผู้ใช้ ดู การตรวจสิทธิ์เมนูของ route process (Process route rights)

การบันทึก (handleSave, :394-640) ตรวจตามลำดับ: สิทธิ์ → รหัสว่าง "กรุณาระบุ 'รหัสลูกหนี้'" → ชื่อ 1 ว่าง "กรุณาระบุ 'ชื่อ 1'" → เลขผู้เสียภาษีที่กรอกต้องเป็นตัวเลข 13 หลัก ("เลขประจำตัวผู้เสียภาษีอากร ไม่ครบ 13 หลัก") และไม่ซ้ำกับลูกหนี้รายอื่น (เลขประจำตัวผู้เสียภาษี '...' ซ้ำกับลูกหนี้รหัส '...') → ถ้าเลือก "สาขา" ต้องใส่เลขที่สาขาตัวเลข 5 หลักและไม่ใช่ 00000 → รายการใหม่ตรวจรหัสซ้ำ ถ้าซ้ำระบบเสนอรหัสถัดไปให้ลองใหม่ (duplicateCodeDialog) เมื่อเลือกสำนักงานใหญ่ เก็บเลขที่สาขาเป็น 00000 เสมอ จากนั้นส่งคำสั่งชุดเดียว (queryExecBatch): INSERT/UPDATE ar_customer พร้อมผู้สร้าง/ผู้แก้ล่าสุด, UPDATE แล้ว INSERT-ถ้ายังไม่มี ar_customer_detail (เปลี่ยนเฉพาะ 6 คอลัมน์ ไม่ลบคอลัมน์อื่นของแถว), และบันทึกประวัติ masterLogSql ของเมนู menu_ar สำเร็จขึ้น "บันทึกข้อมูลลูกหนี้เสร็จเรียบร้อย" ตรรกะรันรหัสอัตโนมัติดู useMasterCodeLeave และ ข้อมูลหลักแบบหัว-รายการ รหัสอัตโนมัติ และเลย์เอาต์รายการ (Master-detail, code auto-run, DataList) (/api/process/master/nextcode, codeleave)

การลบ (:644-760): ไม่ให้ลบถ้ารหัสถูกใช้ใน ic_trans, ic_trans_detail, ap_ar_trans, ap_ar_trans_detail ("มีการใช้งานรหัสดังกล่าวในเอกสารหรือรายการขายแล้ว ไม่สามารถลบได้") ผ่านแล้วถามยืนยัน แล้วลบตามลำดับ ar_item_by_customer, ar_customer_cashier_list, ar_contactor, ar_dealer, ar_customer_detail, ar_customer รวมรูปสัญญา images (รหัสภาพ CONTRACT<รหัส>) และบันทึกประวัติการลบ ดู หัวเอกสารสินค้า/ซื้อ/ขาย (ic_trans)

การ์ดรายละเอียดสมาชิก (:1666-1726): แสดงเฉพาะรุ่น Pro (hasAdvancedProFeatures) เป็นตารางอ่านอย่างเดียว เลขที่สมาชิก · วันที่เริ่มส่งสมาชิก · วันหมดอายุสมาชิก ของลูกหนี้นี้จาก ar_dealer เรียงตาม roworder แก้ไขที่จอ 6003

6003 รายละเอียดสมาชิก (DealerScreen)

ทะเบียนสมาชิก/ตัวแทนจำหน่าย 1 แถวต่อรหัสสมาชิก ผูกกับลูกหนี้ 1 ราย (ar_dealer.ar_code) ซ้ายคือรายการสมาชิก (เลขที่สมาชิก · วันหมดอายุ · รหัสลูกหนี้ · ชื่อ · ที่อยู่ · โทรศัพท์ · เบอร์โทรมือถือ) ขวาคือฟอร์ม

ช่อง ข้อกำหนด
รหัสสมาชิก บังคับ แก้ได้เฉพาะตอนเพิ่มใหม่ ซ้ำไม่ได้ (รหัสสมาชิก "..." มีอยู่ในระบบแล้ว)
วันที่สมัคร วันนี้ตอนเพิ่มใหม่
วันที่หมดอายุ ว่างได้
เป็นพนักงาน ติ๊ก (1/0)
รหัสผู้แนะนำ · วันที่ผู้แนะนำสมัคร · วันที่ผู้แนะนำหมดอายุ ข้อความ/วันที่
รหัสลูกหนี้ บังคับ ค้นหาลูกหนี้ได้ ไม่พบ = "ไม่พบรหัสลูกหนี้ : ..." ไม่บันทึก; ใต้ช่องแสดงข้อมูลลูกหนี้ (ชื่อ ที่อยู่ จังหวัด/อำเภอ/ตำบล ไปรษณีย์ โทรศัพท์ โทรสาร อีเมล เว็บ เลขผู้เสียภาษี เลขบัตร) อ่านอย่างเดียวจาก ar_customer เชื่อม ar_customer_detail
ตำแหน่งตัวแทนจำหน่าย / สมาชิก เลือกบนแผนที่ (ละติจูด/ลองจิจูด)
  • บันทึก = INSERT/UPDATE ar_dealer + masterLogSql ของ menu_ar_dealer ในชุดเดียว (:376-420); ลบถามยืนยัน ต้องการลบข้อมูลสมาชิกรหัส "..." ใช่หรือไม่? แล้วลบแถว ar_dealer + บันทึกประวัติ (:436-460)
  • Ctrl+S บันทึก Esc ยกเลิกการแก้ (Esc ไม่ทำงานขณะมีกล่องโต้ตอบหรือหน้าต่างค้นหาเปิดอยู่; ทั้งคู่ทำงานเฉพาะเมื่อแท็บนี้เป็นแท็บที่ใช้งาน, :460-470)

ข้อควรระวัง

  • รหัสเมนูในสคีมาเป็นแบบเก่า (6.1.1, 6.1.3) ส่วนรหัสจริงที่ผู้ใช้เห็นคือ 4 หลัก
  • จอทั้งสองเขียนตารางตรงผ่าน queryExecBatch
  • การลบลูกหนี้ลบแถวสมาชิก ar_dealer ของลูกหนี้นั้นตามไปด้วย (อยู่ในชุดคำสั่งลบ)
  • ไม่ได้ตรวจในหน้าจอว่าเลขผู้เสียภาษี 13 หลักผ่านหลักตรวจสอบ (check digit) หรือไม่ ตรวจแค่จำนวนหลักและความซ้ำ

ที่มาในโค้ด