Есть пустое поле ввода Контрагент, и если в нем выбрать контрагента, то в поле ввода договор происходит Отбор.Владелец(Объект.Контрагент), потому что это указано в свойствах поля СвязиПараметровВыбора. Но, договор не проставляется автоматически в поле ввода. Получается нужно провалиться в поле ввода Договор и там будет отображаться уже отобранный нужный Договор по контрагенту. А что нужно сделать, чтобы при выборе контрагента, Договор отобразился в поле ввода Договоры сразу?

Как я понял, договоры хранятся вот тут - Регистры сведений - ОсновныеДоговорыКонтрагента - там в измерениях стоит Организация, Контрагент, Вид договора, а в ресурсах - Договор.

Как сейчас работает. Я выбираю Контрагента, затем проваливаюсь в поле выбора Договор и там вручную нажимаю на Договор - он уже там отобран по контрагенту, потому что в свойствах поля стоит Отбор.Владелец(Объект.Контрагент).

Я посмотрел справочник Контрагенты и обнаружил, что там не все договоры помечены как основные. Поэтому, если нет Основного Договора, тогда есть ли возможность выводить не основной договор? Так же везде фигурирует только один договор. Просто он с пометкой основной или без пометки.

Прошу помощи реализовать автоматическое подставление Договора при выборе контрагента.
---
Вот рабочий код:
Задача: При выборе контрагента автоматически заполнить поле договор. Договор может быть основным или не основным. Договоров может быть несколько, договор может быть помечен на удаление.
Напомню есть два поля ввода: Контрагент (Путь к данным Объект.Контрагент), Договор (Путь к данным Объект.Договор).
У поля ввода Договор, в свойствах стоит - СвязиПараметровВывода - Отбор.Владелец(Объект.Контрагент).
Далее на поле ввода Контрагент стоит События - КонтрагентПриИзменении.

Сам код в модуле формы:

```1c
    &НаСервере
    Функция ПолучитьОсновнойДоговор(Контрагент)

    Результат = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();

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

    Запрос.УстановитьПараметр("Контрагент", Контрагент);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    Результат = ВыборкаДетальныеЗаписи.Договор;
    КонецЕсли;

    //если основной договор не отмечен, то поищем среди всех договоров и если по данному виду он один и непомеченный на удаление, то возьмем его

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

    Запрос.УстановитьПараметр("Контрагент", Контрагент);

    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    Если ВыборкаДетальныеЗаписи.КоличествоДоговоров=1 Тогда
    Результат = ВыборкаДетальныеЗаписи.Договор;
    ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоДоговоров=0 Тогда
    Сообщить("Договоров нет");
    ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоДоговоров>1 Тогда
    Результат = ВыборкаДетальныеЗаписи.Договор;
    ТекстОшибки = СтрШаблон("Для контрагента %1 подставлен первый договор из нескольких", Контрагент);
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;

    Возврат Результат;

    КонецФункции

    &НаКлиенте
    Процедура КонтрагентПриИзменении(Элемент)
    Контрагент = Объект.Контрагент;
    Объект.Договор = ПолучитьОсновнойДоговор(Контрагент);
    КонецПроцедуры
```
---
Вам надо понять как определять договор если он не один и нет основного...;)
Остальное просто - через расширение дописываете код.
---
Вот такой код я написал (он пока не работает). При выполнении программы появляется ошибка: Значение не является значением объектного типа (Контрагент)
Вот здесь - Запрос.УстановитьПараметр("Контрагент", ДокументОбъект.Контрагент);

Вот мой код целиком:

```1c
    &НаСервереБезКонтекста
    Функция НайтиПодходящийДоговор(ДокументОбъект) Экспорт

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

    Запрос.УстановитьПараметр("Контрагент", ДокументОбъект.Контрагент);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    Договор = ВыборкаДетальныеЗаписи.Договор;
    КонецЕсли;

    Возврат Договор;

    КонецФункции

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

Сам код в модуле формы:

```1c
    &НаСервере
    Функция ПолучитьОсновнойДоговор(Контрагент)

    Результат = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();

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

    Запрос.УстановитьПараметр("Контрагент", Контрагент);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    Результат = ВыборкаДетальныеЗаписи.Договор;
    КонецЕсли;

    //если основной договор не отмечен, то поищем среди всех договоров и если по данному виду он один и непомеченный на удаление, то возьмем его

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

    Запрос.УстановитьПараметр("Контрагент", Контрагент);

    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    Если ВыборкаДетальныеЗаписи.КоличествоДоговоров=1 Тогда
    Результат = ВыборкаДетальныеЗаписи.Договор;
    ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоДоговоров=0 Тогда
    Сообщить("Договоров нет");
    ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоДоговоров>1 Тогда
    Результат = ВыборкаДетальныеЗаписи.Договор;
    ТекстОшибки = СтрШаблон("Для контрагента %1 подставлен первый договор из нескольких", Контрагент);
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;

    Возврат Результат;

    КонецФункции

    &НаКлиенте
    Процедура КонтрагентПриИзменении(Элемент)
    Контрагент = Объект.Контрагент;
    Объект.Договор = ПолучитьОсновнойДоговор(Контрагент);
    КонецПроцедуры
```