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