Режим выбора из списка (обычные формы), очищается поле ввода при открытии сохраненных данных

Статья отражает особенность работы поля выбора с установленным свойством Режим выбора из списка, когда список заполняется программно при открытии уже записанных данных.

Доброго дня!

Поиском по инету не нашел решения, поэтому решил выложить.

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

Процедура ПриОткрытии()
СписокДокументов = Новый СписокЗначений;
Для каждого МД Из Метаданные.Документы Цикл
СписокДокументов.Добавить(МД.Имя,МД.Синоним);
КонецЦикла;
СписокДокументов.СортироватьПоПредставлению();
ЭлементыФормы.ВидДокумента.СписокВыбора = СписокДокументов;
КонецПроцедуры

Открываю форму записи регистра, выбираю нужный вид документа, записываю. При повторном открытии этой записи — в поле выбора пусто, значение очищено. Что произошло непонятно.

Хорошо, думаю может быть ПередОткрытием нужно заполнить список выбора. Переношу заполнение туда — та же картина, форма открывается — пустое значение. По форумам полазил — не нашел. Причем, нашел такую особенность — при обновлении уже открытой формы (кнопкой Перечитать данные) — значение появляется, чудеса.
Ну и наконец, я решил перенести код формирования списка выбора элемента в сам модуль формы, после всех процедур. Признаюсь, что в модуле формы я очень редко что-то пишу, максимум определяю переменные доступные для всего контекста формы, а уж свойства элементов формы определять — мне казалось совсем дурным тоном.
Но это решило проблему, все заработало. Видимо где-то еще до события "Перед открытием формы" ищется соответствие значения поля и элемента в списке выбора.
 

Процедура ПриОткрытии()
// не работает
КонецПроцедуры

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// не работает
КонецПроцедуры

// заполняем список документов для ограничения выбора
// работает
СписокДокументов = Новый СписокЗначений;
Для каждого МД Из Метаданные.Документы Цикл
СписокДокументов.Добавить(МД.Имя,МД.Синоним);
КонецЦикла;
СписокДокументов.СортироватьПоПредставлению();
ЭлементыФормы.ВидДокумента.СписокВыбора = СписокДокументов;

Если вы это знали, то хорошо. Если не знали, то еще лучше. Я раньше просто выключал Режим выбора из списка по причине того, что не понимал как работает эта непонятная вещь. Вообще конечно, странно, что в инструкциях этого нет (либо я не умею читать).

3 Comments

  1. Andrefan
    сам модуль формы, после всех процедур

    Это называется «Раздел основной программы»

    Reply
  2. fxmike

    (1)

    Это называется «Раздел основной программы»

    Да, спасибо, хорошее замечание, хотя «раздел основной программы формы записи регистра» звучит уж слишком.

    Reply
  3. pivo_san

    Столкнулся с такой же проблемой. Думаю у вас всё получилось со списком именно по причине того что заполнение происходит до открытия самой формы. В моём случае такой вариант не проходит, потребовалось перезаполнять список выбора от действий пользователя и вот тут реальная проблема. Сами выбранные значения сохраняются после переоткрытия формы, но в текстовом виде, а вот если попытаться через реквизит.значение= задать не выходит-поле остаться пустым, так же не выходит после загрузки списка выбора указать через .СписокВыбора.Получить(0) или .СписокВыбора[0] или .СписокВыбора.ВыбратьЭлемент( во всех случаях поле ввода для пользователя остаёться пустым, хотя в отладчике прекрасно видно, что поле.значение принимают нужное мне значение правда всегда текстовое при том что СписокВыбора[0] имеет тип элементаСпискаЗначений! При этом при выборе значения пользователем из списка выбора поле.значение принимает тип ЭлементаСпискаЗначений. Уже всю голову сломал. ЧЯДНТ? Попробовал по вашему методу при изменении поля обновлять форму и тут не вышло. Так же обшарил весь инет. Все примеры на элементарных списках, безструктурных в виде текстового поля, а вот на структуре «значение. представление» ни одного. Засада какая то с этим полем

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *