К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как сделать выпадающий список на форме в 1С

Как сделать выпадающий список на форме в 1С: поле выбора, список значений, кнопка выбора из списка, программные способы. Примеры кода и разбор ошибок.

Выпадающий список на форме в 1С — это элемент, который позволяет пользователю выбрать одно значение из заранее заданного набора, не вводя текст вручную. Такой подход исключает опечатки, ускоряет ввод данных и защищает базу от «мусорных» значений вроде «ООО Ромашка», «ООО «Ромашка»» и «ромашка» как трёх разных вариантов одного контрагента.

В платформе 1С:Предприятие 8 есть несколько способов реализовать выпадающий список: через свойство «КнопкаСпискаВыбора» у поля ввода, через элемент формы «Поле со списком», через заполнение списка выбора программно в модуле формы, а также через перечисления и справочники, где список формируется автоматически из данных. Выбор способа зависит от того, откуда берутся значения и нужно ли хранить выбранное значение в базе.

Ниже разобраны все рабочие варианты для управляемых форм (и отмечены отличия для обычных форм), приведены примеры кода, типичные ошибки и способы проверки результата. Материал ориентирован на конфигуратор и встроенный язык 1С.

Что выбрать: жёсткий список, перечисление или справочник

Прежде чем добавлять элемент на форму, определите источник значений. От этого зависит, насколько решение будет удобно сопровождать. Жёстко заданный список выбора подходит, когда набор значений фиксирован логикой программы и почти никогда не меняется: например, «Черновик / Согласован / Отклонён» для служебного статуса.

Перечисление — правильный выбор, когда набор значений участвует в алгоритмах конфигурации (проверки в коде вида «Если Статус = Перечисления.Статусы.Согласован Тогда»). Значения перечисления меняет только разработчик в конфигураторе, зато они надёжно защищены от случайного переименования пользователем.

Справочник нужен, когда список должен пополняться пользователями без доработки конфигурации: подразделения, склады, виды операций, причины отказа. В этом случае выпадающий список фактически заменяется полем выбора ссылочного типа с быстрым выбором из списка.

Сравнение вариантов

СписокВыбора у поля ввода

Подходит для фиксированных служебных значений. Ограничение: изменить список может только разработчик, значения не видны в отчётах как ссылки.

Перечисление

Подходит для значений, участвующих в логике кода. Ограничение: добавление нового значения требует обновления конфигурации.

Справочник

Подходит для списков, которые ведут пользователи. Ограничение: нужны права на справочник и контроль дублей.

Выпадающий список через свойства поля ввода в конфигураторе

Самый простой способ не требует ни одной строки кода. Откройте форму в конфигураторе, выделите поле ввода, связанное с реквизитом строкового типа (или с реквизитом объекта), и в палитре свойств установите «КнопкаСпискаВыбора» в значение «Да». Рядом с полем появится кнопка со стрелкой вниз.

Затем в том же окне свойств найдите строку «СписокВыбора» и нажмите кнопку выбора (три точки). Откроется редактор списка значений: добавьте нужные строки, при необходимости задайте для каждой представление отдельно от значения. После сохранения формы и обновления конфигурации базы данных пользователь увидит выпадающий список.

Дополнительно полезно установить свойство «РедактированиеТекста» в «Нет», если нужно запретить ручной ввод произвольного текста и оставить только выбор из списка. Это защищает данные от значений, которых нет в списке.

Порядок действий в конфигураторе
  1. 1
    Откройте нужную форму объекта или документа в конфигураторе
  2. 2
    Выделите поле ввода и в палитре свойств включите «КнопкаСпискаВыбора»
  3. 3
    Откройте свойство «СписокВыбора» и добавьте значения
  4. 4
    Установите «РедактированиеТекста» = Нет, чтобы запретить произвольный ввод
  5. 5
    Сохраните форму, обновите конфигурацию базы данных (F7) и проверьте в режиме Предприятия

Программное заполнение списка выбора в модуле формы

Если состав списка зависит от условий — роли пользователя, вида документа, значений других полей — список формируют программно. Обычно это делают в обработчике «ПриСозданииНаСервере» управляемой формы, обращаясь к элементу формы по имени.

Типовой код выглядит так:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Элементы.СпособДоставки.СписокВыбора.Очистить();

Элементы.СпособДоставки.СписокВыбора.Добавить("Самовывоз");

Элементы.СпособДоставки.СписокВыбора.Добавить("Курьер");

Элементы.СпособДоставки.СписокВыбора.Добавить("Транспортная компания");

Элементы.СпособДоставки.КнопкаСпискаВыбора = Истина;

КонецПроцедуры

Метод Добавить() принимает значение и, опционально, представление: СписокВыбора.Добавить("ТК", "Транспортная компания") — в базу запишется «ТК», а пользователь увидит понятный текст. Если список нужно менять при изменении другого поля, формируйте его в обработчике «ПриИзменении» этого поля, не забывая предварительно очищать список методом Очистить(), иначе значения будут дублироваться при каждом изменении.

Элемент «Поле со списком» и режим «Выбор из списка»

Отдельный вид элемента — «Поле со списком». Он добавляется на форму через панель элементов (команда «Добавить поле» с выбором вида) и всегда отображается как раскрывающийся список без возможности ввода текста. Это удобно, когда нужно строго одно значение из фиксированного набора и никакой ручной ввод недопустим по смыслу.

Поле со списком связывается с реквизитом формы через свойство «ПутьКДанным», а значения задаются в свойстве «СписокЗначений» или программно. По поведению элемент похож на поле ввода с отключённым редактированием текста, но визуально однозначно показывает пользователю, что вводить текст нельзя.

Для полей ссылочного типа (например, реквизит «Склад» типа СправочникСсылка.Склады) аналогом выпадающего списка служит свойство «РежимВыбораИзСписка». Установите его в «ВыборИзСписка» — и по кнопке выбора откроется компактный список элементов справочника вместо полноценной формы выбора. Состав этого списка можно сузить через «ПараметрыВыбора» и «СвязиПараметровВыбора», например показывать только склады текущей организации.

Выпадающий список из перечисления или справочника

Если реквизит имеет тип «ПеречислениеСсылка», выпадающий список появляется практически автоматически: достаточно включить у поля кнопку списка выбора, и платформа сама покажет все значения перечисления. Никакого кода и ручного заполнения не требуется — это самый надёжный вариант для фиксированных наборов.

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

&НаКлиенте

Процедура ОрганизацияПриИзменении(Элемент)

ПараметрыВыбораСклада = Новый Массив;

ПараметрыВыбораСклада.Добавить(Новый ПараметрВыбора("Отбор.Владелец", Объект.Организация));

Элементы.Склад.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбораСклада);

КонецПроцедуры

Такой подход не создаёт «выпадающий список» в чистом виде, но решает ту же задачу: пользователь выбирает только из допустимых значений, а список хранится централизованно и редактируется без доработки конфигурации.

Если одно и то же строковое значение («Оплачен», «В работе») встречается в коде более двух раз, список выбора лучше заменить перечислением. Опечатка в строковом литерале не ловится синтакс-контролем и всплывёт только при проверке условия в рантайме.
ПЗ
Практическое замечание

Проверка результата и типичные ошибки

После настройки проверьте поведение в режиме Предприятия: список раскрывается по кнопке, значение записывается в реквизит, при повторном открытии объекта выбранное значение отображается корректно. Если значение хранится в реквизите объекта, убедитесь, что тип реквизита соответствует значениям списка — строковый реквизит ограниченной длины может обрезать длинные значения без предупреждения.

Типичные ошибки
01
Заполнение СписокВыбора в обработчике ПриИзменении без Очистить() — значения дублируются при каждом вызове
02
Список заполнен в конфигураторе, но реквизит имеет ссылочный тип — строки из списка не преобразуются в ссылки, поле остаётся пустым
03
РедактированиеТекста оставлено включённым — пользователи вводят произвольные значения, и смысл списка теряется
04
Длина строкового реквизита меньше длины значения из списка — значение молча обрезается при записи
05
Список формируется на клиенте обращением к данным сервера — ошибка вызова серверных методов из клиентского контекста
Контрольные точки

Как проверить результат

Раскрытие списка
Норма

По кнопке открывается полный список значений

Тревожный признак

Кнопка есть, но список пуст — список не заполнен или очищен в коде

Запись значения
Норма

После выбора и записи объекта значение сохраняется и отображается при повторном открытии

Тревожный признак

Значение пропадает — реквизит не связан с полем или тип не совпадает

Защита от ввода
Норма

Ручной ввод недопустим или ограничен списком

Тревожный признак

Можно ввести произвольный текст, которого нет в списке

Ограничения и особенности платформы

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

В обычных формах (устаревший режим совместимости) механика аналогична, но обращение к элементам идёт через ЭлементыФормы, а обработчики не разделяются на клиентские и серверные. В управляемых формах помните о контексте: заполнение списка данными из базы выполняйте на сервере, а реакцию на действия пользователя — в клиентских обработчиках с вызовом серверных процедур при необходимости.

В веб-клиенте и тонком клиенте выпадающие списки работают одинаково, но очень длинные списки (сотни значений) неудобны для пользователя. В таких случаях правильнее использовать ввод по строке с автоподбором или форму выбора с поиском.

Итог

Что важно запомнить

Простой выпадающий список делается через «КнопкаСпискаВыбора» и «СписокВыбора» без кода; динамический — программно через Элемент.СписокВыбора с обязательной очисткой перед заполнением. Для значений, участвующих в логике и отчётах, используйте перечисления и справочники вместо строковых списков.

Частые вопросы

Как запретить ввод значения, которого нет в списке?

Установите у поля ввода свойство «РедактированиеТекста» в «Нет» — пользователь сможет только выбрать значение из списка. Альтернатива — использовать элемент «Поле со списком», который по умолчанию не допускает ручного ввода.

Почему список выбора пустой, хотя я заполнил его в конфигураторе?

Чаще всего причина в коде формы: обработчик ПриСозданииНаСервере или ПриОткрытии очищает или перезаполняет СписокВыбора. Проверьте модуль формы на наличие вызовов Очистить() и присвоений списку. Также убедитесь, что заполнили список именно у того элемента формы, который видит пользователь.

Можно ли сделать выпадающий список, зависящий от другого поля?

Да. В обработчике ПриИзменении главного поля очищайте список выбора зависимого элемента и заполняйте его заново по условию. Для ссылочных полей вместо списка используйте ПараметрыВыбора и СвязиПараметровВыбора — платформа сама отфильтрует доступные значения.

Чем выпадающий список отличается от выбора из справочника?

Список выбора — это фиксированный набор строк, зашитый в форму или код; его нельзя редактировать пользователю и использовать в отчётах как данные. Справочник — это таблица базы данных: элементы добавляются пользователями, участвуют в отборах, отчётах и могут иметь дополнительные реквизиты.

Как задать разные значение и представление в списке?

Программно используйте второй параметр метода Добавить: СписокВыбора.Добавить("К", "Курьерская доставка"). В конфигураторе в редакторе списка значений для каждой строки есть отдельные колонки значения и представления. В базу запишется значение, а пользователь увидит представление.

Работает ли выпадающий список в мобильном клиенте 1С?

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