Разработка и Конфигурация · 11 мин
Как сделать перечисления в 1С
Пошаговая инструкция по созданию перечислений в 1С: добавление объекта в конфигураторе, работа со значениями в коде, типовые ошибки и проверка результата.
Перечисление в 1С — это объект конфигурации, который хранит фиксированный список значений, заданных разработчиком на этапе проектирования. Пользователь не может добавлять новые значения в режиме предприятия: список меняется только через конфигуратор. Это ключевое отличие от справочников, и именно оно определяет, когда стоит выбирать перечисление, а когда — другой объект.
Типичные примеры перечислений: ставки НДС, виды операций, признаки «да/нет/не определено», статусы документа с жёстко заданным набором состояний, пол (мужской/женский). Значения перечисления встроены в конфигурацию, поэтому их удобно проверять в коде, использовать в условиях и сравнениях, не опасаясь, что пользователь удалит или переименует элемент.
Ниже разобран полный цикл работы: от создания объекта в конфигураторе до обращения к значениям в коде, проверки результата и типичных ошибок, которые приводят к необновляемой конфигурации базы данных или пустым значениям в отчётах.
Когда использовать перечисление, а когда справочник
Главный критерий выбора — кто управляет списком значений. Если набор фиксирован логикой программы (например, виды цен, признаки расчёта, варианты округления) и его изменение требует доработки кода — это перечисление. Если пользователь должен сам добавлять, переименовывать и удалять элементы (номенклатура, контрагенты, склады) — это справочник.
Второй критерий — безопасность ссылок в коде. Значения перечисления нельзя удалить из пользовательского режима, поэтому условия вида «если вид равен такому-то» не сломаются от действий пользователя. Со справочником такая гарантия отсутствует: элемент могут пометить на удаление, и логика отчёта или проведения документа нарушится.
Перечисление или справочник
Подходит для фиксированных наборов: ставки, статусы, виды операций. Значения меняются только в конфигураторе. Ограничение — пользователь не может расширить список.
Подходит для данных, которые ведёт пользователь: номенклатура, контрагенты, договоры. Ограничение — элемент можно удалить или переименовать, что опасно для жёсткой логики в коде.
Подходит, когда нужен расширяемый список с дополнительными типами значений у каждого элемента, например произвольные свойства товаров.
Создание перечисления в конфигураторе
Откройте конфигуратор и разверните дерево конфигурации (меню «Конфигурация — Открыть конфигурацию» или сочетание клавиш). Найдите ветку «Перечисления» в общем списке объектов. Кликните по ней правой кнопкой мыши и выберите «Добавить» — откроется палитра свойств нового объекта.
Задайте имя перечисления. Имя — это идентификатор для обращения из кода: оно пишется латиницей или кириллицей без пробелов, например «СтавкиНДС» или «ВидыОпераций». Синоним заполняется автоматически и отображается пользователю в интерфейсе. Проверьте, чтобы имя не совпадало с именами других объектов конфигурации — дублирование вызовет ошибку при проверке.
- 1Откройте конфигурацию в конфигураторе и найдите ветку «Перечисления»
- 2Правой кнопкой выберите «Добавить», задайте имя и синоним объекта
- 3Перейдите на вкладку «Данные» и добавьте значения перечисления с именами и синонимами
- 4При необходимости настройте формы и представление на вкладках «Формы» и «Представление»
- 5Сохраните конфигурацию и обновите конфигурацию базы данных (F7)
- 6Откройте режим предприятия и проверьте, что значения доступны в полях выбора
Добавление значений перечисления
Значения добавляются на вкладке «Данные» палитры свойств. Нажмите кнопку добавления и введите имя значения — оно тоже является идентификатором для кода, например «НДС20» или «БезНДС». Синоним («20%», «Без НДС») увидит пользователь в выпадающих списках и отчётах.
Продумывайте имена заранее: переименование значения после того, как оно использовано в коде и в сохранённых данных, требует аккуратности. При переименовании платформа обычно корректно обновляет ссылки в модулях через рефакторинг, но строковые обращения и внешние обработки она не отследит — там имя придётся менять вручную.
Для пары «да/нет» и подобных бинарных признаков иногда достаточно типа «Булево». Перечисление оправдано, когда вариантов три и больше либо когда предусмотрено значение «не определено» — булево такого состояния не хранит.
Обновление конфигурации базы данных
Создание объекта в конфигураторе меняет только конфигурацию разработчика. Чтобы перечисление стало доступно пользователям и коду в режиме предприятия, выполните обновление конфигурации базы данных: меню «Конфигурация — Обновить конфигурацию базы данных» или клавиша F7.
При обновлении платформа покажет окно реструктуризации, если изменения затрагивают структуру данных. Для нового перечисления реструктуризация обычно безопасна, но если вы добавили реквизит типа перечисления в существующий документ с большим объёмом данных, обновление на рабочей базе может занять заметное время. На крупных базах такие операции выполняют в нерабочие часы и после резервного копирования.
Использование перечисления в реквизитах и коде
Чтобы связать перечисление с данными, создайте реквизит нужного объекта (документа, справочника, регистра) и укажите тип «ПеречислениеСсылка.ИмяПеречисления». После этого в форме появится поле выбора с выпадающим списком значений.
В коде значения доступны через менеджер перечислений. Типовые приёмы: сравнение значения реквизита с конкретным значением, получение пустой ссылки, перебор всех значений для заполнения списка выбора.
Если Объект.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
СуммаНДС = Сумма * 20 / 120;
КонецЕсли;
ПустаяСтавка = Перечисления.СтавкиНДС.ПустаяСсылка();
Для Каждого Значение Из Перечисления.СтавкиНДС Цикл
СписокВыбора.Добавить(Значение);
КонецЦикла;
Обращение по имени значения работает только если имя задано корректно и конфигурация обновлена. Если код написан до добавления значения, синтаксическая проверка модуля (команда проверки в конфигураторе) сразу укажет на несуществующий идентификатор — не пренебрегайте этой проверкой.
Если Реквизит = Перечисления.ВидыОпераций.Продажа Тогда
// логика для продажи
КонецЕсли;Проверка результата и типичные ошибки
После обновления конфигурации откройте режим предприятия и проверьте три вещи: поле с типом перечисления показывает выпадающий список, в списке присутствуют все добавленные значения с читаемыми синонимами, выбранное значение сохраняется и корректно отображается в отчётах.
Если значение не отображается, чаще всего причина в том, что конфигурация базы данных не обновлена, либо реквизит объекта не был добавлен на форму. Если в отчёте вместо синонима выводится пустота — проверьте, что реквизит заполнен в данных, а не равен пустой ссылке.
Как проверить результат
Выпадающий список содержит все значения с синонимами
Список пуст или поле отсутствует — реквизит не добавлен на форму или конфигурация БД не обновлена
После записи и повторного открытия значение на месте
Значение сбрасывается — возможно, реквизит не связан с данными объекта
Сравнение с Перечисления.Имя.Значение срабатывает
Ошибка «Поле не обнаружено» — значение не создано или имя указано с опечаткой
Ограничения и альтернативы
Перечисление не поддерживает иерархию, дополнительные реквизиты и предопределённые данные в пользовательском смысле. Если каждому варианту нужно хранить дополнительные параметры — например, ставке НДС соответствует числовое значение процента, которое может меняться, — лучше использовать справочник с реквизитами или хранить соответствие в коде.
Ещё одно ограничение — расширяемость. В типовых конфигурациях добавление своего значения в типовое перечисление усложняет обновление: при обновлении на новый релиз возможны конфликты объединения. В таких случаях рассмотрите собственное перечисление либо расширение конфигурации, которое позволяет добавлять значения без изменения основной конфигурации.
Как выбрать действие
Частые вопросы
Может ли пользователь добавить значение в перечисление в режиме предприятия?
Нет. Состав значений перечисления определяется в конфигураторе и меняется только разработчиком с последующим обновлением конфигурации базы данных. Если пользователям нужно расширять список самостоятельно, используйте справочник.
Что произойдёт со старыми документами, если удалить значение перечисления?
Платформа при реструктуризации обнаружит использование значения в данных. В записях, где оно было записано, останется устаревшее значение, которое может отображаться некорректно. Перед удалением найдите все документы и записи с этим значением и замените его на актуальное.
Чем перечисление отличается от предопределённых элементов справочника?
Предопределённые элементы справочника тоже задаются в конфигураторе, но справочник допускает добавление обычных элементов пользователем и хранение реквизитов. Перечисление — полностью закрытый список без дополнительных данных.
Почему в коде возникает ошибка «Поле объекта не обнаружено» при обращении к значению?
Чаще всего значение с таким именем не создано на вкладке «Данные», имя указано с опечаткой, или конфигурация базы данных не обновлена после изменений. Проверьте имя в палитре свойств и выполните обновление по F7.
Можно ли отсортировать значения перечисления в выпадающем списке?
Значения выводятся в порядке, заданном в конфигураторе. Изменить порядок можно кнопками перемещения на вкладке «Данные» палитры свойств перечисления. Программно порядок можно получить перебором значений менеджера перечисления.
Как добавить значение в перечисление типовой конфигурации, не нарушая обновление?
Используйте механизм расширений конфигурации: расширение позволяет добавлять собственные значения в перечисления основной конфигурации без её изменения. Прямое редактирование типового объекта потребует снятия с полной поддержки и усложнит установку обновлений.
Что важно запомнить
Перечисление создаётся в конфигураторе через ветку «Перечисления», значения добавляются на вкладке «Данные», а доступность в режиме предприятия появляется после обновления конфигурации базы данных. Выбирайте перечисление только для фиксированных наборов значений; для редактируемых пользователем списков используйте справочник. Перед удалением или переименованием значений проверяйте их использование в данных и коде.