Бонусы на бонусы 1с Розница 2.3

1. rt7 6 30.03.20 01:32 Сейчас в теме
Привет всем!
Розница 2.3 бонусные баллы.

Интересует вопрос начисления бонусов, если в чеке есть оплата бонусами.
Программа умеет два варианта:
1. Если поставить в настройке "При оплате чека бонусными баллами"
чекбокс "Бонусные баллы не начисляются", то при оплате чека баллами новые баллы не начисляются. Всё логично и правильно.

2. Если поставить в настройке "При оплате чека бонусными баллами"
чекбокс "Может быть произведено начисление бонусных баллов согласно правилам", то начисляются баллы на всю сумму чека. Грубо говоря, если есть бонусная программа 2% от суммы, чек с учетом всех других скидок (автоматических-ручных или вообще без скидок, не важно) 1000 рублей, оплачиваю баллами 200 рублей и 800 наличкой => происходит начисление бонусов почему-то на всю сумму 1000*2%= 20 баллов. Получается, что на 200 бонусов снова начислились бонусы. Предприниматель с этим не хочет соглашаться, я не понимаю как быть.

Хотелось бы, чтобы бонусы начислялись только на ту часть чека, которая оплачена живыми деньгами. В случае выше хочется, чтобы было 800*2%= 16 баллов.

Тестировал и так и эдак, все настройки перерыл, не могу сообразить как быть. Есть мысли?
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. THEBESTolo4b 10 30.03.20 05:53 Сейчас в теме
(1) создай правило и пропиши что начисляются по типу оплаты Наличные ил карта
3. rt7 6 30.03.20 12:56 Сейчас в теме
(2)
спасибо, а инструкция какая-нибудь есть?
4. THEBESTolo4b 10 31.03.20 05:58 Сейчас в теме
(3) Зайди в маркетинговые акции там все понятно
5. rt7 6 31.03.20 15:28 Сейчас в теме
(4) Вы серьёзно? Если бы там было понятно, я бы не создавал вопрос. В разделе маркетинговые акции нет ничего, близко похожего на то, что вы говорите.
В разделе бонусные программы есть правила расчёта баллов, но там без инструкций ничего не выходит сделать. Видимо единственная возможность это сделать, это создать свою произвольную компоновку данных, но тут моих навыков не хватает. Да и судя по тому, что нашёл в инструкциях, там имеется ввиду правила начисления разовые, по определённому расписанию
6. FreeSP31 01.04.20 15:25 Сейчас в теме
(2)
В рознице нет условий начисления по форме оплаты. Есть в УТ.
Сам сейчас столкнулся с задачей реализации этого механизма.
7. FreeSP31 01.04.20 15:59 Сейчас в теме
(6)
Автор. Поставьте галочку в чекбокс "Уменьшать сумму чека для скидок".Для этого же она и существует.
8. rt7 6 04.04.20 19:42 Сейчас в теме
(7)
эта галочка уменьшает именно сумму чека для скидок.
Т.е. если товар 100 рублей, 20 оплачивают бонусами и есть ещё скидка 10%, то сначала вычитаются бонусы 100-20= 80 рублей и уже на 80 рублей применяется 10% скидка: 80-10% = 72 рубля.
Если галочки нет, то сначала применяется 10% скидка 100-10% = 90 рублей и потом только оплачивается бонусами 90-20= 70 рублей

К сожалению к моей ситуации это никак не применимо, у меня проблема бонусы на бонусы) Т.е. бонусы начисляются в рознице, если брать вышестоящий пример, не на 70 или 72 рубля, а на всю сумму чека
14. kubatay 61 30.10.21 15:16 Сейчас в теме
(8) Лично проверено, эта галочка "Уменьшать сумму чека для скидок" как раз и регулирует с полной суммы продажи начислять бонусы или же с суммы за минусом зачтенных бонусов. Все четко работает, сам с толкнулся с данной задачей.
15. user689645_gb 12.07.23 17:55 Сейчас в теме
(6) Добрый день. Подскажите, пожалуйста, как это сделать в УТ11.5?
9. FreeSP31 20.05.20 09:19 Сейчас в теме
Как один из вариантов для розницы, чтобы особо особо в конфигурацию не лезть (если еще не решили проблему). Сделал у себя, решая задачу начисления бонусов в зависимости от вида оплаты (2% от оплаты наличкой и 1% от оплаты безналом):
1. Убрал из скидок начисление бонусов.
2. Сделал обработку, которая по закрытию магазинов раз в день обходит все чеки и на основании полученных данных создает документ "начисление бонусных баллов" по данным чеков, исключая в выборке ненужные виды оплаты. Бонусы там в оплату вообще не попадают, так как сумма оплаты в строке пустая.
У нас бонусы начинают действовать через 3 дня после начисления, так что данное решение вполне устраивает.

Минусы - мы не видим сумму начисленных бонусов в документе "отчет о розничных продажах".


Сам код процедуры (для более опытных: кидайте камнями и критикуйте, если что-то не так или можно оптимизировать):

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	ЧекККМ.Ссылка КАК Ссылка,
|	ЧекККМ.Дата КАК Дата,
|	ЧекККМ.ДисконтнаяКарта КАК ДисконтнаяКарта,
|	ЧекККМ.ДисконтнаяКарта.БонуснаяПрограммаЛояльности КАК БонуснаяПрограмма,
|	ЧекККМ.Проведен КАК Проведен
|ПОМЕСТИТЬ Шапка
|ИЗ
|	Документ.ЧекККМ КАК ЧекККМ
|ГДЕ
|	ЧекККМ.Дата = &Дата
|	И ЧекККМ.Проведен = ИСТИНА
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	ЧекККМОплата.Ссылка КАК Ссылка,
|	ЧекККМОплата.ВидОплаты КАК ВидОплаты,
|	ЧекККМОплата.Сумма КАК Сумма,
|	ЧекККМОплата.ВидОплаты.ТипОплаты КАК ТипОплаты
|ПОМЕСТИТЬ Оплата
|ИЗ
|	Документ.ЧекККМ.Оплата КАК ЧекККМОплата
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	ТипыОплатЧекаККМ.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ТипыОплаты
|ИЗ
|	Перечисление.ТипыОплатЧекаККМ КАК ТипыОплатЧекаККМ
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	Оплата.Ссылка КАК Ссылка,
|	Оплата.ВидОплаты КАК ВидОплаты,
|	Оплата.Сумма КАК Сумма,
|	Шапка.Ссылка КАК Ссылка1,
|	Шапка.Дата КАК Дата,
|	Шапка.ДисконтнаяКарта КАК ДисконтнаяКарта,
|	ТипыОплаты.Ссылка КАК ТипОплаты
|ИЗ
|	Шапка КАК Шапка
|		ЛЕВОЕ СОЕДИНЕНИЕ Оплата КАК Оплата
|			ПОЛНОЕ СОЕДИНЕНИЕ ТипыОплаты КАК ТипыОплаты
|			ПО Оплата.ВидОплаты.ТипОплаты = ТипыОплаты.Ссылка
|		ПО Шапка.Ссылка = Оплата.Ссылка
|
|УПОРЯДОЧИТЬ ПО
|	Ссылка";

Запрос.УстановитьПараметр("Дата", НачалоДня(ТекущаяДатаСеанса()));


Результат = Запрос.ВыполнитьПакет();
Данные = Результат[3].Выбрать();


Начисление = Документы.НачислениеИСписаниеБонусныхБаллов.СоздатьДокумент();
Начисление.БонуснаяПрограммаЛояльности = Справочники.БонусныеПрограммыЛояльности.НайтиПоНаименованию("Бонусная программа уровень 1");
ИмяТаблицы = "Начисление";

Пока Данные.Следующий() Цикл
	Если ЗначениеЗаполнено(Данные.ДисконтнаяКарта)
	   И ЗначениеЗаполнено(Данные.Сумма)
	   И Не Данные.ТипОплаты = Перечисления.ТипыОплатЧекаККМ.ЗачетАванса Тогда
	   НоваяСтрока = Начисление[ИмяТаблицы].Добавить();
       НоваяСтрока.ДисконтнаяКарта = Данные.ДисконтнаяКарта;
	  Если Данные.ТипОплаты = Перечисления.ТипыОплатЧекаККМ.Наличные Тогда 
	    СуммаБонусов = Цел(Данные.Сумма * 0.02) ;
	 	НоваяСтрока.Баллы = СуммаБонусов;
	  Иначе
		СуммаБонусов = Цел(Данные.Сумма * 0.01);
		НоваяСтрока.Баллы = СуммаБонусов;
	  КонецЕсли;
    КонецЕсли;
КонецЦикла;

Начисление.Комментарий = "Начисление по продажам";
Начисление.Дата = ТекущаяДатаСеанса();
Начисление.Ответственный = ПараметрыСеанса.ТекущийПользователь;
Начисление.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Показать
10. user1222071 26.05.20 07:52 Сейчас в теме
(9) Можете подсказать куда эту обработку нужно загрузить?
11. rt7 6 16.07.20 16:54 Сейчас в теме
(9) Здравствуйте, да проблема актуально, но я не совсем понял, что нужно делать... Создать новую обработку и в неё этот код? Как дальше, как сделать чтобы автоматически запускалась?
12. FreeSP31 17.07.20 16:00 Сейчас в теме +0.15 $m
Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
ПараметрыРегистрации.Вставить("Наименование", "Начисление бонусов");
ПараметрыРегистрации.Вставить("Версия", "1.1");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("ВерсияБСП", "3.0.3.199");
ПараметрыРегистрации.Вставить("Информация", "Обработка предназначена для автоматического начисления бонусных баллов по чекам");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Начисление бонусов", "Идентификатор", "ВызовСерверногоМетода", Истина, "");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;

КонецФункции


Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции


Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры


Подключаете как доп. обработку и в настройках задаете расписание выполнения.
13. rt7 6 20.07.20 18:39 Сейчас в теме
(12) Спасибо, завтра попробую!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот