Skip to Content

Kiến Trúc Bảng Giá B2B Trong Odoo 20: Từ Bảng Giá Chung Đến Giá Khách Hàng Riêng

Kiến Trúc Bảng Giá B2B Trong Odoo 20: Từ Bảng Giá Chung Đến Giá Khách Hàng Riêng

Trong hoạt động bán hàng B2B, cùng một sản phẩm có thể được báo với các mức giá khác nhau cho từng khách hàng. Một nhà phân phối lâu năm nhận chiết khấu theo hợp đồng khung. Một đại lý mới bắt đầu mua theo mức giá niêm yết. Một đơn hàng mua số lượng lớn được áp dụng bậc giá riêng, trong khi đơn hàng lẻ giữ nguyên giá gốc. Ở chiều ngược lại, kênh bán lẻ và cửa hàng lại đòi hỏi một mức giá thống nhất trên toàn bộ hệ thống.

Khi số lượng khách hàng và số lượng mặt hàng tăng lên, việc duy trì những mức giá khác biệt này bằng bảng tính rời rạc tạo ra một câu hỏi vận hành: làm sao để mỗi báo giá xuất ra luôn đúng với chính sách đã định, mà không cần nhân viên bán hàng phải tra cứu, ghi nhớ hay chỉnh tay từng dòng? Câu hỏi trung tâm của bài viết là kiến trúc bảng giá — cách tổ chức các lớp giá, thứ tự ưu tiên của các quy tắc, và cơ chế gắn giá với từng khách hàng — trong ứng dụng Bán Hàng của Odoo 20.

Góc tiếp cận của bài là cấu trúc và cơ chế: bảng giá (pricelist) như một lớp điều khiển động, logic ưu tiên bốn bước khi nhiều quy tắc cùng khớp, bốn loại hình giá, và cách phân quyền để giá trị giao dịch không bị sai lệch khi hệ thống mở rộng ra nhiều người dùng và nhiều công ty.

📑 Mục Lục Bài Viết

Vấn Đề Giá Bán Trong B2B

🏭 B2B và bán lẻ có yêu cầu giá khác nhau

Bán lẻ vận hành trên một nguyên tắc đơn giản: cùng một sản phẩm, cùng một mức giá cho mọi khách hàng tại cùng một điểm bán. Giá được in trên nhãn, hiển thị trên kệ, và chỉ thay đổi theo chu kỳ do bộ phận bán lẻ quyết định. Sự nhất quán này là nền tảng của niềm tin tại điểm bán.

Bán hàng B2B lại vận hành theo một cấu trúc khác. Mỗi khách hàng là một quan hệ thương mại riêng, với lịch sử giao dịch, thể tích mua hàng và các thỏa thuận chiết khấu tích lũy qua các kỳ. Mức giá cuối cùng của một đơn B2B thường là kết quả của nhiều lớp điều kiện chồng lên nhau: giá gốc của sản phẩm, chiết khấu theo nhóm khách, bậc giá theo số lượng, và điều chỉnh theo từng đơn. Không có một "giá niêm yết" duy nhất nào áp dụng cho tất cả.

📉 Chi phí của việc duy trì giá bằng bảng tính

Ở quy mô nhỏ, các mức giá đặc biệt thường được lưu trong những tệp bảng tính riêng: một bảng cho từng nhóm khách, một cột ghi chú cho từng khoản chiết khấu. Khi số khách hàng tăng, mỗi lần điều chỉnh giá gốc đòi hỏi phải rà soát lại các tệp này để cập nhật đồng bộ. Rủi ro nằm ở chỗ không có cơ chế phát hiện mâu thuẫn: hai bảng có thể ghi hai mức giá khác nhau cho cùng một khách, và sai lệch chỉ lộ ra khi khách hàng đối chiếu hóa đơn.

Chi phí vận hành phát sinh từ ba nguồn: thời gian tra cứu và nhập tay cho mỗi báo giá, khả năng hai nhân viên áp dụng hai mức giá khác nhau cho cùng một tình huống, và việc thiếu một điểm tham chiếu duy nhất để kiểm tra một báo giá có đúng chính sách hay không. Kiến trúc bảng giá được thiết kế để giải quyết đúng ba nguồn chi phí này.

🎯 Ba yêu cầu của một kiến trúc giá

Một kiến trúc bảng giá cho B2B cần đáp ứng ba yêu cầu. Thứ nhất, tính nhất quán: cùng một tập điều kiện (khách hàng, sản phẩm, số lượng) luôn sinh ra cùng một mức giá, bất kể ai là người lập báo giá. Thứ hai, khả năng giải thích: khi một mức giá xuất hiện, cần truy ngược được về quy tắc nào đã sinh ra nó. Thứ ba, tính phân tầng: giá chung, giá theo nhóm, và giá theo từng khách phải tồn tại song song mà không che lấp lẫn nhau một cách vô tình.

Ứng dụng Bán Hàng của Odoo 20 đáp ứng ba yêu cầu này thông qua một đối tượng trung tâm — bảng giá (pricelist) — cùng một bộ logic ưu tiên được định nghĩa sẵn. Các phần tiếp theo mô tả từng lớp của kiến trúc đó.

Bảng Giá Như Một Lớp Điều Kiển

Quy trình bán hàng và bảng giá trong hệ thống ERP

🧩 Bảng giá là gì trong Odoo 20

Theo tài liệu chính thức của Odoo 20, bảng giá (pricelist) là một phương pháp định giá động: một danh sách các mức giá hoặc quy tắc giá đè lên giá bán được khai báo trên form sản phẩm. Điều chỉnh này có thể áp dụng cho mọi sản phẩm, hoặc được thu hẹp cho một nhóm khách hàng, một nhóm sản phẩm, một khoảng thời gian, hoặc một đơn hàng cụ thể. Bảng giá đưa ra một mức giá được đề xuất, nhưng giá đó luôn có thể bị ghi đè trực tiếp trên phiếu báo giá — nghĩa là cơ chế tự động và quyền điều chỉnh thủ công cùng tồn tại, không loại trừ nhau.

⚙️ Kích hoạt và cấu hình

Tính năng bảng giá được bật trong Sales ‣ Configuration ‣ Settings, ở khu vực Pricing, bằng một ô checkbox và lưu lại. Sau khi kích hoạt, trang Pricelists mở ra từ Sales ‣ Products ‣ Pricelists. Mỗi bảng giá khai báo một loại tiền tệ, và trong môi trường đa công ty, một công ty áp dụng. Một bảng giá có thể được gắn với một nhóm quốc gia (country group) để phục vụ các thị trường khác nhau.

Một chi tiết cấu hình: nếu trên một báo giá không có bảng giá nào được chỉ định, Odoo tự động áp dụng bảng giá mặc định (Default pricelist) — đó là bảng giá đầu tiên trong danh sách không có nhóm quốc gia được gán, đọc theo thứ tự từ trên xuống. Nhờ vậy, mọi báo giá luôn có một mức giá hợp lệ ngay cả khi không ai phải chọn bảng giá.

📜 Quy tắc giá: bốn loại hình

Từng điều chỉnh trong một bảng giá là một quy tắc giá (price rule). Mỗi quy tắc gắn với một phạm vi sản phẩm (tất cả sản phẩm, một danh mục, một sản phẩm, hoặc một biến thể) và một loại hình giá. Tài liệu Odoo 20 liệt kê bốn loại hình: Giảm giá (Discount), Công thức (Formula), Giá cố định (Fixed Price), và Giá gốc (Base Price). Mỗi loại hình phù hợp với một kiểu chính sách khác nhau — giảm theo phần trăm so với giá gốc, tính theo một biểu thức trên giá gốc, hoặc ép về một mức giá tuyệt đối — và được phân tích ở phần riêng bên dưới.

Logic Ưu Tiên Của Các Quy Tắc Giá

Phân tích và theo dõi bảng giá theo thời gian thực

🔎 Khi nhiều quy tắc cùng khớp

Vấn đề cốt lõi của một kiến trúc giá phân tầng không phải là "áp dụng quy tắc nào", mà là "khi nhiều quy tắc cùng khớp với một sản phẩm trong cùng một bảng giá, quy tắc nào thắng". Odoo 20 trả lời bằng một thứ tự ưu tiên bốn bước, được mô tả trong tài liệu chính thức. Xác định rõ thứ tự này là điều kiện để một chính sách giá có thể dự đoán được — tức là cùng một đầu vào luôn cho cùng một đầu ra.

📐 Bốn bước của thứ tự ưu tiên

Bước 1 — từ cụ thể đến tổng quát: quy tắc gắn với một biến thể cụ thể thắng quy tắc gắn với sản phẩm; quy tắc sản phẩm thắng quy tắc danh mục con; danh mục con thắng danh mục cha; danh mục cha thắng quy tắc "mọi sản phẩm". Một mức giá đặc biệt cho đúng một biến thể sẽ luôn đè lên một khoản chiết khấu áp dụng cho cả danh mục.

Bước 2 — số lượng tối thiểu, lớn trước: khi độ cụ thể bằng nhau, quy tắc có ngưỡng số lượng cao hơn thắng. Đây là cơ chế giữ cho bậc giá theo số lượng (ví dụ bậc cho đơn hàng từ 10 đơn vị) không bị một quy tắc chung chung có cùng độ cụ thể đè lên.

Bước 3 — thứ tự danh mục: nếu cả độ cụ thể và ngưỡng số lượng bằng nhau, hệ thống dùng thứ tự phân cấp danh mục được khai báo trên các danh mục, trong đó danh mục con có ưu tiên hơn danh mục cha.

Bước 4 — ngày tạo, mới trước: khi mọi tiêu chí khác đều bằng nhau, quy tắc được tạo gần nhất thắng. Cơ chế này cho phép một quy tắc mới thay thế một quy tắc cũ có cùng điều kiện mà không cần xóa quy tắc cũ ngay lập tức.

🔁 Tại sao thứ tự này tạo ra tính nhất quán

Giá trị của một thứ tự ưu tiên được định nghĩa sẵn nằm ở chỗ nó biến một quyết định rời rạc thành một hàm. Trước đây, "khách A có được mức giá này hay không" phụ thuộc vào việc nhân viên nào lập báo giá và họ nhớ được điều khoản nào. Khi thứ tự ưu tiên thuộc về hệ thống, câu trả lời được tính lại từ cùng một tập điều kiện mỗi lần, và mọi người dùng nhận cùng một kết quả. Tính nhất quán không đến từ việc huấn luyện con người, mà đến từ việc đưa quy tắc ra khỏi trí nhớ và đưa vào cấu trúc dữ liệu.

Bảng Giá Riêng Và Giá Theo Nhóm Khách Hàng

Phối hợp giữa các bộ phận trong quy trình bán hàng B2B

👤 Bảng giá gắn với từng khách hàng

Trong Odoo 20, mỗi khách hàng có một trường Pricelist trên form liên hệ (Sales ‣ Purchase, khu vực Sales). Khi một khách hàng được tạo mới, bảng giá mặc định được gán tự động — kể cả khi trường này để trống, nó vẫn được điền khi form liên hệ được mở lại. Để gán một bảng giá riêng, thao tác nằm ở Sales ‣ Orders ‣ Customers, chọn khách hàng, và chọn bảng giá trong trường Pricelist. Khi khách hàng đó xuất hiện trong một báo giá, trường Pricelist tự điền từ form liên hệ, và vẫn có thể ghi đè thủ công ngay trên phiếu báo giá.

🏷️ Nhóm khách hàng và phân tầng chiết khấu

Thay vì gán bảng giá cho từng khách hàng lẻ, một doanh nghiệp có thể phân nhóm khách theo thể tích, theo vùng, hoặc theo loại hình quan hệ, và gán một bảng giá cho mỗi nhóm. Cơ chế này cho phép tái sử dụng: một chính sách chiết khấu cho "nhóm đại lý" được định nghĩa một lần và áp dụng cho mọi thành viên của nhóm, thay vì khai báo lại cho từng hồ sơ. Khi một khách hàng chuyển nhóm, mức giá của họ thay đổi theo nhóm mới mà không cần sửa từng quy tắc.

🧮 Chiết khấu trên dòng đơn hàng và nút Discount

Ngay cả sau khi bảng giá đã định ra mức giá, một báo giá vẫn có thể mang các khoản chiết khấu theo từng dòng. Khi tính năng Discounts được bật, một cột Disc.% xuất hiện trên tab Order Lines của báo giá. Giá trị dương áp dụng chiết khấu và hiển thị cho khách hàng; giá trị âm tăng giá và không hiển thị — thay vào đó, đơn giá của dòng được điều chỉnh trực tiếp. Nút Discount ở đáy đơn hàng cho phép áp dụng một phần trăm lên toàn bộ dòng hiện có, hoặc tạo một dòng chiết khấu toàn cục với giá trị lũy kế tương đương. Cơ chế này tách biệt hai lớp điều chỉnh: lớp chính sách (bảng giá) và lớp đàm phán (chiết khấu từng đơn), giúp truy ngược được một mức giá cuối cùng về đúng nguồn gốc của nó.

Quản Trị Bảng Giá: Phân Quyền, Đa Công Ty Và Kiểm Soát Biên Lợi

Bảng điều khiển phân tích và kiểm soát dữ liệu bán hàng

🏢 Đa công ty và đa tiền tệ

Mỗi bảng giá khai báo một loại tiền tệ và, trong môi trường đa công ty, một công ty áp dụng. Điều này có nghĩa là hai công ty con thuộc cùng một tập đoàn có thể vận hành hai hệ bảng giá độc lập — một công ty bán trong nước theo đồng nội tệ, một công ty xuất khẩu theo ngoại tệ — mà không làm lẫn dữ liệu của nhau. Đối với các thị trường đa quốc gia, việc gắn bảng giá với nhóm quốc gia cho phép tách biệt chính sách giá theo vùng địa lý ngay trong cùng một cơ sở dữ liệu.

🔐 Phân quyền và kiểm soát truy cập

Khi kiến trúc bảng giá mở rộng ra nhiều người dùng, câu hỏi chuyển từ "mức giá đúng là bao nhiêu" sang "ai được quyền thay đổi nó". Cơ chế phân quyền của Odoo cho phép phân biệt người có thể lập báo giá (đọc và áp dụng bảng giá) với người có quyền sửa các quy tắc giá (thay đổi bảng giá, thêm quy tắc, điều chỉnh bậc). Việc tách hai quyền này là ranh giới giữa vận hành hằng ngày và thay đổi chính sách: một thay đổi quy tắc giá là một quyết định cấp bộ phận, không phải một thao tác cấp nhân viên bán hàng.

📊 Kiểm soát biên lợi

Biên lợi của một đơn hàng là khoảng cách giữa giá bán cuối cùng và giá vốn. Khi bảng giá tự động định ra mức giá, việc kiểm soát biên lợi chuyển thành việc giám sát các điều chỉnh nằm ngoài bảng giá — các khoản chiết khấu trên dòng và các ghi đè thủ công. Vì bảng giá luôn là giá được đề xuất và có thể bị ghi đè, một chính sách kiểm soát biên lợi hiệu quả định nghĩa rõ: ghi đè ở mức nào thì cần phê duyệt, và ai là người được phép phê duyệt. Đây là phần mà phần mềm cung cấp cấu trúc (trường giá, lịch sử, phân quyền) còn quy trình vận hành — ngưỡng phê duyệt và trách nhiệm ký — do doanh nghiệp thiết lập.

Kết Luận

Phân tích tài chính và biên lợi trong hoạt động bán hàng

Kiến trúc bảng giá trong Odoo 20 giải quyết một vấn đề cụ thể của bán hàng B2B: duy trì nhiều mức giá khác nhau cho nhiều khách hàng mà vẫn giữ được tính nhất quán, khả năng giải thích và phân tầng rõ ràng. Ba lớp cấu trúc — bảng giá như lớp điều khiển động, thứ tự ưu tiên bốn bước cho các quy tắc chồng lấn, và bảng giá gắn với từng khách hàng hoặc nhóm — cùng tạo nên một hàm định giá có thể dự đoán được. Phần còn lại của việc vận hành — phân quyền thay đổi chính sách, ngưỡng phê duyệt cho các ghi đè, và trách nhiệm kiểm soát biên lợi — thuộc về quy trình và vai trò mà doanh nghiệp thiết lập trên nền cấu trúc đó.

Đối với một doanh nghiệp đang quản lý giá bằng các tệp bảng tính rời rạc và nhiều mức chiết khấu theo từng khách, việc chuyển các quy tắc này sang một kiến trúc bảng giá có thứ tự ưu tiên được định nghĩa sẵn là bước đi cụ thể để mỗi báo giá xuất ra luôn khớp với chính sách đã định. SkyERP có thể hỗ trợ doanh nghiệp đánh giá hiện trạng bảng giá, thiết kế kiến trúc pricelist phù hợp với cấu trúc khách hàng, và triển khai trên Odoo 20.

Kiến Trúc Bảng Giá B2B Trong Odoo 20: Từ Bảng Giá Chung Đến Giá Khách Hàng Riêng
Nguyễn Nam October 28, 2026
Share this post
Tags
Archive
Sign in to leave a comment
Chi Phí Triển Khai Odoo Cho SME 2026: Cách Đọc Đúng Cấu Trúc Chi Phí Và Lập Ngân Sách Minh Bạch