Имя: Пароль:
1C
1С v8
ОтборКомпоновкиДанных в Запросе
,
0 AlexYa
 
03.04.12
13:00
Идея следующая: по списку ссылок нахожу все объекты, их содержащие
   НайденныеСсылки = НайтиПоСсылкам(МассивЗаменяемых);
Затем в отобранной таблице хочу сделать произвольный отбор.
Для интерфейса выбрал КомпоновщикНастроек (тип КомпоновщикНастроекКомпоновкиДанных), Отбор.

Как его заполнить нужными типами - отдельная песня.
Но вот он заполнен, НайденныеСсылки получены. Пытаюсь скрестить ужа с ежом.
Простой перебор в цикле, отбор неподходящих по условию с их последующим удалением работает. Но очень долго.
Вот кусок кода условия:

ИначеЕсли Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда
   Для Каждого ЭлементМассива Из Элемент.ПравоеЗначение Цикл
       ВключатьВОтбор = СтрокаСсылка.Данные[Строка(Элемент.ЛевоеЗначение)].ПринадлежитЭлементу(ЭлементМассива)
                           ИЛИ СтрокаСсылка.Данные[Строка(Элемент.ЛевоеЗначение)] = ЭлементМассива;
       Если ВключатьВОтбор Тогда
           Прервать;
       КонецЕсли;
   КонецЦикла;

Что не вошло включаем в массив на удаление:

Если НЕ ВключатьВОтбор Тогда
   МассивНаУдаление.Добавить(СтрокаСсылка);
КонецЕсли;

И потом удаляем из таблицы:

Для Каждого СтрокаСсылка Из МассивНаУдаление Цикл
   НайденныеСсылки.Удалить( СтрокаСсылка);
КонецЦикла;

К тому же различные комбинации отбора с использованием групп сильно усложнят алгоритм.

Есть ещё два варианта:
1. засунуть НайденныеСсылки в запрос,как источник данных и сформировать нужное условие по реквизитам. По идее в запросе должно быть быстрее.

2. Прикрутить отбор к Табличному полю, у которого источник
НайденныеСсылки. Но вся беда в том, что колонки табличного поля содержат ссылку на данные, на метаданные и на заменяемое значение.
Чтобы в отборе были нужные поля, нужно эти поля добавлять в новые колонки и заполнять их из ссылок на данные.

Есть у кого идеи, как к таблице из произвольных ссылок прикрутить произвольный отбор по возможным реквизитам этих ссылок?
1 Kashemir
 
03.04.12
13:07
Прочитал по диагонали. По поводу вопроса - ТЗ источник схемы компоновки. Нужное поле набора ограничиваем типом нужно колонки ТЗ. Отбор соответственно используется типовой СКДэшный.
Результат выполнения СКД выводим в ТЗ при настройке единственно детальной группировки, включающей все поля исходной ТЗ - профит.
2 AlexYa
 
03.04.12
13:27
(1) вот тут по-детальней. СКД - это здорово. Но предварительно нужно все поля из отбора сделать полями запроса. Иначе не взлетит. И вот есть у нас в отборе Контрагент. А в одной из ссылок такого реквизита просто нет. И как сработает наш отбор? хотя, попробовать надо.

А после того, как мы получили запрос для СКД, какие шаги нужно сделать, чтобы получить ТЗ из него? Естественно, после срабатывания отбора.
3 Kashemir
 
03.04.12
13:31
Проще на примере http://infostart.ru/public/74068/

На закладке "Модификация набора данных" реализована имитация типового отбора средствами СКД по произвольной таблице значений