Как программно определить режим поддержки объекта метаданных в 1С?

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

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

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

Способ 1. Анализ файлов выгрузки конфигурации

Самый доступный способ — проанализировать файлы, которые генерирует конфигуратор при выполнении команды «Конфигурация — Разработка конфигурации — Выгрузить конфигурацию в файлы» — для этой задачи есть программа анализа метаданных конфигурации по XML-выгрузке. Рассмотрим структуру выгрузки подробнее.

Основная информация о правилах поддержки сосредоточена в файле Ext\ParentConfigurations.bin. Несмотря на расширение .bin, в большинстве случаев это текстовый файл, использующий внутренний формат сериализации данных 1С. Если мы откроем его, то увидим иерархическую структуру, описывающую связи между основной конфигурацией и конфигурациями поставщиков.

Разберем внутреннюю структуру этого файла. После заголовка в нем следуют блоки (четверки значений), которые описывают состояние каждого объекта:

  1. Код состояния (Код 1): именно он определяет правило поддержки.
  2. Вспомогательный код (Код 2).
  3. UUID объекта основной конфигурации: уникальный идентификатор, по которому можно сопоставить запись с конкретным справочником или документом.
  4. UUID объекта конфигурации поставщика.

Проанализируем значения Кода 1, которые являются ключевыми для нашей задачи:

Для автоматизации этого процесса мы можем использовать пакетный запуск конфигуратора. Рассмотрим пример команды для выгрузки:


// Пример командной строки для получения файлов метаданных
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /F "ПутьКБазе" /N "Логин" /P "Пароль" /DumpConfigToFiles "C:\DumpDir" -Format Hierarchical

После выполнения этой команды нам остается лишь написать парсер для файла ParentConfigurations.bin, который сопоставит UUID объектов из файлов описания (например, Catalogs\Справочник1.xml) с правилами из файла поддержки.

Способ 2. Извлечение данных напрямую из SQL-таблиц

Если база данных работает в клиент-серверном варианте, мы можем получить данные значительно быстрее, не прибегая к полной выгрузке конфигурации в файлы. Вся информация о метаданных хранится в системной таблице Config — её извлечение ускоряет обработка для низкоуровневого анализа SQL-таблиц 1С.

Выясним, как найти нужную запись. Нас интересуют строки, где в поле FileName указано значение ParentConfigurations. Важно помнить, что в поле BinaryData данные хранятся в сжатом виде (алгоритм zlib/deflate). Чтобы прочитать их программно, необходимо выполнить следующие шаги:

  1. Выполнить SQL-запрос к таблице Config для получения бинарных данных.
  2. Распаковать полученный поток байтов (пропустить заголовок, если он есть, и использовать стандартные библиотеки декомпрессии).
  3. Преобразовать результат в текстовую строку и распарсить её по аналогии со способом №1.

Посмотрим на пример структуры данных после распаковки. Мы увидим дерево идентификаторов. Каждый объект метаданных в 1С имеет внутренний UUID. Ваша задача — найти этот UUID в распакованном тексте и считать стоящую перед ним цифру (0, 1 или 2).

Способ 3. Использование OneScript и готовых библиотек

Если задача стоит остро и нет желания писать парсер «с нуля», стоит рассмотреть инструменты сообщества — есть инструмент для глубокого анализа структуры метаданных и системы. Для среды OneScript существуют библиотеки (например, v8reader или инструменты для работы с gitsync), которые уже умеют разбирать внутренние форматы 1С.

Рассмотрим алгоритм работы такого скрипта:

  1. Скрипт подключается к базе или берет готовую выгрузку.
  2. Использует штатные механизмы разбора ParentConfigurations.bin.
  3. Формирует таблицу соответствий: ИмяОбъекта - UUID - СтатусПоддержки.

Нюансы, которые важно учитывать

Проанализируем ситуацию с расширениями конфигурации. Если объект в основной конфигурации стоит на «замке» (код 0), но при этом он заимствован в расширение и там изменен, программная проверка основной конфигурации всё равно вернет «0». Это может ввести в заблуждение, так как фактически логика объекта изменена. Для получения полной картины необходимо также анализировать метаданные активных расширений, которые хранятся в той же таблице Config, но с другими префиксами в именах файлов.

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

Таким образом, хотя прямого метода в языке 1С нет, задача решается через низкоуровневый анализ служебных данных. Наиболее надежным и быстрым методом для разработчика является чтение таблицы Config с последующей декомпрессией и парсингом текстового содержимого по UUID объектов.

← На главную