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

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

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

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

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

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

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

Способы создания выпадающего списка: что выбрать

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

Основных подхода четыре. Первый — типизированный реквизит: ссылка на справочник, документ или перечисление. Второй — свойство «Список выбора» у поля ввода со строковым или числовым типом. Третий — программное заполнение списка значений при создании формы. Четвёртый — перечисление как отдельный объект метаданных, когда набор значений фиксирован на уровне конфигурации.

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

Реквизит типа «ПеречислениеСсылка»

Подходит для фиксированного набора значений (статусы, виды операций). Значения меняются только в конфигураторе, зато по ним удобно строить отчёты и отборы.

Реквизит типа «СправочникСсылка»

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

Свойство «Список выбора» у строкового поля

Быстрый вариант для простых форм и обработок без изменения структуры метаданных. Значения хранятся как строки, отборы по ним неудобны.

Программное заполнение списка

Даёт гибкость: значения можно формировать запросом по условиям. Требует кода и аккуратности при обновлении формы.

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

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

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

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

Для справочника логика та же: реквизиту назначается тип «СправочникСсылка.ИмяСправочника». Отличие в поведении списка: значений в справочнике может быть тысячи, поэтому по умолчанию поле работает в режиме быстрого выбора с подбором по мере ввода, а не показывает весь список целиком. Это нормальное поведение, а не ошибка настройки.

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

Список выбора у строкового поля в конфигураторе

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

Откройте форму в конфигураторе, выделите поле ввода и в палитре свойств найдите пункт «Список выбора». Нажмите кнопку открытия и добавьте строки: каждая строка — один вариант, который увидит пользователь. Дополнительно установите свойство «Режим выбора из списка» в значение «Истина», чтобы поле не пыталось искать значения в данных и сразу показывало список.

Чтобы пользователь не мог ввести произвольный текст, настройте свойство «Кнопка выбора» и при необходимости обработайте событие «ОбработкаВыбора» или включите ограничение через «Выбор из списка». Иначе поле останется редактируемым, и в базе появятся значения, которых нет в списке — например, «завершен» вместо «Завершён».

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

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

bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Элементы.ВидОперации.СписокВыбора.Очистить();
	Элементы.ВидОперации.СписокВыбора.Добавить("Продажа", "Продажа товара");
	Элементы.ВидОперации.СписокВыбора.Добавить("Возврат", "Возврат от покупателя");
КонецПроцедуры

Метод «Добавить» принимает значение и необязательное представление — то, что увидит пользователь. Если список нужно строить по данным информационной базы, выполните запрос к справочнику и в цикле добавьте результат в СписокВыбора. Такой подход позволяет, например, показывать в списке только активные (не помеченные на удаление) элементы.

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

Настройка быстрого выбора и ограничение списка

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

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

Маршрут решения

Как выбрать действие

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

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

После настройки обязательно проверьте поведение поля в режиме «1С:Предприятие» под обычным пользователем, а не под администратором: у полных прав могут быть доступны значения, скрытые для остальных. Проверьте три сценария: открытие списка, выбор значения с сохранением объекта и повторное открытие сохранённого объекта.

Контрольные точки

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

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

При нажатии кнопки или стрелки вниз показываются все ожидаемые значения

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

Список пуст, показывает лишние или устаревшие значения

Сохранение
Норма

Выбранное значение сохраняется и отображается после повторного открытия

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

Значение сбрасывается или подменяется другим

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

Произвольный текст либо блокируется, либо заменяется ближайшим значением из списка

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

В поле можно вписать что угодно, и это сохраняется в базе

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

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

FAQ: частые вопросы о выпадающих списках в 1С

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

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

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

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

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

Программно: в обработчике «ПриСозданииНаСервере» сформируйте СписокВыбора с учётом роли или настроек пользователя. Для ссылочных полей дополнительно используются механизмы RLS (ограничение доступа на уровне записей) и параметры выбора — тогда недоступные значения не попадут в список и не будут сохранены.

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

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

Как сделать выпадающий список в табличной части документа?

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

Почему после обновления конфигурации в списке пропали значения?

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

Итог

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

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