RuporAbsurda писал(а) 18. Июля 2011 :: 12:59:Возможно ли в индексированной тз сделать отбор по нескольким значениям, например в колонке есть
знач1
знач2
знач1
знач3
Возможно ли сделать отбор сразу и по знач1 и по знач3, чтобы в выборке было
знач1
знач1
знач3
Могу предложить результат исследований методов решения твоей задачи:
Функция ИТ_ОтфильтроватьПоСпискуЗначений(Таблица, КолонкаТаблицы, _СписокЗначений)
РезультТаблица = СоздатьОбъект("ИндексированнаяТаблица");
Если ТипЗначенияСтр(_СписокЗначений) <> "СписокЗначений" Тогда
Возврат РезультТаблица;
КонецЕсли;
// ++++++++++++++++ kms (c)
_ТЗ = СоздатьОбъект("ТаблицаЗначений");
_СписокЗначений.Выгрузить(_ТЗ);
ТаблицаВектор = СоздатьОбъект("ИндексированнаяТаблица");
ТаблицаВектор.Загрузить(_ТЗ);
ТаблицаВектор.ПереименоватьКолонку("_1", КолонкаТаблицы);
ТаблицаВектор.НоваяКолонка("ДопЗначение");
ТаблицаВектор.ЗаполнитьКолонку(, "ДопЗначение", 1);
ИндексТаблицыВектора = ТаблицаВектор.ДобавитьИндекс(КолонкаТаблицы, КолонкаТаблицы);
// ---------------- kms (c)
Таблица.ЛевоеСоединение(КолонкаТаблицы, ТаблицаВектор, ИндексТаблицыВектора, "ДопЗначение");
Таблица.ДобавитьИндекс("ДопЗначение", "ДопЗначение");
Таблица.УстановитьФильтр(1, 1, "ДопЗначение");
Таблица.Выгрузить(РезультТаблица, "ДопЗначение");
Таблица.ВыключитьФильтр("ДопЗначение");
Таблица.УдалитьИндекс("ДопЗначение");
Таблица.УдалитьКолонку("ДопЗначение");
Возврат РезультТаблица;
КонецФункции
На вид - тяжеловато, но работает на любых размерах исходной таблицы адекватно ИТ.Пересечение() и заметно быстрее.
Точку пока еще ставить рано...