Как в 1С:УТ 11.5 настроить одну скидку для работы в режимах сложения и умножения одновременно?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В практике торговых предприятий часто возникает задача реализации сложных маркетинговых схем. Типичный пример: одна и та же скидка (например, 25%) в зависимости от условий должна либо суммироваться с другими скидками (применяться к первоначальной цене), либо умножаться (применяться к остатку после предыдущих скидок). В типовой конфигурации 1С:Управление торговлей 11.5 логика взаимодействия скидок определяется правилами группы, в которую они входят, что создает определенные трудности при настройке. Рассмотрим, как решить эту задачу максимально эффективно.

Проблема использования групп скидок

В справочнике СкидкиНаценки логика взаимодействия привязана к группе, что иногда осложняет продажу по различным ценам в зависимости от количества. Мы можем выбрать один из вариантов:

  1. Сложение — проценты всех скидок в группе суммируются и применяются к базовой цене.
  2. Последовательное применение — скидки применяются по очереди, каждая следующая — к сумме, оставшейся после предыдущей.
  3. Максимум — выбирается одна самая выгодная скидка.
  4. Вытеснение — срабатывает скидка с наивысшим приоритетом.

Проблема автора заключается в том, что один и тот же элемент справочника не может находиться в двух группах одновременно. Разберем три способа обхода этого ограничения.

Решение 1: Дублирование элементов и синхронизация по ID

Проанализируем самый простой вариант. Мы можем выполнить быструю установку скидок и создать два идентичных элемента в справочнике СкидкиНаценки:

Однако, если наша скидка является расчетной или данные о ней должны выгружаться во внешние системы (сайт, мобильное приложение) под единым идентификатором, возникает проблема уникальности. Чтобы решить ее, воспользуемся механизмом Дополнительных реквизитов.

Выясним, как это настроить: добавим для справочника СкидкиНаценки доп. реквизит «Внешний ID». Присвоим обоим элементам одинаковое значение в этом поле. Теперь при программной обработке или выгрузке отчетов мы сможем группировать эти скидки по нашему пользовательскому идентификатору, игнорируя тот факт, что в базе 1С это разные ссылки.

Решение 2: Использование вложенности групп (Иерархия)

Рассмотрим ситуацию, когда можно обойтись стандартной иерархией без дублирования. Система обрабатывает дерево скидок сверху вниз. Мы можем создать корневую группу с правилом Последовательное применение. Внутри нее создадим подгруппу с правилом Сложение.

Посмотрим на алгоритм расчета в таком случае:

  1. Система заходит в подгруппу «Сложение», вычисляет суммарный процент всех скидок внутри и применяет его к цене.
  2. Полученный результат становится базой для следующего шага на уровне корневой группы.
  3. Следующая скидка, находящаяся в корневой группе (вне подгруппы), будет применена уже к остатку.

Этот метод требует аккуратной настройки Приоритетов (проверить результат поможет подробный отчет по скидкам). Скидки с более высоким приоритетом обрабатываются раньше.

Решение 3: Внешняя обработка для типа «Расчетная скидка»

Если логика выбора между «сложением» и «умножением» динамическая (например, зависит от состава корзины), наиболее надежным вариантом будет использование программного кода. В УТ 11.5 предусмотрен тип скидки «Наценка (скидка) процентом (расчетная)».

Проанализируем ситуацию: при выборе этого типа в карточке скидки появляется возможность подключить внешнюю обработку. Это позволяет нам полностью контролировать математику расчета. Разберем пример логики, которую можно реализовать в коде обработки:


// Пример логики в экспортной процедуре расчета
Процедура РассчитатьСкидку(ПараметрыРасчета) Экспорт
    
    БазоваяЦена = ПараметрыРасчета.Цена;
    ТекущаяЦена = ПараметрыРасчета.ЦенаПослеПредыдущихСкидок;
    
    // Если условие требует сложения (от изначальной суммы)
    Если ПараметрыРасчета.УсловиеСложенияВыполнено Тогда
        СуммаСкидки = БазоваяЦена * 0.25;
    // Если условие требует умножения (от остатка)
    Иначе
        СуммаСкидки = ТекущаяЦена * 0.25;
    КонецЕсли;
    
    ПараметрыРасчета.Результат = СуммаСкидки;
    
КонецПроцедуры

Этот способ позволяет избежать создания лишних элементов в справочнике и дает полную свободу действий. Мы используем объект СкидкиНаценки как "оболочку", а всю математику выносим во внешний файл. Это упрощает обновление конфигурации, так как типовые механизмы остаются нетронутыми.

Важные нюансы при настройке

При работе со скидками в УТ 11.5 необходимо помнить о следующих моментах:

Подведем итог: если вам нужна простая настройка «здесь и сейчас», используйте дублирование элементов с общим доп. реквизитом для идентификации. Если же требуется гибкость и вы не хотите загромождать справочник — выбирайте внешнюю обработку для расчетной скидки. Это позволит реализовать любую, даже самую сложную математическую модель применения скидок, сохраняя чистоту информационной базы.

← На главную