⛔ CRITICAL |
Category: Odoo Tips |
ID: T01 |
Owner: CEO
T01 — OdooClient.search_read() mặc định limit=100
Tóm tắt
OdooClient.search_read() có default limit=100. Mọi query aggregate PHẢI dùng limit=0 để lấy hết records. Nếu không, data bị cắt ngầm mà không có warning.
Chi tiết
Khi gọiOdooClient.search_read() mà không truyền limit, Odoo trả về tối đa 100 record.
Điều này đặc biệt nguy hiểm với query aggregate (tính tổng doanh thu, đếm đơn hàng...)
vì kết quả bị cắt ngầm.
CEO Dashboard ngày 10/03 báo POS revenue = 111M. Thực tế = 303M. Query chỉ lấy 100/341 orders. Sai lệch 192M (~63%).
Signature của function:
def search_read(self, model, domain, fields, limit=100, offset=0) -> list
Ảnh hưởng
Cách xử lý / Phòng tránh
1. Mọi query aggregate: luôn dùnglimit=0
2. Query phân trang (hiển thị list): dùng limit=N, offset=M
3. Code review: search search_read trong codebase, kiểm tra limit parameter
4. Skill scripts: template /odoo-script cần include limit=0 cho aggregate
Bằng chứng / Tham khảo
/root/odoo_daily_operation/HR/scripts/odoo_client.py — search_read method/root/odoo_daily_operation/.claude/memory/MEMORY.mdLiên quan
📚 Published from Company Knowledge Base — T01
Last updated: 2026-03-10
Review by: 2026-06-08