| v8: Как получить строки, отобранные отбором (новый способ)| Есть Форма. В ней - ТабличноеПоле в которой таблица из миллиона записей. 
Пользователь ставит фильтр по каким то значениям и в таблице остается 500 записей. 
Как теперь обойти все выбранные записи по данному отбору? |  | Автор статьи: Dimma Последняя редакция №1 от 27.08.08
 URL: http://kb.mista.ru/article.php?id=701
 |  | 
 Ключевые слова: отбор,табличное поле
 
 
 В продолжении темы, поднятой Гением1С Книга знаний: Как получить  строки, отобранные отбором, есть способ перебрать строки в Отборе ТабличногоПоля, как это делают сами разработчики 1С. Данный способ взят из обработки УдалениеПомеченныхОбъектов.epf на ИТС.
 
 Пояснять ничего не буду, вроде и так все понятно. Способ от Гения покороче, но имхо менее прозрачный.
 
 
 
// Процедура вызывается при нажатии кнопки "Установить Флажки" командной панели "Удаляемые Объекты"
 //
 Процедура КоманднаяПанельУдаляемыхОбъектовУстановитьФлажки(Кнопка)
 ТекОтбор = ЭлементыФормы.УдаляемыеОбъекты.ОтборСтрок.Метаданные;
 Для каждого СтрокаУдаляемогоОбъекта Из УдаляемыеОбъекты Цикл
 Если вВходитВОтбор(СтрокаУдаляемогоОбъекта.Метаданные,ТекОтбор) Тогда
 СтрокаУдаляемогоОбъекта.Удалять = Истина;
 КонецЕсли;
 КонецЦикла;
 КонецПроцедуры
 
 
 // Функция проверяет попадает ли значение в отбор
 // Параметры:
 //  ТекЗначение   - Значение любого типа, которое нужно проверить
 //    ТекОтбор      - Отбор, в котором происходит проверка
 // Возвращаемое значение:
 //    Булево        - Истина, если попадает
 //
 Функция вВходитВОтбор(ТекЗначение, ТекОтбор) Экспорт
 ЗначениеОтбора = ТекОтбор.Значение;
 ВходитВОтбор = Ложь;
 Если ТекОтбор.Использование = Ложь Тогда
 ВходитВОтбор = Истина;
 ИначеЕсли ТекОтбор.ВидСравнения = ВидСравнения.Равно Тогда
 Если ЗначениеОтбора = ТекЗначение Тогда
 ВходитВОтбор = Истина;
 КонецЕсли;
 ИначеЕсли ТекОтбор.ВидСравнения = ВидСравнения.НеРавно Тогда
 Если ЗначениеОтбора <> ТекЗначение Тогда
 ВходитВОтбор = Истина;
 КонецЕсли;
 ИначеЕсли ТекОтбор.ВидСравнения = ВидСравнения.Содержит Тогда
 Если Найти(ТекЗначение,ЗначениеОтбора) <> 0 Тогда
 ВходитВОтбор = Истина;
 КонецЕсли;
 ИначеЕсли ТекОтбор.ВидСравнения = ВидСравнения.ВСписке Тогда
 Если ЗначениеОтбора.НайтиПоЗначению(ТекЗначение) <> Неопределено Тогда
 ВходитВОтбор = Истина;
 КонецЕсли;
 ИначеЕсли ТекОтбор.ВидСравнения = ВидСравнения.НеВСписке Тогда
 Если ЗначениеОтбора.НайтиПоЗначению(ТекЗначение) = Неопределено Тогда
 ВходитВОтбор = Истина;
 КонецЕсли;
 КонецЕсли;
 Возврат ВходитВОтбор;
 КонецФункции // ВходитВРтбор()
 
 |