Как установить отбор в табличной части программно

Иногда в зависимости от каких-то действий пользователя необходимо программно установить отбор в табличной части. Рассмотрим как это сделать.

Наиболее часто программно наложить отбор на табличную часть (ТЧ) требуется:

  • Для предоставления пользователю дополнительных интерфейсных возможностей наложения отбора. Например, в документе «Пересчет товаров» флаг для отображения только строк, в которых есть расхождения.
  • При использовании двух взаимосвязанных ТЧ. Т.е. когда при активизации строки в главной ТЧ, в подчиненной ТЧ выводятся только связанные с этой строкой данные. При таком подходе в обоих табличных частях должны быть колонки, по которым будет производиться связывание строк (ключ).

В качестве примера взаимосвязанных табличных частей можно привести обработку, в которой есть две ТЧ: «Контрагенты» и «Договоры». В первой отображаются контрагенты, во второй — договоры этих контрагентов. При активизации строки с контрагентом должен выводиться список договоров только текущего контрагента. Для связи двух ТЧ в каждой присутствует колонка-ключ «Контрагент», по которой производится связь. Отбор на ТЧ с договорами накладывается в событии ПриАктивизацииСтроки() при позиционировании на контрагенте.

Для наложения отбора на табличную часть используется расширение табличных частей — свойство ОтборСтрок, которое позволяет установить отбор по значению одной или нескольких колонок. Свойству ОтборСтрок может быть присвоено значение Неопределено или значение типа ФиксированнаяСтруктура. Значение Неопределено присваивается для снятия отборов. В случае использования фиксированной структуры в качестве ключа указывается имя реквизита ТЧ, а в качестве значения — значение для отбора.

Приведем примеры наложения отборов:

// В ТЧ "Товары" отображать только те строки, у которых в колонке "Отменено" содержится значение Ложь
Элементы.Товары.ОтборСтрок = Новый ФиксированнаяСтруктура("Отменено", Ложь);

// При позиционировании на строке ТЧ "Контрагенты" накладывать отбор на ТЧ "Договоры": отображать только договоры по текущему контрагенту
&НаКлиенте
Процедура КонтрагентыПриАктивизацииСтроки(Элемент)
ТекущиеДанные = Элементы.Контрагенты.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
// ТЧ Контрагенты пустая
Элементы.Договоры.ОтборСтрок = Неопределено;
Иначе
// Для ТЧ Договоры устанавливаем отбор по текущему контрагенту
ТекущийКонтрагент = ТекущиеДанные.Контрагент;
Элементы.Договоры.ОтборСтрок = Новый ФиксированнаяСтруктура("Контрагент", ТекущийКонтрагент);
КонецЕсли;
КонецПроцедуры

Оцените статью