Перечисление в конфигураторе 1С 8.3: создание, значения, код и формы
Содержание
Перечисление в 1С делают только в конфигураторе: в дереве метаданных откройте ветку Перечисления, нажмите «Добавить», задайте имя и на вкладке «Данные» внесите значения. Затем обновите конфигурацию базы данных (F7). Пользователь в режиме 1С:Предприятие новое значение добавить не сможет — и это не недостаток, а суть объекта.
Частая ошибка новичков — заводить перечисление там, где нужен справочник, а потом месяцами просить программиста «добавить ещё один вид». Ниже — как создать и настроить перечисление, как к нему обращаться в коде и запросах и как показать его на форме. Всё относится к платформе 8.3 и не зависит от конфигурации: в БП, ЗУП и УТ механизм одинаковый.
Перечисление или справочник: что выбрать
Перечисление — это фиксированный список значений, который задаёт разработчик. В базе хранятся только ссылки на эти значения, без реквизитов и без иерархии.
Справочник — список, который пополняют пользователи. У элемента есть код, наименование, реквизиты, табличные части, группы.
| Признак | Перечисление | Справочник |
|---|---|---|
| Кто добавляет значения | Только разработчик в конфигураторе | Пользователь в 1С:Предприятии |
| Реквизиты у значения | Нет, только имя и синоним | Сколько угодно |
| Иерархия | Нет | Есть (группы или элементы) |
| Пометка удаления | Нет | Есть |
| Порядок значений | Задаётся в конфигураторе | По коду, наименованию или реквизиту |
| Где опираться в коде | Можно смело писать Перечисления.ВидыОплаты.Наличные | Только на предопределённые элементы |
Берите перечисление, когда:
- ✅ от значения зависит логика программы — проведение, расчёт, видимость полей;
- ✅ список стабилен годами: «Наличные / Безналичные», «Мужской / Женский», «Приход / Расход»;
- ✅ значению не нужны свои свойства — ставка, счёт, срок.
Берите справочник, когда:
- ❌ пользователи захотят дополнять список сами;
- ❌ каждому значению нужен реквизит (например, у вида оплаты — счёт учёта);
- ❌ список различается от базы к базе.
Промежуточный вариант — справочник с предопределёнными элементами. Код на них опирается так же надёжно, а пользователи могут добавлять свои элементы и заполнять реквизиты.
Как создать перечисление в конфигураторе 1С
Шаг 1. Откройте конфигурацию
- Запустите базу в режиме «Конфигуратор».
- Откройте дерево метаданных:
Конфигурация → Открыть конфигурацию. - Если конфигурация типовая и стоит на поддержке, перечисление в основную конфигурацию добавить нельзя, пока не включена возможность изменения. Правильнее создать его в расширении (
Конфигурация → Расширения конфигурации) — тогда обновления типовой не потеряют вашу доработку.
Перед изменением рабочей базы сделайте выгрузку .dt или проверьте, что есть свежая резервная копия.
Шаг 2. Добавьте объект
- Найдите в дереве ветку Перечисления — она на верхнем уровне, рядом со справочниками и документами.
- Выделите её и нажмите «Добавить» на панели дерева или клавишу
Insert. Можно через контекстное меню. - Откроется окно редактирования нового объекта.
Шаг 3. Заполните имя и синоним
На вкладке «Основные»:
- Имя — идентификатор для кода:
ВидыОплаты,СтатусыЗаявок. Без пробелов, начинается с буквы. Принято писать во множественном числе. - Синоним — то, что видит пользователь: «Виды оплаты». Платформа подставит его сама по имени, но проверьте падежи и пробелы.
- Комментарий — для коллег-разработчиков, пользователю не виден.
Шаг 4. Внесите значения
Перейдите на вкладку «Данные». В списке значений перечисления нажмите «Добавить» и заполните для каждого значения имя и синоним. Подробности — в следующем разделе.
Шаг 5. Привяжите к подсистеме и сохраните
- На вкладке «Подсистемы» отметьте раздел, в котором перечисление должно быть видно. Отдельная команда для перечисления в интерфейсе обычно не нужна — оно появляется в полях документов и справочников.
- Закройте окно и выполните
Конфигурация → Обновить конфигурацию базы данных(F7). - Платформа покажет список изменений. Подтвердите — новое перечисление появится в базе.
Шаг 6. Используйте перечисление как тип реквизита
Само по себе перечисление ничего не хранит. Чтобы им пользовались, добавьте реквизит в документ, справочник или регистр и в свойстве «Тип» выберите ПеречислениеСсылка.ВидыОплаты. После этого в форме объекта появится поле с выпадающим списком значений.
Значения перечисления: имя, синоним, порядок
У каждого значения три свойства:
| Свойство | Для чего | Пример |
|---|---|---|
| Имя | Обращение из кода и запросов | БанковскаяКарта |
| Синоним | Отображение пользователю | «Банковская карта» |
| Комментарий | Пояснение для разработчиков | «Эквайринг, терминал в зале» |
Порядок значений
Порядок в списке на вкладке «Данные» — это порядок, в котором пользователь видит значения в выпадающем списке. По нему же сортирует запрос с УПОРЯДОЧИТЬ ПО по полю-перечислению. Меняйте его кнопками перемещения вверх и вниз над списком.
Ставьте первым самое частое значение. Если хотите, чтобы поле заполнялось по умолчанию, задайте значение заполнения у реквизита — порядок для этого не нужен.
Переименование и удаление
- Переименовать имя значения можно: ссылки в данных сохранятся, потому что база хранит внутренний идентификатор, а не имя. Но весь код и запросы со старым именем перестанут работать. Перед переименованием найдите все вхождения глобальным поиском (
Ctrl+Shift+F) и исправьте их вместе. - Изменить синоним безопасно: меняется только отображение.
- Удалить значение опасно. Если оно уже записано в документах, эти реквизиты превратятся в битые ссылки и покажут
<Объект не найден>.
Прежде чем удалить значение, найдите, где оно используется: глобальный поиск по имени в модулях (Ctrl+Shift+F) и запрос к таблицам, где реквизит имеет этот тип. Значения, которые уже в данных, лучше перевести в «устаревшие» синонимом («(не использовать) Чек») и скрыть из выбора на формах.
Свойства перечисления, которые стоит настроить
Большинство свойств можно оставить по умолчанию. Обратите внимание на эти:
- 🔹 Быстрый выбор — по умолчанию включён. Значения показываются выпадающим списком прямо в поле, без открытия формы выбора. Для списка из 3–15 значений это то, что нужно.
- 🔹 Формы — у перечисления есть стандартные формы списка и выбора, создавать свои почти никогда не требуется. Своя форма выбора нужна, если значений много и пользователю нужна подсказка или фильтр.
- 🔹 Функциональные опции — позволяют скрывать перечисление вместе с выключенной функциональностью.
Как обращаться к перечислению в коде 1С
Получить значение
На сервере значение берут через менеджер перечисления:
ВидОплаты = Перечисления.ВидыОплаты.Наличные;
Если Объект.ВидОплаты = Перечисления.ВидыОплаты.БанковскаяКарта Тогда
Объект.ПроцентЭквайринга = 1.8;
КонецЕсли;
В клиентском коде формы надёжнее функция ПредопределенноеЗначение — она работает в любом контексте:
&НаКлиенте
Процедура ВидОплатыПриИзменении(Элемент)
Элементы.НомерКарты.Видимость =
(Объект.ВидОплаты = ПредопределенноеЗначение("Перечисление.ВидыОплаты.БанковскаяКарта"));
КонецПроцедуры
Проверить, что поле заполнено
Пустое значение — это Перечисления.ВидыОплаты.ПустаяСсылка(). Короче и понятнее проверять так:
Если Не ЗначениеЗаполнено(Объект.ВидОплаты) Тогда
ОбщегоНазначения.СообщитьПользователю("Не указан вид оплаты");
КонецЕсли;
ОбщегоНазначения есть в конфигурациях на БСП. В самописной базе используйте Сообщить() или объект СообщениеПользователю.
Получить имя значения
Строка(Значение) вернёт синоним — то, что видит пользователь. Для обмена и логов нужно имя. Два рабочих способа:
// 1. Через XML-представление: вернёт имя значения или пустую строку для пустой ссылки
ИмяЗначения = XMLСтрока(Объект.ВидОплаты);
// 2. Через метаданные и индекс
Индекс = Перечисления.ВидыОплаты.Индекс(Объект.ВидОплаты);
ИмяЗначения = Метаданные.Перечисления.ВидыОплаты.ЗначенияПеречисления[Индекс].Имя;
Обратная задача — значение по имени, пришедшему из файла: Перечисления.ВидыОплаты[ИмяЗначения]. Если имени нет, будет ошибка, поэтому сначала проверьте его по метаданным.
Перебрать все значения
Для Каждого МетаЗначение Из Метаданные.Перечисления.ВидыОплаты.ЗначенияПеречисления Цикл
Значение = Перечисления.ВидыОплаты[МетаЗначение.Имя];
Сообщить(МетаЗначение.Имя + " — " + МетаЗначение.Синоним);
КонецЦикла;
Так удобно заполнять список выбора, строить отчёт по всем статусам или проверять, что для каждого значения заведена настройка.
Перечисления в запросах
В тексте запроса конкретное значение задают функцией ЗНАЧЕНИЕ:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Заявка.Ссылка,
| Заявка.Статус
|ИЗ
| Документ.Заявка КАК Заявка
|ГДЕ
| Заявка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаявок.ВРаботе)
|УПОРЯДОЧИТЬ ПО
| Заявка.Статус";
Пустое значение в запросе — ЗНАЧЕНИЕ(Перечисление.СтатусыЗаявок.ПустаяСсылка).
Если значение выбирает пользователь, передавайте его параметром:
Запрос.Текст = "... ГДЕ Заявка.Статус В (&Статусы)";
Запрос.УстановитьПараметр("Статусы", СписокСтатусов);
Три приёма, которые пригодятся:
- Таблица самого перечисления. К перечислению можно обратиться как к таблице
Перечисление.СтатусыЗаявокс полямиСсылкаиПорядок. Это нужно, когда в отчёте должны быть все статусы, даже без документов: соедините таблицу перечисления с данными левым соединением. - Сортировка.
УПОРЯДОЧИТЬ ПОпо полю-перечислению идёт в порядке значений из конфигуратора, а не по алфавиту синонимов. - Опечатка ловится сразу. Если имя в
ЗНАЧЕНИЕ()написано с ошибкой, запрос не выполнится при первом же вызове. В отличие от строки-параметра, такая ошибка не останется незамеченной.
Не сравнивайте перечисление со строкой вида Заявка.Статус = "В работе". Это синоним, его могут поправить, а запрос молча перестанет находить записи.
Перечисление на форме: выпадающий список и переключатель
Когда вы перетаскиваете реквизит с типом перечисления на управляемую форму, платформа создаёт поле ввода с выпадающим списком. Его можно переделать под задачу.
Варианты отображения
| Вид поля | Когда подходит | Как настроить |
|---|---|---|
| Поле ввода с выпадающим списком | Значений больше 4, поле не главное | По умолчанию, ничего делать не нужно |
| Поле переключателя (радиокнопки) | 2–4 значения, выбор важен и должен быть виден | В свойствах элемента формы «Вид» → поле переключателя |
| Переключатель в виде тумблера | 2–3 значения, компактная панель | У поля переключателя вид «Тумблер» |
Ограничить список значений
Бывает, что в конкретном документе часть значений недопустима. Ограничьте список выбора в обработчике ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.ВидОплаты.СписокВыбора.Очистить();
Элементы.ВидОплаты.СписокВыбора.Добавить(Перечисления.ВидыОплаты.Наличные);
Элементы.ВидОплаты.СписокВыбора.Добавить(Перечисления.ВидыОплаты.БанковскаяКарта);
КонецПроцедуры
Так же скрывают «устаревшие» значения, которые удалять нельзя из-за старых документов.
Обязательность заполнения
Чтобы документ не записывался с пустым видом оплаты, у реквизита в конфигураторе установите «Проверка заполнения» → «Выдавать ошибку». Поле на форме подсветится, а при записи платформа сама выдаст сообщение. Писать проверку кодом не нужно.
Ошибки при работе с перечислениями и как их исправить
Ещё одна ловушка — значение, которое «в коде есть, а на клиенте не работает». Обычно в клиентской процедуре обратились к серверным данным. Используйте ПредопределенноеЗначение, как в примере выше, или перенесите проверку на сервер.
Частые вопросы
Можно ли добавить значение перечисления из режима 1С:Предприятие?
Можно ли добавить реквизит к значению перечисления, например процент?
Как узнать, сколько значений в перечислении?
Метаданные.Перечисления.ВидыОплаты.ЗначенияПеречисления.Количество().Чем перечисление отличается от системного перечисления?
ВидДвиженияНакопления или РежимЗаписиДокумента, встроены в платформу. Их нельзя изменить, и в дереве метаданных их нет.