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