Доброго дня!
Поиском по инету не нашел решения, поэтому решил выложить.
Сегодня опять столкнулся со странным поведением поля выбора, у которого установлен режим выбора из списка. Обычные формы, ничего сложного — при открытии заполняю список выбора разными видами документов. Использую при создании записи в регистре сведений.
Процедура ПриОткрытии()
СписокДокументов = Новый СписокЗначений;
Для каждого МД Из Метаданные.Документы Цикл
СписокДокументов.Добавить(МД.Имя,МД.Синоним);
КонецЦикла;
СписокДокументов.СортироватьПоПредставлению();
ЭлементыФормы.ВидДокумента.СписокВыбора = СписокДокументов;
КонецПроцедуры
Открываю форму записи регистра, выбираю нужный вид документа, записываю. При повторном открытии этой записи — в поле выбора пусто, значение очищено. Что произошло непонятно.
Хорошо, думаю может быть ПередОткрытием нужно заполнить список выбора. Переношу заполнение туда — та же картина, форма открывается — пустое значение. По форумам полазил — не нашел. Причем, нашел такую особенность — при обновлении уже открытой формы (кнопкой Перечитать данные) — значение появляется, чудеса.
Ну и наконец, я решил перенести код формирования списка выбора элемента в сам модуль формы, после всех процедур. Признаюсь, что в модуле формы я очень редко что-то пишу, максимум определяю переменные доступные для всего контекста формы, а уж свойства элементов формы определять — мне казалось совсем дурным тоном.
Но это решило проблему, все заработало. Видимо где-то еще до события "Перед открытием формы" ищется соответствие значения поля и элемента в списке выбора.
Процедура ПриОткрытии()
// не работает
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// не работает
КонецПроцедуры
// заполняем список документов для ограничения выбора
// работает
СписокДокументов = Новый СписокЗначений;
Для каждого МД Из Метаданные.Документы Цикл
СписокДокументов.Добавить(МД.Имя,МД.Синоним);
КонецЦикла;
СписокДокументов.СортироватьПоПредставлению();
ЭлементыФормы.ВидДокумента.СписокВыбора = СписокДокументов;
Если вы это знали, то хорошо. Если не знали, то еще лучше. Я раньше просто выключал Режим выбора из списка по причине того, что не понимал как работает эта непонятная вещь. Вообще конечно, странно, что в инструкциях этого нет (либо я не умею читать).
Это называется «Раздел основной программы»
(1)
Да, спасибо, хорошее замечание, хотя «раздел основной программы формы записи регистра» звучит уж слишком.
Столкнулся с такой же проблемой. Думаю у вас всё получилось со списком именно по причине того что заполнение происходит до открытия самой формы. В моём случае такой вариант не проходит, потребовалось перезаполнять список выбора от действий пользователя и вот тут реальная проблема. Сами выбранные значения сохраняются после переоткрытия формы, но в текстовом виде, а вот если попытаться через реквизит.значение= задать не выходит-поле остаться пустым, так же не выходит после загрузки списка выбора указать через .СписокВыбора.Получить(0) или .СписокВыбора[0] или .СписокВыбора.ВыбратьЭлемент( во всех случаях поле ввода для пользователя остаёться пустым, хотя в отладчике прекрасно видно, что поле.значение принимают нужное мне значение правда всегда текстовое при том что СписокВыбора[0] имеет тип элементаСпискаЗначений! При этом при выборе значения пользователем из списка выбора поле.значение принимает тип ЭлементаСпискаЗначений. Уже всю голову сломал. ЧЯДНТ? Попробовал по вашему методу при изменении поля обновлять форму и тут не вышло. Так же обшарил весь инет. Все примеры на элементарных списках, безструктурных в виде текстового поля, а вот на структуре «значение. представление» ни одного. Засада какая то с этим полем