HelpF.pro

Табличная часть ~ Как настроить отбор строк?

Часто возникает задача показать только нужные строки в табличной части документа или справочника (или другого объекта). Для этого можно использовать замечательное свойство:

в обычном приложении параметр для ОтборСтрок - Отбор...

в управляемом приложении - ФиксированнаяСтруктура

ОтборСтрок, которое входит в расширение табличного поля, связанного с табличной частью.

Управляемые формы

Код 1C v 8.3
 СписокЗаказовНаФорме.ОтборСтрок = Новый ФиксированнаяСтруктура("Клиент", СписокЗаказовНаФорме.ТекущиеДанные.Клиент);    

пример:

Код 1C v 8.3
 СписокЗаказовНаФорме = ЭтаФорма.Элементы.СписокЗаказов; 
ТекНомер = Неопределено; 
Для НомерСтроки = 0 По СписокЗаказов.Количество()-1 Цикл 
Сообщение = Новый СообщениеПользователю; 
Если СписокЗаказовНаФорме.ПроверитьСтроку(НомерСтроки) Тогда 
СписокЗаказовНаФорме.ТекущаяСтрока = НомерСтроки; 
Если ТекНомер = Неопределено Тогда 
Если ЗначениеЗаполнено(СписокЗаказовНаФорме.ТекущиеДанные.Машина) Тогда 
ТекНомер = СписокЗаказовНаФорме.ТекущиеДанные.Машина; 
Иначе 
Сообщение = Новый СообщениеПользователю; 
Сообщение.Текст = "Установите нужный номер автомобиля в первой строке списка"; 
Сообщение.Поле = "СписокЗаказов[" + НомерСтроки + "].Машина"; 
Сообщение.Сообщить(); 
СписокЗаказовНаФорме.ОтборСтрок = Новый ФиксированнаяСтруктура("Клиент", СписокЗаказовНаФорме.ТекущиеДанные.Клиент); 
Возврат; 
КонецЕсли; 
Иначе 
СписокЗаказовНаФорме.ТекущиеДанные.Машина = ТекНомер; 
КонецЕсли; 
КонецЕсли; 
КонецЦикла; 

или такой динамический отбор

Код 1C v 8.3
 ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИмяПоляОтбора");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ПравоеЗначение = ЗначениеПоляОтбора;


//очистка отбора (подставьте свои элементы) 
&НаКлиенте
Процедура ОчиститьОтбор(Команда)
    этаформа.Список.Отбор.Элементы.Очистить();
КонецПроцедуры

Обычные формы

Использовать его очень просто:

Код 1C v 8.х
 //установить отбор 
ЭлементыФормы.ИмяТабПоля.ОтборСтрок.Колонка1.Установить(ЗначениеОтбора); 

//отключить отбор 
ЭлементыФормы.ИмяТабПоля.ОтборСтрок.Колонка1.Установить(,Ложь); 

или 2-й вариант:

Код 1C v 8.х
 ЭлементыФормы.ИмяТабПоля.ОтборСтрок.Колонка1.Использование = Истина; 
ЭлементыФормы.ИмяТабПоля.ОтборСтрок.Колонка1.ВидСравнения = ВидСравнения.Равно; 
ЭлементыФормы.ИмяТабПоля.ОтборСтрок.Колонка1.Значение = ЗначениеОтбора; 

А теперь конкретные примеры:

Код 1C v 8.х
 //выбрать строки с ценой = 100 
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Установить(100); 

-------- 
//выбрать строки с ценой 100 и опр. валютой 
ЭлементыФормы.тпТовары.ОтборСтрок.Валюта.Установить(ВалютаУпр); 
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Установить(200); 

-------- 
//выбрать строки с ценой >= 100 (неравенство) 
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Использование = Истина; 
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.ВидСравнения = ВидСравнения.БольшеИлиРавно; 
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Значение = 100; 

-------- 
//выбрать строки с ценой от 100 до 200 (интервал) 
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Использование = Истина; 
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.ВидСравнения = ВидСравнения.Интервал; 
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.ЗначениеС = 100; 
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.ЗначениеПо = 200; 

-------- 
//выбрать строки с определенными товарами по списку 

ЭлементыФормы.тпТовары.ОтборСтрок.Товар.Использование = Истина; 
ЭлементыФормы.тпТовары.ОтборСтрок.Товар.ВидСравнения = ВидСравнения.ВСписке; 
ЭлементыФормы.тпТовары.ОтборСтрок.Товар.Значение.Добавить(Товар1); 
ЭлементыФормы.тпТовары.ОтборСтрок.Товар.Значение.Добавить(Товар2); 

Подчиненные табличные части в 8.х

С помощью свойства ОтборСтрок можно реализовать подчиненные (связанные) табличные части. При смене текущей строки в первой табличной части вторая табличная часть показывает только связанную информаци. Например, таким образом можно реализовать работу с комплектами: 1-я таб. часть - комплекты, вторая - состав комплекта.

Во второй табличной части должна быть колонка - идентификационный признак, связывающий ее с первой табличной частью. Таких колонок может быть несколько (составной ключ);

В событии ПриАктивизацииСтроки для первого табличного поля пишем:

Код 1C v 8.х
 ЭлементыФормы.СоставКомплекта.ОтборСтрок.Комплект.Установить(Комплект);    

При добавлении новой строки во вторую табличную часть, нужно следить за тем, чтобы идентификационная колонка была установлена.

Обращаю ваше внимание, что при таком отборе не используются индексы и для больших табличных частей возможно замедление работы.

Еще раз напомню, что ОтборСтрок входит в расширение табличного поля табличной части, т.е. табличное поле должно быть связано с табличной частью. Если же оно связано с динамическим списком типа СправочникСписок, то здесь нужно использовать свойство Отбор для объекта типа СправочникСписок.

Если понадобилось перебрать строки, вошедшие в отбор, то это можно сделать, только заново перебрав все строки и проверив условие отбора для каждой строки. Перебрать строки табличного поля, которые сейчас на экране - невозможно.


Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq82/view/1598.html