В процессе разработки часто возникает необходимость заполнить массив данных или добавить новые позиции в классификатор. Разберем ситуацию, когда разработчик пытается добавить новое значение в объект Перечисление с помощью программного кода в режиме «1С:Предприятие».
Выясним сразу: добавить новое значение перечисления непосредственно из встроенного языка 1С в процессе работы пользователей невозможно. Это ограничение заложено в архитектуру платформы.
Проанализируем причины этого ограничения:
ПеречислениеМенеджер нет метода СоздатьЭлемент(). Менеджер перечисления предоставляет доступ к элементам исключительно в режиме чтения.Иногда возникают идеи обойти ограничение платформы путем прямого редактирования файла базы данных (файловый вариант 1CD) или внесения записей в таблицы SQL (таблицы вида _Enum). Рассмотрите этот вариант как крайне нежелательный и опасный.
Прямое вмешательство в таблицы базы данных приводит к рассогласованию структуры метаданных и физических таблиц. В результате информационная база с высокой долей вероятности будет разрушена, а при первой же попытке реструктуризации из Конфигуратора возникнет критическая ошибка.
Если задача заключается в том, чтобы единоразово добавить большой массив значений перечисления и сэкономить время на ручном вводе в Конфигураторе, разберем штатные варианты автоматизации процесса сборки.
1. Выгрузка и загрузка файлов конфигурации через пакетный режим
Посмотрим, как автоматизировать создание элементов метаданных без ручного кликанья в Конфигураторе:
/DumpConfigToFiles.<EnumValue> с помощью внешнего скрипта (например, Python, PowerShell или OneScript)./LoadConfigFromFiles и обновляем конфигурацию базы данных ключом /UpdateDBCfg.2. Использование утилит EDT (Enterprise Development Tools)
Если проект разрабатывается в 1C:EDT, структура метаданных изначально хранится в виде каталогов и XML-файлов. Добавление элементов перечисления можно легко встроить в пайплайны CI/CD, используя консольные утилиты ibcmd или ring.
Проанализируем задачу с точки зрения правильного проектирования системы. Если список значений должен динамически расширяться пользователями или программно в режиме исполнения, использование перечисления изначально является ошибочным решением. В этом случае следует применить альтернативные объекты метаданных.
1. Справочник с предопределенными элементами
Это наиболее подходящая замена перечислению. В Конфигураторе создаются базовые предопределенные элементы, к которым в коде можно обращаться напрямую:
// Обращение к предопределенному элементу справочника
СтатусЗаказа = Справочники.СтатусыЗаказов.Оплачен;
Если требуется добавить новый статус в режиме исполнения, система легко позволяет создать его программно:
НовыйСтатус = Справочники.СтатусыЗаказов.СоздатьЭлемент();
НовыйСтатус.Наименование = "Передан в доставку";
НовыйСтатус.Записать();
2. Регистры сведений и Планы видов характеристик
Если значения служат динамической моделью статусов, типом для дополнительных реквизитов или классификатором, требующим хранения сопутствующих настроек, разберите варианты с использованием регистра сведений или плана видов характеристик (ПВХ). Они дают полную свободу создания элементов во время работы пользователей без необходимости менять структуру конфигурации.