Создание и использование перечислений в конфигураторе 1С 8.3
Содержание
Перечисление создают в конфигураторе: в дереве конфигурации находят ветку Перечисления, вызывают контекстное меню правой кнопкой и выбирают Добавить (или клавишей Insert). В карточке задают имя объекта, затем на закладке Данные вносят список значений. После этого запускают Обновить конфигурацию базы данных (F7) — и новый тип готов к использованию в реквизитах объектов и в коде.
Перечисление — это объект метаданных с заранее заданным, неизменным набором значений. Значения задаёт разработчик на этапе конфигурирования; в режиме 1С:Предприятие пользователь их не добавляет и не удаляет. Этим перечисление отличается от справочника, где список элементов пополняют прямо в работе. Ниже — как создать перечисление, настроить его значения, подключить к документам и справочникам, использовать во встроенном языке и перенести в другую базу.
Работа идёт в конфигураторе 1С 8.3, интерфейс «Такси». Для перечислений всё одинаково в типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11) и в самостоятельных разработках — это механизм платформы, а не конкретного прикладного решения.
Перечисление или справочник: что выбрать под задачу
Выбор зависит от одного: меняется ли список значений в работе.
Перечисление подходит, когда набор фиксирован и известен заранее: пол (мужской/женский), вид контрагента (юрлицо/физлицо/ИП), статус заказа (новый/в работе/выполнен/отменён). Такие значения живут в метаданных, занимают минимум места и сравниваются максимально быстро.
Справочник нужен, когда пользователь должен сам пополнять список (контрагенты, номенклатура, склады) или когда каждому значению требуются собственные реквизиты. У значения перечисления реквизитов нет — только имя и синоним. Если понадобилось хранить рядом со значением дополнительные данные, перечисление уже не подойдёт — закладывайте справочник.
Компромисс для «почти фиксированного» списка — справочник с предопределёнными элементами. Основные значения создаёте в конфигураторе, а пользователь при необходимости добавляет свои. У таких элементов, в отличие от перечисления, есть реквизиты и табличные части.
Коротко разница между тремя вариантами выглядит так:
| Критерий | Перечисление | Справочник | Справочник с предопределёнными |
|---|---|---|---|
| Кто задаёт значения | только разработчик | пользователь | разработчик + пользователь |
| Реквизиты у значения | нет | есть | есть |
| Пополнение в режиме 1С:Предприятие | нет | да | да (сверх базовых) |
| Скорость сравнения в коде | максимальная | обычная | обычная |
| Когда брать | фиксированный короткий список | свободно пополняемый список | базовый набор плюс пользовательские |
Как создать перечисление в конфигураторе
- Откройте конфигурацию на редактирование (
Конфигурация → Открыть конфигурацию). - В дереве конфигурации выделите ветку
Перечисления, нажмите Insert или правую кнопку →Добавить. - В поле
Имязадайте идентификатор без пробелов, напримерСтатусыЗаказов. По нему к перечислению обращаются из кода. - Поле
Синонимзаполнится автоматически («Статусы заказов») — это название для пользователя в формах и отчётах. При желании поправьте. - Перейдите на закладку
Данные— там находится таблицаЗначения перечисления.
Имя задавайте осмысленно и в единственном стиле: платформа допускает и кириллицу, и латиницу, но внутри одной конфигурации лучше не смешивать. Если разработка типовая, держитесь принятого в ней стиля именования.
Команда Обновить конфигурацию базы данных (F7) меняет структуру и требует монопольного доступа — все активные сеансы пользователей должны быть завершены. На рабочей базе обновление структуры делают в согласованное окно и с актуальной резервной копией.
Настройка значений: имя, синоним и порядок
На закладке Данные кнопкой Добавить вносят значения по одному. У каждого два поля:
Имя— идентификатор значения для кода, напримерНовый,ВРаботе,Выполнен,Отменён.Синоним— как значение видит пользователь: «Новый», «В работе», «Выполнен», «Отменён».
Порядок значений в таблице определяет порядок в выпадающих списках и может использоваться при сортировке — поэтому выстраивайте их по смыслу (жизненный цикл статуса), а не по алфавиту. Переставляют значения стрелками на панели или перетаскиванием.
Каждому значению можно назначить картинку: на той же закладке есть поле для выбора изображения из общих картинок конфигурации. Это удобно для статусов — зелёная, жёлтая, красная метка в списке документов читается быстрее текста.
💡 Полезные мелочи при настройке значений:
- 🔤 Имя значения — латиницей или кириллицей, но единообразно с именем самого перечисления.
- 🧩 Синоним пишите так, как значение должно звучать в интерфейсе: с заглавной буквы, без сокращений.
- 🖼 Картинку берите из макета общих картинок — она подтянется и в формы списка, и в отчёты.
Как подключить перечисление к документам и справочникам
Само по себе перечисление ничего не хранит — оно задаёт тип. Чтобы объект (справочник, документ, регистр) мог хранить значение перечисления, добавьте ему реквизит нужного типа:
- Откройте объект, например документ
ЗаказКлиента, закладкаДанные. - Добавьте реквизит, назовите его
Статус. - В свойстве
Типраскройте список и выберитеПеречислениеСсылка.СтатусыЗаказов.
Теперь у документа есть поле, принимающее только значения вашего перечисления. На форме оно отрисуется выпадающим списком с синонимами значений. Так же перечисление подключают к реквизитам справочников, к измерениям и ресурсам регистров, к параметрам отчётов на СКД.
Если нужно, чтобы по статусу можно было отбирать и группировать в отчётах, перечисление уже к этому готово: СКД видит его как обычный ссылочный тип.
Работа с перечислением во встроенном языке и запросах
К значениям перечисления обращаются через менеджер Перечисления по имени перечисления и имени значения:
// Присвоить значение
Документ.Статус = Перечисления.СтатусыЗаказов.Новый;
// Сравнить в условии
Если Заказ.Статус = Перечисления.СтатусыЗаказов.Выполнен Тогда
Сообщить("Заказ закрыт");
КонецЕсли;
Сравнивайте именно со значением перечисления, а не со строкой-синонимом. Строка «Выполнен» и значение Перечисления.СтатусыЗаказов.Выполнен — разные вещи, сравнение со строкой не сработает.
Пустое значение (реквизит ещё не заполнен) проверяют методом ПустаяСсылка():
Если Заказ.Статус = Перечисления.СтатусыЗаказов.ПустаяСсылка() Тогда
Заказ.Статус = Перечисления.СтатусыЗаказов.Новый;
КонецЕсли;
В языке запросов для подстановки конкретного значения используют функцию ЗНАЧЕНИЕ():
ВЫБРАТЬ
Заказы.Ссылка,
Заказы.Статус
ИЗ
Документ.ЗаказКлиента КАК Заказы
ГДЕ
Заказы.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Выполнен)
Чтобы получить текстовое представление значения в запросе, применяют функцию ПРЕДСТАВЛЕНИЕ(). Перебрать все значения перечисления можно через его метаданные: в коллекции Метаданные.Перечисления.СтатусыЗаказов.ЗначенияПеречисления лежат описания всех значений с их именами. Если механизм перебора вам незнаком — не усложняйте, а работайте с конкретными значениями по имени, как в примерах выше.
Перенос перечисления в другую базу
Перечисление — часть конфигурации, а не данные. Поэтому переносят его не выгрузкой значений, а переносом самой конфигурации. Выгрузить список значений, как элементы справочника, нельзя — их там нет в виде данных.
Три рабочих способа:
- 📦 Сравнение и объединение конфигураций. В базе-приёмнике:
Конфигурация → Сравнить, объединить с конфигурацией из файла. Выбираете файл.cfбазы-источника, в дереве отмечаете нужное перечисление, выполняете объединение и затемОбновить конфигурацию базы данных(F7). - 🧩 Расширение конфигурации
. Если менять основную конфигурацию нельзя (типовая на поддержке), перечисление добавляют в расширение. Расширения доступны с платформы 8.3.6. Файл
.cfeподключают черезКонфигурация → Расширения конфигурации, после загрузки — отдельным шагом обновляют конфигурацию базы данных. - 🗂 Полная загрузка конфигурации через
Конфигурация → Загрузить конфигурацию из файла— но она заменяет конфигурацию приёмника целиком, поэтому годится только при первичном переносе или для копии.
Данные переносятся отдельно. Если в документах уже хранятся значения этого перечисления, при обычной выгрузке-загрузке данных (.dt) или при переносе через обмен ссылки сохранятся — при условии, что имена значений в обеих базах совпадают.
Продвинутые приёмы работы с перечислениями
Когда базовая настройка освоена, перечисление становится удобным инструментом за пределами «поля-статуса».
Отбор в отчётах на СКД. Перечисление — обычный ссылочный тип, поэтому в системе компоновки данных оно доступно и как поле группировки, и как быстрый отбор. Пользователь выбирает значение из списка синонимов, запрос отрабатывает через ту же функцию ЗНАЧЕНИЕ(). Отдельно ничего настраивать не нужно — достаточно вывести реквизит в набор данных.
Параметр сеанса и ограничение доступа. Параметру сеанса можно назначить тип ПеречислениеСсылка.<Имя> и заполнять его при старте сеанса — например, роль пользователя в прикладном смысле (менеджер/кладовщик/бухгалтер). Дальше это значение участвует в ограничении доступа на уровне записей (RLS): видимость документов зависит от значения перечисления в параметре сеанса. Так одно перечисление управляет и интерфейсом, и правами.
Визуальные статусы через картинки. Назначенные значениям картинки подтягиваются в формы списка и в отчёты. Для статусов документооборота это даёт мгновенно читаемую «светофорную» колонку без дополнительного кода оформления.
Добавление значений к типовому перечислению. Если нужно расширить перечисление типовой конфигурации, но снимать её с поддержки нельзя, значение добавляют через расширение конфигурации. Это аккуратнее правки основной конфигурации: типовая остаётся на поддержке, а обновления поставщика накатываются без конфликтов по вашему объекту.
Прежде чем завязывать на перечисление права доступа через RLS, продумайте, что произойдёт при пустом значении параметра сеанса. Незаполненный параметр — частая причина того, что пользователь внезапно «не видит» вообще ничего или, наоборот, видит лишнее.
Типичные ошибки при работе с перечислениями
Ошибки с перечислениями почти всегда растут из путаницы «метаданные против данных» и «имя против синонима».
- ❌ Выбрали перечисление там, где список меняется. Пользователь просит добавить новый статус — а это правка конфигурации и обновление структуры. Для изменяемых списков берите справочник.
- ❌ Сравнение со строкой.
Если Статус = "Выполнен"вместоЕсли Статус = Перечисления.СтатусыЗаказов.Выполнен. Условие молча не выполняется. - ❌ Удаление или переименование значения, которое уже используется в данных. Ссылки в документах и регистрах могут «повиснуть». Прежде чем убирать значение, найдите все места, где оно хранится и где участвует в коде и запросах.
- ❌ Ожидание реквизитов у значения. У значения перечисления нет ни реквизитов, ни табличных частей. Нужны дополнительные данные к значению — это справочник.
- ❌ Путаница имени и синонима. Имя — для кода и неизменно на уровне структуры; синоним — для пользователя и правится свободно. Менять имя у работающего значения без необходимости не стоит.
Переименование и особенно удаление значений делайте только после анализа зависимостей — через Правка → Глобальный поиск по конфигурации и проверку хранимых данных. На рабочей базе — с резервной копией.
Частые вопросы
Можно ли добавить значение перечисления в режиме 1С:Предприятие?
Чем перечисление отличается от справочника с предопределёнными элементами?
Как в запросе отобрать документы по конкретному значению перечисления?
ЗНАЧЕНИЕ(): ГДЕ Заказы.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Выполнен). Имя перечисления и имя значения пишутся точно как в конфигурации.