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

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

Как ограничить список выбора перечисления в 1С

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

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

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

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

Через «Параметры выбора» в конфигураторе

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

Добавьте новый параметр с именем «Отбор.Ссылка» и в качестве значения укажите фиксированный массив нужных значений перечисления. В редакторе свойства это делается через кнопку выбора типа значения: отметьте «Фиксированный массив», затем добавьте в него элементы типа «ПеречислениеСсылка.<ИмяПеречисления>» и выберите конкретные значения.

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

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

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

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

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

Практический приём с несколькими наборами

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

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

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

&НаСервере

Процедура УстановитьПараметрыВыбораТипаОплаты()

ДопустимыеЗначения = Новый Массив;

ДопустимыеЗначения.Добавить(Перечисления.ТипыОплаты.Наличные);

ДопустимыеЗначения.Добавить(Перечисления.ТипыОплаты.Карта);

ПараметрОтбора = Новый ПараметрВыбора("Отбор.Ссылка",

Новый ФиксированныйМассив(ДопустимыеЗначения));

МассивПараметров = Новый Массив;

МассивПараметров.Добавить(ПараметрОтбора);

Элементы.ТипОплаты.ПараметрыВыбора =

Новый ФиксированныйМассив(МассивПараметров);

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

Обратите внимание на двойную фиксацию: сначала массив значений оборачивается в ФиксированныйМассив, затем массив параметров — ещё раз. Если пропустить это, платформа выдаст ошибку о несоответствии типа. После установки параметров список выбора поля обновляется автоматически, перерисовывать форму вручную не требуется.

Ограничение через событие «ОбработкаВыбора» и список выбора

Альтернативный путь — заполнить у поля ввода свойство «СписокВыбора» (Элементы.Поле.СписокВыбора) только нужными значениями и установить свойство «РежимВыбораИзСписка» в Истина. Тогда поле превращается в выпадающий список с жёстко заданным составом. Этот способ проще, но менее гибок: он не участвует в механизме подбора и не работает с отборами динамических списков.

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

Параметры выбора в конфигураторе

Подходит для статичных ограничений без кода; не меняется в зависимости от контекста

Связи параметров выбора

Подходит, когда состав списка зависит от другого реквизита; требует поддерживаемого отбора

Программная установка параметров

Максимальная гибкость, любые условия; требует кода и аккуратной инициализации

СписокВыбора + РежимВыбораИзСписка

Быстрое решение для простых полей; не работает с подбором и отборами списков

Ограничение на уровне реквизита объекта

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

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

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

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

Типичные ошибки
01
Параметр назван «Отбор» вместо «Отбор.Ссылка» — отбор не применяется, список остаётся полным
02
Забыт ФиксированныйМассив при программной установке — ошибка несоответствия типов при открытии формы
03
Ограничение задано только на форме, а данные загружаются обменом — в базе появляются запрещённые значения
04
Параметры выбора установлены в ПриОткрытии вместо ПриСозданииНаСервере — при обновлении формы настройка теряется
05
Ожидание, что ограничение очистит уже записанное значение — платформа только блокирует новый выбор

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

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

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

Выпадающий список поля
Норма

Отображаются только разрешённые значения перечисления

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

Видны все значения — параметр не применён или назван неверно

Быстрый ввод с клавиатуры
Норма

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

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

Подставляется любое значение — проверьте параметры выбора

Существующие документы
Норма

Старые значения отображаются и сохраняются

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

Значения очищаются при открытии — где-то стоит лишняя обработка

Программное создание объекта
Норма

Проверка заполнения отклоняет запрещённое значение

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

Объект записывается с любым значением — нет серверной проверки

FAQ

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

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

Почему ограничение работает в списке выбора, но не при подборе?

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

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

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

Очистится ли уже записанное значение, если оно попало под запрет?

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

Чем отличается «Параметры выбора» от «Список выбора» у поля ввода?

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

Итог

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

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