Клиент поставил задачу настроить скидки в конфигурации Управление торговлей, редакция 11.1 - "скидка 50% на второй товар" или "третий товар в чеке БЕСПЛАТНО". Со второй половиной задачи проблем не было (настраивается с помощью типа скидки подарок), а вот функционала конфигурации для решения первой половины задачи не оказалось! Погуглил - действительно нет! Специалист учебного центра в комментариях к своей статье предлагает использовать готовые динамические комплекты (наборы) для решения данной задачи, но такое решение не подходит если не известны заранее компоненты набора или их очень много. И тут, как обычно в таких случаях, помогает "напильник".
В общем модуле "СкидкиНаценкиСервер" находим процедуру "РассчитатьСкидку" в ней условие:
ИначеЕсли ПараметрыСкидки.СпособПредоставления = Перечисления.СпособыПредоставленияСкидокНаценок.Подарок Тогда
после строки "Сумма = 0;" вносим корректировки в код:
//Определяем делитель исходя из скидки в размере тысячных долей стоимости последнего самого дешевого товара в чеке. 0,500 соответствует 50% скидки и т.д.
Если ПараметрыСкидки.ЗначениеСкидкиНаценки < 1 И Не ПараметрыСкидки.ЗначениеСкидкиНаценки = 0 Тогда
Делитель = 1/ПараметрыСкидки.ЗначениеСкидкиНаценки;
Иначе
Делитель = 1;
КонецЕсли;
//конец изменений
//округляем до целых, т.к. если при вычислении получится число хоть на миллионную меньше целого, скидка не рассчитаться
Для i=1 По МинимальнаяКратностьВыполнения * Окр(ПараметрыСкидки.ЗначениеСкидкиНаценки*Делитель ,0) Цикл
Для Каждого СтрокаТЧ Из ТаблицаСтоимостейТоваров Цикл
Если СтрокаТЧ.Количество > 0 Тогда
СтрокаТЧ.Количество = СтрокаТЧ.Количество - 1;
//в след. строке определяется сам размер скидки - половина, третья часть, полная стоимость последнего товара в чеке
Сумма = Сумма + СтрокаТЧ.Цена/Делитель;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Теперь, для решения первоначальной задачи создадим группу совместного применения и укажем вариант применения (максимум или вытеснение), добавим две новые скидки "50% на второй товар" и "3й товар в подарок" с типом скидки "Подарок", а в поле "Предоставить скидку на стоимость" указываем соответственно 0,500 и 1,000 стоимости единицы, в условиях указываем соответственно количество в документе не менее 2 ед. и не менее 3 ед. По правде говоря, в чеке 3й товар не будет с нулевой стоимостью, а второй товар с 50% стоимости - будет рассчитана скидка величиной половина стоимости второго или полная стоимость третьего, которая распределится на все позиции в чеке. Но нас это устраивает, т.к. по закону стоимость не может быть 0 рублей.
Задача решена. Пользуемся на здоровье!
Во вложении прикреплена короткая инструкция по настройке скидок и код модуля с изменениями указанный выше.