УТ 11.1, платформа 8.3 Открываю форму выбора справочника с параметрами, выбираю значение из динамического списка(произвольный запрос) , возвращаю значение при помощи Закрыть(Значение). При открытии использую:
ОписаниеОповещения = Новый ОписаниеОповещения("АдресаДоставкиЗакрытие",ЭтотОбъект,ПараметрыФормы); ОткрытьФорму("Справочник.АдресаДоставки.Форма.ФормаВыбораКонтрагент",ПараметрыФормы,,,ВариантОткрытияОкна.ОтдельноеОкно,,ОписаниеОповещения,);
При закрытии:
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
 Закрыть(Элементы.Список.ТекущиеДанные.Адрес);
КонецПроцедуры
Значение возвращается, но не обрабатывается закрытие формы крестиком или ESC. Вроде бы должно возвращаться Неопределено, но возвращается значение. Подскажите, что делаю не так?
---
Нужно использовать событие СписокВыборЗначения списка формы выбора.

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

И убрать код из формы выбора ПередЗакрытием.
---
Форма выбора без кода возвращает значение, число - видимо номер строки в форме или неопределено. Мне нужна сама строка. Может передать ее параметры, но не пойму, как. Да еще и Неопределено получить при крестике.
---
В чем сложность проверки на Неопределено?
А возвращает то значение, по которому пользователь выбрал. В форме выбора ДС как представлен?
Если нужно всегда возвращать значение только одной определенной колонки, тогда можно в форме выбора, обработчик Выбор у ДС, прописать Закрыть(НужныеДанные).
---
Сложности проверки нет никакой. Так и делаю, написал же в начале темы. Но при возврате, возвращает текущую строку. В этом случае Неопределено не возвращается. События ОбработкаВыбора и СписокОбработкаВыбора не отрабатывают в этом режиме.
(3) Возможно. Подскажите как?
---
Но при возврате, возвращает текущую строку.
Значит у ДС не установлена основная таблица.
Тогда как вариант, наоборот в Параметры Формы указать:
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);

Тогда будет срабатывать событие Выбор. И в нем Закрыть с передачей нужных параметров.
---
Действительно, это работает. Правда перестает работать кнопка стандартной панели Выбрать. Если не заполнять КП, то не доступен поиск и сортировки. А как в событии ПриЗакрытии передать параметры не используя Закрыть()?
---
я бы смотрел в сторону заполнения основной таблицы ДС и стандартной работы формы выбора.
---
ДС это основной реквизит на ФормеВыбора. При работе в стандартном режиме возвращается номер строки из списка или Неопределено. Это работает. Строка выбора в событии ПередЗакрытием доступна. Как вернуть строку в параметр из формы, не используя Закрыть()?
---
я же сказал. Для ДС указать основную таблицу. Тогда выбор будет возвращать ссылку на элемент этой таблицы. Когда основная таблица не установлена, тогда возвращается идентификатор строки ДС.
---
основную таблицу
Основную таблицу можно указать только не используя произвольный запрос. Так что это не подходит. Нельзя ли переопределить дополнительные параметры, которые переданы на открытую форму? Или еще как вернуть параметры в событии при закрытии?
---
Основную таблицу можно указать только не используя произвольный запрос.
кто вам это сказал?
---
Возможно. Запрос там чуть сложнее. Установить Основную таблицу не дает. Решение похоже предложил (14)VZyryanov. Спасибо за помощь.
---
Видимо, не всё так просто, как я думал. Однако же, ваша форма называется "ФормаВыбораКонтрагент", стало быть имеет какой-то программный интерфейс выбора, несмотря на отсутствие основной таблицы у ДС. Где-то же эта форма используется в типовом коде.
Просто по умолчанию, когда дело касается типовых конфигураций, одним из условий реализации является минимальное вмешательство в типовые объекты. Но видя с какой легкостью вы вносите код в типовые формы, вам это условие не так важно.
---
Есть подозрение, что вся задача решаема без какого-либо кодинга, в крайнем случае, нужен кодинг в событии НачалоВыбора, но уж точно никаких изменений в форму выбора вносить не нужно.
---
Нужно использовать событие СписокВыборЗначения списка формы выбора.

```1c
    &НаКлиенте
    Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    ОповеститьОВыборе(Элемент.ТекущиеДанные.Ссылка);
    КонецПроцедуры
```
---
СтандартнаяОбработка=Ложь;
 ОповеститьОВыборе(Элемент.ТекущиеДанные.Ссылка);
Очень похоже, что это то что нужно. Всем спасибо за помощь.