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

1. cdpomaa 4 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. user1881120 18.03.23 18:18 Сейчас в теме
(8) Да. Именно так и работает регистр ИерархияПартнеров. Ничего страшного в этом нет, не так часто там изменения происходят.
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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение
Вакансии
Программист, разработчик
Нижневартовск
зарплата от 120 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

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

Ведущий консультант аналитик 1С ERP, УХ
Ульяновск
зарплата от 120 000 руб.
Полный день

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