По теме из базы знаний
- PowerTools: Инструменты администратора 1С 8.3/8.5
- Удаление данных с отбором и построением дерева ссылок в базах 1С 8.1-8.3 УТ 10.3./11, БП 2/3, ЗУП 2.5/3, КА 1.1/2, УНФ 1.6/3.0
- Одиночная/групповая регистрация объектов/реквизитов объектов для обмена через планы обмена c отборами для ЛЮБЫХ баз 1С на 8.2-8.3 (УТ 10.3, БП 2.0, Розница 1.1, УТ 11, БП 3, УНФ 1.6, КА 2, ЗУП 3 и т.д.)
- Подсистема прав доступа к объектам с гибкими отборами (расширение)
- Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов
Найденные решения
Да, это уже задачка поинтересней.
У меня получилось так:
1. В дин.списке делаете запрос
2. В параметре Ссылка указываете найденную номенклатуру и всех вышестоящих по иерархии родителей
3. А для родителей я бы при ваших объемах завел кэш в виде регистра сведений с измерениями "Родитель, ВышестоящийРодитель", и заполнял/обновлял бы его при записи группы номенклатуры.
Тогда получение всех вышестоящих родителей сведется к одному запросу к этому регистру. Причем регистр будет относительно небольшой (в сравнении со справочником номенклатуры), т.к. в нем будут только группы. А вся нагрузка ляжет на событие ПриЗаписи элемента группы номенклатуры, что при грамотном кодировании не критично.
Такое решение должно работать быстро, что и требуется.
PS Было бы замечательно, если бы вы все эти подробности сразу раскрыли. Сэкономили бы своё время и время отвечающих.
У меня получилось так:
1. В дин.списке делаете запрос
ВЫБРАТЬ
СправочникНоменклатура.Ссылка,
СправочникНоменклатура.Наименование
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (Выбрать ссылка из Справочник.Номенклатура ГДЕ Наименование В (&Ссылка)) Фильтр
По СправочникНоменклатура.ссылка = Фильтр.Ссылка
2. В параметре Ссылка указываете найденную номенклатуру и всех вышестоящих по иерархии родителей
3. А для родителей я бы при ваших объемах завел кэш в виде регистра сведений с измерениями "Родитель, ВышестоящийРодитель", и заполнял/обновлял бы его при записи группы номенклатуры.
Тогда получение всех вышестоящих родителей сведется к одному запросу к этому регистру. Причем регистр будет относительно небольшой (в сравнении со справочником номенклатуры), т.к. в нем будут только группы. А вся нагрузка ляжет на событие ПриЗаписи элемента группы номенклатуры, что при грамотном кодировании не критично.
Такое решение должно работать быстро, что и требуется.
PS Было бы замечательно, если бы вы все эти подробности сразу раскрыли. Сэкономили бы своё время и время отвечающих.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Точно так же, как и всегда
ЭлементОтбора = Дерево1.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Наименование");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = "Наименование1";
(2), (3) Пробовали?
Цитирую ИТС
7.3.1.2. Ограничения и особенности
При установке отбора в динамическом списке следует помнить, что отбор не действует на группы, если для динамического списка выбран режим отображения Иерархический список или Дерево. Под «группами» понимается элемент справочника или плана видов характеристик, у которого свойство ЭтоГруппа установлено в значение Истина.
Может есть хоть какой-то вариант?
Через параметры запроса пробовал, не работает.
Цитирую ИТС
7.3.1.2. Ограничения и особенности
При установке отбора в динамическом списке следует помнить, что отбор не действует на группы, если для динамического списка выбран режим отображения Иерархический список или Дерево. Под «группами» понимается элемент справочника или плана видов характеристик, у которого свойство ЭтоГруппа установлено в значение Истина.
Может есть хоть какой-то вариант?
Через параметры запроса пробовал, не работает.
ВЫБРАТЬ
СправочникКаталог.Код КАК Код,
СправочникКаталог.Наименование КАК Наименование
ИЗ
Справочник.Каталог КАК СправочникКаталог
ГДЕ
СправочникКаталог.Модель = &Модель&НаСервере
Процедура ВыборМодели(Модель)
Каталог.Параметры.УстановитьЗначениеПараметра("Модель", Модель);
Элементы.Каталог.Обновить();
КонецПроцедуры
(4) Да, я пробовал. Для элементов прекрасно работает.
Если вам не нравится, что в списке отображаются пустые группы (о чем ни слова в первом сообщении) - можете попробовать их спрятать через условное оформление
Если вам не нравится, что в списке отображаются пустые группы (о чем ни слова в первом сообщении) - можете попробовать их спрятать через условное оформление
ГруппаКонструктора = Справочники.Номенклатура.НайтиПоКоду("00-00000001");
ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Истина );
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать",Истина );
ОтборПоГруппе = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборПоГруппе.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ОтборПоГруппе.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
ОтборПоГруппе.ПравоеЗначение = ГруппаКонструктора;
Показать
Да, это уже задачка поинтересней.
У меня получилось так:
1. В дин.списке делаете запрос
2. В параметре Ссылка указываете найденную номенклатуру и всех вышестоящих по иерархии родителей
3. А для родителей я бы при ваших объемах завел кэш в виде регистра сведений с измерениями "Родитель, ВышестоящийРодитель", и заполнял/обновлял бы его при записи группы номенклатуры.
Тогда получение всех вышестоящих родителей сведется к одному запросу к этому регистру. Причем регистр будет относительно небольшой (в сравнении со справочником номенклатуры), т.к. в нем будут только группы. А вся нагрузка ляжет на событие ПриЗаписи элемента группы номенклатуры, что при грамотном кодировании не критично.
Такое решение должно работать быстро, что и требуется.
PS Было бы замечательно, если бы вы все эти подробности сразу раскрыли. Сэкономили бы своё время и время отвечающих.
У меня получилось так:
1. В дин.списке делаете запрос
ВЫБРАТЬ
СправочникНоменклатура.Ссылка,
СправочникНоменклатура.Наименование
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (Выбрать ссылка из Справочник.Номенклатура ГДЕ Наименование В (&Ссылка)) Фильтр
По СправочникНоменклатура.ссылка = Фильтр.Ссылка
2. В параметре Ссылка указываете найденную номенклатуру и всех вышестоящих по иерархии родителей
3. А для родителей я бы при ваших объемах завел кэш в виде регистра сведений с измерениями "Родитель, ВышестоящийРодитель", и заполнял/обновлял бы его при записи группы номенклатуры.
Тогда получение всех вышестоящих родителей сведется к одному запросу к этому регистру. Причем регистр будет относительно небольшой (в сравнении со справочником номенклатуры), т.к. в нем будут только группы. А вся нагрузка ляжет на событие ПриЗаписи элемента группы номенклатуры, что при грамотном кодировании не критично.
Такое решение должно работать быстро, что и требуется.
PS Было бы замечательно, если бы вы все эти подробности сразу раскрыли. Сэкономили бы своё время и время отвечающих.
(7) Не работает. Похоже, когда у динамического списка есть основная таблица он в любом случае считывает всё дерево.
Ваше вн. соединение имело бы смысл, если бы в группах не было поля фильтрации. У меня реквизит "Модель" для групп и элементов.
Всем спасибо, сделал через дерево значений.
Ваше вн. соединение имело бы смысл, если бы в группах не было поля фильтрации. У меня реквизит "Модель" для групп и элементов.
Всем спасибо, сделал через дерево значений.
(8) Работает, я проверил. Видимо, вы что-то неправильно делаете. С основной таблицей, ровно так , как написано выше.
Если в группах есть дополнительный фильтр - во вложенном запросе накладываете его на группы дополнительно, и всё.
Если в группах есть дополнительный фильтр - во вложенном запросе накладываете его на группы дополнительно, и всё.
(9)
ВЫБРАТЬ
СправочникКаталог.Код КАК Код,
СправочникКаталог.Наименование КАК Наименование
ИЗ
Справочник.Каталог КАК СправочникКаталог
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Каталог.Ссылка КАК Ссылка
ИЗ
Справочник.Каталог КАК Каталог
ГДЕ
Каталог.Ссылка В(&Ссылки)) КАК Фильтр
ПО СправочникКаталог.Ссылка = Фильтр.Ссылка ПоказатьПроцедура ВыборМодели(Модель)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Каталог.Ссылка КАК Ссылка
|ИЗ
| Справочник.Каталог КАК Каталог
|ГДЕ
| Каталог.Модель = &Модель";
Запрос.УстановитьПараметр("Модель", Модель);
Ссылки = Новый Массив;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Ссылки.Добавить(Выборка.Ссылка);
КонецЦикла;
Каталог.Параметры.УстановитьЗначениеПараметра("Ссылки", Ссылки);
Элементы.Каталог.Обновить();
КонецПроцедуры
Показать
(11) "Модель" есть во всех элементах дерева, я проверил формируемый массив, он полный.
Если бы урезало дерево - это одно, а так всё равно, в дереве 5000 двигателей. Бросаем это, может таки 1С вернётся к доработке динамического списка
Если бы урезало дерево - это одно, а так всё равно, в дереве 5000 двигателей. Бросаем это, может таки 1С вернётся к доработке динамического списка
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот
