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