Запрос сам проверяет значение Параметра, иначе пришлось бы городить 2 текста запроса (если есть значение параметра и если нет) или «генерировать» текст запроса кусками.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ДоговорыКонтрагентов.Ссылка
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
| ВЫБОР
| КОГДА &Владелец ССЫЛКА Справочник.Контрагенты
| ТОГДА ДоговорыКонтрагентов.Владелец = &Владелец
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ВЫБОР
| КОГДА &Владелец ССЫЛКА Справочник.Контрагенты
| ТОГДА ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ДоговорыКонтрагентов.Наименование = &Наименование
| И ДоговорыКонтрагентов.Организация = &Организация";
Запрос.УстановитьПараметр("Владелец", Контрагент);
Запрос.УстановитьПараметр("Наименование", Наименование);
Запрос.УстановитьПараметр("ВидДоговора", ВидДоговора);
Запрос.УстановитьПараметр("Организация", Организация);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Договор = Выборка.Ссылка;
Иначе
Если Контрагент = Неопределено Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Договор '" + Наименование + "' не найден!");
Возврат Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
Иначе
Договор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
Договор.Владелец = Контрагент;
Договор.Наименование = Наименование;
Договор.ВидДоговора = ВидДоговора;
Договор.ВалютаВзаиморасчетов = Константы.ВалютаРегламентированногоУчета.Получить();
Договор.НалоговыйАгентПоОплате = Истина;
Договор.Организация = ОбщегоНазначения.ГоловнаяОрганизация(Организация);
Договор.Записать();
Договор = Договор.Ссылка;
КонецЕсли;
КонецЕсли;