Создание перечисления в 1С 8.3: от конфигуратора до кода
Содержание
Перечисление в 1С добавляют только в конфигураторе — это объект метаданных, а не данные, которые заводит пользователь. Частое заблуждение: «добавлю значения перечисления прямо в режиме Предприятия или из кода». Так не выйдет — набор значений фиксируется в конфигурации и меняется вместе с ней.
Чтобы добавить перечисление в 1С 8.3, откройте конфигуратор, найдите в дереве ветку Перечисления и создайте новый объект. На это уходит пара минут. Дальше его значения подставляют в реквизиты справочников и документов и сравнивают в коде.
Разберём весь путь: от создания объекта и его значений в конфигураторе до обращения к перечислению программно — и отдельно, когда вместо перечисления правильнее завести справочник.
Что такое перечисление и чем оно отличается от справочника
Перечисление — это заранее заданный, неизменяемый при работе список вариантов. Классические примеры из типовых конфигураций: пол физического лица (Мужской, Женский), статусы заказа, виды ставок НДС, способы доставки.
Ключевое отличие от справочника:
- 🔒 Значения перечисления задаёт разработчик в конфигураторе. Пользователь выбирает из готового списка, но не может добавить своё.
- 📇 Справочник наоборот — его элементы заводят в режиме Предприятия, список растёт при работе.
- 🧱 У перечисления есть только два свойства значения:
Имя(для кода) иСиноним(для пользователя). Ни кода, ни наименования, ни дополнительных реквизитов, ни иерархии, ни табличных частей у него нет.
Нагляднее — таблицей:
| Признак | Перечисление | Справочник |
|---|---|---|
| Кто задаёт значения | разработчик в конфигураторе | пользователь в режиме Предприятия |
| Когда меняется список | при изменении конфигурации | в любой момент при работе |
| Доп. реквизиты, иерархия, табличные части | нет | есть |
| Код и наименование | нет, только Имя и Синоним | есть Код и Наименование |
| Сортировка значений | в порядке расположения в метаданных | по коду, наименованию или произвольно |
| Где встречается в типовых | пол физлица, статусы, виды операций | контрагенты, номенклатура, договоры |
Отсюда простое правило выбора: фиксированный набор на 2–10 позиций — перечисление; изменяемый или большой список — справочник. К этому выбору вернёмся ниже отдельно.
Создание перечисления в конфигураторе
Порядок действий в конфигураторе 1С 8.3 (интерфейс «Такси», платформа 8.3.2x и новее):
- Откройте конфигуратор и загрузите конфигурацию: меню
Конфигурация → Открыть конфигурацию. В левой части появится дерево объектов. - Найдите в дереве ветку
Перечисления. - Нажмите на ней правой кнопкой →
Добавить(или выделите ветку и нажмитеInsert). Откроется окно редактирования объекта. - На вкладке
ОсновныезадайтеИмя— например,СтатусыЗаказов. Имя пишется без пробелов, по нему объект виден в коде. ПолеСинонимплатформа заполнит автоматически («Статусы заказов») — его показывают пользователю, и его можно переписать как удобно.
Имя меняйте до того, как начнёте ссылаться на перечисление в коде и реквизитах. Синоним можно править в любой момент без последствий — он нигде в коде не используется.
На остальные вкладки окна редактирования для простого перечисления можно не заходить. Единственное, что часто пригождается, — вкладка Подсистемы: отметьте галочками разделы, в командный интерфейс которых должен попасть объект, если планируете открывать его список из режима Предприятия. Своя форма выбора перечислению обычно не нужна — платформа строит выбор значения автоматически.
После этого объект уже существует, но он пустой: в нём нет ни одного значения. Их добавляют отдельным шагом.
Как добавить значения перечисления
Значения — это и есть те варианты, между которыми будет выбирать пользователь. Добавить их можно из того же окна редактирования объекта:
- Перейдите на вкладку
Данные. Там находится списокЗначения перечисления. - Нажмите
Добавить. В строке задайтеИмязначения (например,Новый) и при необходимости поправьтеСиноним. - Повторите для каждого варианта:
Новый,ВРаботе,Выполнен,Отменён.
Тот же список значений доступен и из дерева: разверните ваше перечисление, встаньте на подчинённую ветку Значения и добавляйте элементы там.
Порядок значений в списке — это и есть порядок сортировки. Перечисление не сортируется по алфавиту: оно выстраивается так, как значения идут в метаданных. Поэтому Новый держите первым, Отменён — последним, а не наоборот. Переставить значения можно стрелками «вверх/вниз» в том же списке.
Когда все значения заданы, сохраните изменения в базе: Конфигурация → Обновить конфигурацию базы данных или клавиша F7.
Добавление перечисления — это структурное изменение конфигурации. При обновлении базы данных платформа попросит завершить сеансы пользователей: нужен монопольный доступ. Выполняйте это вне рабочего времени, иначе работающие сотрудники получат разрыв сеанса.
Как использовать перечисление в справочнике или документе
Само по себе перечисление ничего не хранит — оно становится полезным, когда его тип назначают реквизиту. Так в карточке документа или справочника появляется поле-выпадающий список с вашими значениями.
Добавим документу ЗаказКлиента реквизит «Статус» с типом нашего перечисления:
- Откройте окно редактирования нужного документа (или справочника) в дереве.
- Перейдите на вкладку
Данные, встаньте на списокРеквизиты, нажмитеДобавить. - Задайте
Имяреквизита, напримерСтатус. - В поле
Типраскройте веткуПеречислениеСсылкаи отметьте галочкой ваше перечислениеСтатусыЗаказов. - Обновите конфигурацию базы данных (
F7).
После обновления в форме документа реквизит «Статус» отобразится как поле выбора : пользователь увидит синонимы значений и выберет один из них. То же самое работает для реквизитов справочника, регистра сведений, табличной части — везде, где можно назначить тип.
Чтобы новый документ сразу открывался с нужным статусом (например, Новый), не заставляя выбирать его вручную, задайте начальное значение в свойствах реквизита — в группе свойств, отвечающей за заполнение, укажите это значение перечисления. Тогда при создании документа реквизит заполнится автоматически.
Если реквизит не предлагает значения в выпадающем списке, проверьте две вещи: назначен ли тип именно ПеречислениеСсылка.<Имя> и прошло ли обновление базы данных после правок.
Обращение к значениям перечисления в коде
Третий сценарий — работа с перечислением «программно». Здесь важно сразу снять заблуждение: добавить новое значение перечисления из кода во время работы нельзя. Набор значений — это метаданные, они правятся только в конфигураторе. В коде можно лишь читать значения, сравнивать и присваивать их.
Обращение к конкретному значению идёт через менеджер перечислений:
Если Заказ.Статус = Перечисления.СтатусыЗаказов.Выполнен Тогда
Сообщить("Заказ выполнен");
КонецЕсли;
Присвоить значение реквизиту:
НовыйЗаказ.Статус = Перечисления.СтатусыЗаказов.Новый;
Если имя значения вычисляется в виде строки, значение берут через глобальную функцию:
Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаказов.Выполнен");
В языке запросов перечисление подставляют литералом ЗНАЧЕНИЕ:
ВЫБРАТЬ Заказы.Ссылка
ИЗ Документ.ЗаказКлиента КАК Заказы
ГДЕ Заказы.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Выполнен)
Так отбор по статусу работает прямо в запросе, без предварительного получения значения в переменную.
Реквизит типа перечисление может быть и не заполнен — пользователь просто ничего не выбрал. Проверяют это стандартно:
Если Не ЗначениеЗаполнено(Заказ.Статус) Тогда
Сообщить("Укажите статус заказа");
КонецЕсли;
Пустое значение — это не отдельный вариант из списка, а признак «не выбрано». Если по логике нужен явный вариант «не определён», добавьте его в перечисление отдельным значением, а не полагайтесь на пустую ссылку.
Получить весь список значений — например, чтобы заполнить отбор в отчёте — можно обходом метаданных. В коллекции метаданных лежат имена всех значений, по которым затем берут сами ссылки:
Для Каждого ЗначениеМД Из Метаданные.Перечисления.СтатусыЗаказов.ЗначенияПеречисления Цикл
Ссылка = ПредопределенноеЗначение("Перечисление.СтатусыЗаказов." + ЗначениеМД.Имя);
Сообщить(Строка(Ссылка));
КонецЦикла;
Если же задача сводится к подстановке значения в реквизит типа ПеречислениеСсылка, платформа и так покажет полный список в поле выбора — без единой строчки кода. В системе компоновки данных перечисление тоже доступно как тип параметра или поля отбора: пользователь выбирает значение из списка синонимов.
Перечисление или справочник: что завести
Самая частая ошибка при проектировании — взять перечисление там, где нужен справочник (и наоборот). Разница не в удобстве, а в том, кто и когда меняет список значений.
Есть и промежуточный вариант — план видов характеристик, когда нужен расширяемый набор свойств разных типов. Но для обычного «выбрать один из нескольких заранее известных вариантов» перечисление остаётся самым дешёвым и быстрым решением.
Практический критерий простой: спросите себя, кто и как часто будет менять список. Если ответ — «никто, пока не выйдет новая версия конфигурации», это перечисление. Если «бухгалтер или менеджер, по ходу работы» — это справочник. Ошибка с выбором исправляется дорого: перенести данные из перечисления в справочник уже после запуска означает конвертацию всех ссылок, поэтому решение лучше принять на старте.
Как изменить и удалить перечисление
Редактирование значений идёт там же, на вкладке Данные. Но есть тонкости, которые ломают работающую конфигурацию.
- ✏️ Синоним можно переписывать свободно — он только для показа.
- ⚠️ Имя значения трогать опасно: весь код вида
Перечисления.СтатусыЗаказов.Выполненссылается именно на имя. Переименовали — ссылки по старому имени оборвутся, конфигурация перестанет собираться. Если имя всё же нужно сменить, после правки найдите и поправьте все обращения в коде. - 🔢 Порядок значений меняйте осознанно: он влияет на сортировку в отчётах и списках.
- ➕ Новое значение в перечисление добавить безопасно — имена уже существующих значений не меняются, код продолжает работать. Поставить его можно в любое место списка, помня про сортировку.
Удаление перечисления или отдельного значения:
- Встаньте на объект (или значение) в дереве, нажмите правой кнопкой →
Поиск ссылок на объект. - Просмотрите, где он используется: реквизиты, модули, формы, макеты.
- Уберите или переназначьте все ссылки, и только потом удаляйте.
- Обновите конфигурацию базы данных.
Если перечисление входит в типовую конфигурацию
на поддержке, не снимайте её с поддержки ради одного значения. Заведите собственное перечисление в расширении конфигурации — тогда ваши изменения переживут обновление типовой. Расширения доступны с платформы 8.3.6; загрузка файла .cfe и обновление конфигурации
базы данных — это два отдельных шага.
Типичные ошибки при работе с перечислениями
Ниже — не повтор инструкции, а ситуации, в которых чаще всего спотыкаются. Подберите свой симптом.
Частые вопросы
Можно ли добавить значение перечисления в режиме Предприятия?
Чем Имя значения отличается от Синонима?
Перечисления.СтатусыЗаказов.Выполнен), менять его опасно. Синоним — подпись для пользователя в формах и списках, его можно переписывать без последствий.