При разработке инструментов для автоматизированного аудита конфигураций (поможет инструмент архитектурного анализа конфигураций и расширений), построения отчетов о кастомизации или механизмов автоматического обновления часто возникает задача программно определить статус поддержки конкретного объекта метаданных. К сожалению, стандартный встроенный язык 1С не предоставляет прямого метода вроде ОбъектМетаданных.РежимПоддержки(). Однако эта информация хранится в служебных структурах платформы, и мы можем извлечь её несколькими способами.
В этой статье мы подробно разберем, где именно платформа прячет настройки поддержки, как расшифровать формат этих данных и какими способами можно автоматизировать получение этой информации в клиент-серверных и файловых вариантах баз данных — для этого подойдёт инструмент для поиска и анализа объектов конфигурации.
Самый доступный способ — проанализировать файлы, которые генерирует конфигуратор при выполнении команды «Конфигурация — Разработка конфигурации — Выгрузить конфигурацию в файлы» — для этой задачи есть программа анализа метаданных конфигурации по XML-выгрузке. Рассмотрим структуру выгрузки подробнее.
Основная информация о правилах поддержки сосредоточена в файле Ext\ParentConfigurations.bin. Несмотря на расширение .bin, в большинстве случаев это текстовый файл, использующий внутренний формат сериализации данных 1С. Если мы откроем его, то увидим иерархическую структуру, описывающую связи между основной конфигурацией и конфигурациями поставщиков.
Разберем внутреннюю структуру этого файла. После заголовка в нем следуют блоки (четверки значений), которые описывают состояние каждого объекта:
Проанализируем значения Кода 1, которые являются ключевыми для нашей задачи:
Для автоматизации этого процесса мы можем использовать пакетный запуск конфигуратора. Рассмотрим пример команды для выгрузки:
// Пример командной строки для получения файлов метаданных
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /F "ПутьКБазе" /N "Логин" /P "Пароль" /DumpConfigToFiles "C:\DumpDir" -Format Hierarchical
После выполнения этой команды нам остается лишь написать парсер для файла ParentConfigurations.bin, который сопоставит UUID объектов из файлов описания (например, Catalogs\Справочник1.xml) с правилами из файла поддержки.
Если база данных работает в клиент-серверном варианте, мы можем получить данные значительно быстрее, не прибегая к полной выгрузке конфигурации в файлы. Вся информация о метаданных хранится в системной таблице Config — её извлечение ускоряет обработка для низкоуровневого анализа SQL-таблиц 1С.
Выясним, как найти нужную запись. Нас интересуют строки, где в поле FileName указано значение ParentConfigurations. Важно помнить, что в поле BinaryData данные хранятся в сжатом виде (алгоритм zlib/deflate). Чтобы прочитать их программно, необходимо выполнить следующие шаги:
Config для получения бинарных данных.Посмотрим на пример структуры данных после распаковки. Мы увидим дерево идентификаторов. Каждый объект метаданных в 1С имеет внутренний UUID. Ваша задача — найти этот UUID в распакованном тексте и считать стоящую перед ним цифру (0, 1 или 2).
Если задача стоит остро и нет желания писать парсер «с нуля», стоит рассмотреть инструменты сообщества — есть инструмент для глубокого анализа структуры метаданных и системы. Для среды OneScript существуют библиотеки (например, v8reader или инструменты для работы с gitsync), которые уже умеют разбирать внутренние форматы 1С.
Рассмотрим алгоритм работы такого скрипта:
ParentConfigurations.bin.ИмяОбъекта - UUID - СтатусПоддержки.Проанализируем ситуацию с расширениями конфигурации. Если объект в основной конфигурации стоит на «замке» (код 0), но при этом он заимствован в расширение и там изменен, программная проверка основной конфигурации всё равно вернет «0». Это может ввести в заблуждение, так как фактически логика объекта изменена. Для получения полной картины необходимо также анализировать метаданные активных расширений, которые хранятся в той же таблице Config, но с другими префиксами в именах файлов.
Также стоит помнить о множественной поддержке. В современных версиях платформы 8.3 конфигурация может находиться на поддержке одновременно у нескольких поставщиков (например, отраслевое решение на базе БП). В этом случае файл ParentConfigurations.bin будет содержать несколько секций для разных родительских конфигураций. Программный код должен учитывать иерархию и понимать, по какому именно поставщику проверяется статус.
Таким образом, хотя прямого метода в языке 1С нет, задача решается через низкоуровневый анализ служебных данных. Наиболее надежным и быстрым методом для разработчика является чтение таблицы Config с последующей декомпрессией и парсингом текстового содержимого по UUID объектов.