Имя: Пароль:
1C
 
Поиск ближайщего значения В ИЕРАРХИИ
,
0 Shark_2000
 
13.08.20
20:18
Уважаемые участники форума. Нужна ваша помощь.

Суть вопроса следующая:
Есть два справочника и регистр сведений.
1-й справочник иерархический(ОбъектПоставки), 2-й (ЦенаПоставки) подчинен товару.

Регистр сведений с измерениями: "ОбъектПоставки", "ТипЦены" и ресурсом: "Значение"

В регистре сведений Измерение Объект может принимать значение и группы и элемента, таким образом Цена устанавливается на Группу объектов и при добавлении объекта нет необходимости устанавливать значение для него отдельно.

Вопрос: Как в запросе получить Значение которое установлено для ближайшей группы в которой находится нужный Объект и нужный тип цены.
1 Shark_2000
 
13.08.20
20:29
ТипЦены это справочник ЦенаПоставки
2 vde69
 
13.08.20
21:12
читайте про денормализацию данных...

то есть нужно заполнить регистр всеми возможными к выборке значениями а потом уже получать без выпендрежа...
3 lodger
 
13.08.20
21:31
прям в запросе? вангую - получится километровый запрос.
дешевле пред или пост обработкой.
4 МихаилМ
 
13.08.20
22:19
(0) придумавшие и реализовавшие это должны быть уволены.
5 Shark_2000
 
13.08.20
22:19
(3) Вы правы, уже решил следующим весьма простым способом:

&НаСервере
Функция ПолучитьЦену(Знач Объект, ТипЦены)
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Объект", Объект);
    Запрос.УстановитьПараметр("ТипЦены", ТипЦены);
    Запрос.УстановитьПараметр("Период", ТекущаяДата());
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |    Цены.Значение КАК Цена
    |ИЗ
    |    РегистрСведений.ЦенаТовараНаОбъекте.СрезПоследних(
    |            &Период,
    |            Объект = &Объект
    |                И ТипЦены.Ссылка = &ТипЦены) КАК Цены";
    Тарифы = Запрос.Выполнить().Выгрузить();
    
    Пока Цены.Количество() = 0 Цикл
        Если Не Объект.Родитель = Справочники.Объекты.ПустаяСсылка() Тогда
            Объект = Объект.Родитель;
            Запрос.УстановитьПараметр("Объект", Объект);
            Цены = Запрос.Выполнить().Выгрузить();
        Иначе
            Возврат Неопределено;
        КонецЕсли;
    КонецЦикла;
    
    
    Возврат Цены[0].Цена;

КонецФункции
6 Shark_2000
 
13.08.20
22:20
(4) Ха - Ха
7 Кулибин
 
13.08.20
22:22
Моветон - устанавливать параметры до текста запроса, сложно читать - не стал, работает - хорошо, молодец.
8 Shark_2000
 
13.08.20
22:23
(4) Наверняка ВЫ "ГЕНИЙ"
9 Shark_2000
 
13.08.20
22:25
(7) Не так давно начал это делать, зато когда заходишь в конструктор не надо их писать, они сами подтягиваются
10 Кулибин
 
13.08.20
22:30
Спасибо, открыл для меня, беру обратно, молодец. Две запятые пропустил только.
11 МихаилМ
 
13.08.20
22:36
(0)
на этом форуме проблемы при использовании иерархии для работы с ценами обсуждались раз 30.
на других - тоже много тем.
12 Shark_2000
 
13.08.20
22:50
(11) Друг да у меня вообще другая отрасль!!! и мне не цены нужны и нет у меня товаров и номенклатуры тоже, просто людям проще понимать когда им задают вопрос "Цена, номенклатура" и т.д. вы мысль не уловили, простите я забыл "ВЫ ГЕНИЙ"
13 Shark_2000
 
13.08.20
22:52
(11) И из всех ответивших в данной теме Ваш "ОТВЕТ" "САМЫЙ ПОЛЕЗНЫЙ" без него я бы не справился спасибо!
14 МихаилМ
 
13.08.20
23:05
(13)
я дал не правильный не формальный ответ.

ответ на Ваш вопрос  в (0)

https://yandex.ru/search/?text=транзитивное%20замыкание%20запрсом&lr=213
15 palsergeich
 
13.08.20
23:13
(5) Акуительно.
Запрос в цикле и даже не стесняется)
16 palsergeich
 
13.08.20
23:16
(15) А не это не запрос в цикле, а просто цикл просто так)
Скажи мне друг зачем этот цикл Пока Цены.Количество() = 0 Цикл
И как он выполняется в первый прогон, когда переменная Цены еще не инициирована?
17 palsergeich
 
13.08.20
23:17
А да и запрос в цикле это тоже
18 palsergeich
 
13.08.20
23:17
ой всё
19 Shark_2000
 
14.08.20
00:51
(16) Извини не изменил в сообщении но где "Тарифы = Запрос.Выполнить().Выгрузить();" там "Цены = Запрос.Выполнить().Выгрузить();"
теперь НОРМ?
20 Shark_2000
 
14.08.20
00:53
Друзья, Форум чтобы помогать друг другу а не "ВЫСМЕИВАТЬ"
21 Shark_2000
 
14.08.20
01:07
Вот умники! Жуть! нет бы сказать: "Вот на возьми, пользуйся на здоровье". Нет! надо "ОБОСРАТЬ", и главное ни чего не подсказать. Да как вы так живете? не стрёмно?
22 Ёпрст
 
14.08.20
01:21
(21) срез последних (если не хранить его в виде итогов) не самый быстрый объект (точнее, виртуальная, рассчитываемая табличка). А ты его еще и в цикл по всей иерархии загоняешь, + тащишь объекты через точку.
Как бэ это, не быстро и..структуру надо по-другому делать, или заниматься денормализацией.
Что б вот такого кода, как в (5) не было.
23 Ёпрст
 
14.08.20
01:22
и если у тебя только 2 измерения и один ресурс, то top 1 в запросе лишнее
24 Shark_2000
 
14.08.20
17:17
(22) Иерархия в принципе это Контактная Информация, которая ограничена как ни крути, объектов будет: ну 1000, ну 10000 явно не более и пройти по 8 уровням иерархии, чепуха.
25 Kesim
 
14.08.20
17:23
(0) запросом получаем только элементы  добавляем приоритет = 1 и объединением получаем только группы  добавляем приоритет 0  - все это в вт,
потом соединяем с таблицей рс, и аккуратно группируешь по макс приоритет
26 Kesim
 
14.08.20
17:26
(0) "..Значение которое установлено для ближайшей группы в которой находится нужный.." не "ближайшей", а "родитель"