Добавить в корзинуПозвонить
Найти в Дзене
Путь 1Сника

Перечисления в 1С: зачем они нужны и как упрощают жизнь разработчику

Перечисление в 1С — это объект метаданных, который хранит фиксированный набор предопределенных значений. По сути, это список возможных вариантов, которые могут принимать определенные реквизиты. Например, статусы заказа, типы оплаты, способы доставки. В отличие от справочников, перечисления нельзя редактировать во время работы программы. Их содержимое задается на этапе разработки конфигурации. Это главное отличие — жесткая структура, которая не меняется пользователем. Технически перечисление состоит из набора значений, каждое из которых имеет имя и порядковый номер. Когда вы создаете перечисление "СтатусыЗаказа" со значениями "Новый", "ВРаботе", "Выполнен", система присваивает им уникальные идентификаторы. Раньше проверка статуса выглядела так: ``` Если Документ.Статус = "Оплачен" Тогда ``` Опечатка в слове "Оплачен" приводила к тому, что условие никогда не срабатывало. С перечислениями код стал таким: ``` Если Документ.Статус = Перечисления.СтатусыОплаты.Оплачен Тогда ``` Конфигуратор
Оглавление

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

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

Технически перечисление состоит из набора значений, каждое из которых имеет имя и порядковый номер. Когда вы создаете перечисление "СтатусыЗаказа" со значениями "Новый", "ВРаботе", "Выполнен", система присваивает им уникальные идентификаторы.

Почему перечисления лучше строк

Раньше проверка статуса выглядела так:

``` Если Документ.Статус = "Оплачен" Тогда ```

Опечатка в слове "Оплачен" приводила к тому, что условие никогда не срабатывало.

С перечислениями код стал таким:

``` Если Документ.Статус = Перечисления.СтатусыОплаты.Оплачен Тогда ```

Конфигуратор сразу подсвечивает ошибку, если значение не существует. Автодополнение помогает быстро выбрать нужный вариант из списка.

Производительность тоже выигрывает. Сравнение чисел (а перечисления хранятся как числа) работает быстрее сравнения строк. На больших объемах данных это заметно.

Многоязычность реализуется автоматически. Представления перечислений можно перевести на разные языки, при этом код остается неизменным. Пользователь видит "Paid" или "Оплачено" в зависимости от настроек, а разработчик работает с одним и тем же значением.

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

Процесс создания простой. Открываете дерево конфигурации, находите раздел "Перечисления", добавляете новый объект. Даете ему понятное имя — например, "СпособыДоставки".

Затем добавляете значения: "Курьер", "Самовывоз", "Почта". Каждому можно задать синоним — то, что увидит пользователь в интерфейсе.

В реквизитах документов или справочников указываете тип "ПеречислениеСсылка.СпособыДоставки". Теперь это поле может принимать только заданные значения.

В коде обращение выглядит просто:

``` ЗаказКлиента.СпособДоставки = Перечисления.СпособыДоставки.Курьер; ```

Проверка значения:

``` Если ЗаказКлиента.СпособДоставки = Перечисления.СпособыДоставки.Самовывоз Тогда // логика для самовывоза КонецЕсли; ```

Полезные приемы работы

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

Нельзя удалять значения из перечислений, если они уже использовались в базе. Система не даст этого сделать, потому что в таблицах могут храниться ссылки на удаляемое значение. Можно только пометить как устаревшее или добавить новые.

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

``` Для Каждого ЗначениеПеречисления Из Перечисления.СтатусыЗаказа Цикл // обработка каждого значения КонецЦикла; ```

Это помогает создавать универсальные обработки, которые автоматически учитывают все возможные варианты.

Когда перечисления не подходят

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

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

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

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

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

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