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

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

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

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

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

В документе:

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

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


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

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

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

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

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

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

комментария 4

  1. rzd:

    Здесь плохо всё. Кстати я не понял из контекста автора: БрендТовара это теперь реквизит табличной части документа?

    • вместо того чтобы малоинформативно писать про «все», напишите предметно, что считаете не правильным. БрендТовара — это реквизит, добавленный в форму в табличную часть документа. Не в саму табличную часть документа, разумеется.

  2. rzd:

    То есть пока не установим отбор — бренда на форме не увидим?
    Вот здесь более правильный подход:
    https://infostart.ru/1c/articles/803449/

    • увидите. ТЧ умеет выводить реквизит через точку. Не путайте невидимый реквизит отбора и поле бренда.
      а в чем правильность этого подхода?

Добавить комментарий

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