กำหนดรายละเอียดบริษัท (CompanyProfileForm)
จอฟอร์มเดียวสำหรับกรอกข้อมูลนิติบุคคลของระบบ (ชื่อ ที่อยู่ เลขผู้เสียภาษี สถานะสาขา พิกัดแผนที่) บันทึกเป็น แถวเดียว ของตาราง erp_company_profile
ข้อมูลนี้ถูกอ่านต่อโดยเอกสาร/รายงาน/e-Tax (ที่อยู่ละเอียดมีหมายเหตุ "ใช้กับใบกำกับภาษีอิเล็กทรอนิกส์ (e-Tax)" ที่ companyProfile.ts:114)
ฟอร์มสร้างจาก schema ด้วยตัวกลาง SchemaForm + FieldControl ซึ่งจอตั้งค่าอื่น (เช่น กำหนดข้อเลือกพิเศษต่างๆ (OptionsForm)) ใช้ร่วมกัน
วิธีเปิด
- เมนู
1001menu_company_profile"กำหนดรายละเอียดบริษัท" หมวด "เริ่มต้น > ตั้งค่าองค์กร พนักงาน และเอกสาร" (รหัสหมวด 1001-1023) — ลงทะเบียนมือในscreenRegistry.tsx:261เปิดเป็นแท็บ (mode: "tab") - เป็นเมนูเฉพาะผู้ดูแล: อยู่ใน
ADMIN_ONLY_MENU_SET(smlMenu.ts:279) ผู้ใช้ทั่วไปเข้าไม่ได้ กลไกดู ทะเบียนหน้าจอและโครงเมนู (Screen registry & smlMenu) - สิทธิ์ในจอ: ใช้
useScreenRights()ถ้าไม่มีสิทธิ์ "แก้ไขข้อมูล" ปุ่มบันทึกถูกปิด และถ้าเรียกsave()จะขึ้นกล่อง "ไม่มีสิทธิ์บันทึกข้อมูล" (CompanyProfileForm.tsx:31,70-79,183)
ช่องข้อมูลสำคัญและ validation
ส่วน "1. ข้อมูลบริษัท" (companyProfile.ts:14-110, 1 คอลัมน์)
| ช่อง | คอลัมน์ | ชนิด | กติกา |
|---|---|---|---|
| ชื่อบริษัท | company_name_1 |
text 100 | บังคับ (required: true และเช็คซ้ำตอนบันทึก "ข้อมูลไม่สมบูรณ์ : ชื่อบริษัท" CompanyProfileForm.tsx:80-91) |
| ชื่อ (อังกฤษ) | company_name_2 |
text 100 | - |
| ชื่อผู้ประกอบการ (ไทย/อังกฤษ) | business_name_1 / business_name_2 |
text 100 | - |
| ชื่อสถานที่ประกอบการ (ไทย/อังกฤษ) | workplace_1 / workplace_2 |
text 200 | - |
| ที่อยู่ (ไทย/อังกฤษ) | address_1 / address_2 |
textarea 3 แถว, 255 | - |
| โทรศัพท์ / โทรสาร | telephone_number / fax_number |
text 100 | - |
| เลขที่ผู้เสียภาษี | tax_number |
text 100 | placeholder "เลขประจำตัวผู้เสียภาษี 13 หลัก" แต่ ไม่มีการตรวจจำนวนหลักหรือ checksum ในโค้ดจอนี้ |
| สถานประกอบการ | branch_type |
select | 0 = "1.สำนักงานใหญ่", 1 = "2.สาขา" |
| สาขาลำดับที่ | branch_code |
text 25 | ซ่อนในรุ่น starter (ดูข้างล่าง) |
| ใช้ระบบสาขา | branch_status |
checkbox | - |
ส่วน "2. ข้อมูลอย่างละเอียด (ที่อยู่อย่างละเอียด)" (companyProfile.ts:111-145): อาคาร house, ห้องที่ room_no, ชั้นที่ floor_no, หมู่บ้าน village, เลขที่ house_no, หมู่ที่ crowd_no, ตรอก/ซอย lane, ถนน road, ตำบล/แขวง locality, อำเภอ/เขต amphur, จังหวัด province, รหัสไปรษณีย์ postcode (ทุกช่อง text 255 เป็น text อิสระ ไม่ใช่ lookup จังหวัด) และ latitude/longitude (number)
ตำแหน่งแผนที่: ใต้ฟอร์มมีกล่อง SmlLocationFieldBox ชื่อ "ตำแหน่งสำนักงานใหญ่ / บริษัท" (category COMPANY, ซ่อนช่องตัวเลข) ผู้ใช้เลือกจุดแล้วค่าไปลง latitude/longitude (CompanyProfileForm.tsx:213-226)
พฤติกรรมของ SchemaForm/FieldControl ที่ผู้ใช้เห็น
- ชนิดช่องที่วาดได้:
code(ตัวพิมพ์ใหญ่, monospace),text,textarea,checkbox,radio(กรอบ GroupBox เต็มแถว),select(ถ้ามีตัวเลือก 1-9 ตัวแสดงเป็นปุ่มวิทยุเรียงแถว ถ้า 10 ตัวขึ้นไปเป็นรายการเลื่อนลง; ถ้าค่าไม่ตรงตัวเลือกใดจะแสดงตัวเลือกแรก),lookup,number(ช่องNumberBoxพร้อมเครื่องคิดเลข ไม่ยอมให้ติดลบถ้าminไม่ติดลบ — เก็บเป็นสตริง ดู ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts)),password,date,image,label,blank,heading(FieldControl.tsx:38-296,SchemaForm.tsx:78-110) - ช่องที่แก้แล้วแต่ยังไม่บันทึกจะถูกไฮไลต์ (
fld-dirty) และหัวจอแสดง "แก้ไขแล้ว N ช่อง" (ScreenHeader.tsx:83-85) - ซ่อนช่องตามรุ่นผลิตภัณฑ์: ถ้าไม่มี GL ซ่อนช่อง lookup ผังบัญชี/
account_code*/gl_account*; ถ้าไม่มีสาขา/แผนกซ่อนbranch_code,department_codeฯลฯ; รุ่นที่ไม่มี Pro ซ่อนmulti_currency,home_currency,pr_approve_lockฯลฯ (SchemaForm.tsx:10-58)
ปุ่ม / คีย์ลัด
- บันทึก (
Ctrl+S) —ScreenHeaderผูกCtrl+Sเท่านั้น และกดได้เมื่อแท็บ active + ฟอร์มกรอกครบ + แก้ไขแล้ว + มีสิทธิ์ (ScreenHeader.tsx:47-56,CompanyProfileForm.tsx:183). ความเห็นในโค้ดบรรทัด 30 กล่าวถึง F12 แต่ ไม่พบตัวจับ F12 ใน ScreenHeader - ปิดหน้าจอ (
Esc) — ถ้ามีการแก้ไขจะขึ้น "มีการแก้ไขปรับปรุง ต้องการออกจากหน้าจอนี้หรือไม่" (ตกลง/ยกเลิก) ก่อนทิ้ง (CompanyProfileForm.tsx:147-173;ScreenHeader.tsx:58-60) - ปุ่มบันทึกถูกปิดและมีข้อความ "ยังไม่ได้กรอก: …" เมื่อมีช่องบังคับว่าง (
CompanyProfileForm.tsx:184-188)
popup / modal ที่เรียกได้
SmlDialogชนิด alert/error/success/confirm สำหรับเตือน (ไม่มีสิทธิ์, ข้อมูลไม่สมบูรณ์, ล้มเหลว, สำเร็จ) — ดู รายการข้อมูล ค้นหา lookup และ dialog กลาง (SmlDataList / SmlLookupModal / SmlDialog)SmlMapPickerModal(ภายในSmlLocationFieldBox) สำหรับเลือกพิกัด
API / process actions
- โหลด:
queryList("SELECT * FROM erp_company_profile LIMIT 1")— ถ้าไม่มีแถวใช้ฟอร์มว่าง (CompanyProfileForm.tsx:49-58) - บันทึก:
queryExecBatch(["DELETE FROM erp_company_profile", insert …])ใน transaction เดียว — ลบทั้งตารางแล้วใส่แถวใหม่ ตามพฤติกรรม SML เดิม (CompanyProfileForm.tsx:107-116). SQL insert สร้างจากbuildInsertSqlซึ่งใส่ทุกคอลัมน์ใน schema ยกเว้นชนิด label/image/blank/heading (sml-query-builder.ts:263-287). กลไก: ตัวเรียก API และตัวประกอบ SQL ฝั่งเบราว์เซอร์ (api-client, query-client, sml-query-builder) - หลังสำเร็จขึ้น "บันทึกข้อมูลเสร็จเรียบร้อย โปรแกรมจะปิดหน้าจอนี้ให้" แล้วปิดแท็บ (
:134-144)
ตารางที่ข้อมูลลงไป
erp_company_profile — ข้อมูลบริษัท (แถวเดียว) (แถวเดียว; DELETE ทั้งตารางแล้ว INSERT)
ข้อควรระวัง
- เพราะบันทึกแบบ "ลบทั้งตาราง + insert" ถ้าคอลัมน์ในตารางจริงมีฟิลด์ที่ schema ไม่ครอบคลุม ค่านั้นจะหายหลังบันทึก (คอลัมน์ที่ไม่อยู่ใน
companyProfileSchemaไม่ถูกเขียน) - ไม่มีการตรวจรูปแบบเลขผู้เสียภาษี/รหัสไปรษณีย์ในจอนี้ (มีเพียง
maxLength) - ต้องมีสิทธิ์แก้ไขและเป็นผู้ดูแล มิฉะนั้นดูได้อย่างเดียว
ที่มาในโค้ด
frontend/account/config/CompanyProfileForm.tsx:28-244— จอทั้งหมด (โหลด 49, บันทึก 69-145, ปิด 147-173, แผนที่ 213-226)frontend/src/config/schemas/companyProfile.ts:10-145— schema ฟิลด์ (อ้างอิงSMLERPConfig/_companyProfile.csตามคอมเมนต์บรรทัด 6)frontend/account/form/SchemaForm.tsx:10-58,78-110,281— ซ่อนตามรุ่น + การวาดแถวfrontend/account/form/FieldControl.tsx:36-296— ตัววาดช่องแต่ละชนิดfrontend/shared/layout/ScreenHeader.tsx:47-64— คีย์ลัด Ctrl+S / Escfrontend/account/tabs/screenRegistry.tsx:261,frontend/src/config/smlMenu.ts:279- ดูเพิ่ม: กำหนดข้อเลือกพิเศษต่างๆ (OptionsForm) · ทะเบียนหน้าจอและโครงเมนู (Screen registry & smlMenu) · ตัวเรียก API และตัวประกอบ SQL ฝั่งเบราว์เซอร์ (api-client, query-client, sml-query-builder) · ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts) · screens-overview