Разработка и Конфигурация · 11 мин
Как открыть список выбора в 1С
Как открыть список выбора в 1С программно и в пользовательском режиме: методы ПоказатьВыборИзСписка, ОткрытьФормуВыбора, работа с выпадающим списком поля ввода.
Список выбора в 1С — это выпадающий набор значений, который пользователь видит при работе с полем ввода, колонкой таблицы или при вызове из кода. Открыть его можно двумя путями: в пользовательском режиме (кликом или клавишами) и программно — через методы встроенного языка. Чаще всего вопрос возникает у разработчиков, когда нужно показать список по кнопке, при начале выбора или из обработчика события.
Ниже разобраны оба сценария: быстрое открытие списка в интерфейсе и программные способы — ПоказатьВыборИзСписка, ОткрытьФормуВыбора, настройка свойства «КнопкаСпискаВыбора» и выпадающий список поля ввода. Примеры приведены для управляемых форм (тонкий клиент), где большинство старых методов вроде ВыбратьИзСписка работают только в синхронном режиме.
Как открыть список выбора в пользовательском режиме
В форме документа или справочника поле, у которого настроен список выбора, отображается с кнопкой-стрелкой вниз справа. Достаточно кликнуть по этой кнопке — развернётся список доступных значений. Если кнопки нет, список либо не задан, либо у поля отключено свойство «Кнопка списка выбора».
Второй способ — клавиатура: установите курсор в поле и нажмите F4 или Alt + стрелка вниз. Это работает и в управляемых, и в обычных формах. Комбинация удобна при быстром вводе данных, когда руки не покидают клавиатуру.
Если список пустой при нажатии, чаще всего причина в том, что разработчик заполняет его динамически в обработчике «НачалоВыбора» и отменяет стандартную обработку, а код заполнения срабатывает с ошибкой. В таком случае стоит проверить журнал регистрации или обратиться к разработчику конфигурации.
Проверить код заполнения Элементы.Поле.СписокВыбора
Проверить свойства поля в конфигураторе
Использовать F4 или кнопку выбора, а не стрелку
Программное открытие: метод ПоказатьВыборИзСписка
Основной способ открыть список выбора из кода в управляемой форме — метод ПоказатьВыборИзСписка(). Он асинхронный: результат приходит в процедуру, указанную в описании оповещения. Это соответствует модельным требованиям платформы, где модальные вызовы запрещены.
&НаКлиенте
Процедура ВыбратьВидОплаты(Команда)
Список = Новый СписокЗначений;
Список.Добавить("Наличные", "Наличный расчет");
Список.Добавить("Карта", "Оплата картой");
Оповещение = Новый ОписаниеОповещения("ПослеВыбораВидаОплаты", ЭтотОбъект);
ПоказатьВыборИзСписка(Оповещение, Список, Элементы.ВидОплаты);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораВидаОплаты(ВыбранныйЭлемент, ДопПараметры) Экспорт
Если ВыбранныйЭлемент <> Неопределено Тогда
ВидОплаты = ВыбранныйЭлемент.Значение;
КонецЕсли;
КонецПроцедуры
Третий параметр метода — элемент формы, возле которого откроется список. Если его не указать, список появится в центре активного окна. Четвёртым параметром можно передать элемент списка, который будет выделен по умолчанию.
- 1Сформируйте СписокЗначений с нужными значениями и представлениями
- 2Создайте ОписаниеОповещения с именем процедуры-обработчика результата
- 3Вызовите ПоказатьВыборИзСписка, передав оповещение, список и элемент формы
- 4В процедуре-обработчике проверьте, что пользователь не нажал Esc (результат Неопределено)
- 5Запишите выбранное значение в реквизит объекта или формы
Открытие списка выбора у поля ввода из обработчика
Когда нужно открыть список в момент начала выбора в поле, используют событие НачалоВыбора. Внутри обработчика стандартную обработку отключают и показывают собственный список — так реализуют динамически формируемые варианты, зависящие от контекста документа.
&НаКлиенте
Процедура ДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Список = ПолучитьДоговорыКонтрагента(Объект.Контрагент);
Оповещение = Новый ОписаниеОповещения("ПослеВыбораДоговора", ЭтотОбъект);
ПоказатьВыборИзСписка(Оповещение, Список, Элемент);
КонецПроцедуры
Если список статичен, проще заполнить свойство СписокВыбора элемента формы при создании формы на сервере — тогда платформа сама откроет выпадающий список по кнопке, и писать обработчики не потребуется:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.СпособДоставки.СписокВыбора.Добавить("Самовывоз");
Элементы.СпособДоставки.СписокВыбора.Добавить("Курьер");
КонецПроцедуры
Открытие формы выбора справочника или документа
Если пользователь должен выбрать не из фиксированного списка, а из объектов базы данных — контрагентов, номенклатуры, документов — открывают форму выбора. Это делается методом ОткрытьФорму() с параметром РежимВыбора:
&НаКлиенте
Процедура ПодобратьНоменклатуру(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",
ПараметрыФормы, Элементы.Товары);
КонецПроцедуры
Когда форма выбора открыта с владельцем — элементом таблицы, выбранное значение автоматически попадает в обработчик ОбработкаВыбора этого элемента. Для поля ввода платформа выполнит стандартную подстановку значения. Если владельца не указать, результат придёт в событие ОбработкаВыбора самой формы, и его нужно обработать вручную.
Сравнение вариантов
Фиксированный набор значений, сформированный в коде. Не подходит для ссылок с отбором и поиском.
Статичные варианты (2–10 значений). Платформа сама рисует выпадающий список, кода минимум.
Выбор из справочников и документов с отбором, поиском, динамическим списком. Тяжелее, но функциональнее.
Подсказка по мере ввода текста в поле. Подходит для больших справочников, не заменяет полный список.
Настройка кнопок и свойств поля ввода
Чтобы у поля вообще появилась возможность открыть список, проверьте его свойства в конфигураторе или установите их программно. Ключевые свойства — КнопкаСпискаВыбора (показывает стрелку выпадающего списка), КнопкаВыбора (кнопка с тремя точками для открытия формы выбора) и РежимВыбораИзСписка (ограничивает ввод только значениями списка).
Элементы.СпособДоставки.КнопкаСпискаВыбора = Истина;
Элементы.СпособДоставки.РежимВыбораИзСписка = Истина;
Элементы.СпособДоставки.РедактированиеТекста = Ложь;
Свойство РедактированиеТекста = Ложь запрещает ручной ввод — пользователь сможет только выбрать значение из списка. Это надёжный способ исключить опечатки в полях с фиксированным набором вариантов, например «Способ оплаты» или «Статус обращения».
Типичные ошибки и ограничения
Частая ошибка — смешение «списка выбора» и «формы выбора». Если поле ссылается на справочник, стрелка списка выбора покажет только то, что вручную добавлено в СписокВыбора, а не содержимое справочника. Для выбора из базы нужна форма выбора или быстрый выбор (свойство БыстрыйВыбор).
Вторая ошибка — забыть проверить результат оповещения на Неопределено. Если пользователь нажал Esc, обработчик всё равно вызовется, но с пустым значением, и без проверки реквизит будет очищен. Третья — программное заполнение СписокВыбора на клиенте обращением к серверным данным без вызова сервера: на клиенте недоступны запросы и менеджеры объектов.
Как проверить результат
После внедрения кода проверьте три сценария: выбор значения из списка, отказ от выбора (Esc или клик вне списка) и повторное открытие списка после выбора. Во всех случаях форма не должна зависать, а реквизит — принимать неожиданные значения.
Дополнительно откройте форму в веб-клиенте, если он используется в вашей инфраструктуре: именно там всплывают проблемы с синхронными вызовами и отсутствующими расширениями. Проверку модальности можно выполнить и через синтакс-контроль модуля в конфигураторе с включённой проверкой «Модальные вызовы».
Как проверить результат
Список разворачивается, значения актуальны
Список пуст или не открывается
Значение реквизита не меняется
Реквизит очищается
Список открывается без ошибок
Ошибка о модальных/синхронных вызовах
Что важно запомнить
В интерфейсе список выбора открывается стрелкой у поля или клавишей F4. Из кода в управляемых формах применяйте асинхронный ПоказатьВыборИзСписка с описанием оповещения, для выбора объектов базы — ОткрытьФорму с РежимВыбора = Истина. Всегда проверяйте результат на Неопределено и избегайте модальных синхронных методов.
Частые вопросы
Как открыть список выбора с клавиатуры без мыши?
Установите курсор в поле и нажмите F4 или Alt + стрелка вниз. Перемещение по значениям — стрелками, подтверждение — Enter, отказ — Esc.
Почему у поля справочника стрелка списка показывает пустой список?
Стрелка показывает только содержимое свойства СписокВыбора элемента формы, а не сам справочник. Для выбора из справочника используйте кнопку выбора (троеточие), F4 с быстрым выбором или ввод первых букв наименования.
Можно ли открыть список выбора сразу при входе в поле?
Да, в обработчике события «НачалоВыбора» установите СтандартнаяОбработка = Ложь и вызовите ПоказатьВыборИзСписка. Полностью автоматическое открытие при «ПриАктивизации» не предусмотрено платформой и реализуется только через этот обходной путь.
Чем ПоказатьВыборИзСписка отличается от ПоказатьВыборИзМеню?
ПоказатьВыборИзСписка привязывается к элементу формы и возвращает элемент списка значений; ПоказатьВыборИзМеню показывает меню в произвольной позиции и чаще применяется для команд. Для подстановки значения в поле правильнее первый метод.
Как ограничить ввод только значениями из списка?
Установите у элемента формы РежимВыбораИзСписка = Истина и РедактированиеТекста = Ложь. Пользователь сможет только выбрать значение, ручной ввод будет заблокирован.
Работает ли ВыбратьИзСписка в тонком клиенте?
Только при разрешённых синхронных вызовах в настройках конфигурации и не в веб-клиенте. Рекомендуемый вариант для управляемых форм — асинхронный ПоказатьВыборИзСписка с описанием оповещения.