Существует несколько способов сделать отбор в таблице значений.
Первый — он же самый простой и, на мой взгляд неправильный — это просто пройти по таблице значений в цикле и отобрать нужные строки.
Второй — использовать метод таблицы значений «НайтиСтроки». Методу передается структура в которой ключ — это название колонки, а значение — это нужное нам значение отбора. Этот метод неплох, но у него есть два серьезных недостатка. Во-первых, функция вернет массив строк таблицы значений (т.е. возможно потребуются дополнительные действия). А во-вторых, единственный допустимый вид сравнения — это равенство.
И, наконец, третий способ — использование объекта «ПостроительЗапроса».
Код выглядит примерно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | &НаСервере Процедура ОтборНаСервере() Построитель = Новый ПостроительЗапроса; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабЗначений); тОтбор = Построитель.Отбор.Добавить("Колонка1"); тОтбор.ВидСравнения = ВидСравнения.БольшеИлиРавно; тОтбор.Значение = 10; тОтбор.Использование = Истина; Построитель.Выполнить(); ТабРезультат = Построитель.Результат.Выгрузить(); тОтбор = Построитель.Отбор["Колонка1"]; тОтбор.ВидСравнения = ВидСравнения.Равно; Построитель.Выполнить(); ТабРезультат = Построитель.Результат.Выгрузить(); КонецПроцедуры |
Как видно из кода, мы создаем построить запросов и загружаем в него таблицу значений, после этого добавляется отбор, запрос выполняется и удовлетворяющие условию отбора строки выгружаются в другую таблицу значений. После этого отбор меняется (его уже не нужно добавлять) и результат выгружается вновь.
Этот способ лишен недостатков, которыми обладают предыдущие способы.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
наааайс
Чувак, ты мегакрут
То что я искал. Спасибо
А если понадобится отобрать строки с видом сравнения «Содержит»?
Очень хорошая статья — спасибо автору.
От себя добавлю только, что поле добавляемой колонки для отбора в таблице значений обязательно должно быть типизировано, иначе в строке тОтбор=Построитель.Отбор.Добавить(«Колонка1») вывалится ошибка «Недопустимое значение параметра (параметр номер ‘1’)»
1. Для того, чтобы сработало
тОтбор=Построитель.Отбор.Добавить(«Колонка1») ,
надо перед этой строкой добавить:
Построитель.ДоступныеПоля[«Колонка1»].Отбор = Истина;
2. на толстом клиенте при выполнении строки
ОтборПоУрв.ВидСравнения = ВидСравнения.;
возникает ошибка
Ошибка при установке значения атрибута контекста (ВидСравнения)
{ВнешняяОбработка.ОЖФ.МодульОбъекта(845)}: ОтборПоУрв.ВидСравнения = ВидСравнения.НеРавно;
по причине:
Недопустимый тип сравнения
Ни одно значение из ВидСравнения, кроме не прокатывает
исправления:
ОтборПоУрв.ВидСравнения = ВидСравнения.{ЛюбоеЗначение};
Ни одно значение из ВидСравнения, кроме {Равно} не прокатывает
Дополню, что, действительно, для того, чтобы срабатывал отбор с любым видом сравнения, поле, по которому производится отбор, должно быть типизировано.