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