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

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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)