Идея следующая: по списку ссылок нахожу все объекты, их содержащие
НайденныеСсылки = НайтиПоСсылкам(МассивЗаменяемых);
Затем в отобранной таблице хочу сделать произвольный отбор.
Для интерфейса выбрал КомпоновщикНастроек (тип КомпоновщикНастроекКомпоновкиДанных), Отбор.
Как его заполнить нужными типами - отдельная песня.
Но вот он заполнен, НайденныеСсылки получены. Пытаюсь скрестить ужа с ежом.
Простой перебор в цикле, отбор неподходящих по условию с их последующим удалением работает. Но очень долго.
Вот кусок кода условия:
ИначеЕсли Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда
Для Каждого ЭлементМассива Из Элемент.ПравоеЗначение Цикл
ВключатьВОтбор = СтрокаСсылка.Данные[Строка(Элемент.ЛевоеЗначение)].ПринадлежитЭлементу(ЭлементМассива)
ИЛИ СтрокаСсылка.Данные[Строка(Элемент.ЛевоеЗначение)] = ЭлементМассива;
Если ВключатьВОтбор Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Что не вошло включаем в массив на удаление:
Если НЕ ВключатьВОтбор Тогда
МассивНаУдаление.Добавить(СтрокаСсылка);
КонецЕсли;
И потом удаляем из таблицы:
Для Каждого СтрокаСсылка Из МассивНаУдаление Цикл
НайденныеСсылки.Удалить( СтрокаСсылка);
КонецЦикла;
К тому же различные комбинации отбора с использованием групп сильно усложнят алгоритм.
Есть ещё два варианта:
1. засунуть НайденныеСсылки в запрос,как источник данных и сформировать нужное условие по реквизитам. По идее в запросе должно быть быстрее.
2. Прикрутить отбор к Табличному полю, у которого источник
НайденныеСсылки. Но вся беда в том, что колонки табличного поля содержат ссылку на данные, на метаданные и на заменяемое значение.
Чтобы в отборе были нужные поля, нужно эти поля добавлять в новые колонки и заполнять их из ссылок на данные.
Есть у кого идеи, как к таблице из произвольных ссылок прикрутить произвольный отбор по возможным реквизитам этих ссылок?
Прочитал по диагонали. По поводу вопроса - ТЗ источник схемы компоновки. Нужное поле набора ограничиваем типом нужно колонки ТЗ. Отбор соответственно используется типовой СКДэшный.
Результат выполнения СКД выводим в ТЗ при настройке единственно детальной группировки, включающей все поля исходной ТЗ - профит.
(1) вот тут по-детальней. СКД - это здорово. Но предварительно нужно все поля из отбора сделать полями запроса. Иначе не взлетит. И вот есть у нас в отборе Контрагент. А в одной из ссылок такого реквизита просто нет. И как сработает наш отбор? хотя, попробовать надо.
А после того, как мы получили запрос для СКД, какие шаги нужно сделать, чтобы получить ТЗ из него? Естественно, после срабатывания отбора.
На закладке "Модификация набора данных" реализована имитация типового отбора средствами СКД по произвольной таблице значений
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс