Есть регистр СкидкиНоменклатуры где Измерение Номенклатура(элемент или группа), ресурс процентСкидки.
Скидки можно установить как на конкретную позицию, так и на папку с позициями. Вложенность папок, например, может достигать 15 уровней.
Если скидка установлена на конкретную позицию, то она для нас имеет наивысший приоритет. Если на позицию скидки нет, то получаем скидки по уровням иерархии. Приоритетней, например, будет скидка на группу "Сплит-системы", а на группу "Блоки", скидка имеет более низкий приоритет.
Нужно написать функцию (или несколько функций) в которую мы передаем Ссылку на Номенклатуру, а она возвращает числовое значение процента скидки. Если скидка не задана, то ноль.
Скидки можно установить как на конкретную позицию, так и на папку с позициями. Вложенность папок, например, может достигать 15 уровней.
Если скидка установлена на конкретную позицию, то она для нас имеет наивысший приоритет. Если на позицию скидки нет, то получаем скидки по уровням иерархии. Приоритетней, например, будет скидка на группу "Сплит-системы", а на группу "Блоки", скидка имеет более низкий приоритет.
Нужно написать функцию (или несколько функций) в которую мы передаем Ссылку на Номенклатуру, а она возвращает числовое значение процента скидки. Если скидка не задана, то ноль.
Прикрепленные файлы:
По теме из базы знаний
- Типовая борьба - личный опыт работы с типовыми конфигурациями 1С:8
- Отчет «Прогноз спроса» на нейросетях. Пример применения и оценка эффективности
- Проект, который прошел путь от провала до web-клиента. От web-клиента до мобильного приложения
- Опыт разработки ботов на 1С: от идеи до продукта, кейсы использования
- Интеграция Честный Знак и 1C: обмен и синхронизация для УТ11, УНФ, КА2, ERP, Розница: Расширение для работы с СУЗ, ГИС МТ, ЦРПТ
Найденные решения
Функция ПолучитьСкидку(Номенклатура)
НаборЗаписей = РегистрыСведений.СкидкиНоменклатуры.СоздатьНаборЗаписей();
Отбор = НаборЗаписей.Отбор;
Отбор.Номенклатура.Установить(Номенклатура);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
Возврат НаборЗаписей[0]. процентСкидки;
Иначе
Если ЗначениеЗаполнено(Номенклатура.Родитель) Тогда
ПолучитьСкидку(Номенклатура.Родитель);
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Функция ПолучитьСкидку(Номенклатура)
НаборЗаписей = РегистрыСведений.СкидкиНоменклатуры.СоздатьНаборЗаписей();
Отбор = НаборЗаписей.Отбор;
Отбор.Номенклатура.Установить(Номенклатура);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
Возврат НаборЗаписей[0]. процентСкидки;
Иначе
Если ЗначениеЗаполнено(Номенклатура.Родитель) Тогда
ПолучитьСкидку(Номенклатура.Родитель);
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Показать
(1) подойди к задаче с другой стороны
создать регистр сведений связи номенклатуры, в который будут записываться елемент и вся вышестоящая иерархия и приоритет (уровень иерархии)
добавить событие при записи номенклатуры, чтобы сделались записи относительной изменяемой / создаваемой номенклатуры
когда будет такой регистр - тогда и будет более-менее удобный механизм нахождения скидки для номенклатуры с помощью запроса... таже не составит отчет построить, который корректно покажет скидку по номенклатуре
так же нужно понимать еще другой нюанс - дата установки скидки... если скидка на группу поменялась, то в приоритете должна быть скидка номенклатуры, которая была установлена несколько лет назад, или скидка группы, которая была установлена сегодня...
создать регистр сведений связи номенклатуры, в который будут записываться елемент и вся вышестоящая иерархия и приоритет (уровень иерархии)
добавить событие при записи номенклатуры, чтобы сделались записи относительной изменяемой / создаваемой номенклатуры
когда будет такой регистр - тогда и будет более-менее удобный механизм нахождения скидки для номенклатуры с помощью запроса... таже не составит отчет построить, который корректно покажет скидку по номенклатуре
так же нужно понимать еще другой нюанс - дата установки скидки... если скидка на группу поменялась, то в приоритете должна быть скидка номенклатуры, которая была установлена несколько лет назад, или скидка группы, которая была установлена сегодня...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот