Bạn bán một loại cà phê Arabica. Nhưng khách không mua chung chung "một loại cà phê" — họ mua gói 250g rang vừa, hoặc túi 1kg rang đậm. Cùng một hạt cà phê, nhưng có nhiều phiên bản khác nhau về khối lượng và kiểu rang.
Cách làm ngây thơ là tạo tay từng sản phẩm: "Cà phê 250g rang vừa", "Cà phê 250g rang đậm", "Cà phê 500g rang vừa"... Ba mức khối lượng nhân hai kiểu rang là sáu sản phẩm phải gõ vào, và lần sau thêm một kiểu rang nữa là phải ngồi tạo thêm ba cái. Vừa mệt vừa dễ sót.
Odoo có cách gọn hơn hẳn: bạn khai thuộc tính (khối lượng có những giá trị nào, kiểu rang có những giá trị nào) rồi gắn vào một sản phẩm. Odoo tự động sinh ra đủ mọi tổ hợp cho bạn. Đó chính là biến thể (variants). Bài này làm từ số 0 để bạn thấy nó chạy ra sao.
Biến thể là gì, nói cho dễ hiểu
- Mẫu sản phẩm (product template): thứ chung chung — "Cà phê Arabica đặc sản". Đây là cái bạn đặt tên, mô tả, gắn hình.
- Thuộc tính (attribute): một chiều để phân loại — ví dụ "Khối lượng", "Kiểu rang", "Màu sắc", "Kích cỡ". Mỗi thuộc tính có vài giá trị.
- Biến thể (variant): một phiên bản cụ thể để thật sự đem bán và quản kho — ví dụ "Cà phê Arabica đặc sản (500g, Rang đậm)".
Bạn chỉ khai template và các thuộc tính; biến thể do Odoo tự tạo. Ba mức khối lượng × hai kiểu rang = sáu biến thể — bạn không gõ cái nào.
Bước 0: Bật tính năng biến thể
Tính năng này mặc định tắt cho gọn. Vào Bán hàng → Cấu hình → Cài đặt, tìm mục Danh mục sản phẩm (Product Catalog) và bật Biến thể (Variants), rồi bấm Lưu. Từ giờ sản phẩm mới có thêm tab để khai thuộc tính.
Nếu bạn vừa bật mà chưa thấy tab hiện ra, hãy tải lại trang (F5) — giao diện cần nạp lại menu một lần.
Bước 1: Khai một thuộc tính
Vào Bán hàng → Cấu hình → Thuộc tính (Attributes), bấm Mới, đặt tên Khối lượng rồi thêm các giá trị 250g, 500g, 1kg.

Hình 1: Thuộc tính Khối lượng với ba giá trị 250g / 500g / 1kg. Hai ô cần để ý: Loại hiển thị (ở đây là Radio — khách chọn một trong các nút tròn) và Tạo biến thể đang để Tức thời — nghĩa là Odoo tạo sẵn mọi biến thể ngay khi bạn gắn thuộc tính. Ô "Giá bổ sung mặc định" để trống (0,00) vì các cỡ ở đây chưa cộng thêm tiền — ta sẽ nói tới nó ở cuối bài.
Làm thêm một thuộc tính nữa tên Kiểu rang với hai giá trị Rang vừa và Rang đậm. Vậy là ta có hai chiều phân loại: khối lượng và kiểu rang.
Bước 2: Gắn thuộc tính vào một sản phẩm
Tạo (hoặc mở) mẫu sản phẩm Cà phê Arabica đặc sản. Trên biểu mẫu sản phẩm giờ có tab Thuộc tính & biến thể. Mở tab đó, bấm Thêm một dòng, chọn thuộc tính Khối lượng và tick cả ba giá trị; thêm một dòng nữa cho Kiểu rang với hai giá trị.

Hình 2: Hai dòng thuộc tính đã gắn vào sản phẩm — Khối lượng (250g, 500g, 1kg) và Kiểu rang (Rang vừa, Rang đậm). Ngay khi lưu, để ý nút tròn góc trên cùng bên trái hiện "6 Biến thể": Odoo đã tự sinh đủ 3 × 2 = 6 phiên bản. Dòng chữ xám phía dưới là cảnh báo đáng nhớ: thêm hoặc xoá thuộc tính sẽ xoá và tạo lại toàn bộ biến thể hiện có — nên cân nhắc kỹ trước khi sửa thuộc tính của sản phẩm đang bán.
Con số 6 không phải tôi tự tính rồi gõ vào — nó là smart button do Odoo tự đếm sau khi sinh biến thể. Bạn khai hai thuộc tính, Odoo lo phần nhân tổ hợp.
Bước 3: Xem sáu biến thể Odoo vừa tạo
Bấm vào nút "6 Biến thể" ở Hình 2, Odoo mở danh sách các phiên bản thật:

Hình 3: Sáu biến thể — đủ mọi tổ hợp: 250g × (Rang vừa / Rang đậm), 500g × (Rang vừa / Rang đậm), 1kg × (Rang vừa / Rang đậm). Cột Giá trị biến thể ghi rõ từng tổ hợp; cột Giá bán đang đồng loạt 280.000 vì ta chưa đặt phụ phí theo cỡ. Mỗi dòng này là một sản phẩm có thể bán và có tồn kho riêng — bán một túi 1kg rang đậm sẽ trừ kho đúng biến thể đó, không đụng tới 250g rang vừa.
Đây là điểm mấu chốt: mỗi biến thể tồn kho và bán độc lập. Trên đơn bán hàng, khi bạn gõ "Cà phê Arabica đặc sản", Odoo sẽ hỏi bạn chọn khối lượng và kiểu rang nào — rồi đưa đúng biến thể đó vào đơn.
Khi các cỡ có giá khác nhau
Thực tế túi 1kg thường đắt hơn gói 250g. Bạn không phải sửa tay từng biến thể: quay lại tab Thuộc tính & biến thể, bấm Cấu hình ở dòng thuộc tính, rồi đặt "Giá bổ sung" cho từng giá trị — ví dụ 1kg cộng thêm 400.000. Odoo sẽ cộng khoản đó vào giá của mọi biến thể chứa "1kg". Đó là lý do ở Hình 1 có cột Giá bổ sung mặc định; bài này để 0 cho dễ nhìn, còn thực tế bạn sẽ dùng tới nó.
Vài lưu ý cho người mới
- Đừng lạm dụng thuộc tính. Ba thuộc tính, mỗi cái 4 giá trị là 4×4×4 = 64 biến thể — nhiều khi quá tay. Chỉ tạo thuộc tính cho những chiều bạn thật sự cần quản kho/giá riêng.
- Cân nhắc trước khi đổi thuộc tính của sản phẩm đang bán — như cảnh báo ở Hình 2, Odoo sẽ tạo lại biến thể, và các tùy chỉnh cũ trên biến thể có thể mất.
- "Tức thời" hay "Linh động"? Ở Hình 1, chế độ Tức thời tạo sẵn mọi biến thể (dễ theo dõi kho). Còn Linh động chỉ tạo biến thể khi có đơn dùng tới nó — hợp với trường hợp tổ hợp quá nhiều mà bạn không bán hết mọi kiểu.
Nhớ ba ý
- Khai thuộc tính một lần, Odoo tự sinh mọi tổ hợp biến thể — bạn không gõ tay từng phiên bản.
- Mỗi biến thể là một sản phẩm bán và tồn kho độc lập, nhưng vẫn gom chung dưới một mẫu sản phẩm cho gọn.
- Giá khác nhau theo cỡ thì đặt "Giá bổ sung" ở từng giá trị thuộc tính, không sửa tay từng biến thể.
Giờ một sản phẩm đã có nhiều phiên bản với giá nền như nhau. Nhưng còn chuyện bán cho khách sỉ rẻ hơn khách lẻ, hay mua càng nhiều càng giảm giá thì sao? Đó là việc của bảng giá. Phần 67 ta sẽ dựng Bảng giá (Pricelists) theo khách và theo số lượng.