При разработке инструментов для автоматизации обновления, контроля качества кода или аудита систем часто возникает необходимость узнать: находится ли текущая конфигурация на поддержке и разрешено ли в ней изменение объектов (установлен ли так называемый «замок»). Сложность заключается в том, что в объектной модели Метаданные встроенного языка 1С не предусмотрено прямого свойства или метода вроде КонфигурацияНаЗамке().
В этой статье мы подробно разберем, почему стандартные средства среды исполнения не предоставляют такую информацию, и рассмотрим рабочие способы получения этих данных программным путем, включая пакетный режим работы Конфигуратора и прямой анализ структуры метаданных.
Проанализируем ситуацию со стороны платформы. Среда исполнения (Runtime) предназначена для выполнения скомпилированного кода. Для работы пользователя или выполнения регламентных заданий совершенно не важно, каким образом этот код попал в базу — был ли он загружен из файла поставщика или изменен программистом вручную. Статус «на замке» — это исключительно свойство среды разработки (Конфигуратора), которое регулирует права пользователя на редактирование объектов метаданных.
Именно поэтому стандартный объект Метаданные не содержит нужных нам флагов. Однако эта информация хранится в самой информационной базе. Наша задача — выяснить, как ее извлечь.
Это самый надежный и «законный» способ. Платформа позволяет запускать Конфигуратор в пакетном режиме для выполнения административных действий. Мы воспользуемся возможностью выгрузки конфигурации в файлы XML. Рассмотрим этот процесс по шагам.
Для начала нам необходимо сформировать командную строку для запуска. Основной интерес представляет параметр /DumpConfigToFiles. Проанализируем пример кода на встроенном языке, который инициирует этот процесс:
ПутьККаталогуВыгрузки = "C:\Temp\ConfigXml";
ПутьКЛогу = "C:\Temp\log.txt";
СтрокаЗапуска = """C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe"" DESIGNER "
+ "/S ""ServerName\BaseName"" "
+ "/N ""Admin"" /P ""Password"" "
+ "/DumpConfigToFiles " + ПутьККаталогуВыгрузки + " "
+ "/Out " + ПутьКЛогу + " -NoWait";
ЗапуститьПриложение(СтрокаЗапуска, , Истина);
В данном примере мы запускаем Конфигуратор, который выгружает всю структуру метаданных в указанный каталог. После завершения работы приложения мы можем проанализировать полученные файлы.
После того как выгрузка завершена, нам не нужно перебирать тысячи файлов объектов. Вся информация о поддержке сосредоточена в служебных файлах в корне каталога выгрузки. Разберем их подробнее.
1. Файл ConfigDumpInfo.xml. Этот файл является манифестом выгрузки. В нем содержатся метаданные о самой выгрузке. Нас интересует атрибут isManagedBySupport. Если он установлен в значение true, это первый признак того, что конфигурация связана с конфигурацией поставщика.
2. Файл ParentConfigurations.xml. Рассмотрим содержимое этого файла. Если конфигурация находится на поддержке (даже если разрешены изменения), в этом файле будет описание родительских конфигураций (конфигураций поставщика). Если файл пуст или содержит пустой список, значит, конфигурация полностью снята с поддержки.
3. Поиск признаков «замка». Чтобы определить, разрешено ли изменение конкретных объектов, необходимо заглянуть в XML-описание самого объекта или в общие правила поддержки. В файлах описания объектов (например, Catalog.Товары.xml) за это отвечают маркеры прав доступа и привязки к идентификаторам поставщика. Если объект «на замке», в XML-структуре будут отсутствовать блоки, разрешающие модификацию структуры относительно версии поставщика.
Этот метод считается неофициальным и требует осторожности, так как структура таблиц 1С не документирована и может меняться. Однако он самый быстрый, так как не требует запуска тяжелого Конфигуратора.
Вся конфигурация хранится в таблице Config. Информация о поддержке и правилах редактирования (те самые «замки») хранится в записях с именами (поле FileName), относящимися к поддержке. Проанализируем основные моменты:
DevConfig и Config хранят текущее состояние метаданных.Посмотрим на пример логики запроса (условно):
SELECT [FileName], [DataSize]
FROM [ИмяБазы].[dbo].[Config]
WHERE [FileName] LIKE 'v8support%'
Если такой запрос возвращает данные, значит, в базе как минимум зарегистрированы конфигурации поставщиков. Однако расшифровка бинарного содержимого для определения статуса конкретного «замка» потребует использования специализированных парсеров (например, на базе OneScript).
Если нам нужно выполнять такие проверки регулярно (например, в рамках CI/CD процессов), использование встроенного языка 1С может быть избыточным. Сообщество 1С разработало инструменты на базе OneScript, которые позволяют работать с файлами конфигурации (cf-файлами) как с архивами.
Существуют библиотеки, такие как v8runner, которые позволяют программно запускать пакетные команды и парсить результат. Также можно использовать скрипты, которые читают внутреннюю структуру cf-файла, находят в нем потоки config и configsave и определяют статус поддержки без обращения к SQL или полной выгрузки в XML. Это наиболее современный и эффективный подход для системных администраторов и DevOps-инженеров.
Подведем итоги нашего исследования. Мы выяснили, что программно получить признак «на замке» напрямую через Метаданные невозможно. Однако мы нашли несколько путей решения:
/DumpConfigToFiles и анализируем файл ParentConfigurations.xml. Это гарантирует точность и совместимость с будущими версиями платформы.Config в СУБД, обращая внимание на наличие записей v8support.Выясним причину, по которой вам понадобился этот признак. Если это необходимо для контроля изменений, возможно, стоит рассмотреть переход на использование расширений. В современных версиях платформы 1С (начиная с 8.3.15) многие задачи, требовавшие снятия с поддержки («вскрытия замка»), теперь эффективно решаются через механизмы расширений, что позволяет оставлять основную конфигурацию на полной поддержке поставщика.