Настройка скидок в 1С-Битрикс - проблемы и падение производительности

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Эта публикация написана после неоднократных обращений как клиентов, так и (к горести моей) партнеров. Темы обращений были разные, но причиной в итоге оказывался один и тот же сценарий, реализуемый как через админку, так и через api.

Все обращения можно было разбить на три группы:
1. Резкий рост объема базы, конкретно - таблицы b_sale_order_discount. Что характерно, правил корзины на сайте немного.
2. Долгое время работы компонентов корзины и заказа, а в случае включения режима "Использовать только правила корзины" - еще и увеличение времени генерации страниц каталога. Обязательный (но недостаточный) признак - большое число товаров на сайте (более 1000). Хотя причин такого поведения может быть множество и скидки - только одна, зачастую не самая важная.
3. Жалобы на затрудненную работу контент-менеджера (много времени уходит на настройку правил корзины, особенно при использовании пресетов). Дополнительная проблема (при большом количестве торговых предложений) - долго грузится форма выбора товара (пока эта проблема в стадии решения, увы).

Рассматривать будем на примере правил корзины, но для старых скидок на товары (модуля Торговый каталог) все аналогично.

Быстрый анализ выявляет несколько правил корзины с условиями вида (товаров в одном правиле - несколько десятков, а то и сотен(!)):

без использования пресетов

screen-no-presets.png

также без использования пресетов (наихудший вариант, как правило при создании через api)

screen-no-presets-api.png

с пресетами

screen-with-presets.png

Т.е. условием применения правила выступает ID товара. Это самый простой вариант, который может быть использован лишь в случае небольшого магазина либо, например, для разовой акции на конкретные товары. Для ситуации, когда объем товарной номенклатуры велик, либо постоянно меняется (часто заводятся новые позиции, удаляются/деактивируются старые) настройка правил корзины должна быть иной.

Итак, первое, что нужно сделать - завести для инфоблока товаров (или инфоблока предложений - зависит от того, могут ли разные правила применяться к разным предложениям одного и того же товара) свойство типа Строка, Число или Список. Какой тип выбрать - определяется тем, сколько величин скидок планируется. Если скидок немного, их значения не меняются - тогда выберите списочное свойство. Если же магазин большой (с разделением прав между сотрудниками) либо планируется периодически расширять набор правил - берите свойство типа Число. Тип Строка универсальней, но потребует аккуратности:

Для типа Список

screen-list-01.png
screen-list-02.png

настройка правил (отказываемся от пресетов) - на скриншотах ниже пример настройки ДВУХ правил. Можно объединить их в одно, но пока (sale 18.5.5, catalog 18.5.5) нет возможности показа таких правил (с несколькими действиями в одном правиле) в каталоге (важно!).

screen-list-03.png

screen-list-04.png

Для полей типа Число или Строка

screen-number-01.png

заполняем свойство значением для товара

screen-number-02.png

настройка правила

screen-number-03.png

Для типа Строка аналогично типу Число, за исключением того, что можно писать что-то вида

screen-string-01.png

верное значение для правила

screen-string-02.png

и ошибочное (точка в конце - не сработает, т.к. нужно точное совпадение)

screen-string-03.png


Собственно, на этом все. Подведу итоги. Условие "Товар равен" может использоваться при небольших объемах либо для разовых акций. Для остальных случаев настоятельно рекомендуется использовать способ, показанный выше. В чем его преимущество? Условия правил корзины короче, их нет нужды перенастраивать при изменении номенклатуры. Применится правило или нет, определяет значение свойства - тут спокойно отработает и обмен с 1С, и csv-импорт, и быстрое редактирование в списке элементов. Нет роста объема базы, быстрее работа.
Источник: https://dev.1c-bitrix.ru/community/blogs/vws/setup-discounts-problems-and-drop-performance.php