หน้าจอข้อมูลหลักมาตรฐาน (StandardMasterScreen)
หน้าจอแบบ "รายการซ้าย + ฟอร์มขวา" สำหรับตารางข้อมูลหลักตารางเดียว ผู้ใช้ค้นหา เพิ่ม แก้ไข และลบรหัส/ชื่อได้ในจอเดียว เมนู "กำหนด..." ในกลุ่มตั้งค่าส่วนใหญ่ใช้จอนี้ รวม 75 เมนู (รายการเต็มอยู่ในหัวข้อ "วิธีเปิด") กลไกภายในอยู่ใน รายการจอข้อมูลหลักแบบตารางเดียว (IC_MASTER_CONFIGS) และ จอข้อมูลหลักมาตรฐานและจอ master-detail (StandardMasterScreen / MasterDetailScreen) โน้ตนี้เล่าเฉพาะสิ่งที่ผู้ใช้เห็นและทำได้
วิธีเปิด
เมนูที่ config เป็น MASTER (ไม่มี detail) จะถูกสร้างเป็น StandardMasterScreen แบบ tab ผ่าน createMasterScreen (frontend/account/tabs/screenRegistry.tsx:152-166); ถ้า config มี detail จะไปจอ หน้าจอข้อมูลหลัก + ตารางย่อย (MasterDetailScreen) แทน
เมนูที่ลงทะเบียนมือใน BASE_SCREENS มาก่อน จะไม่ถูกทับด้วย config นี้ (screenRegistry.tsx:1013)
รายการเมนู MASTER ทั้ง 75 (รหัส menu_key ชื่อไทย) จัดตามหมวดในเมนู:
- ตั้งค่าองค์กร พนักงาน เอกสาร (1001-1023): 1003
menu_setup_currencyกำหนดสกุลเงิน · 1004menu_setup_branchกำหนดรายละเอียดสาขา · 1005menu_setup_department_listกำหนดรายละเอียดแผนก · 1010menu_setup_staff_misกำหนดผู้ใช้ระบบ MIS · 1011menu_setup_doc_groupกำหนดกลุ่มเอกสาร · 1013menu_setup_transportกำหนดประเภทการขนส่ง · 1014menu_setup_ar_logistic_areaกำหนดเขตการขนส่ง · 1022menu_setup_qr_paymentกำหนดค่า QR Code Payment - ตั้งค่าสินค้าคงคลัง (1024-1047): 1025
menu_setup_ic_shelfกำหนดพื้นที่เก็บสินค้า · 1028menu_setup_ic_group_mainกำหนดกลุ่มสินค้าหลัก · 1029menu_setup_ic_group_subกำหนดกลุ่มสินค้าย่อย · 1030menu_setup_ic_group_sub2กำหนดกลุ่มสินค้าย่อย2 · 1031menu_setup_ic_categoryกำหนดหมวดสินค้า · 1032menu_setup_ic_brandกำหนดยี่ห้อสินค้า · 1033menu_setup_ic_modelกำหนดรุ่นสินค้า · 1034menu_setup_ic_colorกำหนดสีสินค้า · 1035menu_setup_ic_sizeกำหนดขนาดสินค้า · 1036menu_setup_ic_patternกำหนดรูปแบบสินค้า · 1037menu_setup_ic_gradeกำหนดเกรดสินค้า · 1038menu_setup_ic_designกำหนดรูปทรงสินค้า · 1039menu_setup_ic_classกำหนดระดับสินค้า · 1040menu_setup_ic_dimension_nameกำหนดชื่อมิติสินค้า · 1041menu_setup_ic_dimensionกำหนดมิติสินค้า · 1042menu_manufacturer_listกำหนดผู้ผลิต · 1043menu_setup_ic_account_groupกำหนดกลุ่มบัญชีสินค้า · 1044menu_setup_ic_issue_typeกำหนดประเภทการเบิก · 1045menu_setup_stk_adjustกำหนดสาเหตุการปรับปรุง · 1046menu_setup_ic_close_reasonกำหนดเหตุผลการปิดสินค้า · 1047menu_setup_ic_import_duty_pointกำหนดพิกัดศุลกากร - ตั้งค่าขายและ POS (1048-1051): 1048
menu_setup_ar_sale_areaกำหนดเขตการขาย · 1049menu_approve_credit_levelกำหนดกลุ่มอนุมัติวงเงิน - ตั้งค่าเจ้าหนี้ (1052-1055): 1052
menu_setup_ap_typeกำหนดประเภทเจ้าหนี้ · 1053menu_setup_ap_group_mainกำหนดกลุ่มเจ้าหนี้หลัก · 1054menu_setup_ap_group_subกำหนดกลุ่มเจ้าหนี้ย่อย · 1055menu_setup_ap_dimensionกำหนดมิติเจ้าหนี้ - ตั้งค่าลูกหนี้ (1056-1065): 1056
menu_setup_ar_typeกำหนดประเภทลูกหนี้ · 1057menu_setup_ar_group_mainกำหนดกลุ่มลูกหนี้หลัก · 1058menu_setup_ar_group_subกำหนดกลุ่มลูกหนี้ย่อย · 1059menu_setup_ar_dimensionกำหนดมิติลูกหนี้ · 1060menu_ar_contact_groupกำหนดกลุ่มผู้ติดต่อ · 1061menu_setup_ar_credit_approveกำหนดเหตุผลอนุมัติวงเงิน · 1062menu_setup_ar_pay_bill_reasonกำหนดเงื่อนไขการวางบิล · 1063menu_setup_ar_keep_chq_reasonกำหนดเงื่อนไขการรับเช็ค · 1064menu_setup_ar_keep_moneyกำหนดเงือนไขการชำระเงิน · 1065menu_ar_credit_pay_billกำหนดวันครบกำหนดชำระเงิน - ตั้งค่าการเงินและธนาคาร (1066-1075): 1066
menu_setup_bankกำหนดธนาคาร · 1067menu_setup_bank_branchกำหนดสาขาธนาคาร · 1068menu_book_bank_typeประเภทสมุดเงินฝาก · 1069menu_book_bank_trans_typeตัวย่อในสมุดเงินฝาก · 1070menu_petty_cashกำหนดวงเงินสดย่อย · 1071menu_income_listกำหนดประเภทรายได้ · 1072menu_expenses_listกำหนดประเภทค่าใช้จ่าย · 1073menu_setup_credit_typeประเภทบัตรเครดิต · 1075menu_setup_banknotesกำหนดธนบัตร - ตั้งค่าสินทรัพย์ถาวร (1076-1080): 1076
menu_asset_setup_typeกำหนดประเภทสินทรัพย์ · 1077menu_asset_setup_locationกำหนดตำแหน่งที่ตั้งสินทรัพย์ · 1078menu_asset_setup_maintainกำหนดการบำรุงรักษาสินทรัพย์ · 1079menu_asset_setup_maintain_unitกำหนดหน่วยการบำรุงรักษาสินทรัพย์ · 1080menu_asset_setup_retireกำหนดประเภทการตัดจำหน่าย - ตั้งค่าบัญชีและภาษี (1081-1092): 1082
menu_setup_gl_journal_bookกำหนดสมุดบัญชี · 1083menu_setup_gl_account_typeกำหนดประเภทบัญชี · 1084menu_setup_gl_account_groupกำหนดกลุ่มบัญชี · 1085menu_setup_gl_group_for_cash_flowกำหนดกลุ่มบัญชีกระแสเงินสด · 1086menu_tax_groupกำหนดกลุ่มภาษี · 1087menu_tax_typeกำหนดประเภทภาษี · 1088menu_setup_sideกำหนดหน่วยงาน · 1089menu_setup_projectกำหนดโครงการ · 1090menu_setup_jobกำหนดงาน · 1091menu_setup_allocateกำหนดการจัดสรร - อยู่นอกหมวดตั้งค่า: 2006
menu_ic_item_serialทะเบียน Serial Number · 5003menu_ap_partner_detailข้อมูลคู่ค้า · 6004menu_ar_customer_connectedข้อมูลคู่ค้า(ลูกหนี้) · 6008menu_ar_point_balanceกำหนดแต้มคงเหลือยกมา · 6010menu_ar_cut_pointบันทึกตัดแต้ม · 7010menu_book_bankกำหนดสมุดเงินฝาก
ผังบัญชีเต็ม (9001/9002) ไม่ใช่จอนี้ ดู ผังบัญชี (Chart of Accounts: MasterDetailScreen 9001 / 9002); 1083-1085 และ 1082 ใช้จอนี้
ช่องข้อมูลสำคัญและ validation
ฟอร์มขวาประกอบจากค่าใน MasterScreenConfig (icMasterSchemas.ts:18-60) ช่องหลักจึงเหมือนกันทุกเมนู ส่วนที่ต่างคือ extraFields
| ช่อง | กติกาที่เห็นในโค้ด | path:line |
|---|---|---|
รหัส (idKey, ค่าเริ่มต้น code) |
แปลงเป็นตัวพิมพ์ใหญ่ทุกครั้งที่พิมพ์, ยาวสุด 30 ตัว, แก้ได้เฉพาะตอน "เพิ่มใหม่" (ยกเว้นจอที่มี rowKey), กด Enter ในช่องไม่ส่งฟอร์ม; บังคับกรอก: "กรุณาระบุรหัส" |
StandardMasterScreen.tsx:529,1319-1321 |
ชื่อ (nameKey, ค่าเริ่มต้น name_1) |
บังคับกรอก: "กรุณาระบุชื่อ" | StandardMasterScreen.tsx:540 |
ชื่อ 2 (name_2) |
ซ่อนและไม่บันทึกเมื่อ config ตั้ง noName2 |
StandardMasterScreen.tsx:75,620,1357 |
ยกเลิกการใช้งาน (status 0/1) |
ซ่อนเป็นค่าเริ่มต้น แสดงเมื่อ config ตั้ง showStatus |
StandardMasterScreen.tsx:74,1607 |
กลุ่มแม่ (parentFilter) |
dropdown เหนือรายการ; ตอนบันทึกต้องเลือก: "กรุณาเลือก<ชื่อกลุ่ม>ก่อนบันทึก" | StandardMasterScreen.tsx:566-588 |
กลุ่มแม่ชั้นที่ 2 (dependentFilter) |
dropdown ที่ขึ้นกับกลุ่มแม่ (ใช้ที่ 1030) | icMasterSchemas.ts:176 |
ช่องรหัสแบบกล่องค้นหา (idLookupTable) |
ใช้ SmlLookupInput แทนช่องพิมพ์ (1049, 6004) — รายการข้อมูล ค้นหา lookup และ dialog กลาง (SmlDataList / SmlLookupModal / SmlDialog) | StandardMasterScreen.tsx:1299-1311 |
extraFields |
ชนิด text, textarea, number, calc, date, select, radio, checkbox, lookup; number/calc แปลงด้วย sqlDecimal, lookup เก็บส่วนก่อน ~ |
StandardMasterScreen.tsx:186-199 |
ค่าคงที่ (fixedValues) |
ต่อเป็นเงื่อนไขตอนอ่าน/แก้/ลบ เช่น trans_flag ของเอกสารแต้ม (6008=801, 6010=802) |
StandardMasterScreen.tsx:174,293,640 |
กติการหัสซ้ำ: ตอนเพิ่มใหม่ระบบนับรหัสเดิมในตาราง (ไม่สนตัวพิมพ์ ใต้กลุ่มแม่เดียวกัน) ถ้าพบแจ้ง รหัส "..." มีอยู่ในระบบแล้ว กรุณาใช้รหัสอื่น หัวข้อ "รหัสซ้ำ" (StandardMasterScreen.tsx:590-612)
รหัสอัตโนมัติ: จอนี้ไม่มี ผู้ใช้พิมพ์รหัสเอง (masterAutoCode ใช้เฉพาะจอลูกหนี้/เจ้าหนี้ — ดู scr-customer scr-supplier)
ปุ่ม / คีย์ลัด
- รายการซ้ายคือ SmlDataList: ค้นหา Auto, ตัวกรองขั้นสูง, ปรับคอลัมน์, Insert/Alt+N = เพิ่มใหม่, ลูกศร/Home/End/PageUp/PageDown เลื่อนแถว (ตารางคีย์ลัดเต็มอยู่ใน รายการข้อมูล ค้นหา lookup และ dialog กลาง (SmlDataList / SmlLookupModal / SmlDialog))
- โหมดอ่าน: ปุ่มแก้ไข / เพิ่มใหม่ / ลบ / ปิดหน้าจอ ถูกปิดเมื่อไม่มีสิทธิ์
canEditcanAddcanDelete(ชื่อปุ่มบอก "ไม่มีสิทธิ์...ในหน้าจอนี้") — StandardMasterScreen.tsx:1143,1153,1205 - โหมดแก้ไข: ปุ่มบันทึก (กดได้เมื่อมีการแก้ไข) และ "ปิดหน้าจอ" ซึ่งทำหน้าที่ยกเลิกการแก้ไข ถ้ามีข้อมูลค้างจะถาม "ยกเลิกการแก้ไข" — StandardMasterScreen.tsx:475-496,1111,1120
- Ctrl+S = บันทึก เมื่ออยู่ในโหมดแก้ไข ไม่กำลังบันทึก มีสิทธิ์ และแท็บนี้มองเห็นอยู่ — StandardMasterScreen.tsx:902-909
- Esc/F12: ไม่พบตัวดักปุ่มในไฟล์นี้ ("(Esc)" เป็นแค่ข้อความ title ของปุ่มที่ StandardMasterScreen.tsx:1120)
- คลิกรายการอื่นระหว่างมีข้อมูลค้าง: ถามยืนยัน "เปลี่ยนรายการ" (สลับรายการ (ไม่บันทึก) / ทำงานต่อ) — StandardMasterScreen.tsx:457-473
popup / modal ที่เรียกได้
- SmlDialog: แจ้งเตือน, ยืนยันลบ "ยืนยันการลบ", "ไม่อนุญาตให้ลบ" — รายการข้อมูล ค้นหา lookup และ dialog กลาง (SmlDataList / SmlLookupModal / SmlDialog)
- SmlLookupModal: เปิดผ่าน
openLookupจากช่อง lookup ในextraFieldsและช่องรหัสแบบidLookupTable— StandardMasterScreen.tsx:798-799,1403,1774 - ThaiBankDirectoryModal: เฉพาะ 1066
menu_setup_bank(ตาราง erp_bank) ปุ่ม "ดึงธนาคาร" — StandardMasterScreen.tsx:1130,1795 - แผงประวัติ Serial Number: เฉพาะ 2006
menu_ic_item_serialแสดงความเคลื่อนไหวของหมายเลขที่เลือก — StandardMasterScreen.tsx:106-135,1669-1700 - ปุ่ม "พิมพ์ป้ายชื่อ" (ป้ายขนส่ง) — StandardMasterScreen.tsx:1195-1198
API / process actions
จอนี้ประกอบ SQL ในเบราว์เซอร์แล้วส่งผ่าน queryList / queryLimit / queryExec / queryExecBatch (@/lib/query-client, ค่าทุกตัวผ่าน escapeSql) — StandardMasterScreen.tsx:18
- โหลดรายการ:
select * from <ตาราง>พร้อมค้นหา/fixedValues/กลุ่มแม่ เรียงตามidKeyจำกัด 500 แถว — StandardMasterScreen.tsx:283-305 - ค้นหา: ฟิลด์ค้นหาคือ
[idKey, nameKey, name_2](ตัดเหลือ[nameKey]เมื่อidKeyคือdimension_number, ตัด name_2 เมื่อnoName2) — StandardMasterScreen.tsx:283-292 - เพิ่ม: INSERT หลังตรวจรหัสซ้ำ; แก้: UPDATE ตามรหัสเดิม + กลุ่มแม่ — StandardMasterScreen.tsx:619-682
- ลบ:
findFkUseตรวจfkChecksก่อน แล้วยืนยัน "ยืนยันการลบ" (ต้องการลบรายการ "..." หรือไม่?) แล้วdelete from <ตาราง> where <รหัส>— StandardMasterScreen.tsx:698-772 - ดึงธนาคารไทย:
queryExecBatchชุด UPDATE/INSERT บน erp_bank (รหัสใหม่ต้องมีสิทธิ์เพิ่ม รหัสเดิมต้องมีสิทธิ์แก้) — StandardMasterScreen.tsx:800-860 - เอกสารแต้ม 6008/6010 (ตาราง ic_trans,
trans_flag801/802): บันทึกผ่านPOST /api/process/stocktools/pointdocsaveลบผ่านPOST /api/process/stocktools/pointdocdelete— StandardMasterScreen.tsx:511,550,758; config icMasterSchemas.ts:1250-1286
ตารางที่ข้อมูลลงไป
ตารางคือ tableName ของแต่ละ config เช่น erp_bank / erp_bank_branch — ธนาคารและสาขาธนาคาร (1066), สมุดรายวัน (gl_journal_book) (1082), พื้นที่เก็บสินค้า (ic_shelf) (1025), หัวเอกสารสินค้า/ซื้อ/ขาย (ic_trans) (6008/6010 ผ่าน API), ic_serial (2006)
ตรวจการใช้งานก่อนลบจาก fkChecks: 1082 ตรวจ gl_journal.book_code ("มีการใช้งานในสมุดรายวันแล้ว") — icMasterSchemas.ts:795; 1025 ตรวจ ic_wh_shelf และ ic_trans_detail โดยจำกัดด้วยคลัง wh_code — icMasterSchemas.ts:365
เมนู MASTER ที่ config มี fkChecks: 1004, 1005, 1025, 1028-1039, 1048, 1052, 1053, 1056, 1057, 1071, 1082
ข้อควรระวัง
- รายการซ้ายโหลดสูงสุด 500 แถว (
queryLimit(sql, 500, 0, true)ที่ StandardMasterScreen.tsx:305) ตัวกรองขั้นสูงทำงานกับแถวที่โหลดมาแล้วเท่านั้น - ลบแล้วถูกบล็อก:
findFkUseตรวจทีละตาราง หยุดที่ตารางแรกที่พบ แสดงเฉพาะข้อความของตารางนั้นหัวข้อ "ไม่อนุญาตให้ลบ" (ถ้าไม่มีmessageใช้ "รหัสนี้มีการใช้งานอยู่ในตาราง <ตาราง> แล้ว ห้ามลบ") — StandardMasterScreen.tsx:698-735 - เมนูที่ไม่มี
fkChecksลบได้ทันทีหลังยืนยัน โค้ดฝั่งจอไม่ตรวจการอ้างอิงเพิ่ม (ข้อจำกัดฝั่งฐานข้อมูลไม่พบในโค้ดที่อ่าน) - เช็ครหัสซ้ำทำที่เบราว์เซอร์ก่อน INSERT และถูกข้ามเมื่อ config มี
rowKey(1049menu_approve_credit_levelใช้roworderเป็นตัวระบุแถว) — StandardMasterScreen.tsx:590-612; icMasterSchemas.ts:902 - ช่อง "ยกเลิกการใช้งาน" ใน 75 เมนู MASTER แสดงเฉพาะ 1042
menu_manufacturer_list(showStatus: trueที่ icMasterSchemas.ts:1318);menu_account_periodก็ตั้งshowStatus(icMasterSchemas.ts:1061) แต่ไปจอ หน้าจอข้อมูลหลัก + ตารางย่อย (MasterDetailScreen) - เมนูที่มี
parentFilter.required(เช่น 1025 ต้องเลือกคลัง) จะไม่แสดงรายการ และเคลียร์ฟอร์ม จนกว่าจะเลือกกลุ่มแม่ (และกลุ่มชั้นที่ 2 ถ้ามีdependentFilter); dropdown จะเลือกตัวแรกให้อัตโนมัติ — StandardMasterScreen.tsx:218-221,270-282 - ปุ่ม "ปิดหน้าจอ" ในโหมดแก้ไขคือยกเลิกการแก้ไข ไม่ได้ปิดแท็บ ปุ่มปิดจริงอยู่ในโหมดอ่าน (มี confirm ถ้ามีข้อมูลค้าง) — StandardMasterScreen.tsx:774-780,1120,1205
- ตัวเลขใน
extraFieldsชนิด number/calc แปลงด้วยsqlDecimalและจอใช้@/lib/numeric(formatMoneyDisplay,getSmlDecimals,cleanNumericString) ไม่ผ่าน float — ดู ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts) - ข้อความช่วยเหลือคีย์ลัดบอกว่า Escape ยกเลิกการแก้ไข แต่จอนี้ไม่มีตัวดัก Esc (ดู "ปุ่ม / คีย์ลัด")
- ข้อมูลเอกสารแต้ม 6008/6010 ไม่ผ่านเส้นทาง INSERT/UPDATE ปกติ แต่ผ่าน API ฝั่ง Go
ที่มาในโค้ด
frontend/account/tabs/screenRegistry.tsx:152-166,1013— เลือก StandardMasterScreen/MasterDetailScreen ตามconfig.detail; BASE_SCREENS มาก่อน configfrontend/src/config/schemas/icMasterSchemas.ts:4-60— ชนิดMasterFieldDef,MasterScreenConfigfrontend/account/master/StandardMasterScreen.tsx:63-80,186-199,283-305— ตัวแปร config, extraFields, โหลดรายการfrontend/account/master/StandardMasterScreen.tsx:513-682— บันทึก (ตรวจ, INSERT, UPDATE)frontend/account/master/StandardMasterScreen.tsx:698-780— fkChecks, ลบ, ปิดจอfrontend/account/master/StandardMasterScreen.tsx:800-909— ดึงธนาคาร, Ctrl+Sfrontend/account/master/StandardMasterScreen.tsx:1296-1321,1607,1795— ช่องรหัส, สถานะ, ThaiBankDirectoryModal- ลิงก์ดูเพิ่ม: รายการจอข้อมูลหลักแบบตารางเดียว (IC_MASTER_CONFIGS) จอข้อมูลหลักมาตรฐานและจอ master-detail (StandardMasterScreen / MasterDetailScreen) หน้าจอข้อมูลหลัก + ตารางย่อย (MasterDetailScreen) รายการข้อมูล ค้นหา lookup และ dialog กลาง (SmlDataList / SmlLookupModal / SmlDialog) ผังบัญชี (Chart of Accounts: MasterDetailScreen 9001 / 9002) ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts) screens-overview