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

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

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

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

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

Перечисления применяют там, где набор вариантов стабилен и участвует в логике программы. Если в коде нужно сравнивать значение с конкретным вариантом (Если Статус = Перечисления.СтатусыЗаказа.Отгружен Тогда), перечисление подходит идеально: значения доступны через менеджер объекта и проверяются на этапе компиляции модуля.

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

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

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

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

Практическое правило: если в модуле предполагается проверка вида Если Значение = Перечисления.ВидОперации.Вариант, нужно перечисление. Если пользователь просит «добавить ещё один вариант в список» без привлечения программиста — нужен справочник.

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

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

Фиксированный набор значений, участвует в логике кода, меняется только через конфигуратор. Нельзя добавить реквизиты к значениям.

Справочник

Пользователь сам добавляет элементы, доступны реквизиты, иерархия и предопределённые элементы. Требует аккуратности при сравнении в коде — лучше использовать предопределённые элементы.

План видов характеристик

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

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

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

Откроется палитра свойств нового объекта. На закладке «Основные» задайте имя — оно будет использоваться в коде, поэтому должно быть без пробелов, начинаться с буквы и отражать смысл (например, ВидыДоговоров). Синоним заполнится автоматически и будет показан пользователям в интерфейсе.

На закладке «Данные» нажмите «Добавить» и введите значения перечисления. У каждого значения есть имя (для кода) и синоним (для интерфейса). Порядок значений определяет порядок их отображения в выпадающих списках — при необходимости перемещайте строки кнопками со стрелками.

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

Настройка свойств и представления

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

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

Если конфигурация многоязычная, синонимы можно задать для каждого языка, подключённого в ветке «Общие → Языки». Платформа подставит представление по языку сеанса пользователя.

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

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

Тот же тип можно назначить измерению или ресурсу регистра сведений, критерию отбора, параметру отчёта на СКД. В запросах значение перечисления передаётся как параметр: &Статус, а сам параметр устанавливается через Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыЗаказа.Отгружен).

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

Обращение к перечислению из кода

Во встроенном языке значения перечисления доступны через менеджер: Перечисления.ВидыДоговоров.СПокупателем. Такая конструкция возвращает ссылку на значение, которую можно присваивать реквизитам, сравнивать и сохранять в базе.

Часто нужны смежные задачи: получить синоним значения для вывода пользователю, перебрать все значения, проверить заполненность. Для синонима используйте метаданные: Метаданные.Перечисления.ВидыДоговоров.ЗначенияПеречисления.СПокупателем.Синоним. Для проверки пустого значения сравнивайте с Перечисления.ВидыДоговоров.ПустаяСсылка().

bsl
// Присвоение и сравнение
Документ.ВидДоговора = Перечисления.ВидыДоговоров.СПокупателем;

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

// Перебор всех значений
Для Каждого Значение Из Метаданные.Перечисления.ВидыДоговоров.ЗначенияПеречисления Цикл
  Сообщить(Значение.Синоним);
КонецЦикла;

В запросах перечисление сравнивается напрямую с параметром-ссылкой. Важно не передавать в запрос строковое представление значения — сравнение по строке не сработает, потому что в базе хранится ссылка на значение перечисления, а не текст.

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

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

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

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

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

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

Список значений в форме
Норма

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

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

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

Сохранение объекта
Норма

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

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

Значение очищается или выдаётся ошибка типа

Работа кода и запросов
Норма

Сравнение с Перечисления.Имя.Значение срабатывает, отбор в запросе фильтрует записи

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

Условие никогда не выполняется, запрос возвращает пустой результат

Обновление конфигурации БД
Норма

Реструктуризация проходит без ошибок и предупреждений о ссылках

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

Сообщения об удаляемых значениях, на которые есть ссылки

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

Самая частая ошибка — попытка использовать перечисление там, где нужен справочник. Как только бизнес-пользователь просит «добавить ещё один статус без программиста», приходится мигрировать данные из перечисления в справочник, что требует конвертации всех записей.

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

Типичные ошибки
01
Сравнение значения перечисления со строкой "Отгружен" вместо ссылки — условие никогда не выполняется
02
Использование перечисления для списка, который должен пополнять пользователь, — приводит к переделке и конвертации данных
03
Удаление значения, на которое есть ссылки в документах, — появляются битые ссылки <Объект не найден>
04
Отсутствие проверки на ПустаяСсылка() — алгоритм обрабатывает незаполненный реквизит как обычное значение
05
Забытое обновление конфигурации базы данных — объект виден в конфигураторе, но недоступен в режиме предприятия

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

Итог

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

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

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

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

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

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

Через метаданные: Метаданные.Перечисления.ИмяПеречисления.ЗначенияПеречисления.ИмяЗначения.Синоним. В простых случаях достаточно функции Строка(Значение) — она вернёт представление значения для текущего языка сеанса.

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

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

Можно ли отсортировать значения перечисления по алфавиту?

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

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

Передайте значение как параметр: Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыЗаказа.Отгружен), а в тексте запроса сравнивайте поле с параметром. Не передавайте строковое представление — сравнение со строкой не сработает, так как в базе хранится ссылка.

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

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