จอรายงานกลาง (UniversalReportScreen)
หน้าจอเดียวที่ใช้แสดง รายงานทุกเมนู 345 เมนู (ใบเมนูประเภท RPT) ตั้งแต่รายงานสินค้า ซื้อ ขาย เจ้าหนี้ ลูกหนี้ เงินสด/ธนาคาร/เช็ค สินทรัพย์ ไปจนถึงบัญชีแยกประเภท ผู้ใช้เห็นเป็นแถบเงื่อนไขด้านบน กดประมวลผล แล้วได้ตารางผลลัพธ์แบบมีหัวกลุ่ม ยอดรวม และปุ่มพิมพ์ เอกสารนี้อธิบายมุมมองผู้ใช้ ส่วนกลไกการจ่ายงานให้ backend และตารางกฎเลือกโหมดอยู่ที่ จอรายงานกลาง (Universal Report Screen) (ไม่ทำซ้ำที่นี่)
วิธีเปิด
- เมนูใบทุกใบที่ถูกจัดเป็น RPT ใน
smlMenu.jsonถูกลงทะเบียนอัตโนมัติด้วยregisterAllMenus→buildDynamicScreen→UniversalReportScreen(screenRegistry.tsx:1330-1380) ไม่ต้องมีไฟล์หน้าจอต่อรายงาน - จำนวนใบ RPT แยกตามโหมด (นับจากแผนผังเมนู):
report_ic78,report_so47,report_po44,report_gl45,report_ap31,report_cb31,report_chq30,report_ar26,report_fa7,check_price2,sql_utility4 รวม 345 (แยกตามสาขาเมนู: ตั้งค่า 4, สินค้าคงคลัง 80, ซื้อ 44, ขาย 47, เจ้าหนี้ 31, ลูกหนี้ 26, เงินสด-ธนาคาร 61, สินทรัพย์ 7, บัญชีแยกประเภท 45) รายการเมนูเต็มอยู่ที่ สารบัญหน้าจอทั้งหมดของ SML Ai Account (ต้นไม้เมนู → หน้าจอ → โน้ต) - ชนิด
WorkbenchModeมี 13 ค่า (report_ic/po/so/ap/ar/cb/chq/fa/gl/wh_pp,check_price,barcode_print,sql_utility) (UniversalReportScreen.tsx:79-93) แต่ในเมนูปัจจุบันไม่มีใบที่ตกโหมดreport_wh_ppหรือbarcode_print - เมนูตั้งค่า 4 ใบที่เป็นโหมด
sql_utility: 1100 ตรวจสอบโครงสร้างฐานข้อมูล, 1103 แสดงโครงสร้างฐานข้อมูลทั้งหมด, 1104 ใช้คำสั่ง Query, 1105 สร้างคำสั่ง Query เปิดแผง SQL ทันทีแทนที่จะรอผู้ใช้กด (fe-report-screens ระบุ:186-193) และ 2027/2028 (กำหนดราคาขายมาตรฐาน/ทั่วไป) เป็นโหมดcheck_priceใช้จอเดียวกัน
แถบชื่อและปุ่มเครื่องมือ
- แถบหัว: "หน้าจอรายงานและการประมวลผลข้อมูล (Backend Report Engine)" และ "พบข้อมูล N รายการ (ใช้เวลา ms)" (UniversalReportScreen.tsx:1088-1096); ข้อความสถานะสีเขียวแสดงผลการกระทำในแผงออกแบบ เช่น "รันคำสั่ง SQL On-The-Fly สำเร็จแล้ว", "คืนค่าคอลัมน์และความกว้าง % เริ่มต้นแล้ว", "โหลดรูปแบบรายงาน … จากฐานข้อมูลแล้ว" (บรรทัด 610-786, 1090-1091)
- แถวปุ่ม (บรรทัด 1098-1175): "ประมวลผลรายงาน" (หมุนระหว่างโหลด), "ส่งออก CSV" (ปิดเมื่อไม่มีแถว), "พิมพ์รายงาน" (เปิด หน้าต่างพิมพ์รายงานและพิมพ์แบบฟอร์มเอกสาร (GlobalReportPrintModal / GlobalDocFormPrintModal)), "ปรับคอลัมน์ % / ซ่อนคอลัมน์", "SQL Query On-The-Fly", "รูปแบบรายงาน (n)" (n = จำนวนรูปแบบที่บันทึกไว้), "✨ วิเคราะห์รายงานด้วย AI" (เปลี่ยนเป็น "AI กำลังวิเคราะห์..." และปิดระหว่างโหลด), "ปิดหน้าจอ" (เมื่อมี
onClose) - มุมขวามีรหัสเมนูและชื่อรายงาน ถ้าตั้งหัวรายงานเองในแผงรูปแบบ จะแสดงชื่อที่ตั้งแทนชื่อเมนู (บรรทัด 1176-1186)
- ปุ่มสามปุ่มคอลัมน์/SQL/รูปแบบ เป็นสวิตช์: กดซ้ำที่แท็บเดิมจะปิดแผงออกแบบ (
handleOpenStudioTabบรรทัด 589-597) รายละเอียดแผงอยู่ในหัวข้อ GlobalReportStudioPanel ของ หน้าต่างพิมพ์รายงานและพิมพ์แบบฟอร์มเอกสาร (GlobalReportPrintModal / GlobalDocFormPrintModal)
แถบเงื่อนไข (Filter bar)
ถอดแบบจาก C# SMLERPReportTool._conditionScreen (คอมเมนต์บรรทัด 105-106 ของไฟล์ และบรรทัด 1186) ช่องที่เห็นและหลักการ (บรรทัด 1186-1385):
| ช่อง | พฤติกรรม |
|---|---|
| ตั้งแต่วันที่ / ถึงวันที่ | แสดงเฉพาะรายงานที่ backend บอกว่าใช้ช่วงวัน (usesDateRange, บรรทัด 158, 417) ค่าเริ่มต้น 1 ม.ค. ของปีปัจจุบัน ถึงวันนี้ (บรรทัด 124-129) กด Enter ในช่องวันที่สั่งประมวลผล |
| จาก{ป้าย} / ถึง{ป้าย} | ป้ายชื่อ (เช่น รหัสสินค้า, รหัสลูกหนี้) มาจาก backend ผ่าน codeRangeLabel ถ้าไม่ส่งมาใช้คำว่า "รหัส" (บรรทัด 159, 418) |
| เรียงตาม | ตัวเลือกจาก backend; ค่าแรก "ค่าเริ่มต้นตามระบบ" (บรรทัด 1282) |
| ช่องค้นหา | "ค้นหารหัส / ชื่อ / เงื่อนไขเพิ่มเติม..." (บรรทัด 1305) + ปุ่ม "ค้นหา" |
| สรุปตามเอกสาร / แสดงรายละเอียดสินค้า | สองปุ่มสลับโหมด สั่ง runReport(false/true) ทันทีและจำการปรับคอลัมน์ของแต่ละโหมดแยกกัน (บรรทัด 548-565, 1325-1349) |
| เงื่อนไขเพิ่มเติม | เรนเดอร์โดย ReportConditionFields ตามที่ backend ประกาศมา (บรรทัด 1366) |
- Enter ในช่องเงื่อนไขใดก็รันรายงาน (บรรทัด 1242, 1259, 1304) นี่คือคีย์ลัดเดียวของจอ ไม่มี F-key หรือ Ctrl+ อื่น และไม่มี double-click หรือ drill-down ไปยังเอกสาร (ค้นไม่พบ handler ในไฟล์)
ReportConditionFieldsรองรับ 7 ชนิดช่องcheckbox | number | text | date | select | ranges | multi(ReportConditionFields.tsx:121-205) ชนิดrangesเป็นตารางหลายแถว "จากรหัส" / "ถึงรหัส (ว่าง = รหัสเดียว)" พร้อมปุ่ม "เพิ่มแถว" "ลบแถว" (บรรทัด 31-76) ชนิดmultiเป็นรายการติ๊กเลือกพร้อมปุ่ม "เลือกทั้งหมด" "ไม่เลือก" (บรรทัด 78-106) รหัสต้องไม่มี,:..เพราะเป็นตัวคั่นค่า (บรรทัด 28)
ผลลัพธ์บนหน้าจอ
- ครั้งแรกที่เปิดจอจะรันรายงานให้เองทันที (ไม่ต้องกดประมวลผล) และถ้า backend แจ้งว่าเมนูนี้ในต้นฉบับ C# ติ๊ก "แสดงรายละเอียด" ไว้ จะรันซ้ำอีกรอบเป็นโหมดรายละเอียด (บรรทัด 568-586) การสลับเมนูล้างเงื่อนไขของเมนูก่อนหน้าทิ้ง
- แถบสรุป "โครงสร้างรายงาน SML Account" แสดงประเภท/ชื่อรายงานและการ์ดสรุป (KPI) จาก backend; ค่าที่เป็นตัวเลขล้วนจัดรูปแบบเงินด้วย
formatMoneyDisplayยกเว้นหน่วย "รายการ" (บรรทัด 1418-1470) ดู ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts) - การ์ด AI (กดปุ่มวิเคราะห์): หัวข้อสรุป, "ประเด็นสำคัญและจุดเด่น (Key Highlights)", "ข้อสังเกตและจุดที่ควรตรวจสอบ (Anomalies & Risks)", ปุ่ม "✕ ซ่อนบทวิเคราะห์" (บรรทัด 1480-1550) ถ้า AI ล้มเหลวขึ้นข้อความ "AI วิเคราะห์รายงานไม่สำเร็จ" ในแถบแดง (บรรทัด 229-253, 1473)
- Engine รายงานหลายชั้น (Multi-Level) (บรรทัด 1552-1660) แสดงเมื่อ backend ส่งโครงสร้างหัวกลุ่มมา: เลือก "ชั้นที่ 1" ได้ 3 แบบ — "✨ อัตโนมัติตามโครงสร้าง SML", "📋 ตารางชั้นเดียว (ไม่แยกหัวกลุ่ม)", หรือ "แยกชั้นที่ 1 ตาม: <คอลัมน์>" ; "ชั้นที่ 2" มีตัวเลือก "-- แสดงรายการเคลื่อนไหว/รายละเอียดทันที --" หรือคอลัมน์อื่น; ช่องติ๊ก "ซ่อนคอลัมน์หัวกลุ่มซ้ำในแถวรายละเอียด" (ค่าเริ่มต้นติ๊ก, บรรทัด 169); ปุ่ม "กางทั้งหมด" / "ยุบดูเฉพาะสรุปหัวกลุ่ม" การเปลี่ยนชั้น 1/2 ส่งไป backend ประมวลผลใหม่ ไม่ใช่จัดกลุ่มในเบราว์เซอร์ (
handleUpdatePrintSettingsบรรทัด 668-690) และค่าเก็บในการตั้งค่าพิมพ์ร่วม จึงมีผลกับ PDF ด้วย - ตาราง: คอลัมน์ "ลำดับ" + คอลัมน์ตาม backend; ลากขอบหัวคอลัมน์เพื่อปรับสัดส่วน % (ป้ายกำกับ "ลากซ้าย-ขวาเพื่อปรับสัดส่วน % ความกว้างคอลัมน์", บรรทัด 1753); แถว "ยอดยกมา" จัดรูปเป็นแถวพิเศษ (บรรทัด 1789-1791, 1854); ท้ายกลุ่มแสดง "รวม… (N รายการ)" ยอดยกมาของกลุ่ม (บรรทัด 2096-2103); ไม่มีข้อมูลขึ้น "ไม่พบข้อมูลตามเงื่อนไขที่ระบุ" (บรรทัด 2259-2265); ท้ายตาราง "รวมทั้งสิ้น (N รายการ)" (บรรทัด 2312)
- เลือกภาษารายงานเป็น English ในแผงตั้งค่า จะแปลหัวข้อ ป้ายคอลัมน์ และข้อความคงที่ของหน้าจอเป็นอังกฤษด้วย (
isReportEn, บรรทัด 212-215)
การแสดงผลทีละส่วน (ประสิทธิภาพ)
เบราว์เซอร์วาดทีละ 80 แถว (และ 40 กลุ่ม) แล้วเลื่อนลงใกล้ท้ายตารางจึงเพิ่มอีก 150 แถว (บรรทัด 200-203, 1070-1073) การค้นหาเป็นการประมวลผลที่ backend ทุกครั้ง ไม่กรองเฉพาะแถวที่โหลดแล้ว
ส่งออก CSV
สร้างไฟล์ในเบราว์เซอร์จากคอลัมน์ที่เห็นและทุกแถวใน rows ชื่อไฟล์ <menuKey>_<วันนี้>.csv (บรรทัด 1041-1060) ค่าในเซลล์ใส่เครื่องหมายคำพูดและ escape " แต่หัวคอลัมน์ไม่ใส่เครื่องหมายคำพูด จึงเสียหลักถ้าป้ายคอลัมน์มีเครื่องหมายจุลภาค (บรรทัด 1044-1048)
ข้อควรระวัง
- ไม่มีทางกดจากแถวรายงานไปเปิดเอกสารต้นทาง แม้ใน สารบัญหน้าจอทั้งหมดของ SML Ai Account (ต้นไม้เมนู → หน้าจอ → โน้ต) จะมีรายงานมาก ผู้ใช้ต้องจดเลขที่เอกสารแล้วไปเปิดเองที่จอทรานแซกชัน (จอบันทึกเอกสารธุรกรรม มุมมองผู้ใช้ (UniversalTransScreen))
- AI วิเคราะห์ส่ง
rowsทั้งหมดที่ได้จากรายงานไปที่/api/process/workflow/ai-report-analyzeโดยไม่ตัดจำนวนแถว (บรรทัด 238-244) รายงานใหญ่จะส่งข้อมูลเป็นก้อนใหญ่ - หน้าจอรายงานปรับคอลัมน์/SQL เองได้ผ่านแผงออกแบบ
- ค่าเริ่มต้นช่วงวันที่คือ 1 ม.ค. ปีปัจจุบันถึงวันนี้ ไม่ใช่รอบบัญชีที่ตั้งไว้ในระบบ (บรรทัด 124-129)
- หน้าจอ 4 ช่อง "รายละเอียดการซื้อ/การขาย" ไม่ใช่จอนี้ ดู รายละเอียดการซื้อ/การขาย 4 ช่อง (BuySaleInformationScreen) (ลงทะเบียนแยก ไม่มีเมนูชี้)
- ตัวออกแบบรายงานและฟอร์ม (เมนู 1092-1094, 1113-1115) เป็นจอแยก ตัวออกแบบรายงานและแบบฟอร์ม (FastReportDesignerScreen / FormDesignerScreen)
ที่มาในโค้ด
- ชนิดโหมดและ config:
frontend/account/report/UniversalReportScreen.tsx:79-130 - ค่าเริ่มต้นวันที่ และสถานะที่ backend ส่งมา:
…/UniversalReportScreen.tsx:124-129, 158-169, 405-430 - รันรายงาน + รันอัตโนมัติตอนเปิด:
…/UniversalReportScreen.tsx:548-586 - วิเคราะห์ด้วย AI:
…/UniversalReportScreen.tsx:229-266 - ส่งออก CSV:
…/UniversalReportScreen.tsx:1041-1060 - แถบปุ่ม/เงื่อนไข:
…/UniversalReportScreen.tsx:1088-1385 - KPI, การ์ด AI, Multi-Level, ตาราง:
…/UniversalReportScreen.tsx:1418-2320 - ช่องเงื่อนไขที่ backend ประกาศ:
frontend/account/report/ReportConditionFields.tsx:23-212 - การเลือกโหมดจากสาขาเมนู:
frontend/account/tabs/screenRegistry.tsx:1330-1380 - กลไกเต็มและตารางโหมด: จอรายงานกลาง (Universal Report Screen); แผงออกแบบและพิมพ์: พิมพ์รายงาน แบบฟอร์มเอกสาร และตัวออกแบบ (Report Print & Designers)