Mix & Match LS Central: Amount to Trigger tính cả món được giảm
Setup Mix & Match LS Central cho CTKM "bill trên 50k được chọn một món trong rổ giảm 30% hoặc 50%", và vì sao Amount to Trigger cho món rổ tự đủ ngưỡng.
Trong Mix & Match của LS Central, Amount to Trigger so với tổng bill, gồm luôn món sắp được giảm. Với CTKM "bill trên 50k thì được mua một món trong rổ giảm 30% hoặc 50%", khách chỉ cần mua đúng một món rổ giá 50k là món đó tự đủ ngưỡng và được giảm. Setup chuẩn làm đúng phần còn lại của yêu cầu, riêng chỗ ngưỡng phải thêm một đoạn code nhỏ.
Tôi chạy thử ngày 08/10/2026 trên LS Central 28, company dữ liệu demo của LS, cửa hàng thời trang có hàng variant. Khách hàng đặt yêu cầu này đang chạy LS Central 22, phần đó tôi chưa kiểm lại. Tài liệu gốc của LS: Periodic Discounts và How to: Set Up Mix and Match Discounts. Tài liệu chỉ nói offer kích hoạt khi tổng bill vượt Amount to Trigger, không nói tổng đó có gồm món được giảm hay không. Phải chạy thử mới biết.
Yêu cầu của khách#
- Mặt hàng có variant, có quản lý lot hoặc serial.
- Mua hàng bất kỳ, bill trên 50k thì được chọn một món trong một trong hai rổ: rổ giảm 30%, rổ giảm 50%.
- Hàng trong rổ cũng là hàng bán thường. Mua A 50k, mua thêm một A nữa thì A thứ hai được giảm 30%. Trên POS ghi hai dòng: dòng 1 A 50k, dòng 2 A 50k giảm 30%.
Setup Mix & Match đã chạy được#
| Trường | Giá trị |
|---|---|
| Loại offer | Mix & Match |
Discount Type | Line spec. |
Amount to Trigger | 50,000 |
No. of Times Applicable | 1, mỗi bill chỉ giảm một lần |
| Line group B | No. of Items Needed = 1, khai cả trên line group lẫn trên từng dòng offer |
| Dòng offer 1 | Special Group RO30, Disc. % = 30, thuộc group B |
| Dòng offer 2 | Special Group RO50, Disc. % = 50, thuộc group B |
Hai rổ nằm chung một line group và group đó chỉ cần một món, nên mỗi bill chỉ giảm đúng một món, của rổ 30% hoặc rổ 50%. Tách thành hai offer riêng thì khách mua hàng ở cả hai rổ sẽ được giảm cả hai.
Hàng cần giảm theo từng variant thì khai từng dòng Item kèm Variant Code trong group B. Giảm cả mã thì gom vào Special Group như trên.
Vì sao không dựng được group "hàng mua" giảm 0%#
Ý đầu tiên của tôi là thêm group A "hàng mua" phủ toàn bộ hàng bán với Disc. % = 0, để bắt buộc bill phải có hàng thường. Đọc code LS 28 thì thấy cách này không chạy, vì hai lẽ:
- Mix & Match bỏ qua dòng offer loại
All. Chỉ Discount Offer mới dùng loại này. - Mỗi dòng POS chỉ khớp một dòng offer, theo thứ tự Item, Special Group, Product Group, Item Category. Món A đã nằm trong rổ thì không thể đồng thời là hàng mua ở group A.
Ngưỡng 50k vì vậy chỉ còn trông vào Amount to Trigger, và đó là chỗ hở.
Kết quả chạy thử: món rổ tự đủ ngưỡng#
Váy demo giá 80, nên tôi đặt ngưỡng là 80 cho khớp tình huống "món A giá 50k, ngưỡng 50k". Cột giữa là LS chuẩn, cột phải là cùng giỏ hàng sau khi bật đoạn code vá ở mục dưới.
| Giỏ hàng | LS chuẩn | Có vá |
|---|---|---|
| A + A, quét hai lần | Hai dòng: một dòng 80, một dòng 80 giảm 30% còn 56 | Như LS chuẩn |
| A số lượng 2 trên một dòng | LS tự tách hai dòng, một dòng giảm 30%, một dòng giá gốc | Như LS chuẩn |
| Chỉ một món A giá 80 | Vẫn giảm 30% (sai yêu cầu) | Không giảm |
| Hàng thường 45 + A 80 | Vẫn giảm (sai yêu cầu, hàng thường chưa tới 80) | Không giảm |
| Hàng thường 135 + một món rổ 30% + một món rổ 50% | Chỉ giảm một món, LS chọn món giá cao hơn | Như LS chuẩn |
| Hàng thường 135 + hai món mỗi rổ | Chỉ một món được giảm | Như LS chuẩn |
Bill in ra còn có thêm một dòng thông tin 0đ mang mã offer.
Đoạn code vá ngưỡng#
LS có sẵn event OnBeforeCheckAmountToTrigger_CalcMixMatchNew trong codeunit LSC POS Price Utility. Subscriber lấy tổng bill trừ đi giá món đắt nhất trong rổ, tức món LS sẽ giảm, rồi mới so với ngưỡng. Bản chạy thử khoảng 30 dòng AL. Đưa vào app thật thì nên thêm một cờ trên Periodic Discount để chỉ bật logic này cho loại CTKM này, các Mix & Match khác vẫn chạy như chuẩn.
Ba điều phải chốt với khách trước khi lên thật#
- Khách không tự chọn rổ được. Bill có hàng của cả hai rổ thì LS chọn món giá cao hơn, không hỏi. Nếu thu ngân phải hỏi khách muốn rổ nào thì tách hai offer, gắn Coupon hoặc Infocode để thu ngân chọn, kèm đoạn code kiểm ngưỡng.
- Offer khác chen vào. Lúc chạy thử, một offer demo có sẵn giảm 15% cho những món offer test không dùng tới. Lên thật phải rà các offer đang hiệu lực trên hàng trong rổ, rồi xử lý bằng Priority hoặc các cờ Block.
- Giá trên POS của khách lấy theo mã vạch GS1 có lot, do app riêng của khách ghi đè giá. Khuyến mãi tính trên giá đó. Môi trường demo không có app này nên phần giá theo mã vạch tôi chưa thử.
CTKM chạy xong trên POS thì còn phải lên hóa đơn điện tử. Cách lấy diễn giải nằm ở bài diễn giải khuyến mãi trên hóa đơn điện tử LS Central. Một lỗi POS khác cũng làm thu ngân phải chờ: POS LS Central đứng 2 phút vì HttpClient.Timeout.