Книга знаний

1С:Предприятие / v8 / Приемы программирования / Формы

v8: Как получить строки, отобранные отбором (новый способ)

Есть Форма. В ней - ТабличноеПоле в которой таблица из миллиона записей. Пользователь ставит фильтр по каким то значениям и в таблице остается 500 записей. Как теперь обойти все выбранные записи по данному отбору? Автор статьи: Dimma
Последняя редакция №1 от 27.08.08
URL: http://kb.mista.ru/article.php?id=701

Ключевые слова: отбор,табличное поле


В продолжении темы, поднятой Гением1С Книга знаний: Как получить строки, отобранные отбором, есть способ перебрать строки в Отборе ТабличногоПоля, как это делают сами разработчики 1С. Данный способ взят из обработки УдалениеПомеченныхОбъектов.epf на ИТС.

Пояснять ничего не буду, вроде и так все понятно. Способ от Гения покороче, но имхо менее прозрачный.


// Процедура вызывается при нажатии кнопки "Установить Флажки" командной панели "Удаляемые Объекты"
//
Процедура КоманднаяПанельУдаляемыхОбъектовУстановитьФлажки(Кнопка)
   ТекОтбор = ЭлементыФормы.УдаляемыеОбъекты.ОтборСтрок.Метаданные;
   Для каждого СтрокаУдаляемогоОбъекта Из УдаляемыеОбъекты Цикл
       Если вВходитВОтбор(СтрокаУдаляемогоОбъекта.Метаданные,ТекОтбор) Тогда
           СтрокаУдаляемогоОбъекта.Удалять = Истина;
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры


// Функция проверяет попадает ли значение в отбор
// Параметры:
//  ТекЗначение   - Значение любого типа, которое нужно проверить
//    ТекОтбор      - Отбор, в котором происходит проверка
// Возвращаемое значение:
//    Булево        - Истина, если попадает
//
Функция вВходитВОтбор(ТекЗначение, ТекОтбор) Экспорт
   ЗначениеОтбора = ТекОтбор.Значение;
   ВходитВОтбор = Ложь;
   Если ТекОтбор.Использование = Ложь Тогда
       ВходитВОтбор = Истина;
   ИначеЕсли ТекОтбор.ВидСравнения = ВидСравнения.Равно Тогда
       Если ЗначениеОтбора = ТекЗначение Тогда
           ВходитВОтбор = Истина;
       КонецЕсли;
   ИначеЕсли ТекОтбор.ВидСравнения = ВидСравнения.НеРавно Тогда
       Если ЗначениеОтбора <> ТекЗначение Тогда
           ВходитВОтбор = Истина;
       КонецЕсли;
   ИначеЕсли ТекОтбор.ВидСравнения = ВидСравнения.Содержит Тогда
       Если Найти(ТекЗначение,ЗначениеОтбора) <> 0 Тогда
           ВходитВОтбор = Истина;
       КонецЕсли;
   ИначеЕсли ТекОтбор.ВидСравнения = ВидСравнения.ВСписке Тогда
       Если ЗначениеОтбора.НайтиПоЗначению(ТекЗначение) <> Неопределено Тогда
           ВходитВОтбор = Истина;
       КонецЕсли;
   ИначеЕсли ТекОтбор.ВидСравнения = ВидСравнения.НеВСписке Тогда
       Если ЗначениеОтбора.НайтиПоЗначению(ТекЗначение) = Неопределено Тогда
           ВходитВОтбор = Истина;
       КонецЕсли;
   КонецЕсли;
   Возврат ВходитВОтбор;
КонецФункции // ВходитВРтбор()

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика