У меня получилось так:
1. В дин.списке делаете запрос
ВЫБРАТЬ
СправочникНоменклатура.Ссылка,
СправочникНоменклатура.Наименование
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (Выбрать ссылка из Справочник.Номенклатура ГДЕ Наименование В (&Ссылка)) Фильтр
По СправочникНоменклатура.ссылка = Фильтр.Ссылка
2. В параметре Ссылка указываете найденную номенклатуру и всех вышестоящих по иерархии родителей
3. А для родителей я бы при ваших объемах завел кэш в виде регистра сведений с измерениями "Родитель, ВышестоящийРодитель", и заполнял/обновлял бы его при записи группы номенклатуры.
Тогда получение всех вышестоящих родителей сведется к одному запросу к этому регистру. Причем регистр будет относительно небольшой (в сравнении со справочником номенклатуры), т.к. в нем будут только группы. А вся нагрузка ляжет на событие ПриЗаписи элемента группы номенклатуры, что при грамотном кодировании не критично.
Такое решение должно работать быстро, что и требуется.
PS Было бы замечательно, если бы вы все эти подробности сразу раскрыли. Сэкономили бы своё время и время отвечающих.
При установке отбора в динамическом списке следует помнить, что отбор не действует на группы, если для динамического списка выбран режим отображения Иерархический список или Дерево. Под «группами» понимается элемент справочника или плана видов характеристик, у которого свойство ЭтоГруппа установлено в значение Истина.
Может есть хоть какой-то вариант?
Через параметры запроса пробовал, не работает.
ВЫБРАТЬ
СправочникКаталог.Код КАК Код,
СправочникКаталог.Наименование КАК Наименование
ИЗ
Справочник.Каталог КАК СправочникКаталог
ГДЕ
СправочникКаталог.Модель = &Модель
(4) Да, я пробовал. Для элементов прекрасно работает.
Если вам не нравится, что в списке отображаются пустые группы (о чем ни слова в первом сообщении) - можете попробовать их спрятать через условное оформление
https://infostart.ru/1c/articles/413242/
У меня получилось так:
1. В дин.списке делаете запрос
ВЫБРАТЬ
СправочникНоменклатура.Ссылка,
СправочникНоменклатура.Наименование
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (Выбрать ссылка из Справочник.Номенклатура ГДЕ Наименование В (&Ссылка)) Фильтр
По СправочникНоменклатура.ссылка = Фильтр.Ссылка
2. В параметре Ссылка указываете найденную номенклатуру и всех вышестоящих по иерархии родителей
3. А для родителей я бы при ваших объемах завел кэш в виде регистра сведений с измерениями "Родитель, ВышестоящийРодитель", и заполнял/обновлял бы его при записи группы номенклатуры.
Тогда получение всех вышестоящих родителей сведется к одному запросу к этому регистру. Причем регистр будет относительно небольшой (в сравнении со справочником номенклатуры), т.к. в нем будут только группы. А вся нагрузка ляжет на событие ПриЗаписи элемента группы номенклатуры, что при грамотном кодировании не критично.
Такое решение должно работать быстро, что и требуется.
PS Было бы замечательно, если бы вы все эти подробности сразу раскрыли. Сэкономили бы своё время и время отвечающих.
(7) Не работает. Похоже, когда у динамического списка есть основная таблица он в любом случае считывает всё дерево.
Ваше вн. соединение имело бы смысл, если бы в группах не было поля фильтрации. У меня реквизит "Модель" для групп и элементов.
Всем спасибо, сделал через дерево значений.
ВЫБРАТЬ
СправочникКаталог.Код КАК Код,
СправочникКаталог.Наименование КАК Наименование
ИЗ
Справочник.Каталог КАК СправочникКаталог
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Каталог.Ссылка КАК Ссылка
ИЗ
Справочник.Каталог КАК Каталог
ГДЕ
Каталог.Ссылка В(&Ссылки)) КАК Фильтр
ПО СправочникКаталог.Ссылка = Фильтр.Ссылка
Показать
Процедура ВыборМодели(Модель)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Каталог.Ссылка КАК Ссылка
|ИЗ
| Справочник.Каталог КАК Каталог
|ГДЕ
| Каталог.Модель = &Модель";
Запрос.УстановитьПараметр("Модель", Модель);
Ссылки = Новый Массив;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Ссылки.Добавить(Выборка.Ссылка);
КонецЦикла;
Каталог.Параметры.УстановитьЗначениеПараметра("Ссылки", Ссылки);
Элементы.Каталог.Обновить();
КонецПроцедуры
(11) "Модель" есть во всех элементах дерева, я проверил формируемый массив, он полный.
Если бы урезало дерево - это одно, а так всё равно, в дереве 5000 двигателей. Бросаем это, может таки 1С вернётся к доработке динамического списка