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

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

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

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

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

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

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

Когда нужно перечисление, а когда справочник

Главный критерий выбора — кто управляет списком значений. Если набор вариантов определяется логикой программы и не должен меняться пользователем (например, «Черновик / Проведён / Отменён» или «Наличный / Безналичный расчёт»), нужно перечисление. Если список пополняется пользователями в процессе работы (контрагенты, номенклатура, склады), нужен справочник.

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

Третий критерий — необходимость хранить дополнительные данные у каждого варианта. У значения перечисления есть только имя и синоним; прикрепить к нему, скажем, процент или комментарий нельзя. Если каждому варианту нужны атрибуты, выбирайте справочник.

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

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

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

Справочник

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

Строка с проверкой

Допустимо как временное решение, но приводит к опечаткам и разнобою в данных — в прикладных решениях не рекомендуется.

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

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

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

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

Порядок создания перечисления
  1. 1
    Откройте конфигурацию в конфигураторе и найдите ветку «Перечисления»
  2. 2
    Добавьте новый объект и задайте имя латиницей и понятный синоним
  3. 3
    На закладке «Данные» добавьте значения перечисления с именами и синонимами
  4. 4
    Назначьте тип реквизитам документов или справочников, которые должны хранить значение
  5. 5
    Обновите конфигурацию базы данных (F7) и проверьте работу в режиме предприятия

Настройка значений перечисления

Перейдите на закладку «Данные» в окне редактирования перечисления. В таблице «Значения перечисления» нажмите «Добавить» и введите первое значение. Для каждого значения указывается имя (идентификатор для кода, например Новый, ВРаботе, Завершён) и синоним, который увидит пользователь в выпадающем списке.

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

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

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

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

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

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

Обращение к перечислению из встроенного языка

В коде значения перечисления доступны через менеджер Перечисления. Типовые конструкции: получение ссылки — Перечисления.СтатусыЗаказа.ВРаботе, сравнение — Если Документ.Статус = Перечисления.СтатусыЗаказа.Завершён Тогда ... КонецЕсли;. Проверка на пустое значение выполняется через ЗначениеЗаполнено() или сравнение с Перечисления.СтатусыЗаказа.ПустаяСсылка().

Для перебора всех значений используется коллекция менеджера: Для Каждого Значение Из Перечисления.СтатусыЗаказа Цикл ... КонецЦикла; — это удобно при построении отчётов или заполнении списков выбора программно. Получить значение по строковому имени помогает индексное обращение: Перечисления.СтатусыЗаказа["ВРаботе"].

В запросах значения перечисления передаются как параметры: Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыЗаказа.Завершён);. Это стандартный способ отбора документов по статусу в отчётах и обработках.

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

Обновление конфигурации и проверка результата

После создания перечисления и привязки его к реквизитам обновите конфигурацию базы данных клавишей F7 или через меню «Конфигурация» → «Обновить конфигурацию базы данных». Перечисления не требуют реструктуризации таблиц сами по себе, но добавление реквизитов с новым типом — требует, поэтому обновление обязательно.

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

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

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

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

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

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

Список пуст, содержит технические имена вместо синонимов или не все значения

Сохранение документа
Норма

Выбранное значение сохраняется и отображается после повторного открытия

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

Поле очищается или выдаёт ошибку при записи

Работа кода
Норма

Сравнения и присваивания выполняются без ошибок компиляции

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

Ошибка «Переменная не определена» — значит, имя перечисления или значения указано неверно

Типичные ошибки и ограничения

Самая частая ошибка — обращение к несуществующему значению после его переименования или удаления. Код компилируется только при проверке модулей, поэтому после любой правки состава перечисления выполните полную проверку конфигурации («Конфигурация» → «Проверка конфигурации») и поиск имени значения по всем модулям.

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

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

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

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

Можно ли добавить значение перечисления в режиме «Предприятие»?

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

Что произойдёт с документами, если удалить значение перечисления?

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

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

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

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

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

Можно ли отсортировать значения перечисления в выпадающем списке?

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

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

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

Итог

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

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