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

30.05.19

Разработка - Универсальные функции

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

Доброго дня!

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

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

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

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

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

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

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

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

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

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    20248    dimanich70    81    

145

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4100    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    18211    atdonya    24    

57

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5511    ke.92@mail.ru    16    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14779    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3595    57    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18500    171    sapervodichka    112    

135
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Andrefan 03.06.19 10:24 Сейчас в теме
сам модуль формы, после всех процедур

Это называется "Раздел основной программы"
2. fxmike 78 03.06.19 11:58 Сейчас в теме
(1)
Это называется "Раздел основной программы"


Да, спасибо, хорошее замечание, хотя "раздел основной программы формы записи регистра" звучит уж слишком.
3. pivo_san 8 01.08.19 07:35 Сейчас в теме
Столкнулся с такой же проблемой. Думаю у вас всё получилось со списком именно по причине того что заполнение происходит до открытия самой формы. В моём случае такой вариант не проходит, потребовалось перезаполнять список выбора от действий пользователя и вот тут реальная проблема. Сами выбранные значения сохраняются после переоткрытия формы, но в текстовом виде, а вот если попытаться через реквизит.значение= задать не выходит-поле остаться пустым, так же не выходит после загрузки списка выбора указать через .СписокВыбора.Получить(0) или .СписокВыбора[0] или .СписокВыбора.ВыбратьЭлемент( во всех случаях поле ввода для пользователя остаёться пустым, хотя в отладчике прекрасно видно, что поле.значение принимают нужное мне значение правда всегда текстовое при том что СписокВыбора[0] имеет тип элементаСпискаЗначений! При этом при выборе значения пользователем из списка выбора поле.значение принимает тип ЭлементаСпискаЗначений. Уже всю голову сломал. ЧЯДНТ? Попробовал по вашему методу при изменении поля обновлять форму и тут не вышло. Так же обшарил весь инет. Все примеры на элементарных списках, безструктурных в виде текстового поля, а вот на структуре "значение. представление" ни одного. Засада какая то с этим полем
4. SagittariusA 29.04.20 13:50 Сейчас в теме
Нужно просто после определения списка в элемент формы переопределить значение. И не обязательно тогда переносить код в раздел основной программы.

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

//Вот тут в значение элемента формы требуемое значение
ЭлементыФормы.ВидДокумента.Значение = ВидДокумента;
Показать
5. lasur 23.11.20 14:11 Сейчас в теме
(4)
//Вот тут в значение элемента формы требуемое значение
ЭлементыФормы.ВидДокумента.Значение = ВидДокумента;


... и объект получает признак модифицированности. Не есть хорошо. Как написал автор - имхо правильнее. Модифицированность не возникает.
2 Автор - спасибо. Выручил.
6. user778044 20.10.21 15:22 Сейчас в теме
7. user1865256 05.10.23 18:11 Сейчас в теме
Конечно, поздновато уже, но тем не менее, может, кому пригодится.
Возникла аналогичная ситуация, решил следующим образом. В свойствах поля ввода снял галку "РежимВыбораИзСписка", установил галку "КнопкаСпискаВыбора", код формирования списка выбора в событии поля ввода "МоеПолеВводаНачалоВыбораИзСписка".
Все работает.
8. YA_1003343880 18.04.24 15:19 Сейчас в теме
Ну ты - красавчик. Давно в обычных формах не программировал, забыл про код "в самом низу модуля", хотя, помню, что так делал когда-то...
Оставьте свое сообщение