Ярослав пишет:Как раз пришлось реализовывать индивидуальные цены для товаров.
40 колонок цен со скидками на товары уже существовали на базе стандартного справочника цен (причем есть товары, где скидка не должна превышать определенный процент).
Но захотели создавать цены в разрезе брендов, категорий и отдельных товаров. При этом настройку делают на стороне 1с.
Уговорить реализовать скидками в корзине не получилось.
В итоге сделал модуль с отдельной таблицей индивидуальных цен (товар-пользователь-цена). При расчете цены товара сначала выборка делается из этой таблицы. В таблицу заливаю данный из csv файла с помощью LOAD INFILE, поэтому проблем с синхронизацией нет. Файл формируется на стороне 1с сразу с рассчитанными ценами для клиента. Попадают только товары, затронутые скидкой. Обычно из около 300-500 для клиента.
Все это касается только отображения цены.
Очень здорово, что вы не побоялись ввязаться в эту крайне непростую задачу.
Насколько я понимаю, вы добавляете join вашей таблицы во время выборки товаров, чтобы перекрыть цены из xcost?
Мы детально проектировали вариант с таблицей комплектация товара-пользователь-тип цен-цена-дополнительный уникализатор, но мы сошлись на том, что этот вариант можно реализовать только с очень большими оговорками (грубо говоря только в конкретном случае, игнорируя многие возможные кейсы применения), что нам как разработчикам движка не подходит.
Мы еще думали сделать дополнительный уникализатор, чтобы можно было вообще сделать самые невероятные вещи с помощью сторонних модулей, например, каждый нечетный день для какой-то группы клиентов давать скидки на какие-то группы товаров. В данном случае флаг нечетного дня был бы доп. унификатором.
Одна из проблем - это был объем такой таблицы, если на сайте 10 000 товаров, 1000 пользователей и 2 типа цен, то это уже 20 млн. записей. JOIN такой таблицы даже с индексами будет довольно дорогой по ресурсам. И это я привел очень скромные параметры - 10k товаров и все с одной комплектацией и без доп.унификаторов.
Второй из важнейших проблем такой схемы - обновление данных. Допустим, пользователь перешел какой-то порог и ему вдруг нужно все цены пересчитать (он достиг нового уровня скидок), а если в магазине много товаров - не совсем понятно в какой момент это делать, так как это занимает длительное время? Если в момент наступления события (достижения нового уровня скидок), то клиент может не дождаться, когда у него оформится заказ, например. Если по крону, то какое-то время цены на сайте будут неактуальны.
Вариант как у вас - что источник новых цен - всегда 1С частично снимает эту проблему, но делает цены какое-то время неактуальными на сайте для пользователя, хотя возможно это очень небольшое время.