Top.Mail.Ru

Программный отбор строк в таблице по условию в 1С 8.3

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

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

Разумеется, программно установить фильтр строк для табличной части может понадобиться и в других случаях - например, при выполнении каких-то условий, в зависимости от каких-то реквизитов, и т.п.
Вот еще один пример - есть единая табличная часть "ДоходыИРасходы", и для удобства пользователя она разнесена на две таблицы формы на разных закладках - доходы отдельно, расходы отдельно.

Свойство "ОтборСтрок" таблицы формы

В управляемом приложении для фильтрации видимых пользователю строк существует свойство таблицы формы "ОтборСтрок". Оно задается при помощи фиксированной структуры. А чтобы сбросить его, нужно передать Неопределено.
Данное свойство является дополнительным для элемента управления ТаблицаФормы, связанного с табличной частью либо с таблицей значений. Для таблиц формы, которые связаные с наборами записей регистров, также можно указывать это свойство. У динамических списков все немного по-другому, о них будет написано ниже.

Итак, рассмотрим пример. пусть у нас будет Табличная часть Товары, в которой есть колонка Номенклатура (наличие остальных колонок не принципиально для данной задачи, мы их опустим для краткости), и "подчиненная" табличная часть "ВидыЗапасов", в которой также есть колонка Номенклатура, и колонка ВидЗапасов.

Мы хотим реализовать следующую функциональность - при активизации строки табличной части Товары наложить отбор на виды запасов по нужной номенклатуре.

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

Отбор для динамических списков

Динамические списки в своей основе построены на механизме СКД, а потому и отбор в них настраивается аналогично отбору в системе компоновки данных. Нам понадобится заполнить свойство Отбор, с типом ОтборКомпоновкиДанных.

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

Чувствуете, что застряли в основах 1С?

Информация в интернете кажется обрывочной, а на решение простых задач уходят часы? Вы не одиноки. Я запустил Клуб для 1С разработчиков Alexcode.PRO. Внутри - продвинутые статьи, видео, материалы для скачивания, закрытый чат для резидентов и возможность влиять на контент.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *