При настройке системы скидок в конфигурациях, базирующихся на Розница 2.3 или Управление торговлей 11, многие специалисты сталкиваются с неочевидным поведением системы. В частности, при добавлении нескольких условий к одной скидке, они часто начинают работать по принципу «ИЛИ» или применяются выборочно по последнему условию, вместо ожидаемого логического «И». Давайте разберем, как устроена эта механика и какими способами можно реализовать сложные алгоритмы без правки типового кода.
Проблема заключается в архитектуре движка ценообразования. Система 1С:Розница 2.3 при обработке табличной части Условия предоставления скидок не всегда объединяет все строки жестким логическим оператором «И». В ряде случаев, особенно при сложных настройках области применения, алгоритм может интерпретировать условия последовательно. Официально подтвержденная ошибка №00-00435391 указывает на то, что при определенных сочетаниях настроек механизм может работать нестабильно. Однако, вместо того чтобы переписывать программный код, что неизбежно создаст проблемы при последующих обновлениях, лучше воспользоваться встроенными инструментами платформы.
Это самый надежный архитектурный подход. Вместо попыток настроить одну скидку с десятком условий, мы используем механизм Группы совместного применения. Рассмотрим, как исключить уцененный товар из акции:
Минимум.Сегмент номенклатуры, куда попадут все уцененные товары.Когда система доходит до такой группы, она вычисляет обе скидки. Поскольку выбран тип Минимум, при наличии товара в сегменте уцененных, система выберет 0% (как меньшее значение), тем самым автоматически блокируя применение 10% скидки. Этот метод позволяет не менять конфигурацию и сохранять полную поддержку обновлений.
Многие пользователи боятся использовать сегменты, полагая, что их нужно наполнять вручную. Это не так. Рассмотрим настройку Способа формирования сегмента:
Для автоматизации процесса исключения уцененного товара создайте сегмент с Способом формирования — Формировать динамически. В настройках самого сегмента вы можете задать условия отбора, например:
Пример логики формирования:
// Псевдокод логики условий для сегмента
Отбор:
Где ЦенаТекущая < (ЦенаБазовая * 0.9)
Или СвойствоНоменклатуры.ПризнакУценки = Истина
Благодаря динамическому обновлению, как только цена товара опускается ниже определенного порога, он автоматически попадает в сегмент «исключений», и любая скидка, связанная с этим сегментом, перестает действовать.
Если процесс уценки в магазине формализован, лучшим решением будет использование Дополнительных реквизитов номенклатуры. Выясним, почему это эффективнее:
ЯвляетсяУцененным (тип Булево).Условий предоставления скидки вы добавляете Отбор по свойству.Такой подход делает логику прозрачной для пользователя. Система будет проверять условие: Если Свойство = Ложь, тогда применить скидку. Это работает значительно быстрее, чем любая внешняя обработка, и не нагружает систему сложными запросами при каждом расчете скидок в чеке.
Подводя итог нашей совместной работе, важно запомнить следующие правила:
Розница в будущем.Минимум для создания «запрещающих» правил.Применяя данные методы, вы сможете настроить даже самые сложные маркетинговые акции, сохраняя при этом целостность и производительность вашей информационной системы 1С.