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