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

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

Как создать список выбора в 1С

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

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

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

Ниже разобраны все основные подходы с примерами кода, условиями применения и типичными ошибками. Материал ориентирован на платформу 1С:Предприятие 8.3 с управляемыми формами, но принципы справедливы и для обычных форм.

Какие бывают списки выбора и какой способ выбрать

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

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

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

Как выбрать способ

Значений мало (2–10), они не меняются и не требуют дополнительных данныхИспользуйте свойство СписокВыбора поля формы
Набор значений участвует в логике проведения и должен быть одинаковым во всех базахСоздайте перечисление в конфигураторе
Пользователи должны сами добавлять значения без изменения конфигурацииСделайте справочник и поле ссылочного типа
Список зависит от контекста: роли пользователя, вида документа, датыФормируйте список программно при создании формы

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

Создание списка выбора через свойства поля формы

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

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

Дополнительно полезны два соседних свойства. КнопкаСпискаВыбора включает отображение кнопки со стрелкой у поля. РедактированиеТекста (или «Разрешить ввод значения не из списка» в зависимости от версии) определяет, может ли пользователь ввести произвольное значение помимо списка. Для строгого контроля ввод произвольного текста отключают.

Порядок действий в конфигураторе
  1. 1
    Откройте форму объекта и выделите нужное поле ввода
  2. 2
    В палитре свойств откройте редактор свойства СписокВыбора
  3. 3
    Добавьте значения и при необходимости представления
  4. 4
    Включите КнопкаСпискаВыбора для отображения стрелки
  5. 5
    При строгом контроле запретите ввод значений вне списка
  6. 6
    Сохраните форму и проверьте список в режиме Предприятие

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

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

Доступ к списку выполняется через элемент формы: Элементы.ИмяПоля.СписокВыбора. Это объект типа «СписокЗначений» со стандартными методами: Добавить, Вставить, Удалить, Очистить, НайтиПоЗначению. Метод Добавить принимает значение, представление, признак пометки и картинку.

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

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

Если список должен перестраиваться при изменении другого поля, используйте обработчик ПриИзменении управляющего реквизита: очистите список методом Очистить() и заполните заново. Не забывайте сбрасывать текущее значение поля, если оно отсутствует в новом списке, иначе в реквизите останется недопустимый вариант.

Список выбора на основе перечисления

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

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

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

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

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

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

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

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

Проверка результата и контроль ввода

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

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

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

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

Список раскрывается, показывает все ожидаемые значения

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

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

Выбор и запись
Норма

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

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

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

Ввод вне списка
Норма

При запрете платформа не даёт ввести произвольное значение

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

Поле принимает любой текст при строгом сценарии

Права доступа
Норма

Под ограниченной ролью список работает без ошибок доступа

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

Ошибка «Нарушение прав доступа» при открытии формы

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

Типичные ошибки при создании списков выбора

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

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

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

Частые вопросы о списках выбора в 1С

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

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

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

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

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

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

Как ограничить список выбора в зависимости от другого поля?

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

Можно ли добавить картинки к элементам списка выбора?

Да. Метод Добавить объекта СписокЗначений принимает четвёртым параметром картинку из библиотеки картинок платформы или из общих картинок конфигурации. В редакторе свойства СписокВыбора в конфигураторе картинка также назначается для каждой строки. Это улучшает читаемость списков с понятными визуальными категориями.

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

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

Итог

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

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