Бонусы без скидок. Розница 2.3
Клиент поставил задачу — начислять бонусы клиенту только за те строки чека, в которых не были предоставлены другие ручные или автоматические скидки.
Условие начисления по бонусам такое:
![](https://geniy1s.ru/wp-content/uploads/2022/01/image-30.png)
Условия предоставления бонусов такие:
![](https://geniy1s.ru/wp-content/uploads/2022/01/image-31.png)
Второе условие добавил я:
![](https://geniy1s.ru/wp-content/uploads/2022/01/image-32.png)
Внешняя обработка в справочнике выглядит так:
![](https://geniy1s.ru/wp-content/uploads/2022/01/image-35.png)
Попробовал первый код внешней обработки предоставления скидок на основании примера с Инфостарта:
Функция ПроверитьУсловие(Условие, СтрокаДереваСкидок, ПараметрыВнешнейОбработки = Неопределено, ПараметрыРасчета) Экспорт //https://forum.infostart.ru/forum9/topic248626/ - взято отсюда РезультатПроверки = Новый Структура; ТекущееУсловиеВыполнено = Истина; Для Каждого СтрокаТовара Из СтрокаДереваСкидок.СтруктураДополнительныхДанных.ТаблицаТоваровПоСегментам Цикл //В СтрокаТовара имеем доступ к таб.части. Например СтрокаТовара.Характеристика //Если УсловиеВыполняется Тогда СтрокаТовара.УсловиеПоСтрокеВыполнено = Истина; //КонецЕсли; Если ЛОЖЬ Тогда ТекущееУсловиеВыполнено = Ложь; Прервать; КонецЕсли; КонецЦикла; Сообщить("Результат проверки:" + ТекущееУсловиеВыполнено); РезультатПроверки.Вставить("ТекущееУсловиеВыполнено", ТекущееУсловиеВыполнено); Возврат РезультатПроверки; КонецФункции
Получил, что результат проверки выполняется.
![](https://geniy1s.ru/wp-content/uploads/2022/01/image-29.png)
Если установить ТекущееУсловиеВыполнено = Ложь, то бонусы применены не будут. Поэтому нужно его устанавливать.
Чтобы посмотреть, что доступно для анализа в внешней обработке, поставил точку останова в процедуре ПроверитьУсловияСкидки модуля СкидкиНаценкиСервер:
![](https://geniy1s.ru/wp-content/uploads/2022/01/image-33-1024x228.png)
К моему счастью, суммы ручной и автоматической скидки есть в таблице СтрокаДереваСкидок.СтруктураДополнительныхДанных.ТаблицаТоваровПоСегментам:
![](https://geniy1s.ru/wp-content/uploads/2022/01/image-34.png)
Итоговый код проверки условия вышел таким:
Функция ПроверитьУсловие(Условие, СтрокаДереваСкидок, ПараметрыВнешнейОбработки = Неопределено, ПараметрыРасчета) Экспорт //https://forum.infostart.ru/forum9/topic248626/ - взято отсюда РезультатПроверки = Новый Структура; ТекущееУсловиеВыполнено = ложь; Для Каждого СтрокаТовара Из СтрокаДереваСкидок.СтруктураДополнительныхДанных.ТаблицаТоваровПоСегментам Цикл //В СтрокаТовара имеем доступ к таб.части. Например СтрокаТовара.Характеристика СтрокаТовара.УсловиеПоСтрокеВыполнено = СтрокаТовара.СуммаРучнойСкидки = 0 И СтрокаТовара.СуммаАвтоматическойСкидки = 0; ТекущееУсловиеВыполнено = ТекущееУсловиеВыполнено ИЛИ СтрокаТовара.УсловиеПоСтрокеВыполнено; КонецЦикла; Сообщить("Результат проверки:" + ТекущееУсловиеВыполнено); РезультатПроверки.Вставить("ТекущееУсловиеВыполнено", ТекущееУсловиеВыполнено); Возврат РезультатПроверки; КонецФункции
Получается, что нужно возвращать и что условие применено и что построчно оно применено для тех строк, где условие выполняется.
Среда: Розница 2.3.9.42.
Объем: 1 час.
![](https://geniy1s.ru/wp-content/uploads/2022/01/scale_1200-12.jpg)
Серега, ты что спец по Рознице? Есть пару вопросов, может сталкивался?
Спец, задавай.