Как программно получить свойства и метаданные расширения в 1С?

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

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

Почему объект Метаданные не видит расширения?

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

Шаг 1: Получение объекта расширения

Для начала работы нам необходимо найти нужное расширение в списке подключенных. Для этого мы будем использовать ConfigurationExtensions. Чтобы исключить ошибки и обращения к неверным элементам, рекомендуется использовать отбор по имени расширения. Рассмотрим пример получения расширения с именем «Лайка»:


ДанныеРасширения = ConfigurationExtensions.Get(Новый Структура("Name", "Лайка"));
Если ЗначениеЗаполнено(ДанныеРасширения) Тогда
    // Расширение найдено, работаем с ним
    ЦелевоеРасширение = ДанныеРасширения[0];
КонецЕсли;

Обратите внимание: мы используем структуру для отбора, так как имена расширений уникальны в рамках одной базы данных. Это наиболее безопасный способ работы.

Шаг 2: Получение метаданных расширения

После того как мы получили объект расширения, нам нужно извлечь его структуру. Для этого используется метод GetData(), который возвращает двоичные данные, а затем конструктор ConfigurationMetadataObject, позволяющий превратить эти данные в объект, с которым можно работать как с обычной структурой метаданных.


// Получаем метаданные расширения
МетаданныеРасширения = Новый ConfigurationMetadataObject(ЦелевоеРасширение.GetData());

// Теперь мы можем перебирать объекты внутри расширения
Для каждого ЭлементРасширения из МетаданныеРасширения.Справочники Цикл
    Сообщить("Справочник: " + ЭлементРасширения.Имя + ", Синоним: " + ЭлементРасширения.Синоним);
КонецЦикла;

Шаг 3: Практический пример функции

Для удобства разработки лучше оформить поиск объектов расширения в отдельную функцию. Рассмотрим пример кода, который возвращает массив структур с именами и синонимами справочников, созданных внутри расширения:


Функция ПолучитьСписокСправочниковРасширения(ИмяРасширения) Экспорт
    Результат = Новый Массив;
    ДанныеРасширения = ConfigurationExtensions.Get(Новый Структура("Name", ИмяРасширения));
    
    Если НЕ ЗначениеЗаполнено(ДанныеРасширения) Тогда
        Возврат Результат;
    КонецЕсли;
    
    МетаданныеРасширения = Новый ConfigurationMetadataObject(ДанныеРасширения[0].GetData());
    
    Для каждого ЭлементРасширения из МетаданныеРасширения.Справочники Цикл
        // Проверяем принадлежность объекта к расширению
        Если Строка(ЭлементРасширения.ПринадлежностьОбъекта) = "Собственный" Тогда
            Результат.Добавить(Новый Структура("Имя, Синоним", ЭлементРасширения.Имя, ЭлементРасширения.Синоним));
        КонецЕсли;
    КонецЦикла;
    
    Возврат Результат;
КонецФункции

Важные ограничения и рекомендации

  1. Административные свойства: Такие поля, как Комментарий, Версия или Адрес информации, часто являются административными атрибутами, которые хранятся в реестре подключенных расширений, а не внутри структуры метаданных объектов (справочников или документов).
  2. Метод версионирования: Если вам критически важно отслеживать версию расширения программно, наилучшим решением будет хранение версии в Константах или Регистре сведений внутри самого расширения. Это гарантирует надежный доступ к данным в любой момент работы системы.
  3. Отбор по имени: Всегда используйте отбор через структуру, так как индекс [0] в массиве расширений может указывать на случайное расширение, если их в системе установлено несколько.

Используя объект ConfigurationMetadataObject, вы получаете мощный инструмент для анализа структуры расширений 1С, который позволяет автоматизировать многие процессы, такие как отчетность по конфигурации или проверка состава объектов при развертывании обновлений.

← На главную