В данной статье рассмотрим способы установки отбора строк по условию для таблицы формы в управляемом приложении.
Такой подход часто применяется, когда у нас есть две таблицы, и нам нужно на лету «фильтровать» подчиненную таблицу в зависимости от того, какая строка основной таблицы выбрана. При этом в подчиненной таблице данные хранятся для всех строк, но отображаются только для нужной.
Разумеется, отбор строк программно для табличной части может понадобиться и в других случаях — например, при выполнении каких-то условий, в зависимости от каких-то реквизитов, и т.п.
Вот еще один пример — есть единая табличная часть «ДоходыИРасходы», и для удобства пользователя она разнесена на две таблицы формы на разных закладках — доходы отдельно, расходы отдельно.
Свойство "ОтборСтрок" таблицы формы
В управляемом приложении для фильтрации видимых пользователю строк существует свойство таблицы формы «ОтборСтрок». Оно задается при помощи фиксированной структуры. А чтобы сбросить его, нужно передать Неопределено.
Данное свойство является дополнительным для элемента управления ТаблицаФормы, связанного с табличной частью либо с таблицей значений. Для таблиц формы, которые связаные с наборами записей регистров, также можно указывать это свойство. У динамических списков все немного по-другому, о них будет написано ниже.
Итак, рассмотрим пример. пусть у нас будет Табличная часть Товары, в которой есть колонка Номенклатура (наличие остальных колонок не принципиально для данной задачи, мы их опустим для краткости), и «подчиненная» табличная часть «ВидыЗапасов», в которой также есть колонка Номенклатура, и колонка ВидЗапасов.
Мы хотим реализовать следующую функциональность — при активизации строки табличной части Товары фильтровать виды запасов по нужной номенклатуре.
&НаКлиенте Процедура ТоварыПриАктивизацииСтроки(Элемент) ТекущиеДанные = Элементы.Товары.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; Элементы.ВидыЗапасов.ОтборСтрок = Новый ФиксированнаяСтруктура("Номенклатура", ТекущиеДанные.Номенклатура); КонецПроцедуры
Отбор для динамических списков
Динамические списки в своей основе построены на механизме СКД, а потому и отбор в них настраивается аналогично отбору в системе компоновки данных. Нам понадобится заполнить свойство Отбор, с типом ОтборКомпоновкиДанных.
ЭлементОтбораДанных = ТаблицаСписка.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура"); ЭлементОтбораДанных.Использование = Истина; ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбораДанных.ПравоеЗначение = СсылкаНаНоменклатуруОтбор;
Сэкономь часы на дебаге 1C!
Скачай PDF с топ-11 ошибок начинающих разработчиков + файл с примерами кода!