При разработке интерфейсов на управляемых формах 1С начинающие программисты часто сталкиваются с трудностями при создании обычного выпадающего списка (комбобокса). Типичная ошибка заключается в путанице между типом данных самого реквизита и визуальными свойствами элемента формы. В этой статье мы подробно разберем, как правильно организовать выбор из списка, почему не стоит использовать свойство ВыделенныйТекст и как программно управлять данными в списке.
Проанализируем ситуацию, описанную в теме. Пользователь пытается создать список, назначая реквизиту формы тип СписокЗначений. В 1С этот тип данных предназначен для хранения целого набора элементов, а не для выбора одного конкретного значения из предложенных. Когда вы выносите такой реквизит на форму, платформа по умолчанию создает поле, при нажатии на которое открывается отдельное модальное окно для редактирования состава этого списка. Это совсем не то, что нужно для простого выпадающего меню.
Рассмотрим правильный подход: если нам нужно, чтобы пользователь выбрал одну строку из списка (например, название конфигурации или статус), сам реквизит должен иметь тип Строка (или Число, или СправочникСсылка). А вот визуальное представление этого реквизита мы превратим в выпадающий список с помощью свойств элемента формы.
Давайте выполним последовательность действий, которая позволит создать корректный выбор из списка:
КонфигурацияВыгрузки и типом Строка.Да. Это заблокирует возможность ручного ввода произвольного текста, разрешив только выбор из предложенных вариантов.Если вы столкнулись с проблемой, когда конфигуратор не дает ввести значения в список (как упоминал автор темы), это может быть связано с тем, что тип реквизита по-прежнему установлен как СписокЗначений. Измените его на простой тип, и редактирование станет доступным.
Зачастую состав списка заранее неизвестен или должен зависеть от прав пользователя. В таких случаях мы используем программное заполнение. Разберем, как это сделать в модуле формы. Лучше всего использовать процедуру ПриСозданииНаСервере.
Проанализируем пример кода:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Получаем доступ к элементу формы (не к реквизиту!)
ПолеСписка = Элементы.КонфигурацияВыгрузки;
// Очищаем старые значения, если они были
ПолеСписка.СписокВыбора.Очистить();
// Добавляем новые элементы: Значение и Представление
ПолеСписка.СписокВыбора.Добавить("УТ11", "Управление торговлей, ред. 11");
ПолеСписка.СписокВыбора.Добавить("БП3", "Бухгалтерия предприятия, ред. 3.0");
ПолеСписка.СписокВыбора.Добавить("ERP", "1С:ERP Управление предприятием");
КонецПроцедуры
Важно помнить: СписокВыбора — это свойство элемента формы (визуального объекта), а не самого реквизита (данных). Поэтому мы обращаемся к нему через коллекцию Элементы.
Теперь выясним, как получить то, что выбрал пользователь. В сообщении 1 автор использует конструкцию Элементы.Имя.ВыделенныйТекст. Это крайне плохая практика по нескольким причинам:
ВыделенныйТекст вернет лишь строковое название, по которому невозможно найти объект в базе.Правильный способ — обращение напрямую к реквизиту формы. Когда пользователь выбирает пункт из списка, платформа автоматически записывает Значение (не представление!) выбранного элемента в связанный реквизит.
Рассмотрим пример обработки выбора в событии ПриИзменении:
&НаКлиенте
Процедура КонфигурацияВыгрузкиПриИзменении(Элемент)
// Правильный способ: обращаемся к реквизиту напрямую
ВыбранноеЗначение = Объект.КонфигурацияВыгрузки;
// Если реквизит создан не в объекте, а на форме:
// ВыбранноеЗначение = КонфигурацияВыгрузки;
Сообщить("Вы выбрали конфигурацию: " + ВыбранноеЗначение);
КонецПроцедуры
Если вы хотите, чтобы элемент формы выглядел не как обычное текстовое поле с кнопкой, а как классический нередактируемый выпадающий список, изменим его вид. Проанализируем свойство Вид в палитре свойств элемента формы. Если установить его в значение Поле выбора, поле перестанет принимать текстовый ввод и будет работать исключительно на выбор из предоставленного списка. Это избавляет от необходимости вручную настраивать флаги РежимВыбораИзСписка.
Для реализации качественного интерфейса выбора придерживайтесь следующих правил:
СписокВыбора элемента формы в процедуре ПриСозданииНаСервере.ВыделенныйТекст для получения данных; всегда обращайтесь к самому реквизиту.ПриИзменении.Следуя этой методике, вы создадите надежный и понятный для пользователя интерфейс, который будет стабильно работать в любых условиях работы управляемого приложения.