สมอง SML

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

#screens#master

รายละเอียดลูกหนี้ (CustomerDetailScreen)

จอทะเบียนลูกหนี้แบบเต็ม เมนู 6002 "รายละเอียดลูกหนี้" (menu_ar_detail_2, รหัสเก่า 6.1.2, screenRegistry.tsx:569-574) เป็นแบบ "ฟอร์มยาวหน้าเดียว" รวมข้อมูลหลักของ กำหนดลูกหนี้ และรายละเอียดสมาชิก (CustomerScreen, DealerScreen) (6001) กับข้อมูลการค้า วงเงินสินเชื่อ การวางบิล มิติ กลุ่ม ผู้ติดต่อ แคชเชียร์ สินค้าที่ผูกกับลูกหนี้ รูปภาพ และพิกัด ตาราง ทะเบียนลูกหนี้/ลูกค้า (ar_customer) + รายละเอียดเงื่อนไขลูกหนี้ (ar_customer_detail) ส่วนตารางย่อยดูท้ายหัวข้อ กลไกเมนูดู ทะเบียนหน้าจอและโครงเมนู (Screen registry & smlMenu)

โครงจอ

  • ซ้าย: รายการลูกหนี้ (รหัส · ชื่อ 1 · โทรศัพท์ · เขตการขนส่ง · เว็บไซต์ · ระดับราคา · หมายเหตุ · ผู้แก้ไขล่าสุด) ค้นจากรหัส/ชื่อ/ที่อยู่/โทรศัพท์ จำกัด 500 แถว (:248-256) กลไกรายการดู รายการข้อมูล ค้นหา lookup และ dialog กลาง (SmlDataList / SmlLookupModal / SmlDialog)
  • ขวา: แถบ "ข้ามไปยังส่วน" 8 ปุ่ม เลื่อนไปยังส่วนที่ต้องการในหน้าเดียวกัน (:1360-1383) แล้วส่วนต่างๆ เรียงลงมา (ทุกส่วนแสดงพร้อมกัน ไม่ใช่แท็บที่ซ่อนอีกส่วน)
  • ป้ายหัวจอ 6002 อ่านจากเมนู; ปุ่ม แก้ไข / เพิ่มใหม่ / ลบ / บันทึก / ปิดหน้าจอ เหมือน 6001
  • โหมดอ่านอย่างเดียวขึ้นป้าย "โหมดแสดงผล (Read-Only)" ตอนยังไม่กดแก้ไข

ส่วนของฟอร์ม

# ส่วน เนื้อหา (สคีมา arCustomerDetail.ts)
1 ข้อมูลทั่วไปลูกหนี้ ชุดเดียวกับ กำหนดลูกหนี้ และรายละเอียดสมาชิก (CustomerScreen, DealerScreen) (รหัส ชื่อ ที่อยู่ จังหวัด/อำเภอ/ตำบล ไปรษณีย์ ประเทศ โทร โทรสาร SMS อีเมล์ ประเภทลูกหนี้ เว็บ สถานะลูกหนี้ สถานะ คำนำหน้า ชื่อ นามสกุล วันเกิด วันลงทะเบียน เลขภาษี เลขบัตร สถานประกอบการ เลขที่สาขา หมายเหตุ)
2 รายละเอียดการค้าและทั่วไป เขตการขาย (ar_sale_area) · พนักงานขาย (erp_user) · เลขทะเบียนการค้า · ใบทะเบียนภาษี · ประเภทการขาย (0 ขายเงินสด, 1 ขายเงินเชื่อ, 2 ทั้งสอง) · กำหนดประเภทภาษี (ติ๊ก) · ประเภทภาษี (0 แยกนอก, 1 รวมใน, 2 อัตราศูนย์) · อัตราภาษี % (ค่าเริ่มต้น 7) · ผูกรหัสบัญชี (gl_chart_of_account) · ส่วนลดสินค้า · ส่วนลดท้ายบิล · เขตขนส่ง (ar_logistic_area) · รหัสเจ้าหนี้อ้างอิง (ap_supplier)
2 วงเงินและสินเชื่อ วงเงินสินเชื่อ · วงเงินสินเชื่อสูงสุด · จำนวนวันเครดิต (ค่าเริ่มต้น 30) · วันที่เริ่มให้สินเชื่อ (วันนี้) · สถานะสินเชื่อ (เปิดวงเงิน 0 / ปิดวงเงิน 1 / หยุดขายชั่วคราว 2) · วันที่ปิดวงเงิน · ไม่อนุญาตให้ปิดวงเงินอัตโนมัติ · จำนวนวันเกินกำหนด · เหตุผลในการระงับ · แจ้งเตือนเมื่อเกินวงเงินสินเชื่อ
3 เงื่อนไขการวางบิลและรับเช็ค วันที่วางบิล · วันที่รับเช็ค (ตัวเลือก "ไม่ระบุ" หรือ "ทุกวันที่ 01-31") · ประเภทการส่งมอบ (รับเอง 0 / ส่งให้ 1 / อื่นๆ 2, shipping_type)
4 มิติและกลุ่มลูกหนี้ มิติลูกหนี้ 10 ช่อง ข้อความไม่เกิน 100 (การ์ดนี้แสดงเฉพาะรุ่น Pro; หัวการ์ดเขียน "Dimension 1-5" แต่จอมีช่อง 1-10 :2710-2746) · ข้อมูลอ้างอิงเฉพาะธุรกิจ 1-3 (255) · กลุ่มลูกหนี้ กลุ่มหลัก + กลุ่มย่อย 1-4 (ค้นหา ar_group)
5 ผู้ติดต่อ (N) ตาราง: ชื่อผู้ติดต่อ (*) · ที่อยู่ · โทรศัพท์ · มือถือ · อีเมล · แผนก · ตำแหน่ง · กลุ่มผู้ติดต่อ; ปุ่ม "เพิ่มผู้ติดต่อ" และถังขยะต่อแถว (เฉพาะตอนแก้ไข)
6 แคชเชียร์ (N) รหัสพนักงานขาย/แคชเชียร์ (*) ค้นหาจาก erp_user · ชื่อพนักงาน (แสดงอย่างเดียว); ปุ่ม "เพิ่มแคชเชียร์"
7 สินค้าตามลูกหนี้ (N) รหัสสินค้า (*) ค้นหาจาก ic_inventory · ชื่อสินค้า · หมายเหตุ · สถานะ (ปกติ 0 / ระงับ 1); ปุ่ม "เพิ่มสินค้า"
8 รูปภาพและพิกัด แผนที่ "ตำแหน่งลูกค้า (ลูกหนี้)" เลือกพิกัดได้ พร้อมลิงก์ "เปิดบน Google Maps"; ช่องรูปภาพและเอกสารแนบ สูงสุด 5 รูป (ตอนอัปโหลด/ลบรูป ปุ่มถังขยะ "ลบรูปภาพนี้" และคลิกรูปเพื่อดูขยาย)
การ์ดข้อมูลเฉพาะธุรกิจ BusinessExtFieldsCard ใช้ร่วมกับ 6001 ชนิดฟิลด์ตามธุรกิจที่เปิดไว้ใน กำหนดข้อเลือกพิเศษต่างๆ (OptionsForm)

ปุ่มลัดและพฤติกรรมเฉพาะ

  • Ctrl+S บันทึก Esc ยกเลิกการแก้ (ผูกในจอเอง, :1094-1110; ทำงานเฉพาะแท็บที่ active); รหัสใหม่มีปุ่ม "ใส่รหัสถัดไปอัตโนมัติ" และรันรหัสเมื่อออกจากช่อง ใช้กลไกเดียวกับ 6001
  • สถานะลูกหนี้ = บุคคลธรรมดา ช่อง "ชื่อ 1" ถูกล็อก (อ่านอย่างเดียว) และระบบประกอบให้เองจาก คำนำหน้า+ชื่อ แล้วเว้นวรรคตามด้วยนามสกุล (updateFullNameIfPersonality, :119-135) ถ้าเลือก "นิติบุคคล" ชื่อ 1 แก้เองได้
  • ตารางย่อย (ผู้ติดต่อ/แคชเชียร์/สินค้า/รูป) ไม่อยู่ใน form.values จึงนับเป็น "แก้ไข" แยกด้วย subDirty ไม่งั้นแก้แค่ตารางย่อยแล้วกดบันทึกไม่ได้ (:116-119)
  • รายการสินเชื่อใช้ช่องตัวเลขทศนิยมไม่ติดลบ และแปลงเข้า SQL ด้วย decimalSql ไม่ปัดผ่านเลขทศนิยมไบนารี ดู ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts)

การบันทึก (:634-935)

ตรวจ: สิทธิ์ → รหัสว่าง "กรุณาระบุ 'รหัสลูกหนี้'" → ชื่อ 1 ว่าง "กรุณาระบุ 'ชื่อ 1'" → รหัสซ้ำเมื่อเพิ่มใหม่ (เสนอรหัสถัดไป) จากนั้นชุดคำสั่งเดียว (queryExecBatch):

  1. INSERT หรือ UPDATE ar_customer
  2. UPDATE ar_customer_detail ถ้ามีแถวอยู่แล้ว มิฉะนั้น INSERT (นับก่อนด้วย count(*))
  3. ซิงก์ตารางย่อยแบบ ลบทั้งหมดแล้วใส่ใหม่: ar_contactor, ar_customer_cashier_list, ar_item_by_customer
  4. รูปภาพ: เฉพาะช่องที่ผู้ใช้เปลี่ยน (dirty) ลบแล้วใส่ที่ images รหัสภาพ CONTRACT<รหัส> ตามลำดับช่อง ไม่แตะรูปที่โปรแกรม desktop เก็บในที่อื่น (:916-930)
  5. บันทึกประวัติ masterLogSql ของเมนู menu_ar_detail จอนี้ ไม่มี การตรวจเลขผู้เสียภาษี 13 หลัก/ความซ้ำ หรือเลขที่สาขา 5 หลัก ที่ 6001 มี (ค้นไม่พบในโค้ด CustomerDetailScreen.tsx)

การลบ (:960-1060)

ห้ามลบถ้ารหัสถูกใช้ใน ic_trans, ic_trans_detail, ap_ar_trans, ap_ar_trans_detail, cb_trans ("มีการใช้งานรหัสดังกล่าวในเอกสารขาย/ลูกหนี้/การเงินแล้ว ไม่สามารถลบได้") ผ่านแล้วถามยืนยัน ต้องการลบลูกหนี้ [รหัส] จริงหรือไม่ แล้วลบรูปสัญญา, ผู้ติดต่อ, แคชเชียร์, สินค้าตามลูกหนี้, รายละเอียด, สมาชิก ar_dealer, ลูกหนี้ และบันทึกประวัติการลบ ดู ข้อมูลตัวแทนจำหน่าย/จุดขายของลูกหนี้ (ar_dealer), หัวเอกสารสินค้า/ซื้อ/ขาย (ic_trans)

รูปภาพ

เลือกไฟล์รูปแล้วอัปโหลดไปที่ POST /api/crm/upload (multipart) ได้ URL กลับมาเก็บใน images ฐานข้อมูลไม่เก็บไฟล์ ถ้าอัปโหลดไม่สำเร็จขึ้น "อัปโหลดรูปภาพไม่สำเร็จ" ดูกลไกแกลเลอรีสินค้าที่ใกล้เคียงใน กำหนดรูปภาพสินค้า/พนักงาน/สินทรัพย์ และบันทึกรูปภาพเอกสาร (ItemPictureScreen, DocumentPictureScreen)

ข้อควรระวัง

  • ข้อมูล 6001 กับ 6002 เขียนตาราง ar_customer เดียวกัน แก้ที่จอไหนก็เห็นทั้งสองจอ แต่กฎตรวจต่างกัน (ดูหัวข้อบันทึก) ผู้ใช้ที่ต้องการให้ตรวจเลขภาษีควรบันทึกที่ 6001
  • ตารางย่อยถูกลบ-ใส่ใหม่ทุกครั้งที่บันทึก ไม่มีประวัติรายแถว
  • การ์ดมิติลูกหนี้ไม่ปรากฏในรุ่นที่ไม่ใช่ Pro (editionCaps.hasAdvancedProFeatures)

ที่มาในโค้ด