1С 8.3 обычные формы | Как открыть форму выбора документа с фильтром по ссылке

Предположим, у меня есть какая-то колонка в табличной части чего-то (документа, обработки, справочника), или реквизит в шапке. где надо выбитать документ. И этот документ надо выбирать только из определенных документов, у которых совпадают реквизиты с нашим объектом. Вроде чего там сложного, открываем форму выбора и устанавливаем на ней отбор программно. А вдруг надо, чтобы что то совпадало в табличной части выбираемого документа? Тоже никаких проблем. Что нам мешает предварительно выбрать список документов, которые разрешены к выбору, и затем передать в отбор формы списка список ссылок на объекты из этой формы списка? Вот вам пример из практики.

тд = ЭлементыФормы.ЗаказыПокупателей.ТекущиеДанные;
	СтандартнаяОбработка = ложь;
	тз = "ВЫБРАТЬ
	     |	ЗаказПокупателяУслуги.Ссылка
	     |ИЗ
	     |	Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяУслуги
	     |ГДЕ
	     |	(ЗаказПокупателяУслуги.Ссылка.НомерЗаказаТОРО = &НомерЗаказаТОРО
	     |			ИЛИ ЗаказПокупателяУслуги.НомерЗаказаТОРО = &НомерЗаказаТОРО)
	     |	И ЗаказПокупателяУслуги.Ссылка.СтатьяЗатратРемонта = &СтатьяЗатратРемонта
	     |	И ЗаказПокупателяУслуги.Ссылка.ПодразделениеОрганизации = &Подразделение
	     |"+?(ЗначениеЗаполнено(ЦехЗаказчик),"	И  ЗаказПокупателяУслуги.Ссылка.ПодразделениеЗаказчик = &ПодразделениеЗаказчик","")+"
	     |	И ЗаказПокупателяУслуги.Ссылка.ОбъектРемонта = &ОбъектРемонта
	     |
	     |СГРУППИРОВАТЬ ПО
	     |	ЗаказПокупателяУслуги.Ссылка";
	з = новый запрос (тз);
	з.УстановитьПараметр("НомерЗаказаТОРО",тд.НомерЗаказаТОРО);
	з.УстановитьПараметр("СтатьяЗатратРемонта",тд.ВидРемонта);
	з.УстановитьПараметр("Подразделение",ЦехИсполнитель);
	з.УстановитьПараметр("ПодразделениеЗаказчик",ЦехЗаказчик);
	з.УстановитьПараметр("ОбъектРемонта",тд.ОбъектРемонта);
	
	рез = з.Выполнить();
	Если не рез.Пустой() тогда
		списокСсылокНаДокументы = новый СписокЗначений;
		выборка = рез.Выбрать();
		пока выборка.Следующий() цикл
			списокСсылокНаДокументы.Добавить(выборка.Ссылка);		
		КонецЦикла;
		
		ф = Документы.ЗаказПокупателя.ПолучитьФормуВыбора(,Элемент);
		ф.РежимВыбора=Истина;
		
		ф.отбор.Ссылка.ВидСравнения  = ВидСравнения.ВСписке;
		ф.отбор.Ссылка.Значение  = списокСсылокНаДокументы;
		ф.отбор.Ссылка.Использование  = Истина;
		ф.Открыть();
		Если ЗначениеЗаполнено(ЭлементыФормы.ЗаказыПокупателей.ТекущиеДанные.ЗаказПокупателя) тогда
			ЭлементыФормы.ЗаказыПокупателей.ТекущиеДанные.ШПЗ = ЭлементыФормы.ЗаказыПокупателей.ТекущиеДанные.ЗаказПокупателя.ШПЗ;	
		КонецЕсли;		
	иначе
		Предупреждение("Нет данных для выбора",6);
	КонецЕсли;
КонецПроцедуры

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