Порядок настройки обработки
Обработка добавляется во внешние обработки:
Создается элемент справочника "Скидки-наценки":
По кнопке "Настройки" открывается форма настройки внешней обработки, о ее настройке в разделе "Настройка внешней обработки". Если кнопка Настройки недоступна, выполнить команду "Еще - Разрешить редактирование реквизитов".
Создается и проводится маркетинговая акция:
Настройка внешней обработки
Рассмотрим пример скидки 30% на каждую вторую позиции в чеке по сегменту "Бытовая техника":
Сегмент номенклатуры – указывает, на какие позиции в чеке давать скидки. Например, на обувь можно давать скидку, а аксессуары (носки, шнурки) – не учитывать.
При наличии товара из сегмента в чеке - позволяет организовать скидку при наличии товара из другого сегмента.
Для каждого из порогов скидки 1-3 указывается:
- Количество товара - при накоплении какого количества применять порог скидки.
- Процент скидки - какой процент скидки применять при срабатывании порога.
- Цена по скидке - вместо процента можно использовать цену, например, продажа за 1 рубль.
- Вид количества - вариант применения скидки по порогу.
- Обычный - если накоплено количество, больше или равное указанного в поле "Количество товара". Используется чаще всего.
- Точное количество - если накоплено количество, равное указанному в поле "Количество товара".
- Точное количество общее - если общее количество товара по сегменту в чеке равно указанному в поле "Количество товара".
Для определения порядка товаров в чеке важен порядок, если установлена галочка «Сортировать вперед дешевые», то первым считается самый дешевый, затем более дорогой и т.д. Если галочка не установлена, то наоборот, первым считается самый дорогой - такой порядок наиболее часто применимый.
Округлять скидку до - позволяет округлять скидку. 0 - не округлять. -1 - округлять до 10 рублей, 0.1 - округлять до 10 копеек.
Сбрасывать количество в единицу после накопления - позволяет организовывать циклические скидки, когда скидка дается, например, на каждый второй, а не на второй и более товар. Для каждого второго нужно поставить 2.
Учитывать предыдущие скидки - если расчет скидок внешней обработкой идет не первым в приоритете, то перед ним могут быть начислены другие скидки, установленная галочка позволяет их учитывать. Если она установлена, то будут делаться скидки от цены, на которую уже применены предыдущие скидки. Иначе скидка будет рассчитываться от начальной цены.
Условие - условие на языке 1С, позволяет делать гибкие настройки.
Отладка - при расчете скидок выводить отладочные сообщения с префиксом "Отладка" в окно сообщений.
Алгоритм применения скидок
Для простоты и точности расчета строки, где продается 2 и более товара, программа обрабатывает несколько раз, каждый раз обрабатывая продажу только одной штуки товара, постепенно накапливая количество.
Поэтому на каждом шаге программа имеет накопленное по сегменту количество продажи.
При расчете в поле "Условие" можно использовать следующие переменные:
Р - результат, принимает значение истина или Ложь. Истина - применять порог скидки.
НакопительКоличества - текущее накопленное количество
ОбщееКоличество - общее количество товара по сегменту в чеке.
Кэш - это структура - куда можно заполнять вычисляемые лишь однажды значения.
ВсеТовары - таблица всех товаров по сегменту.
Вот, например, формула, которая делает скиду на самые дешевые каждые третьи позиции в чеке:
Р = НакопительКоличества > ОбщееКоличество - Цел(ОбщееКоличество/3)
Проверим на чеке из 6 позиций для накопленного количества от 1 до 6 (товар отсортирован от дорого к дешевому):
1: 1 > (6 - 2) ложь
2: 2 > (6 - 2) ложь
3: 3 > (6 - 2) ложь
4: 4 > (6 - 2) ложь
5: 5 > (6 - 2) истина
6: 6 > (6 - 2) истина
Того же результат можно добиться, установив поле "Сбрасывать количество в единицу после накопления" в 3.
На практике можно применять довольно сложные системы расчета:
СегментБелое = Справочники.СегментыНоменклатуры.НайтиПоНаименованию("Вино белое", истина);
СегментКрасное = Справочники.СегментыНоменклатуры.НайтиПоНаименованию("Вино красное", истина);
ЭтоБелое = СегментыВызовСервера.ВходитВСегмент(ТоварСегмента.Номенклатура, СегментБелое);
ЭтоКрасное = СегментыВызовСервера.ВходитВСегмент(ТоварСегмента.Номенклатура, СегментКрасное);
Сообщить("Товар: " + ТоварСегмента.Номенклатура + " Белое?" + ЭтоБелое + " Красное? " + ЭтоКрасное + " Цена: " + ТоварСегмента.Цена);
КоличествоБелых = 0; КоличествоКрасных = 0;
КоличетвоКрасныхИБелых = 0;
Для Каждого ТоварСегмента2 ИЗ ВсеТовары Цикл
ЭтоБелое2 = СегментыВызовСервера.ВходитВСегмент(ТоварСегмента2.Номенклатура, СегментБелое);
ЭтоКрасное2 = СегментыВызовСервера.ВходитВСегмент(ТоварСегмента2.Номенклатура, СегментКрасное);
Сообщить(" Товар2: " + ТоварСегмента2.Номенклатура + " Белое?" + ЭтоБелое2 + " Красное? " + ЭтоКрасное2 + " Цена: " + ТоварСегмента2.Цена);
Если ЭтоБелое2 И ТоварСегмента2.Цена >= ТоварСегмента.Цена Тогда
КоличествоБелых = КоличествоБелых + ТоварСегмента2.Количество;
КонецЕсли;
Если ЭтоКрасное2 И ТоварСегмента2.Цена >= ТоварСегмента.Цена Тогда
КоличествоКрасных = КоличествоКрасных + ТоварСегмента2.Количество;
КонецЕсли;
Если ЭтоКрасное2 ИЛИ ЭтоБелое2 Тогда
КоличетвоКрасныхИБелых = КоличетвоКрасныхИБелых + ТоварСегмента2.Количество;
КонецЕсли;
КонецЦикла;
Сообщить(" Белых:" + КоличествоБелых + " Красных: " + КоличествоКрасных + " Накопитель: " + НакопительКоличества);
Однако не стоит забывать о скорости расчета, используйте Кэш для оптимизации.
Тестирование расчета скидок
Для тестирования обработки нужно создать чек, подобрать товар и нажать Скидки – Рассчитать скидки:
При расчете скидок будет выводиться комментарий расчета.
Если включена отладка, то будут выводиться также и отладочные сообщения.
На закладке "Скидки" также можно посмотреть скидки:
При подборе товара через РМК скидка будет рассчитываться автоматически.
Особенности использования
Нельзя использовать динамические сегменты, т.к. алгоритм использует регистр состава сегмента. Нужно поддерживать сегменты в актуальном состоянии.
Версии:
- 2020.08.28 для Розница 2.3.11.33. Платформа 8.3.20.2076 Актуальная
- 2020.01.22 для Розница 2.2.5.23. Платформа 8.3.14.1630