จอบันทึกเอกสารธุรกรรม มุมมองผู้ใช้ (UniversalTransScreen)
จอเดียวที่ใช้บันทึกเอกสารเกือบทุกชนิดของระบบ (ซื้อ ขาย สต็อก ลูกหนี้ เจ้าหนี้ เงินสด/ธนาคาร เช็ค สมุดรายวัน) หน้านี้อธิบายเฉพาะสิ่งที่ผู้ใช้เห็นและกดได้ กลไกภายใน (ตาราง ic_trans/ap_ar_trans, transFlag, API คำนวณยอด) อยู่ที่ จอเอกสารธุรกรรมแบบเดียวกันทุกจอ (UniversalTransScreen) ไม่ซ้ำที่นี่ ส่วนย่อยของจอแยกเป็น หัวเอกสาร แผงล่าง และแท็บเสริมของจอเอกสาร (TransTopForm / TransBottomPanel / TransExtraTabs) (หัวเอกสารและแท็บ), ตารางรายการสินค้า/จำนวนเงินในเอกสาร (TransItemGrid) (ตารางสินค้า), จอยกเลิก/อนุมัติเอกสาร (UniversalCancelConfirmScreen) (จอยกเลิก/อนุมัติ) และกล่องช่วยที่เรียกจากตาราง ป๊อปอัปซีเรียล ล็อต ยอดคงเหลือ ประวัติ สินค้าทดแทน (SerialNumberModal / LotModal / StockBalanceModal / ItemHistoryModal / ItemReplacementModal), ป๊อปอัปราคาขาย ต้นทุน และอนุมัติวงเงินเครดิต (PriceFormulaModal / PriceInfoModal / CostLockModal / CreditApproveModal), ป๊อปอัปเอกสารและรายการสินค้า (ChequePickerModal / DocumentFlowModal / ItemNameModal / ItemRemarkModal / ItemGridContextMenu)
วิธีเปิด
เมนูเอกสารทุกเมนูที่ระบบส่งเข้า UniversalTransScreen ผ่าน config.menuKey (รายชื่อเมนูเต็มดู รายการเมนูเอกสาร จัดซื้อ ขาย สินค้าคงคลัง (transMenuMap หมวด 1-3) และ รายการเมนูเอกสาร เจ้าหนี้ ลูกหนี้ เงินสด ธนาคาร เช็ค สมุดรายวัน (transMenuMap หมวด 4-6); เมนูไหนใช้เลย์เอาต์ไหนดู สารบัญหน้าจอทั้งหมดของ SML Ai Account (ต้นไม้เมนู → หน้าจอ → โน้ต)) กลไกเมนูดู ทะเบียนหน้าจอและโครงเมนู (Screen registry & smlMenu) ไฟล์ TransactionEngineScreen.tsx และ UniversalTransactionScreen.tsx เป็นแค่ทางเข้าอีกชื่อของจอเดียวกัน เมนูโหมดยกเลิก/อนุมัติจะไม่เปิดจอนี้ แต่เปิด จอยกเลิก/อนุมัติเอกสาร (UniversalCancelConfirmScreen) แทน มุมขวาของแถบเครื่องมือแสดงรหัสเมนู (ป้ายสีฟ้า) และชื่อเมนูเป็นหัวจอ (:3174-3181)
โครงจอ
แบ่งซ้าย/ขวาด้วยแถบลากได้ (ResizableSplit, ความกว้างซ้ายเริ่มต้น 520 พิกเซล, ขวาขั้นต่ำ 600, จำขนาดไว้ในเบราว์เซอร์ตาม storageKey, ดู :2992-2999 และ ResizableSplit.tsx:25,118)
ซ้าย รายการเอกสาร (TransDocListPane)
- ช่วงวันที่ "วันที่ ... ถึง ..." ค่าเริ่มต้น ย้อนหลัง 3 เดือนถึงวันนี้ (
:534-539) - คอลัมน์: วันที่, เลขที่เอกสาร, รหัสคู่ค้า, ชื่อคู่ค้า, มูลค่า (
TransDocListPane.tsx:79-90) หัวคอลัมน์คู่ค้าเปลี่ยนตามชนิด: ลูกหนี้ "รหัสลูกหนี้/ชื่อลูกหนี้", เจ้าหนี้ "รหัสเจ้าหนี้/ชื่อเจ้าหนี้", เช็ค "รหัสคู่ค้า/ธนาคาร", สมุดรายวัน "สมุดรายวัน/คำอธิบาย", อื่น ๆ "รหัสคู่ค้า/ชื่อคู่ค้า" (:3004-3014) - ค้นหา: พิมพ์แล้วกด Enter หรือเปิดโหมดค้นอัตโนมัติ (ค่าเริ่มต้นเปิด) ค้นจากเลขที่เอกสาร รหัสคู่ค้า หมายเหตุ; เอกสารเช็คค้นจากเลขที่เช็คและเลขเอกสารอ้างอิง; สมุดรายวันค้นจากเลขที่และคำอธิบาย (
:1066-1131) - แสดงเฉพาะเอกสารที่ยังไม่ถูกยกเลิก (
last_status = 0) ยกเว้นเอกสารที่เก็บในcb_transและ สูงสุด 150 ใบต่อการค้นหา (LIMIT 150,:1086-1172) หาเอกสารเก่าให้ใช้ช่วงวันที่หรือคำค้น - เอกสารเช็ค (
cb_chq_list) ไม่ใช้ช่วงวันที่ แม้ช่องวันที่จะอยู่บนจอ (เงื่อนไขของเช็คมีแค่ชนิดเช็คกับคำค้น,:1067-1084) - คลิกแถว = เปิดดูเอกสาร, ดับเบิลคลิกแถว หรือคลิกไอคอนแก้ไขท้ายแถว = เปิดในโหมดแก้ไข (ถ้ามีสิทธิ์แก้ไข;
SmlDataList.tsx:1075-1082,1146-1150) ปุ่มและคีย์ของรายการ (Insert/Alt+N เพิ่มใหม่, ↑↓, Home/End, PageUp/PageDown, Ctrl+F) ดู รายการข้อมูล ค้นหา lookup และ dialog กลาง (SmlDataList / SmlLookupModal / SmlDialog) แต่ ระหว่างแก้ไขเอกสาร คีย์เหล่านี้ถูกปิด (hotkeysActive={listHotkeysActive && !isEditing},:3028) และจอที่ถูกซ่อนอยู่หลังแท็บอื่นก็ไม่รับคีย์ (:543) - คลิกเอกสารอื่น หรือเพิ่มใหม่ ขณะที่แก้ไขค้างและข้อมูลเปลี่ยนไปจากที่โหลดมา ระบบถามก่อน (ดูกล่องคำถามด้านล่าง)
ขวา ฟอร์มเอกสาร
- แถบหัว "หน้าจอบันทึก/แก้ไขข้อมูล" แสดงข้อความสถานะ (สีเขียว; ข้อความเตือนสีเหลืองอำพัน) และป้ายโหมด: โหมดดูข้อมูล (เทา) / เพิ่มรายการใหม่ (เขียว) / โหมดแก้ไข (เหลือง) (
:3035-3056) - แถบเครื่องมือ (ด้านล่าง)
- หัวเอกสาร (
TransTopForm) ตามด้วยแถวแท็บ ตารางหลัก และแผงล่างที่สรุปยอด ดู หัวเอกสาร แผงล่าง และแท็บเสริมของจอเอกสาร (TransTopForm / TransBottomPanel / TransExtraTabs)
ปุ่มแถบเครื่องมือ
| โหมด | ปุ่ม | เงื่อนไข / ผล |
|---|---|---|
| ดูข้อมูล | แก้ไข | ต้องเลือกเอกสารแล้วและมีสิทธิ์แก้ไข เข้าโหมดแก้ไข |
| ดูข้อมูล | เพิ่มใหม่ | ต้องมีสิทธิ์เพิ่ม เริ่มเอกสารใหม่ (วันที่ เลขที่ ค่าเริ่มต้นคู่ค้า ตามที่ จอเอกสารธุรกรรมแบบเดียวกันทุกจอ (UniversalTransScreen) อธิบาย) |
| ดูข้อมูล | ลบ (สีแดง) | ต้องเลือกเอกสารและมีสิทธิ์ลบ ถามยืนยัน "ยืนยันการลบเอกสาร X ?" (window.confirm) สำเร็จขึ้น "ลบเอกสาร X เรียบร้อยแล้ว" แล้วโหลดรายการใหม่ (:2909-2930) |
| ดูข้อมูล | Document Flow | เปิดผังเอกสารต้นทาง/ปลายทางของเอกสารที่เลือก ดู ป๊อปอัปเอกสารและรายการสินค้า (ChequePickerModal / DocumentFlowModal / ItemNameModal / ItemRemarkModal / ItemGridContextMenu) |
| ดูข้อมูล | พิมพ์ฟอร์ม / เลือกรูปแบบ | เปิดกล่องพิมพ์ฟอร์ม ดู หน้าต่างพิมพ์รายงานและพิมพ์แบบฟอร์มเอกสาร (GlobalReportPrintModal / GlobalDocFormPrintModal) ปุ่มนี้ไม่มีเงื่อนไขปิด กดได้แม้ยังไม่เลือกเอกสาร (:3101-3109) |
| ดูข้อมูล | ปิดหน้าจอ | มีเมื่อจอเปิดเป็นแท็บ (มี onClose) ดู พื้นที่ทำงานแบบแท็บ MDI และสิทธิ์จอ (TabWorkspace) |
| แก้ไข/ใหม่ | บันทึก | ปิดเมื่อกำลังบันทึกหรือไม่มีสิทธิ์ (เอกสารใหม่ต้องมีสิทธิ์เพิ่ม เอกสารเดิมต้องมีสิทธิ์แก้ไข) |
| แก้ไข/ใหม่ | พิมพ์ฟอร์ม / เลือกรูปแบบ | เปิดกล่องพิมพ์โดยไม่ต้องออกจากโหมดแก้ไข ในกล่องมีปุ่ม บันทึกเอกสารเพื่อพิมพ์จริง (บันทึกเอกสารแล้วเปิดกล่องพิมพ์ใหม่ทันที; :4256, GlobalDocFormPrintModal.tsx:4327,5150-5162) |
| แก้ไข (ไม่ใช่ใหม่) | Document Flow | เหมือนด้านบน |
| แก้ไข/ใหม่ | ปิดหน้าจอ | ชื่อปุ่มชวนสับสน: จริง ๆ คือ ยกเลิกการแก้ไข ออกจากโหมดแก้ไข แล้วโหลดเอกสารเดิมกลับมา (เอกสารใหม่ที่ไม่มีต้นฉบับ = ล้างเลขที่) ถ้าข้อมูลเปลี่ยนแล้วจะถามก่อน (:3150-3170) |
คีย์ลัดมีเพียง Ctrl+S (หรือ Cmd+S) = บันทึก เมื่ออยู่ในโหมดแก้ไขและแท็บนี้เป็นแท็บที่เห็นอยู่ (:2979-2987) ชื่อคอมเมนต์เหนือโค้ดบอกว่า "F12 shortcut" แต่ไม่มีการผูก F12
แท็บใต้หัวเอกสาร
แท็บที่โชว์ขึ้นกับสวิตช์ของเอกสารชนิดนั้น (TransLayoutConfig ใน transLayouts.ts) ลำดับตามโค้ด (:3325-3442) ของเอกสารที่มีตาราง:
- รายการ (ตารางแบบจำนวนเงิน) หรือ รายการสินค้า / เอกสาร (ตารางสินค้า ใบค้างชำระ มัดจำ) ไม่มีในสมุดรายวัน (
:3330-3336) - รายละเอียดเพิ่มเติม
- ภาษีมูลค่าเพิ่ม หรือ ข้อมูลภาษี (ชื่อตามว่าเอกสารมี VAT อย่างเดียวหรือมีหัก ณ ที่จ่ายด้วย; ไม่แสดงเมื่อเป็นเอกสารที่ใช้แท็บภาษีคู่ในข้อ 5)
- การรับ/จ่ายชำระเงิน เฉพาะเอกสารที่รับ/จ่ายเงินพร้อมกัน
- เอกสารลูกหนี้/เจ้าหนี้ flag 19 (เจ้าหนี้) และ 239 (ลูกหนี้) มีแท็บภาษี 2 แท็บ: 19 = "ภาษีหัก ณ. ที่จ่าย" + "ภาษีซื้อ"; 239 = "ภาษีถูกหัก ณ. ที่จ่าย" + "ภาษีขาย" (
AP_AR_TAX_TABSในJournalTaxTabs.tsx) - ใช้เงินมัดจำ เมื่อเอกสารชนิดนั้นหักมัดจำได้
- การลงบัญชี (GL) แสดงเมื่อเอกสารชนิดนั้นมีแท็บ GL และ รุ่นของระบบมี GL (
editionCaps.hasGl; รุ่น Starter ไม่มี)
เอกสารที่ไม่มีตาราง (gridMode none) ลำดับเป็น การลงบัญชี (GL) (ไม่ตรวจรุ่น), ภาษี, รายละเอียดเพิ่มเติม, การรับ/จ่ายชำระเงิน, ใช้เงินมัดจำ
สมุดรายวัน (gl_journal) มีแถวแท็บภาษีครบ 4 แท็บ ต่อจากแถวแท็บหลัก: "ภาษีถูกหัก ณ. ที่จ่าย", "ภาษีหัก ณ. ที่จ่าย", "ภาษีซื้อ", "ภาษีขาย" (:3524-3540)
ปุ่มพิเศษเหนือแถวแท็บ
- ใบตรวจนับสินค้า (flag 76): เรียกรายการสินค้า ดึงสินค้า (
item_typeเป็น 0 หรือ 2) จากทะเบียนสินค้า ไม่เกิน 200 รายการเรียงรหัส ลงตาราง ตั้งจำนวน 0 และต้นทุนเฉลี่ยเป็นราคา แล้วขึ้น "เรียกรายการสินค้า N รายการแล้ว" (ไม่มีสินค้า = "ไม่พบรายการสินค้าในคลัง") และ อ้างอิงเอกสารขอตรวจนับ ดึงรายการจากใบขอตรวจนับ ปุ่มทั้งคู่ใช้ได้เฉพาะโหมดแก้ไข (:3442-3509) เอกสารชนิดนี้ดู ตรวจนับสินค้า (Stock Count) และ ขอตรวจนับสินค้า (Stock Count Request) - ปุ่มเลือกเอกสารอ้างอิง เฉพาะ flag 87, 89, 91, 99, 101, 103, 250, 252, 254, 260, 262, 264 (
:3509-3522): flag 99 และ 250 = "เลือกเอกสารเสนอราคา"; flag 87 และ 260 = "เลือกเอกสารสั่งซื้อสินค้า"; ที่เหลือ = "เลือกเอกสารตั้งหนี้อื่นๆ" ใช้ได้เฉพาะโหมดแก้ไข เอกสารที่เกี่ยวข้อง: ตั้งหนี้อื่นๆ เจ้าหนี้ (AP Other Payable), เพิ่มหนี้/ลดหนี้อื่นๆ เจ้าหนี้ (AP Other Debit/Credit Note), ตั้งหนี้อื่นๆ ลูกหนี้ (AR Other Receivable), เพิ่มหนี้/ลดหนี้อื่นๆ ลูกหนี้ (AR Other Debit/Credit Note), รายได้อื่นๆ (Other Income), ลดหนี้/เพิ่มหนี้รายได้อื่นๆ (Other Income Credit/Debit Note), ค่าใช้จ่ายอื่นๆ (Other Expense), ลดหนี้/เพิ่มหนี้ค่าใช้จ่ายอื่นๆ (Other Expense Credit/Debit Note) (ชื่อปุ่มสลับตามกลุ่มข้างต้นเป็นสิ่งที่โค้ดเขียน ไม่ได้ตรวจว่าตรงกับเอกสารต้นทางของ flag นั้นทุกตัว)
กล่องเลือกเอกสารอ้างอิง
หัวกล่อง "เลือกเอกสารอ้างอิงเพื่อดึงรายการสินค้า" ช่องค้น "ค้นหาเลขที่เอกสาร / รหัส-ชื่อคู่ค้า / หมายเหตุ" แต่ละแถวแสดงเลขที่ วันที่ คู่ค้า หมายเหตุ ไม่พบ = "ไม่พบเอกสารอ้างอิงในระบบ" (:4101-4155) เงื่อนไขกรองขอจากฝั่ง backend ตาม flag ลูกค้า ประเภทภาษี และสิทธิ์ ถ้าเงื่อนไขโหลดไม่ได้ขึ้นข้อความ "โหลดเงื่อนไขเอกสารอ้างอิงไม่สำเร็จ" (:2271-2277) ชุด flag ต้นทางที่ไม่ได้กำหนดจะใช้ค่าสำรอง 2, 6, 30, 32, 34, 36, 44, 12, 310 (:2236-2238)
บันทึกเอกสาร (ลำดับที่ผู้ใช้เจอ)
- ต้องมี เลขที่เอกสาร ("กรุณาระบุเลขที่เอกสาร") และ วันที่เอกสาร ("กรุณาระบุวันที่เอกสาร") และต้องโหลดข้อมูลสกุลเงินสำเร็จ มิฉะนั้นขึ้นข้อความแล้วหยุด (
:2576-2592) เลขที่ถูกตัดช่องว่างและแปลงเป็นตัวพิมพ์ใหญ่ก่อนส่ง - ถ้า backend ถามยืนยัน (ข้อความขึ้นต้น
CONFIRM:เช่น เครดิตเกิน) เด้งกล่องยืนยัน กด Cancel = ยกเลิกการบันทึกเงียบ ๆ; ถ้าข้อความขึ้นต้นCREDIT_PASSWORD:เปิดกล่องอนุมัติเครดิตให้ผู้มีสิทธิ์ใส่ผู้ใช้และรหัสอนุมัติ ดู ป๊อปอัปราคาขาย ต้นทุน และอนุมัติวงเงินเครดิต (PriceFormulaModal / PriceInfoModal / CostLockModal / CreditApproveModal) (:2795-2812) - สำเร็จ: ขึ้น "บันทึกเอกสาร X เรียบร้อยแล้ว" ออกจากโหมดแก้ไข รีโหลดรายการ และเด้งกล่อง "บันทึกเอกสารเรียบร้อยแล้ว" ถามพิมพ์ (ปุ่ม พิมพ์แบบฟอร์ม / ยังไม่พิมพ์;
:4289-4296) ถ้าบันทึกจากทางที่ขอ "พิมพ์ทันที" จะเปิดกล่องพิมพ์เลยโดยไม่ถาม (:2830-2834) - ล้มเหลว: แสดงข้อความ error จาก backend ในแถบหัว (หรือ "บันทึกเอกสารไม่สำเร็จ") และค้างโหมดแก้ไขไว้
- ระบบจำคลัง/ที่เก็บล่าสุดที่บันทึกของ flag นั้นไว้ในเบราว์เซอร์ (
ictrans_recent_<flag>) ใช้เป็นค่าเริ่มของเอกสารใหม่ (:2816, อ่านกลับ:1946)
เอกสาร cb_trans ลบไม่ได้จากจอนี้ ขึ้น "ยังไม่รองรับการลบเอกสาร cb_trans" (:2895-2897)
กล่องคำถามที่ผู้ใช้จะเจอ
| กล่อง | ข้อความ / ปุ่ม | เมื่อไร |
|---|---|---|
| เปลี่ยนรายการ | "มีการเปลี่ยนแปลงข้อมูลที่ยังไม่ได้บันทึก ..." ปุ่ม สลับรายการ (ไม่บันทึก) / ทำงานต่อ (:4306-4311) |
คลิกเอกสารอื่น กดเพิ่มใหม่ หรือกดยกเลิกแก้ไข ขณะข้อมูลเปลี่ยนไปจากที่โหลด (confirmDiscard, :2958) |
| บันทึกเอกสารเรียบร้อยแล้ว | พิมพ์แบบฟอร์ม / ยังไม่พิมพ์ | หลังบันทึก |
| ค้นหาสกุลเงิน และกล่องค้นอื่น | กล่องค้นกลาง SmlLookupModal ดู รายการข้อมูล ค้นหา lookup และ dialog กลาง (SmlDataList / SmlLookupModal / SmlDialog) |
กดค้นรหัสสกุลเงิน/ลูกหนี้/เจ้าหนี้/คลัง |
| ยืนยันการลบเอกสาร | window.confirm ของเบราว์เซอร์ |
กดปุ่ม ลบ |
ข้อควรระวัง
- ปุ่ม ปิดหน้าจอ ในโหมดแก้ไขคือยกเลิกการแก้ ไม่ใช่ปิดแท็บ (
:3150-3170) - เอกสารที่ยกเลิกแล้วจะหายจากรายการ (กรอง
last_status = 0) ต้องเปิดผ่านจอยกเลิกหรือผังเอกสารถ้าจะดูย้อนหลัง - รายการซ้ายตัดที่ 150 ใบ: ค้นไม่เจออาจเป็นเพราะเกินจำนวน ไม่ใช่ไม่มีเอกสาร
- ทุกค่าเงินในจอเป็นข้อความทศนิยม ไม่ใช้ตัวเลขไบนารี ดู ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts)
- ยังไม่ได้ตรวจเลย์เอาต์ของทุก flag แยกรายตัว (มีกว่า 160 เมนู): สวิตช์แท็บของแต่ละเอกสารอยู่ใน
transLayouts.tsดู จอเอกสารธุรกรรมแบบเดียวกันทุกจอ (UniversalTransScreen)
ที่มาในโค้ด
frontend/account/transaction/UniversalTransScreen.tsx::402-506ทางเข้า (ตัดสินจอ doc/ยกเลิก);:534-543ช่วงวันที่และคีย์;:1061-1182โหลดรายการ;:2271-2277เอกสารอ้างอิง;:2576-2838บันทึก;:2893-2930ลบ;:2958-2975ถามก่อนทิ้ง;:2979-2987Ctrl+S;:2992-3030รายการซ้าย;:3035-3185หัวและแถบเครื่องมือ;:3325-3442แท็บ;:3442-3522ปุ่มพิเศษ;:4101-4155กล่องอ้างอิง;:4289-4311กล่องถามพิมพ์/ทิ้งfrontend/account/transaction/TransDocListPane.tsx:77-137;frontend/account/master/SmlDataList.tsx:1075-1082frontend/account/transaction/JournalTaxTabs.tsx(AP_AR_TAX_TABS,JOURNAL_TAX_TABS)- ดูเพิ่ม: ตารางรายการและหน้าต่างค้นหา (SmlDataList, SmlLookupModal, SmlLookupInput) · เครื่องฟอร์มแบบ schema (SchemaForm, FieldDef, useRecordForm) และจอตั้งค่าระบบ · สารบัญหน้าจอทั้งหมดของ SML Ai Account (ต้นไม้เมนู → หน้าจอ → โน้ต)