Как настроить циклическую скидку в 1С:Управление торговлей и почему система не видит продажи?

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

В практике автоматизации розничной торговли часто возникают задачи по созданию сложных программ лояльности. Один из популярных сценариев — циклическая скидка: например, на первую покупку дается скидка 300 рублей, на вторую — 500 рублей, а третья единица товара отдается бесплатно, после чего цикл повторяется. При попытке настроить такую схему в типовой конфигурации 1С:Управление торговлей 11 (УТ 11) пользователи часто сталкиваются с тем, что система «не видит» предыдущие продажи клиента, выдавая ошибку: Текущее значение: 0. Разберем подробно, почему так происходит, как работают механизмы накопления и какие существуют способы решения этой задачи.

Анализ проблемы: почему скидка не видит накопления?

Когда мы настраиваем автоматическую скидку с условием Количество проданной номенклатуры по клиенту не менее 1 ед., мы ожидаем, что система мгновенно проверит историю покупок по карте лояльности. Однако в 1С:УТ 11 данные для условий по накоплениям (объем продаж, количество товара) не берутся напрямую из документов в режиме реального времени. Система использует механизм агрегатов.

Разберем, почему возникает ситуация, когда продажа совершена, а скидка не применяется:

  1. Регламентные задания: Информация о накоплениях хранится в специальных оборотных регистрах (например, ВыручкаИСебестоимостьПродаж). Для того чтобы эти данные стали доступны механизму расчета скидок, должно отработать регламентное задание Обновление агрегатов или специальный расчет показателей. Если задание запускается раз в час или раз в сутки, то покупка, совершенная пять минут назад, не будет учтена в текущем чеке.
  2. Проведение документов: Если продажа осуществляется через РМК (Рабочее место кассира), данные в базу записываются только после пробития чека. Пока чек не закрыт, текущая позиция в корзине не считается «проданной».
  3. Последовательность применения: Важно проверять, как настроены приоритеты в группе скидок. Если скидки находятся в одной группе с вариантом Максимум, система применит только одну, наиболее выгодную.

Ограничение штатного функционала при реализации «циклов»

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

Штатные условия За накопленный объем продаж работают только по нарастающей. Как только клиент купил 3 единицы, он всегда будет удовлетворять условию «более 3», и система не поймет, что четвертая покупка должна снова считаться как «первая» в новом цикле.

Решение через бонусную программу

Рассмотрим наиболее близкий к типовому функционалу способ реализации цикла через Бонусные баллы. Хотя это требует от кассира дополнительных действий, это позволяет обойти проблему «засыпания» регистров накопления.

Алгоритм настройки может быть следующим:

  1. Настроить начисление бонусов: за 1-ю покупку начисляем X баллов, за 2-ю — Y баллов.
  2. Создать скидку, которая позволяет оплатить 100% товара бонусами только при достижении определенного баланса (например, когда накоплено достаточно баллов для бесплатного товара).
  3. После совершения «бесплатной» покупки баллы списываются, и клиент снова начинает копить их с нуля.

Этот метод работает мгновенно в рамках Бонусной программы, так как остатки баллов обычно актуализируются быстрее, чем агрегаты продаж.

Решение через внешние обработки и расширения (Путь программиста)

Если бизнес-процесс требует полной автоматизации без участия кассира и использования бонусов, необходимо использовать механизм дополнительных условий предоставления скидок. В современных версиях 1С (начиная с 11.4) это реализуется через расширения конфигурации.

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


// Пример логики запроса для проверки номера покупки
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	СУММА(ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот) КАК КолВо
    |ИЗ
    |	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(, , Авто, АналитикаУчетаНоменклатуры.Номенклатура = &Номенклатура И АналитикаПоПартнерам.Партнер = &Партнер) КАК ВыручкаИСебестоимостьПродажОбороты";

Запрос.УстановитьПараметр("Номенклатура", ТекущийТовар);
Запрос.УстановитьПараметр("Партнер", ТекущийКлиент);
Результат = Запрос.Выполнить().Выгрузить();
КоличествоРанееКупленного = ?(Результат.Количество() > 0, Результат[0].КолВо, 0);

// Вычисляем остаток от деления на 3 (для цикла из 3-х шагов)
ШагЦикла = КоличествоРанееКупленного % 3;

Проанализировав ШагЦикла, программный код скидки может вернуть Истина или Ложа для конкретной строки чека. Если ШагЦикла = 0, применяется скидка для «первой» покупки, если ШагЦикла = 2 — товар отдается бесплатно.

Использование купонов как альтернатива

Разберем еще один «полуавтоматический» способ — маркетинговые акции с промокодами или купонами. Это позволяет избежать проблем с обновлением агрегатов.

Схема работы:

Важные настройки для корректной работы скидок

Если вы все же решили использовать штатные накопительные скидки, обязательно проверьте следующие настройки в вашей базе 1С:

  1. Настройка регламентных заданий: Перейдите в раздел Администрирование — Обслуживание — Регламентные операции. Найдите задание Обновление агрегатов. Установите расписание «повторять каждые 60 секунд». Это минимизирует задержку, но может увеличить нагрузку на сервер.
  2. Параметры лояльности: Убедитесь, что в карточке Виды карт лояльности стоит признак Тип карты: Именная, так как накопительные скидки работают только в привязке к конкретному партнеру (клиенту).
  3. Отборы: Проверьте, чтобы в условиях скидки в поле Номенклатура не было пересекающихся групп, которые могут блокировать друг друга по приоритету.

Подведем итог: штатная настройка «циклической» скидки в 1С:УТ 11 невозможна из-за линейности накопительных условий и задержек в расчете агрегатов. Оптимальным решением для бизнеса будет либо переход на бонусную систему (списание баллов — это и есть «сброс» цикла), либо разработка небольшого расширения, которое добавит кастомное условие расчета «каждой N-й покупки» через прямой запрос к регистру продаж.

← На главную