Почему форма выбора в 1С возвращает число вместо ссылки?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разберем ситуацию, с которой часто сталкиваются разработчики при программном открытии формы выбора. Вы вызываете форму, пользователь выбирает элемент, но вместо ожидаемой Ссылка на объект (например, на справочник Контрагенты), в процедуру возвращается порядковый номер строки в списке. Разберемся, почему так происходит и как это исправить.

Анализ проблемы

Суть ошибки заключается в том, что платформа 1С не может корректно идентифицировать тип данных, с которым работает динамический список, отображаемый в форме выбора. Если у ДинамическийСписок на форме не заполнено свойство ОсновнаяТаблица, система теряет связь с метаданными объекта базы данных. В результате, при выборе элемента, 1С по умолчанию передает индекс выбранной строки, воспринимая список как простую таблицу, а не как выборку из прикладного объекта.

Пошаговое решение

Чтобы исправить данную ситуацию, выполните следующие действия в Конфигураторе:

  1. Откройте форму, которую вы используете в качестве формы выбора.
  2. Перейдите к элементу управления, который отображает данные (обычно это Таблица, связанная с ДинамическийСписок).
  3. В свойствах самого ДинамическийСписок найдите поле ОсновнаяТаблица.
  4. Укажите нужный справочник (например, Справочник.Контрагенты).
  5. Сохраните конфигурацию и обновите обновление базы данных.

После установки ОсновнаяТаблица платформа начнет правильно интерпретировать выбранное значение и возвращать не индекс, а полноценную Ссылка на объект.

Технические аспекты реализации выбора

При программном вызове формы выбора важно правильно обрабатывать полученный результат. Рассмотрим, как выглядит корректная обработка завершения выбора:


&НаКлиенте
Процедура Рек1НачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ОписаниеОповещения = Новый ОписаниеОповещения("ВыборЗавершение", ЭтотОбъект);
    ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора",,,Элемент,,,ОписаниеОповещения,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаКлиенте
Процедура ВыборЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
    Если РезультатЗакрытия <> Неопределено Тогда
        Объект.Рек1 = РезультатЗакрытия;
    КонецЕсли;
КонецПроцедуры

Почему свойство ОсновнаяТаблица критически важно

Установка свойства ОсновнаяТаблица — это не просто формальность. От этого зависят многие внутренние механизмы платформы:

Дополнительные рекомендации

Если после установки ОсновнаяТаблица проблема сохраняется, проанализируйте следующие моменты:

  1. Проверьте ДинамическийСчитываниеДанных: убедитесь, что флаг установлен, если это требуется для логики списка.
  2. Изучите запрос динамического списка: убедитесь, что в выборку попадает ключевое поле (ссылка).
  3. Отладка: перед вызовом метода Закрыть() внутри формы выбора, посмотрите в отладчике, что именно передается в параметр. Если это объект Результат, убедитесь, что его тип соответствует ожидаемому СправочникСсылка.

Использование правильных механизмов настройки форм — залог того, что ваше приложение будет работать стабильно, а ошибки выбора данных не будут отвлекать от бизнес-логики.

← На главную