← MOT MOW →

Nguyên lý — một khung, hai nửa, ba hình dạng

Một báo cáo (MOUT) hay một bảng nhập (MOIT) đều là cùng một khung sinh ra bằng khai báo, không code. Tách bạch hai nửa: nửa khung (cột nào, thứ tự, định dạng, cột nào cộng tổng) là config thuần; nửa số liệu là một hàm DOT có tên đã được duyệt. Ghép khung + hàm = bảng. Đổi bộ lọc, đổi kỳ → cùng khung, số liệu mới.

Nửa KHUNG — config thuần (không code)

Khai: cột key · nhãn · type (text/số/tiền/ngày/%/chip) · canh lề · agg (none/sum/avg/count/min/max). Điều kiện duy nhất để DOT dựng được: mọi cột phải có trong field_registry với kiểu hiển thị đã duyệt — dùng chung từ vựng field với MOIT.

Nửa SỐ LIỆU — hàm DOT có tên

Mỗi tổng hợp = một hàm đã duyệt: fn_doanh_thu_theo_khach… Hàm trả về { columns, rows, totals }. Dòng tổng nằm trong output của DOT (SUM chạy ở SQL trên toàn tập đã lọc), khung chỉ vẽ lại — không tự cộng. Đúng kế toán, khớp Điều 28 (Nuxt = render shell).

Hai primitive luôn do khung lo, miễn phí: (1) cột STT = cột 0 tự sinh, đếm offset + i + 1, không bao giờ lưu vào DB, không bao giờ query — đánh số sau khi đã sort. (2) dòng tổng chỉ vẽ lại số DOT đưa. Khung không tính một đồng nào.

1 · MOUT-List — báo cáo phẳng (cột cố định + Σ bật từng cột)

Bạn nêu cột & thứ tự; bật/tắt Σ ở bất cứ cột số nào. STT tự đếm. Thử bật/tắt cột, gạt Σ, lật trang — để ý dòng tổng không đổi theo trang (tổng toàn tập, không phải tổng trang đang xem).

Khai báo cột

Tick = hiện cột · Σ chỉ bật được trên cột số

Phân trang

Bật để thấy STT chạy tiếp & tổng giữ nguyên

    

2 · MOIT-Grid — ma trận nhập 2 chiều (ô sửa được)

Hàng × cột cố định, mỗi ô nhập số. Cùng một khung: STT, tổng theo cột (dưới cùng) và tổng theo hàng (cột phải) — recompute tức thì khi gõ. Đây là MOIT 2 chiều: ví dụ nhập kế hoạch sản lượng tháng.

→ DB trực tiếp đổi sang → bảng chờ duyệt chỉ là 1 cờ trong khai báo, khung không đổi
Trong MOIT-Grid tổng recompute client-side là hợp lệ — vì người dùng đang nhập, cần phản hồi tức thì và dữ liệu là toàn bộ lưới trước mắt (không phân trang). Khác hẳn MOUT-List: ở báo cáo, tổng phải query-side.

3 · MOUT-Pivot — ma trận cột động (tổng cả hai trục)

Khác List ở một điểm cốt tử: cột không liệt kêsinh từ một chiều dữ liệu (ở đây: 4 quý). Bạn chọn chiều-hàng + chiều-cột + metric; bao nhiêu giá trị thì bấy nhiêu cột. Tổng hàng, tổng cột, và tổng chung. Nền đã có ở Luật Pivot / Điều 26 — đưa vào đây để thấy cả 3 hình dạng cùng một engine.

Chiều hàng: VùngChiều cột: Quý (động)Metric: SUM Thành tiền

4 · Vì sao nhanh hơn (hoặc bằng) Excel

Khối dựng sẵn đã gõ kiểu & duyệt → không viết công thức, không chỉnh định dạng, không quét vùng SUM (hết bug "kéo thiếu 1 dòng"). Tổng đúng theo thiết kế vì khai ở cột, chạy ở SQL. Khung tái dùng: nhân bản báo cáo, đổi bộ lọc kỳ → xong. Mở lại = số liệu mới (live), không phải bản chụp tĩnh.

Điều Excel vẫn nhanh hơn: khám phá ad-hoc một lần. Nên có nút Xuất Excel làm cửa thoát ở ranh giới — bàn giao cho Excel việc nó giỏi, không cố nhồi mọi thứ vào khung.

5 · Contract khai báo — một schema, ba mode

Cùng một khai báo; chỉ mode đổi cách sinh cột. stttotals_row là primitive bật/tắt.