Написать функцию получения скидки

1. cdpomaa 5 18.03.23 15:09 Сейчас в теме
Есть регистр СкидкиНоменклатуры где Измерение Номенклатура(элемент или группа), ресурс процентСкидки.

Скидки можно установить как на конкретную позицию, так и на папку с позициями. Вложенность папок, например, может достигать 15 уровней.
Если скидка установлена на конкретную позицию, то она для нас имеет наивысший приоритет. Если на позицию скидки нет, то получаем скидки по уровням иерархии. Приоритетней, например, будет скидка на группу "Сплит-системы", а на группу "Блоки", скидка имеет более низкий приоритет.

Нужно написать функцию (или несколько функций) в которую мы передаем Ссылку на Номенклатуру, а она возвращает числовое значение процента скидки. Если скидка не задана, то ноль.
Прикрепленные файлы:
1Cv8.dt
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
3. aka Любитель XML 18.03.23 15:53 Сейчас в теме +2 $m
Функция ПолучитьСкидку(Номенклатура)
    НаборЗаписей = РегистрыСведений.СкидкиНоменклатуры.СоздатьНаборЗаписей();
    Отбор = НаборЗаписей.Отбор;
    Отбор.Номенклатура.Установить(Номенклатура);
    НаборЗаписей.Прочитать();
    Если НаборЗаписей.Количество() > 0 Тогда
        Возврат НаборЗаписей[0]. процентСкидки;
    Иначе
        Если ЗначениеЗаполнено(Номенклатура.Родитель) Тогда
            ПолучитьСкидку(Номенклатура.Родитель);
        Иначе
            Возврат 0;
    КонецЕсли;
КонецФункции
Показать
YA_514896950; +1 Ответить
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. aka Любитель XML 18.03.23 15:49 Сейчас в теме
(0) рекурсивно обходи родителей до тех пор, пока не найдешь запись в РС
3. aka Любитель XML 18.03.23 15:53 Сейчас в теме +2 $m
Функция ПолучитьСкидку(Номенклатура)
    НаборЗаписей = РегистрыСведений.СкидкиНоменклатуры.СоздатьНаборЗаписей();
    Отбор = НаборЗаписей.Отбор;
    Отбор.Номенклатура.Установить(Номенклатура);
    НаборЗаписей.Прочитать();
    Если НаборЗаписей.Количество() > 0 Тогда
        Возврат НаборЗаписей[0]. процентСкидки;
    Иначе
        Если ЗначениеЗаполнено(Номенклатура.Родитель) Тогда
            ПолучитьСкидку(Номенклатура.Родитель);
        Иначе
            Возврат 0;
    КонецЕсли;
КонецФункции
Показать
YA_514896950; +1 Ответить
4. aka Любитель XML 18.03.23 15:53 Сейчас в теме
Примерно так, dt не качал, писал на коленке, мог где-то ошибится
7. Dr.HiHi 3 18.03.23 17:55 Сейчас в теме
(1) подойди к задаче с другой стороны
создать регистр сведений связи номенклатуры, в который будут записываться елемент и вся вышестоящая иерархия и приоритет (уровень иерархии)
добавить событие при записи номенклатуры, чтобы сделались записи относительной изменяемой / создаваемой номенклатуры

когда будет такой регистр - тогда и будет более-менее удобный механизм нахождения скидки для номенклатуры с помощью запроса... таже не составит отчет построить, который корректно покажет скидку по номенклатуре

так же нужно понимать еще другой нюанс - дата установки скидки... если скидка на группу поменялась, то в приоритете должна быть скидка номенклатуры, которая была установлена несколько лет назад, или скидка группы, которая была установлена сегодня...
8. user1863362 18.03.23 18:10 Сейчас в теме
(7)
чтобы сделались записи относительной изменяемой / создаваемой номенклатуры
Хехе. А также записи для всего поддерева в случае изменения группы.
9. пользователь 18.03.23 18:18
Сообщение было скрыто модератором.
...
20. пользователь 18.03.23 19:14
Сообщение было скрыто модератором.
...
11. пользователь 18.03.23 18:24
Сообщение было скрыто модератором.
...
12. пользователь 18.03.23 19:02
Сообщение было скрыто модератором.
...
13. пользователь 18.03.23 19:03
Сообщение было скрыто модератором.
...
26. пользователь 18.03.23 19:37
Сообщение было скрыто модератором.
...
14. пользователь 18.03.23 19:07
Сообщение было скрыто модератором.
...
15. пользователь 18.03.23 19:08
Сообщение было скрыто модератором.
...
16. пользователь 18.03.23 19:10
Сообщение было скрыто модератором.
...
17. пользователь 18.03.23 19:11
Сообщение было скрыто модератором.
...
18. пользователь 18.03.23 19:13
Сообщение было скрыто модератором.
...
23. пользователь 18.03.23 19:18
Сообщение было скрыто модератором.
...
24. пользователь 18.03.23 19:19
Сообщение было скрыто модератором.
...
25. пользователь 18.03.23 19:23
Сообщение было скрыто модератором.
...
19. пользователь 18.03.23 19:14
Сообщение было скрыто модератором.
...
21. пользователь 18.03.23 19:15
Сообщение было скрыто модератором.
...
22. пользователь 18.03.23 19:17
Сообщение было скрыто модератором.
...
27. пользователь 18.03.23 19:38
Сообщение было скрыто модератором.
...
28. пользователь 18.03.23 19:39
Сообщение было скрыто модератором.
...
29. пользователь 18.03.23 19:40
Сообщение было скрыто модератором.
...
30. пользователь 18.03.23 19:41
Сообщение было скрыто модератором.
...
31. пользователь 18.03.23 19:43
Сообщение было скрыто модератором.
...
32. пользователь 18.03.23 19:43
Сообщение было скрыто модератором.
...
33. пользователь 18.03.23 19:45
Сообщение было скрыто модератором.
...
34. пользователь 18.03.23 19:45
Сообщение было скрыто модератором.
...
35. пользователь 18.03.23 19:47
Сообщение было скрыто модератором.
...
36. пользователь 18.03.23 19:48
Сообщение было скрыто модератором.
...
37. пользователь 18.03.23 19:48
Сообщение было скрыто модератором.
...
38. пользователь 18.03.23 19:49
Сообщение было скрыто модератором.
...
39. пользователь 18.03.23 19:50
Сообщение было скрыто модератором.
...
40. пользователь 18.03.23 19:50
Сообщение было скрыто модератором.
...
41. пользователь 18.03.23 19:51
Сообщение было скрыто модератором.
...
43. пользователь 18.03.23 19:52
Сообщение было скрыто модератором.
...
49. пользователь 18.03.23 20:01
Сообщение было скрыто модератором.
...
50. пользователь 18.03.23 20:02
Сообщение было скрыто модератором.
...
51. пользователь 18.03.23 20:08
Сообщение было скрыто модератором.
...
42. пользователь 18.03.23 19:51
Сообщение было скрыто модератором.
...
44. пользователь 18.03.23 19:53
Сообщение было скрыто модератором.
...
45. пользователь 18.03.23 19:55
Сообщение было скрыто модератором.
...
46. пользователь 18.03.23 19:56
Сообщение было скрыто модератором.
...
47. пользователь 18.03.23 19:56
Сообщение было скрыто модератором.
...
48. пользователь 18.03.23 19:57
Сообщение было скрыто модератором.
...
52. пользователь 18.03.23 20:09
Сообщение было скрыто модератором.
...
53. пользователь 18.03.23 20:13
Сообщение было скрыто модератором.
...
54. пользователь 18.03.23 20:13
Сообщение было скрыто модератором.
...
55. пользователь 18.03.23 20:16
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

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