Skip to main content

Setup

ReportFrame cần ít nhất hai đối tượng sau:

Một bảng tạm trong CSDL chứa nội dung của báo cáo và một bảng lọc trước (có thể dùng default là glm_gl_books) để đối chiếu lấy dữ liệu. Bảng tạm trong CSDL sẽ dùng các cột dựa trên bảng lọc trước.

$report = ReportFrame('<tên-bảng-tạm>');
$data = $report->execute('<tên-bảng-lọc-trước>');

Setup bảng tạm

- Bảng tạm phải chứa ít nhất các cột sau:

Cột Mục đích Kiểu dữ liệu Phải có Chú thích
RowCondition Đây sẽ đóng vai trò làm điều kiện hàng trong báo cáo, gộp các formula trong IjFormula trước đó vào thành một 
JSON YES
ItemID Dùng để phân biệt các hàng với nhau VARCHAR/CHAR YES Default dùng để sắp xếp, cũng như phân biệt các đối tượng với nhau
Static Để xác định xem nó có phải hàng động không TINYINT YES  

Sau đó bạn có thể thêm các cột sau trong bảng (nếu muốn)

Cột Mục đích Kiểu dữ liệu Phải có Chú thích
ParentID Dùng cho các báo cáo dạng cây VARCHAR/CHAR NO Default cho SumTree, bởi SumTree dùng cột này để tính tổng, nếu báo cáo không dùng SumTree, bật 'DoNotSumTree' trong $options
CanPrint Dùng để bật/tắt các hàng TINYINT NO Nếu có cột này, default ReportFrame sẽ lấy tất cả các hàng có CanPrint = 1

Các cột khác sẽ dùng cho nội dung của báo cáo, riêng các cột giá trị số (I1, I2, ..., v.v...) có quy tắc và hỗ trợ của riêng nó

Một số các cột khác thường cho thêm vào bao gồm

Cột Mục đích Kiểu dữ liệu Phải có Chú thích
Norder Phụ sắp thứ tự VARCHAR/CHAR NO
FontWeight Dùng để điều chỉnh đậm/nhạt TINYINT NO Hay dùng nhất
Italic Dùng để điều chỉnh chữ nghiêng TINYINT NO
STT Dùng để đánh thứ tự trong các báo cáo có đánh thứ tự VARCHAR/CHAR NO Không nên dùng thay ItemID cho sắp xếp, trừ khi báo cáo có thể sắp xếp sẵn bằng STT

Ví dụ dùng S90:

image.png

(*) MariaDB dùng LONGTEXT cho JSON type

Setup ReportFrame trong code

Ít nhất ReportFrame cần tên bảng tạm như kể trên, ngoài ra ReportFrame có thể cài thêm:

  • Các cài đặt phụ bên cạnh cho báo cáo (xem chi tiết ở ReportFrame API)
  • Các tham số truyền vào (thường từ bộ lọc)
  • Các middleware dùng để thực thi custom code của bạn trong quá trình chạy ReportFrame
ReportFrame(
  tableName, //tên bảng phụ, yêu cầu phải có
  ?options, //các cài đặt bên cạnh bảng phụ
  ?parameters, //các tham số truyền vào, thường từ bộ lọc, nổi bật nhất thường là FromDate/ToDate
  ?middlewares, //các middleware dùng để chèn code giữa các thao tác hoạt động trong ReportFrame
)

Một ví dụ setting bao gồm như sau:

$report = ReportFrame(
  'report_test', //lấy bảng report_test trong CSDL
  [
    "LogQuery" => 1, //in các câu lệnh query thực thi bởi ReportFrame
    "DoNotSumTree" => 1, //tắt tự động tính tổng trên cây báo cáo
  ],
  [
    "yyyy" => date_format('Y', $filter['FromDate']) //lấy năm từ FromDate làm tham số truyền vào
  ],
  [
    "BeforeQuery" => fn($query) => $query . " LIMIT 3" //thêm giới hạn 3 hàng trong mỗi query
  ]
)

Sau đó, chúng ta có thể lấy dữ liệu báo cáo:

f

$report->execute('glm_gl_books');

f

$data

f

=

f

$report->returnData();

f

//...code

f

hậu

f

quá

f

trình

f

lấy

f

dữ

f

liệu

f

return

f

json_encode(

f

[

f

"data" => $data ] );