При разработке и автоматизации различных процессов у специалистов 1С периодически возникает задача динамического или программного создания новых объектов метаданных — справочников, документов или регистров — непосредственно из кода или сторонних скриптов. Рассмотрим подробнее, позволяет ли платформа 1С:Предприятие создавать типы метаданных «на лету» и какие существуют технические решения и альтернативные архитектурные подходы.
Проанализируем базовое устройство платформы 1С. Во встроенном языке глобальный объект Метаданные доступен исключительно в режиме «только чтение». В режиме «1С:Предприятие» не существует прямых методов или конструкторов вида Справочники.СоздатьНовыйТип() для добавления новых видов метаданных прямо во время работы пользователей.
Создание любого нового объекта метаданных влечет за собой изменение схемы реляционных таблиц базы данных СУБД. Процедура реструктуризации базы данных требует применения изменений структуры конфигурации и монопольного доступа к информационной базе (либо использования специальных механизмов фонового обновления).
Выясним, как обойти ограничение и выполнить задачу автоматизировано. Платформа 1С поддерживает полноценный пакетный режим работы через ключи командной строки Конфигуратора. С его помощью можно организовать автоматический процесс формирования метаданных по следующему алгоритму:
/DumpConfigToFiles структура основной конфигурации (или ключа /DumpCustomisationToFile для расширения) выгружается в каталог в виде набора XML-файлов и манифеста./LoadConfigFromFiles (или /LoadCustomisationFromFile) измененные файлы загружаются обратно, а ключ /UpdateDBCfg запускает процедуру обновления структуры базы данных.Пример команды для запуска Конфигуратора в пакетном режиме из внешнего скрипта:
// Выгрузка конфигурации в файлы
1cv8.exe DESIGNER /IBConnectionString "File=""C:\Base1C"";" /N "Администратор" /P "Пароль" /DumpConfigToFiles "C:\ConfigFiles"
// Загрузка обновленной структуры и обновление базы данных
1cv8.exe DESIGNER /IBConnectionString "File=""C:\Base1C"";" /N "Администратор" /P "Пароль" /LoadConfigFromFiles "C:\ConfigFiles" /UpdateDBCfg
Разберем еще один технологический подход. Если новые объекты метаданных подготавливаются в виде файла расширения (.cfe), его можно установить программно из встроенного языка 1С без перезапуска всей конфигурации в режиме Конфигуратора.
Для этого в режиме «1С:Предприятие» используется объект МенеджерРасширенийКонфигурации и его метод УстановитьРасширениеКонфигурации. Посмотрим на пример кода:
ДвоичныеДанныеРасширения = Новый ДвоичныеДанные("C:\Extensions\MyNewMetadata.cfe");
// Установка или обновление расширения из кода 1С
НовоеРасширение = МенеджерРасширенийКонфигурации.УстановитьРасширениеКонфигурации(ДвоичныеДанныеРасширения);
НовоеРасширение.Записать();
Важно учитывать, что для работы расширения, создающего новые таблицы базы данных, также может потребоваться сеансовый перезапуск или выполнение реструктуризации.
Если задача заключается в том, чтобы дать пользователям возможность динамически добавлять новые типы данных и реквизиты без изменения конфигурации и остановки работы, оптимально использовать архитектурные шаблоны проектирования 1С:
Таким образом, прямое создание метаданных встроенным языком в режиме «1С:Предприятие» невозможно, однако задача успешно решается через пакетный режим работы Конфигуратора, программную загрузку расширений или использование Планов видов характеристик.