Создание и использование перечислений в конфигураторе 1С 8.3

· 9 мин

Содержание

Перечисление создают в конфигураторе: в дереве конфигурации находят ветку Перечисления, вызывают контекстное меню правой кнопкой и выбирают Добавить (или клавишей Insert). В карточке задают имя объекта, затем на закладке Данные вносят список значений. После этого запускают Обновить конфигурацию базы данных (F7) — и новый тип готов к использованию в реквизитах объектов и в коде.

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

Работа идёт в конфигураторе 1С 8.3, интерфейс «Такси». Для перечислений всё одинаково в типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11) и в самостоятельных разработках — это механизм платформы, а не конкретного прикладного решения.

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

Выбор зависит от одного: меняется ли список значений в работе.

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

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

Компромисс для «почти фиксированного» списка — справочник с предопределёнными элементами. Основные значения создаёте в конфигураторе, а пользователь при необходимости добавляет свои. У таких элементов, в отличие от перечисления, есть реквизиты и табличные части.

Коротко разница между тремя вариантами выглядит так:

КритерийПеречислениеСправочникСправочник с предопределёнными
Кто задаёт значениятолько разработчикпользовательразработчик + пользователь
Реквизиты у значениянетестьесть
Пополнение в режиме 1С:Предприятиенетдада (сверх базовых)
Скорость сравнения в кодемаксимальнаяобычнаяобычная
Когда братьфиксированный короткий списоксвободно пополняемый списокбазовый набор плюс пользовательские
Перечисление или справочник под ваш список значений?

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

  1. Откройте конфигурацию на редактирование (Конфигурация → Открыть конфигурацию).
  2. В дереве конфигурации выделите ветку Перечисления, нажмите Insert или правую кнопку → Добавить.
  3. В поле Имя задайте идентификатор без пробелов, например СтатусыЗаказов. По нему к перечислению обращаются из кода.
  4. Поле Синоним заполнится автоматически («Статусы заказов») — это название для пользователя в формах и отчётах. При желании поправьте.
  5. Перейдите на закладку Данные — там находится таблица Значения перечисления.

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

Команда Обновить конфигурацию базы данных (F7) меняет структуру и требует монопольного доступа — все активные сеансы пользователей должны быть завершены. На рабочей базе обновление структуры делают в согласованное окно и с актуальной резервной копией.

Настройка значений: имя, синоним и порядок

На закладке Данные кнопкой Добавить вносят значения по одному. У каждого два поля:

  • Имя — идентификатор значения для кода, например Новый, ВРаботе, Выполнен, Отменён.
  • Синоним — как значение видит пользователь: «Новый», «В работе», «Выполнен», «Отменён».

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

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

💡 Полезные мелочи при настройке значений:

  • 🔤 Имя значения — латиницей или кириллицей, но единообразно с именем самого перечисления.
  • 🧩 Синоним пишите так, как значение должно звучать в интерфейсе: с заглавной буквы, без сокращений.
  • 🖼 Картинку берите из макета общих картинок — она подтянется и в формы списка, и в отчёты.

Как подключить перечисление к документам и справочникам

Само по себе перечисление ничего не хранит — оно задаёт тип. Чтобы объект (справочник, документ, регистр) мог хранить значение перечисления, добавьте ему реквизит нужного типа:

  1. Откройте объект, например документ ЗаказКлиента, закладка Данные.
  2. Добавьте реквизит, назовите его Статус.
  3. В свойстве Тип раскройте список и выберите ПеречислениеСсылка.СтатусыЗаказов.

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

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

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

К значениям перечисления обращаются через менеджер Перечисления по имени перечисления и имени значения:

// Присвоить значение
Документ.Статус = Перечисления.СтатусыЗаказов.Новый;

// Сравнить в условии
Если Заказ.Статус = Перечисления.СтатусыЗаказов.Выполнен Тогда
    Сообщить("Заказ закрыт");
КонецЕсли;

Сравнивайте именно со значением перечисления, а не со строкой-синонимом. Строка «Выполнен» и значение Перечисления.СтатусыЗаказов.Выполнен — разные вещи, сравнение со строкой не сработает.

Пустое значение (реквизит ещё не заполнен) проверяют методом ПустаяСсылка():

Если Заказ.Статус = Перечисления.СтатусыЗаказов.ПустаяСсылка() Тогда
    Заказ.Статус = Перечисления.СтатусыЗаказов.Новый;
КонецЕсли;

В языке запросов для подстановки конкретного значения используют функцию ЗНАЧЕНИЕ():

ВЫБРАТЬ
    Заказы.Ссылка,
    Заказы.Статус
ИЗ
    Документ.ЗаказКлиента КАК Заказы
ГДЕ
    Заказы.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Выполнен)

Чтобы получить текстовое представление значения в запросе, применяют функцию ПРЕДСТАВЛЕНИЕ(). Перебрать все значения перечисления можно через его метаданные: в коллекции Метаданные.Перечисления.СтатусыЗаказов.ЗначенияПеречисления лежат описания всех значений с их именами. Если механизм перебора вам незнаком — не усложняйте, а работайте с конкретными значениями по имени, как в примерах выше.

Перенос перечисления в другую базу

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

Три рабочих способа:

  • 📦 Сравнение и объединение конфигураций. В базе-приёмнике: Конфигурация → Сравнить, объединить с конфигурацией из файла. Выбираете файл .cf базы-источника, в дереве отмечаете нужное перечисление, выполняете объединение и затем Обновить конфигурацию базы данных (F7).
  • 🧩 Расширение конфигурации . Если менять основную конфигурацию нельзя (типовая на поддержке), перечисление добавляют в расширение. Расширения доступны с платформы 8.3.6. Файл .cfe подключают через Конфигурация → Расширения конфигурации, после загрузки — отдельным шагом обновляют конфигурацию базы данных.
  • 🗂 Полная загрузка конфигурации через Конфигурация → Загрузить конфигурацию из файла — но она заменяет конфигурацию приёмника целиком, поэтому годится только при первичном переносе или для копии.

Данные переносятся отдельно. Если в документах уже хранятся значения этого перечисления, при обычной выгрузке-загрузке данных (.dt) или при переносе через обмен ссылки сохранятся — при условии, что имена значений в обеих базах совпадают.

Перенос перечисления в другую базу — проверка
Выполнено: 0 / 6

Продвинутые приёмы работы с перечислениями

Когда базовая настройка освоена, перечисление становится удобным инструментом за пределами «поля-статуса».

Отбор в отчётах на СКД. Перечисление — обычный ссылочный тип, поэтому в системе компоновки данных оно доступно и как поле группировки, и как быстрый отбор. Пользователь выбирает значение из списка синонимов, запрос отрабатывает через ту же функцию ЗНАЧЕНИЕ(). Отдельно ничего настраивать не нужно — достаточно вывести реквизит в набор данных.

Параметр сеанса и ограничение доступа. Параметру сеанса можно назначить тип ПеречислениеСсылка.<Имя> и заполнять его при старте сеанса — например, роль пользователя в прикладном смысле (менеджер/кладовщик/бухгалтер). Дальше это значение участвует в ограничении доступа на уровне записей (RLS): видимость документов зависит от значения перечисления в параметре сеанса. Так одно перечисление управляет и интерфейсом, и правами.

Визуальные статусы через картинки. Назначенные значениям картинки подтягиваются в формы списка и в отчёты. Для статусов документооборота это даёт мгновенно читаемую «светофорную» колонку без дополнительного кода оформления.

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

Прежде чем завязывать на перечисление права доступа через RLS, продумайте, что произойдёт при пустом значении параметра сеанса. Незаполненный параметр — частая причина того, что пользователь внезапно «не видит» вообще ничего или, наоборот, видит лишнее.

Типичные ошибки при работе с перечислениями

Ошибки с перечислениями почти всегда растут из путаницы «метаданные против данных» и «имя против синонима».

  • ❌ Выбрали перечисление там, где список меняется. Пользователь просит добавить новый статус — а это правка конфигурации и обновление структуры. Для изменяемых списков берите справочник.
  • ❌ Сравнение со строкой. Если Статус = "Выполнен" вместо Если Статус = Перечисления.СтатусыЗаказов.Выполнен. Условие молча не выполняется.
  • ❌ Удаление или переименование значения, которое уже используется в данных. Ссылки в документах и регистрах могут «повиснуть». Прежде чем убирать значение, найдите все места, где оно хранится и где участвует в коде и запросах.
  • ❌ Ожидание реквизитов у значения. У значения перечисления нет ни реквизитов, ни табличных частей. Нужны дополнительные данные к значению — это справочник.
  • ❌ Путаница имени и синонима. Имя — для кода и неизменно на уровне структуры; синоним — для пользователя и правится свободно. Менять имя у работающего значения без необходимости не стоит.

Переименование и особенно удаление значений делайте только после анализа зависимостей — через Правка → Глобальный поиск по конфигурации и проверку хранимых данных. На рабочей базе — с резервной копией.

Частые вопросы

Можно ли добавить значение перечисления в режиме 1С:Предприятие?
Нет. Значения задаются только в конфигураторе. Если список должен пополняться пользователем — это признак того, что нужен справочник, а не перечисление.
Чем перечисление отличается от справочника с предопределёнными элементами?
У значения перечисления нет реквизитов и табличных частей, и пользователь не может добавить свои значения. Справочник с предопределёнными элементами даёт и базовый набор от разработчика, и возможность пользователю дополнять список, и собственные реквизиты у каждого элемента.
Как в запросе отобрать документы по конкретному значению перечисления?
Через функцию ЗНАЧЕНИЕ(): ГДЕ Заказы.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Выполнен). Имя перечисления и имя значения пишутся точно как в конфигурации.
Повлияет ли смена порядка значений на уже сохранённые данные?
Сами ссылки в данных останутся прежними. Изменится порядок в выпадающих списках и, если вы сортируете по значению, порядок в отчётах. После правки выполните обновление конфигурации базы данных.
Что произойдёт при удалении значения, которое используется в документах?
Код и запросы, ссылающиеся на удалённое значение, перестанут корректно работать, а в данных останутся ссылки на отсутствующее значение. Перед удалением найдите все вхождения и обработайте их, лучше в тестовой копии.