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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Ограничения платформы «1С:Предприятие 8»

Выясним сразу: добавить новое значение перечисления непосредственно из встроенного языка 1С в процессе работы пользователей невозможно. Это ограничение заложено в архитектуру платформы.

Проанализируем причины этого ограничения:

  1. Отсутствие метода создания элементов: В отличие от справочников или документов, у объекта ПеречислениеМенеджер нет метода СоздатьЭлемент(). Менеджер перечисления предоставляет доступ к элементам исключительно в режиме чтения.
  2. Изменение схемы метаданных: Перечисления в 1С формируют жесткую структуру типов данных информационной базы. Добавление нового значения перечисления является изменением структуры метаданных конфигурации, что требует эксклюзивной блокировки базы и применения изменений через Конфигуратор.
  3. Ограничения расширений (.cfe): Механизм расширений также не позволяет добавлять новые значения в перечисление, заимствованное из основной конфигурации. В расширении можно лишь создать полностью отдельное новое перечисление.

Опасность прямого изменения таблиц базы данных

Иногда возникают идеи обойти ограничение платформы путем прямого редактирования файла базы данных (файловый вариант 1CD) или внесения записей в таблицы SQL (таблицы вида _Enum). Рассмотрите этот вариант как крайне нежелательный и опасный.

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

Автоматизация добавления значений на этапе разработки

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

1. Выгрузка и загрузка файлов конфигурации через пакетный режим

Посмотрим, как автоматизировать создание элементов метаданных без ручного кликанья в Конфигураторе:

  1. Выгружаем исходные файлы конфигурации в XML-каталог с помощью пакетного запуска Конфигуратора с ключом /DumpConfigToFiles.
  2. Программно модифицируем XML-файл нужного перечисления, добавляя теги <EnumValue> с помощью внешнего скрипта (например, Python, PowerShell или OneScript).
  3. Загружаем измененные файлы обратно в конфигурацию с помощью ключа /LoadConfigFromFiles и обновляем конфигурацию базы данных ключом /UpdateDBCfg.

2. Использование утилит EDT (Enterprise Development Tools)

Если проект разрабатывается в 1C:EDT, структура метаданных изначально хранится в виде каталогов и XML-файлов. Добавление элементов перечисления можно легко встроить в пайплайны CI/CD, используя консольные утилиты ibcmd или ring.

Альтернативные архитектурные решения

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

1. Справочник с предопределенными элементами

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


// Обращение к предопределенному элементу справочника
СтатусЗаказа = Справочники.СтатусыЗаказов.Оплачен;

Если требуется добавить новый статус в режиме исполнения, система легко позволяет создать его программно:


НовыйСтатус = Справочники.СтатусыЗаказов.СоздатьЭлемент();
НовыйСтатус.Наименование = "Передан в доставку";
НовыйСтатус.Записать();

2. Регистры сведений и Планы видов характеристик

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

← На главную