Простой способ использовать ОтборСтрок в табличной части

В табличную часть можно выводить атрибуты реквизитов через точку, но ОтборСтрок по ним не работает.

Например, я выводил в табличную часть Номенклатура.БрендТовара, все хорошо, но программно сделать отбор нельзя.

Там работают совсем простые пользователи, научить их ALT+F сложно, а программно вызвать такой поиск тоже, по-моему нельзя. Им надо сделать поле отбора.

Поэтому решено было добавить в табличную часть колонка БрендТовара и ее заполнить.

В документе:

&НаКлиенте
Процедура ВыбБрендПриИзменении(Элемент) 
	ВыбБрендПриИзмененииНаСервере();
КонецПроцедуры      

&НаСервере
Процедура ВыбБрендПриИзмененииНаСервере()
	ЛогикаСервер.ОбработатьВыборБренда(ЭтаФорма, ВыбБренд, Элементы.Материалы, Объект.Материалы);
КонецПроцедуры


В модуле ЛогикаСервер:

Процедура ПроставитьБрендыТоваровСтрокТЧ(ТЧ) Экспорт
	З = Новый Запрос();
	З.Текст = 
	"ВЫБРАТЬ
	|	Т.НомерСтроки КАК НомерСтроки,
	|	Т.Номенклатура КАК Номенклатура
	|ПОМЕСТИТЬ ТЗ
	|ИЗ
	|	&ТЗ КАК Т
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ТН.БрендТовара КАК БрендТовара,
	|	ТЗ.НомерСтроки КАК НомерСтроки
	|ИЗ
	|	ТЗ КАК ТЗ
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК ТН
	|		ПО ТЗ.Номенклатура = ТН.Ссылка";
	З.УстановитьПараметр("ТЗ", ТЧ.Выгрузить(, "Номенклатура, НомерСтроки"));
	Выборка = З.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
		Строка = ТЧ[Выборка.НомерСтроки-1];
		Строка.БрендТовара = Выборка.БрендТовара;
	КонецЦикла;
	
КонецПроцедуры

Процедура ОбработатьВыборБренда(Форма, ЗначениеОтбора, ЭлементТовары, ТЧТовары) Экспорт
	
	ТекОтборСтрок = ЭлементТовары.ОтборСтрок;
	Если ТекОтборСтрок = Неопределено Тогда
		ТекОтборСтрок = Новый Структура();
	Иначе
		ТекОтборСтрок = Новый Структура(ТекОтборСтрок);
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ЗначениеОтбора) Тогда
		ТекОтборСтрок.Вставить("БрендТовара", ЗначениеОтбора);
		ПроставитьБрендыТоваровСтрокТЧ(ТЧТовары);
	Иначе
		ТекОтборСтрок.Удалить("БрендТовара");
	КонецЕсли;                                               
	
	ЭлементТовары.ОтборСтрок = Новый ФиксированнаяСтруктура(ТекОтборСтрок);
	
КонецПроцедуры

В коде максимально эффективно заполняется табличная часть и по ней выставляется отбор, не затрагивая другие колонки отборов в ОтборСтрок.

Среда: Нетленка Объем: 0.8 час.