Предположим, у меня есть какая-то колонка в табличной части чего-то (документа, обработки, справочника), или реквизит в шапке. где надо выбитать документ. И этот документ надо выбирать только из определенных документов, у которых совпадают реквизиты с нашим объектом. Вроде чего там сложного, открываем форму выбора и устанавливаем на ней отбор программно. А вдруг надо, чтобы что то совпадало в табличной части выбираемого документа? Тоже никаких проблем. Что нам мешает предварительно выбрать список документов, которые разрешены к выбору, и затем передать в отбор формы списка список ссылок на объекты из этой формы списка? Вот вам пример из практики.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
тд = ЭлементыФормы.ЗаказыПокупателей.ТекущиеДанные; СтандартнаяОбработка = ложь; тз = "ВЫБРАТЬ | ЗаказПокупателяУслуги.Ссылка |ИЗ | Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяУслуги |ГДЕ | (ЗаказПокупателяУслуги.Ссылка.НомерЗаказаТОРО = &НомерЗаказаТОРО | ИЛИ ЗаказПокупателяУслуги.НомерЗаказаТОРО = &НомерЗаказаТОРО) | И ЗаказПокупателяУслуги.Ссылка.СтатьяЗатратРемонта = &СтатьяЗатратРемонта | И ЗаказПокупателяУслуги.Ссылка.ПодразделениеОрганизации = &Подразделение |"+?(ЗначениеЗаполнено(ЦехЗаказчик)," И ЗаказПокупателяУслуги.Ссылка.ПодразделениеЗаказчик = &ПодразделениеЗаказчик","")+" | И ЗаказПокупателяУслуги.Ссылка.ОбъектРемонта = &ОбъектРемонта | |СГРУППИРОВАТЬ ПО | ЗаказПокупателяУслуги.Ссылка"; з = новый запрос (тз); з.УстановитьПараметр("НомерЗаказаТОРО",тд.НомерЗаказаТОРО); з.УстановитьПараметр("СтатьяЗатратРемонта",тд.ВидРемонта); з.УстановитьПараметр("Подразделение",ЦехИсполнитель); з.УстановитьПараметр("ПодразделениеЗаказчик",ЦехЗаказчик); з.УстановитьПараметр("ОбъектРемонта",тд.ОбъектРемонта); рез = з.Выполнить(); Если не рез.Пустой() тогда списокСсылокНаДокументы = новый СписокЗначений; выборка = рез.Выбрать(); пока выборка.Следующий() цикл списокСсылокНаДокументы.Добавить(выборка.Ссылка); КонецЦикла; ф = Документы.ЗаказПокупателя.ПолучитьФормуВыбора(,Элемент); ф.РежимВыбора=Истина; ф.отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке; ф.отбор.Ссылка.Значение = списокСсылокНаДокументы; ф.отбор.Ссылка.Использование = Истина; ф.Открыть(); Если ЗначениеЗаполнено(ЭлементыФормы.ЗаказыПокупателей.ТекущиеДанные.ЗаказПокупателя) тогда ЭлементыФормы.ЗаказыПокупателей.ТекущиеДанные.ШПЗ = ЭлементыФормы.ЗаказыПокупателей.ТекущиеДанные.ЗаказПокупателя.ШПЗ; КонецЕсли; иначе Предупреждение("Нет данных для выбора",6); КонецЕсли; |
1 |
КонецПроцедуры |