При настройке маркетинговых акций в программах 1С:Предприятие (Управление торговлей 11, Розница 2, ERP) часто возникает задача: применить скидку на весь ассортимент, за исключением конкретной группы товаров или сегмента. Это актуально для товаров с низкой маржой, когда необходим анализ наценки, подакцизной продукции или позиций, на которые цена и так установлена на минимальном уровне (для автоматической защиты цен пригодится контроль минимальных цен в РМК для 1С). Разберем подробно, какими способами можно реализовать это исключение, проанализируем риски каждого метода и выберем наиболее стабильный вариант.
Рассмотрим самый распространенный и корректный с точки зрения логики системы способ — настройку приоритетов внутри групп совместного применения скидок. В 1С скидки редко существуют сами по себе; они объединяются в группы, для которых важен подробный отчет по скидкам и которые определяют, как скидки будут взаимодействовать друг с другом: складываться, вытесняться или выбираться по максимальному значению.
Для реализации исключения выполним следующие шаги:
Скидки (наценки).Вытеснение.Проанализируем ситуацию: когда система начинает расчет, она сначала обращается к скидке с наивысшим приоритетом. Если товар входит в исключаемый сегмент, срабатывает первая скидка (0%). Так как группа настроена на Вытеснение, расчет на этом останавливается, и основная скидка 10% к этому товару уже не применяется. Если же товар не входит в этот сегмент, система пропускает первую настройку и применяет основную скидку.
В современных версиях 1С (УТ 11.4+ и Розница 2.3+) механизм отборов стал более гибким. Мы можем настроить исключение внутри самой карточки скидки, не прибегая к созданию дополнительных «нулевых» скидок. Разберем, как это сделать через конструктор условий.
В форме настройки скидки на закладке «Условия предоставления» (удобнее через инструмент упрощения настройки скидок и маркетинговых акций) или в области действия можно использовать механизм компоновки данных. Вместо стандартного выбора сегмента, попробуем настроить фильтр «от противного»:
В поле выбора номенклатуры выберем условие Номенклатура.СегментНоменклатуры, укажем вид сравнения Не в списке или Не равно и выберем наш исключаемый сегмент. Таким образом, скидка физически «не увидит» товары, которые попадают под это условие, и расчет по ним производиться не будет.
Как показывает практика, в некоторых версиях конфигурации Розница 2.3 система может блокировать запись скидки с нулевым процентом. В таком случае на помощь приходят ценовые группы. Проанализируем этот алгоритм:
Сначала необходимо убедиться, что в настройках маркетинга включена опция использования ценовых групп. После этого в самой форме скидки (наценки) появится табличная часть, где можно перечислить конкретные ценовые группы, на которые распространяется действие акции. Если товар принадлежит ценовой группе, которой нет в этом списке, скидка к нему не применится. Это более «жесткий» метод, так как ценовая группа у товара может быть только одна, в отличие от сегментов, что минимизирует риск случайного пересечения правил.
Разберем ситуацию, предложенную в одном из сообщений форума: создать группу Сложение, где одна скидка дает +10%, а вторая (для исключаемого сегмента) дает -10% (наценку). На первый взгляд, в сумме должен получиться 0, но это опасное заблуждение.
Выясним причину риска. Все дело в последовательности вычислений и округлениях. Рассмотрим пример расчета в codebig:
// Математическая ловушка последовательного применения
Цена_Базовая = 100.00;
Скидка_Процент = 10;
Наценка_Процент = 10;
// Шаг 1: Применяем скидку
Цена_После_Скидки = Цена_Базовая - (Цена_Базовая * Скидка_Процент / 100); // 90.00
// Шаг 2: Применяем "компенсирующую" наценку к результату
Цена_Итоговая = Цена_После_Скидки + (Цена_После_Скидки * Наценка_Процент / 100); // 90 + 9 = 99.00
Как мы видим, итоговая цена составила 99 рублей вместо исходных 100. Если в настройках системы стоит флаг «Применять скидки последовательно», вы гарантированно получите расхождения. Даже если скидки складываются арифметически (10% - 10% = 0%), на больших объемах данных и при использовании сложных округлений до копеек могут возникать ошибки в чеках ККМ, что приведет к невозможности пробития чека из-за расхождения сумм по строкам и по итогу документа.
Для того чтобы гарантированно защитить определенный сегмент товаров от любых маркетинговых активностей (даже ошибочно настроенных в будущем), рекомендуется использовать механизм Максимальный процент скидки. Этот инструмент является «предохранителем» в системе 1С — выявить товары с низкой маржой для установки ограничений поможет отчет для анализа прибыли и наценки товаров.
Посмотрим, как его настроить:
Проанализируем техническую сторону работы сегментов. В 1С существует три способа формирования сегмента номенклатуры:
1. Формировать вручную: самый стабильный, но трудозатратный метод.
2. Периодическое обновление: оптимальный вариант. Система раз в сутки (или по расписанию) обновляет состав сегмента.
3. Формировать динамически: самый опасный вариант для расчета скидок.
При использовании динамического сегмента, в момент открытия каждого чека или подбора товара, система выполняет сложный SQL-запрос к базе данных, чтобы проверить, входит ли товар в сегмент прямо сейчас. Если в чеке много позиций, а база данных большая, это приведет к значительным задержкам (зависанию) рабочего места кассира (РМК). Мы рекомендуем всегда использовать сегменты с периодическим обновлением для целей расчета скидок. Для ускорения обработки данных можно применить расширение для оптимизации расчета скидок.
Подводя итог, для исключения сегмента из скидок в 1С:УТ 11 мы рекомендуем использовать комбинацию методов: объединение скидок в группу Вытеснение с приоритетной нулевой скидкой и установку Максимального процента скидки 0% для особо важных позиций. Это обеспечит корректность математических расчетов и защитит от человеческого фактора при настройке будущих акций.