สมอง SML

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

#screens#report

จอรายงานกลาง (UniversalReportScreen)

หน้าจอเดียวที่ใช้แสดง รายงานทุกเมนู 345 เมนู (ใบเมนูประเภท RPT) ตั้งแต่รายงานสินค้า ซื้อ ขาย เจ้าหนี้ ลูกหนี้ เงินสด/ธนาคาร/เช็ค สินทรัพย์ ไปจนถึงบัญชีแยกประเภท ผู้ใช้เห็นเป็นแถบเงื่อนไขด้านบน กดประมวลผล แล้วได้ตารางผลลัพธ์แบบมีหัวกลุ่ม ยอดรวม และปุ่มพิมพ์ เอกสารนี้อธิบายมุมมองผู้ใช้ ส่วนกลไกการจ่ายงานให้ backend และตารางกฎเลือกโหมดอยู่ที่ จอรายงานกลาง (Universal Report Screen) (ไม่ทำซ้ำที่นี่)

วิธีเปิด

  • เมนูใบทุกใบที่ถูกจัดเป็น RPT ใน smlMenu.json ถูกลงทะเบียนอัตโนมัติด้วย registerAllMenus → buildDynamicScreen → UniversalReportScreen (screenRegistry.tsx:1330-1380) ไม่ต้องมีไฟล์หน้าจอต่อรายงาน
  • จำนวนใบ RPT แยกตามโหมด (นับจากแผนผังเมนู): report_ic 78, report_so 47, report_po 44, report_gl 45, report_ap 31, report_cb 31, report_chq 30, report_ar 26, report_fa 7, check_price 2, sql_utility 4 รวม 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)

ผลลัพธ์บนหน้าจอ

  1. ครั้งแรกที่เปิดจอจะรันรายงานให้เองทันที (ไม่ต้องกดประมวลผล) และถ้า backend แจ้งว่าเมนูนี้ในต้นฉบับ C# ติ๊ก "แสดงรายละเอียด" ไว้ จะรันซ้ำอีกรอบเป็นโหมดรายละเอียด (บรรทัด 568-586) การสลับเมนูล้างเงื่อนไขของเมนูก่อนหน้าทิ้ง
  2. แถบสรุป "โครงสร้างรายงาน SML Account" แสดงประเภท/ชื่อรายงานและการ์ดสรุป (KPI) จาก backend; ค่าที่เป็นตัวเลขล้วนจัดรูปแบบเงินด้วย formatMoneyDisplay ยกเว้นหน่วย "รายการ" (บรรทัด 1418-1470) ดู ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts)
  3. การ์ด AI (กดปุ่มวิเคราะห์): หัวข้อสรุป, "ประเด็นสำคัญและจุดเด่น (Key Highlights)", "ข้อสังเกตและจุดที่ควรตรวจสอบ (Anomalies & Risks)", ปุ่ม "✕ ซ่อนบทวิเคราะห์" (บรรทัด 1480-1550) ถ้า AI ล้มเหลวขึ้นข้อความ "AI วิเคราะห์รายงานไม่สำเร็จ" ในแถบแดง (บรรทัด 229-253, 1473)
  4. Engine รายงานหลายชั้น (Multi-Level) (บรรทัด 1552-1660) แสดงเมื่อ backend ส่งโครงสร้างหัวกลุ่มมา: เลือก "ชั้นที่ 1" ได้ 3 แบบ — "✨ อัตโนมัติตามโครงสร้าง SML", "📋 ตารางชั้นเดียว (ไม่แยกหัวกลุ่ม)", หรือ "แยกชั้นที่ 1 ตาม: <คอลัมน์>" ; "ชั้นที่ 2" มีตัวเลือก "-- แสดงรายการเคลื่อนไหว/รายละเอียดทันที --" หรือคอลัมน์อื่น; ช่องติ๊ก "ซ่อนคอลัมน์หัวกลุ่มซ้ำในแถวรายละเอียด" (ค่าเริ่มต้นติ๊ก, บรรทัด 169); ปุ่ม "กางทั้งหมด" / "ยุบดูเฉพาะสรุปหัวกลุ่ม" การเปลี่ยนชั้น 1/2 ส่งไป backend ประมวลผลใหม่ ไม่ใช่จัดกลุ่มในเบราว์เซอร์ (handleUpdatePrintSettings บรรทัด 668-690) และค่าเก็บในการตั้งค่าพิมพ์ร่วม จึงมีผลกับ PDF ด้วย
  5. ตาราง: คอลัมน์ "ลำดับ" + คอลัมน์ตาม backend; ลากขอบหัวคอลัมน์เพื่อปรับสัดส่วน % (ป้ายกำกับ "ลากซ้าย-ขวาเพื่อปรับสัดส่วน % ความกว้างคอลัมน์", บรรทัด 1753); แถว "ยอดยกมา" จัดรูปเป็นแถวพิเศษ (บรรทัด 1789-1791, 1854); ท้ายกลุ่มแสดง "รวม… (N รายการ)" ยอดยกมาของกลุ่ม (บรรทัด 2096-2103); ไม่มีข้อมูลขึ้น "ไม่พบข้อมูลตามเงื่อนไขที่ระบุ" (บรรทัด 2259-2265); ท้ายตาราง "รวมทั้งสิ้น (N รายการ)" (บรรทัด 2312)
  6. เลือกภาษารายงานเป็น English ในแผงตั้งค่า จะแปลหัวข้อ ป้ายคอลัมน์ และข้อความคงที่ของหน้าจอเป็นอังกฤษด้วย (isReportEn, บรรทัด 212-215)

การแสดงผลทีละส่วน (ประสิทธิภาพ)

เบราว์เซอร์วาดทีละ 80 แถว (และ 40 กลุ่ม) แล้วเลื่อนลงใกล้ท้ายตารางจึงเพิ่มอีก 150 แถว (บรรทัด 200-203, 1070-1073) การค้นหาเป็นการประมวลผลที่ backend ทุกครั้ง ไม่กรองเฉพาะแถวที่โหลดแล้ว

ส่งออก CSV

สร้างไฟล์ในเบราว์เซอร์จากคอลัมน์ที่เห็นและทุกแถวใน rows ชื่อไฟล์ <menuKey>_<วันนี้>.csv (บรรทัด 1041-1060) ค่าในเซลล์ใส่เครื่องหมายคำพูดและ escape " แต่หัวคอลัมน์ไม่ใส่เครื่องหมายคำพูด จึงเสียหลักถ้าป้ายคอลัมน์มีเครื่องหมายจุลภาค (บรรทัด 1044-1048)

ข้อควรระวัง

ที่มาในโค้ด

  • ชนิดโหมดและ 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)