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

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

Как сделать перечисление в 1С

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

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

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

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

Когда перечисление — правильный выбор

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

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

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

Перечисление или справочник

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

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

Справочник

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

План видов характеристик

Когда нужны и предопределённые элементы, и возможность пользователю добавлять свои. Используется для аналитик и дополнительных свойств.

Создание перечисления в конфигураторе

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

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

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

Добавление и настройка значений

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

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

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

Использование перечисления в реквизитах объектов

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

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

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

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

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

Типичная проверка в коде выглядит так: Если Объект.Статус = Перечисления.СтатусыЗаказа.Выполнен Тогда ... КонецЕсли;. Для перебора всех значений используется коллекция менеджера: Для Каждого Значение Из Перечисления.СтатусыЗаказа Цикл ... КонецЦикла;.

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

bsl
Если Документ.Статус = Перечисления.СтатусыЗаказа.Отменён Тогда
    Сообщить("Заказ отменён, проведение запрещено");
    Отказ = Истина;
КонецЕсли;

В запросах значение перечисления передаётся через параметр: Запрос.УстановитьПараметр(\"Статус\", Перечисления.СтатусыЗаказа.Выполнен);. Также в тексте запроса доступна конструкция ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказа.Выполнен), позволяющая указать значение без параметра.

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

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

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

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

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

Выпадающий список в форме
Норма

Показывает все значения с читаемыми синонимами

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

Список пуст или показывает технические имена без пробелов

Компиляция модулей
Норма

Модули проверяются без ошибок при обновлении

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

Ошибка «Значение не найдено» — опечатка в имени значения

Заполненность данных
Норма

Новые документы сохраняют выбранный статус

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

Статус не сохраняется — реквизит не добавлен в объект или не размещён на форме

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

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

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

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

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

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

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

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

Часто задаваемые вопросы

Можно ли пользователю добавить значение в перечисление?

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

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

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

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

Через коллекцию менеджера: Для Каждого Значение Из Перечисления.ИмяПеречисления Цикл. Внутри цикла доступна ссылка на каждое значение, её можно сравнивать, выводить пользователю или добавлять в список значений.

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

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

Можно ли использовать перечисление в отчётах на СКД?

Да. Реквизит с типом перечисления доступен в наборе данных схемы компоновки, его можно выводить в поля отчёта, использовать в отборах и группировках. В параметрах отбора пользователь выберет значение из привычного выпадающего списка.

Итог

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

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