Разберем ситуацию, с которой часто сталкиваются разработчики при программном открытии формы выбора. Вы вызываете форму, пользователь выбирает элемент, но вместо ожидаемой Ссылка на объект (например, на справочник Контрагенты), в процедуру возвращается порядковый номер строки в списке. Разберемся, почему так происходит и как это исправить.
Суть ошибки заключается в том, что платформа 1С не может корректно идентифицировать тип данных, с которым работает динамический список, отображаемый в форме выбора. Если у ДинамическийСписок на форме не заполнено свойство ОсновнаяТаблица, система теряет связь с метаданными объекта базы данных. В результате, при выборе элемента, 1С по умолчанию передает индекс выбранной строки, воспринимая список как простую таблицу, а не как выборку из прикладного объекта.
Чтобы исправить данную ситуацию, выполните следующие действия в Конфигураторе:
Таблица, связанная с ДинамическийСписок).ДинамическийСписок найдите поле ОсновнаяТаблица.Справочник.Контрагенты).После установки ОсновнаяТаблица платформа начнет правильно интерпретировать выбранное значение и возвращать не индекс, а полноценную Ссылка на объект.
При программном вызове формы выбора важно правильно обрабатывать полученный результат. Рассмотрим, как выглядит корректная обработка завершения выбора:
&НаКлиенте
Процедура Рек1НачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОписаниеОповещения = Новый ОписаниеОповещения("ВыборЗавершение", ЭтотОбъект);
ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора",,,Элемент,,,ОписаниеОповещения,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ВыборЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если РезультатЗакрытия <> Неопределено Тогда
Объект.Рек1 = РезультатЗакрытия;
КонецЕсли;
КонецПроцедуры
Установка свойства ОсновнаяТаблица — это не просто формальность. От этого зависят многие внутренние механизмы платформы:
ОсновнаяТаблица не задана, команды Создать, Скопировать, Удалить могут перестать работать корректно, так как платформа не понимает, какой объект нужно создать или изменить.Метод ОповеститьОВыборе или закрытии формы.Если после установки ОсновнаяТаблица проблема сохраняется, проанализируйте следующие моменты:
ДинамическийСчитываниеДанных: убедитесь, что флаг установлен, если это требуется для логики списка.Закрыть() внутри формы выбора, посмотрите в отладчике, что именно передается в параметр. Если это объект Результат, убедитесь, что его тип соответствует ожидаемому СправочникСсылка.Использование правильных механизмов настройки форм — залог того, что ваше приложение будет работать стабильно, а ошибки выбора данных не будут отвлекать от бизнес-логики.