สมอง SML

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

#screens#transaction

จอบันทึกเอกสารธุรกรรม มุมมองผู้ใช้ (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)
  • คลิกเอกสารอื่น หรือเพิ่มใหม่ ขณะที่แก้ไขค้างและข้อมูลเปลี่ยนไปจากที่โหลดมา ระบบถามก่อน (ดูกล่องคำถามด้านล่าง)

ขวา ฟอร์มเอกสาร

  1. แถบหัว "หน้าจอบันทึก/แก้ไขข้อมูล" แสดงข้อความสถานะ (สีเขียว; ข้อความเตือนสีเหลืองอำพัน) และป้ายโหมด: โหมดดูข้อมูล (เทา) / เพิ่มรายการใหม่ (เขียว) / โหมดแก้ไข (เหลือง) (:3035-3056)
  2. แถบเครื่องมือ (ด้านล่าง)
  3. หัวเอกสาร (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) ของเอกสารที่มีตาราง:

  1. รายการ (ตารางแบบจำนวนเงิน) หรือ รายการสินค้า / เอกสาร (ตารางสินค้า ใบค้างชำระ มัดจำ) ไม่มีในสมุดรายวัน (:3330-3336)
  2. รายละเอียดเพิ่มเติม
  3. ภาษีมูลค่าเพิ่ม หรือ ข้อมูลภาษี (ชื่อตามว่าเอกสารมี VAT อย่างเดียวหรือมีหัก ณ ที่จ่ายด้วย; ไม่แสดงเมื่อเป็นเอกสารที่ใช้แท็บภาษีคู่ในข้อ 5)
  4. การรับ/จ่ายชำระเงิน เฉพาะเอกสารที่รับ/จ่ายเงินพร้อมกัน
  5. เอกสารลูกหนี้/เจ้าหนี้ flag 19 (เจ้าหนี้) และ 239 (ลูกหนี้) มีแท็บภาษี 2 แท็บ: 19 = "ภาษีหัก ณ. ที่จ่าย" + "ภาษีซื้อ"; 239 = "ภาษีถูกหัก ณ. ที่จ่าย" + "ภาษีขาย" (AP_AR_TAX_TABS ใน JournalTaxTabs.tsx)
  6. ใช้เงินมัดจำ เมื่อเอกสารชนิดนั้นหักมัดจำได้
  7. การลงบัญชี (GL) แสดงเมื่อเอกสารชนิดนั้นมีแท็บ GL และ รุ่นของระบบมี GL (editionCaps.hasGl; รุ่น Starter ไม่มี)

เอกสารที่ไม่มีตาราง (gridMode none) ลำดับเป็น การลงบัญชี (GL) (ไม่ตรวจรุ่น), ภาษี, รายละเอียดเพิ่มเติม, การรับ/จ่ายชำระเงิน, ใช้เงินมัดจำ

สมุดรายวัน (gl_journal) มีแถวแท็บภาษีครบ 4 แท็บ ต่อจากแถวแท็บหลัก: "ภาษีถูกหัก ณ. ที่จ่าย", "ภาษีหัก ณ. ที่จ่าย", "ภาษีซื้อ", "ภาษีขาย" (:3524-3540)

ปุ่มพิเศษเหนือแถวแท็บ

กล่องเลือกเอกสารอ้างอิง

หัวกล่อง "เลือกเอกสารอ้างอิงเพื่อดึงรายการสินค้า" ช่องค้น "ค้นหาเลขที่เอกสาร / รหัส-ชื่อคู่ค้า / หมายเหตุ" แต่ละแถวแสดงเลขที่ วันที่ คู่ค้า หมายเหตุ ไม่พบ = "ไม่พบเอกสารอ้างอิงในระบบ" (:4101-4155) เงื่อนไขกรองขอจากฝั่ง backend ตาม flag ลูกค้า ประเภทภาษี และสิทธิ์ ถ้าเงื่อนไขโหลดไม่ได้ขึ้นข้อความ "โหลดเงื่อนไขเอกสารอ้างอิงไม่สำเร็จ" (:2271-2277) ชุด flag ต้นทางที่ไม่ได้กำหนดจะใช้ค่าสำรอง 2, 6, 30, 32, 34, 36, 44, 12, 310 (:2236-2238)

บันทึกเอกสาร (ลำดับที่ผู้ใช้เจอ)

  1. ต้องมี เลขที่เอกสาร ("กรุณาระบุเลขที่เอกสาร") และ วันที่เอกสาร ("กรุณาระบุวันที่เอกสาร") และต้องโหลดข้อมูลสกุลเงินสำเร็จ มิฉะนั้นขึ้นข้อความแล้วหยุด (:2576-2592) เลขที่ถูกตัดช่องว่างและแปลงเป็นตัวพิมพ์ใหญ่ก่อนส่ง
  2. ถ้า backend ถามยืนยัน (ข้อความขึ้นต้น CONFIRM: เช่น เครดิตเกิน) เด้งกล่องยืนยัน กด Cancel = ยกเลิกการบันทึกเงียบ ๆ; ถ้าข้อความขึ้นต้น CREDIT_PASSWORD: เปิดกล่องอนุมัติเครดิตให้ผู้มีสิทธิ์ใส่ผู้ใช้และรหัสอนุมัติ ดู ป๊อปอัปราคาขาย ต้นทุน และอนุมัติวงเงินเครดิต (PriceFormulaModal / PriceInfoModal / CostLockModal / CreditApproveModal) (:2795-2812)
  3. สำเร็จ: ขึ้น "บันทึกเอกสาร X เรียบร้อยแล้ว" ออกจากโหมดแก้ไข รีโหลดรายการ และเด้งกล่อง "บันทึกเอกสารเรียบร้อยแล้ว" ถามพิมพ์ (ปุ่ม พิมพ์แบบฟอร์ม / ยังไม่พิมพ์; :4289-4296) ถ้าบันทึกจากทางที่ขอ "พิมพ์ทันที" จะเปิดกล่องพิมพ์เลยโดยไม่ถาม (:2830-2834)
  4. ล้มเหลว: แสดงข้อความ error จาก backend ในแถบหัว (หรือ "บันทึกเอกสารไม่สำเร็จ") และค้างโหมดแก้ไขไว้
  5. ระบบจำคลัง/ที่เก็บล่าสุดที่บันทึกของ 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)

ที่มาในโค้ด