В версии 8.1 был такой удобный прием - при выборе какого либо значения реквизита формы (имеющего тип справочник или документ) можно было наложить отбор в форме выбора. Причем логика накладывания этого отбора реализовывалась именно в той форме, где располагался реквизит, а не в самой форме выбора. Как сделать то же самое в 8.2? Привожу пример, как я это делал в 8.1

```1c
    //При начале выбора реквизита "Фабрика"
    Процедура ФабрикаНачалоВыбора(Элемент, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    //контрагенты, которые соответствуют нашим организациям

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СобственныеКонтрагенты.Контрагент
    |ИЗ
    | РегистрСведений.СобственныеКонтрагенты КАК СобственныеКонтрагенты
    |
    |СГРУППИРОВАТЬ ПО
    | СобственныеКонтрагенты.Контрагент"
    ;

    СписокКонтрагентов = Новый СписокЗначений;
    СписокКонтрагентов.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Контрагент"));

    ФормаВыбора = Справочники.Контрагенты.ПолучитьФормуВыбора(,Элемент,);

    ФормаВыбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора.Ссылка.Доступность = Ложь;
    ФормаВыбора.СправочникСписок.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
    ФормаВыбора.СправочникСписок.Отбор.Ссылка.Значение = СписокКонтрагентов;
    ФормаВыбора.СправочникСписок.Отбор.Ссылка.Использование = Истина;

    ФормаВыбора.ПараметрТекущаяСтрока = Фабрика;//текущее значение реквизита "Фабрика"

    ФормаВыбора.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;

    ФормаВыбора.Открыть();

    КонецПроцедуры
```
---
либо есть еще такой вариант, он весь делается только на форме, где расположен реквизит:

```1c
    &НаКлиенте
    Процедура ФабрикаНачалоВыбора(Элемент, СтандартнаяОбработка)

    НовыйПараметр = Новый ПараметрВыбора("Отбор.Ссылка", СписокКонтрагентов());
    НовыйМассив = Новый Массив();
    НовыйМассив.Добавить(НовыйПараметр);
    НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
    Элементы.Контрагент.ПараметрыВыбора = НовыеПараметры;

    КонецПроцедуры
```

где СписокКонтрагентов() =

```1c
    &НаСервере
    Функция СписокКонтрагентов()

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СобственныеКонтрагенты.Контрагент
    |ИЗ
    | РегистрСведений.СобственныеКонтрагенты КАК СобственныеКонтрагенты
    |
    |СГРУППИРОВАТЬ ПО
    | СобственныеКонтрагенты.Контрагент"
    ;

    Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Контрагент");

    КонецФункции
```
---
а критично сделать все именно в форме, где располагается реквизит?

если нет, то в конфе на УФ можно сделать примерно так:

```1c
    СтандартнаяОбработка = Ложь;
    //получение списка контрагентов выносим в отдельную функцию, выполняемую &НаСервере
    СписокКонтрагентов = ПолучитьСписокКонтрагентов();
    ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", Новый Структура("СписокКонтрагентов", СписокКонтрагентов), Элемент);
```

а в форме выбора соответственно пишем:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

примерное содержимое процедуры ОтборыСписковКлиентСервер.ИзменитьЭлементОтбораСписка:

```1c
    Процедура ИзменитьЭлементОтбораСписка(Список, ИмяПоля, ПравоеЗначение = Неопределено, Установить = Ложь, ВидСравнения = Неопределено) Экспорт

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

    КонецПроцедуры
```
---
Wolex, а без использования параметров это сделать возможно? Т.е. возможно ли сначала создать форму, потом установить отбор, а потом уже открывать ее?
С параметрами мне не нравится, я поэтому и создал это обсуждение, т.к. получается не универсально, т.е. открываемая форма должна знать, что с ней собираются делать.
А в параметр можно загнать не список контрагентов готовый, а настройку отбора компоновки данных? Чтобы через нее передавать такой отбор, какой захочется.
---
либо есть еще такой вариант, он весь делается только на форме, где расположен реквизит:

```1c
    &НаКлиенте
    Процедура ФабрикаНачалоВыбора(Элемент, СтандартнаяОбработка)

    НовыйПараметр = Новый ПараметрВыбора("Отбор.Ссылка", СписокКонтрагентов());
    НовыйМассив = Новый Массив();
    НовыйМассив.Добавить(НовыйПараметр);
    НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
    Элементы.Контрагент.ПараметрыВыбора = НовыеПараметры;

    КонецПроцедуры
```

где СписокКонтрагентов() =

```1c
    &НаСервере
    Функция СписокКонтрагентов()

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СобственныеКонтрагенты.Контрагент
    |ИЗ
    | РегистрСведений.СобственныеКонтрагенты КАК СобственныеКонтрагенты
    |
    |СГРУППИРОВАТЬ ПО
    | СобственныеКонтрагенты.Контрагент"
    ;

    Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Контрагент");

    КонецФункции
```
---
Wolex, спасибо, работает
---
Wolex, на новой платформе вроде не работает...(
СтандартнаяОбработка = Ложь и открытие формы не нужно прописывать?
---
Уважаемый, спасибо Вам огромное. Столько вариантов перепробовал. А тут все предельно просто и лаконично. Респект!)
---
&НаКлиенте
Процедура ФабрикаНачалоВыбора(Элемент, СтандартнаяОбработка)

    НовыйПараметр = Новый ПараметрВыбора("Отбор.Ссылка", СписокКонтрагентов());
    НовыйМассив = Новый Массив();
    НовыйМассив.Добавить(НовыйПараметр);
    НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
    Элементы.Контрагент.ПараметрыВыбора = НовыеПараметры;

КонецПроцедуры

Спасибо большое!!!!!! Все работает!!!! Дружище, респект Вам!
---
А не... СписокКонтрагентов() тоже фиксированным должен быть просто...
---
Поясните, где список установить фиксированным?
---
Можно открыть форму с параметром Отбор
ОткрытьФорму ("ИмяФормы", Новый Структура("Отбор",МассивКонтрагентов));
---
ОткрытьФорму ("ИмяФормы", Новый Структура("Отбор",МассивКонтрагентов));
Так не работает - отбор не накладывается открывается форма все равно со всеми
---
ОткрытьФорму (ИмяФормы, Новый Структура("Отбор",Новый Структура("Ссылка",МассивКонтрагентов)));
---
Спасибо!
Теперь работает!
---
ох...17 год. Нужно как-то так

ОткрытьФорму ("ИмяФормы", Новый Структура("Отбор",Новый Структура("Контрагент", МассивКонтрагентов)));
---
Спасибо! Работает на 1С ERP Управление предприятием 2.4, 1С:Предприятие 8.3 (8.3.12.1685)

&НаКлиенте
Процедура ОперацияБракНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    НовыйПараметр = Новый ПараметрВыбора("Отбор.Ссылка", СписокОпераций());
    НовыйМассив = Новый Массив();
    НовыйМассив.Добавить(НовыйПараметр);
    НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
    Элементы.ОперацияБрак.ПараметрыВыбора = НовыеПараметры;

КонецПроцедуры

&НаСервере
Функция СписокОпераций()
 НомерВырезать = Лев(Объект.ЭтапВыявления.Номер,Найти(Объект.ЭтапВыявления.Номер,"."));

 Запрос = Новый Запрос;
 Запрос.Текст = "ВЫБРАТЬ
 | ПроизводственнаяОперация2_2.Ссылка КАК ПроизводственнаяОперация
 |ИЗ
 | Документ.ПроизводственнаяОперация2_2 КАК ПроизводственнаяОперация2_2
 |ГДЕ
 | ПроизводственнаяОперация2_2.Номер ПОДОБНО &НомерВырезать";
 Запрос.УстановитьПараметр("НомерВырезать", "%"+НомерВырезать+"%");

 Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ПроизводственнаяОперация");

КонецФункции
---
Спасибо! Пришлось бы долго прыгать с бубном.
Надо было в расширении изменить отбор по счетузатрат - добавить ПланыСчетов.Хозрасчетный.ОбслуживающиеПроизводства
в документе ОтчетПроизводстваЗаСмену
Помогло