К статье
Практический материал

Разработка и Конфигурация · 11 мин

Метаданные 1С: как получить информацию о структуре конфигурации

Как получить метаданные в 1С: через конфигуратор, встроенный язык и обработки. Примеры кода, типичные ошибки и ответы на вопросы.

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

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

Ниже разобраны все основные методы с примерами кода, ограничениями и типичными ошибками, которые встречаются при работе с метаданными.

Что такое метаданные в 1С и зачем их получать

Метаданные — это «данные о данных»: описание того, из каких объектов состоит прикладное решение. Каждый справочник, документ, регистр сведений или план обмена имеет объект описания метаданного, который хранит имя объекта, синоним, состав реквизитов, табличных частей, движений и других характеристик.

Практические задачи, где требуется доступ к метаданным:

  • универсальные обработки — выгрузка любого справочника в таблицу без жесткой привязки к имени;
  • проверка наличия объекта или реквизита перед обращением к нему (актуально для внешних обработок, работающих в разных конфигурациях);
  • построение произвольных запросов и отчетов по выбранной пользователем таблице;
  • аудит конфигурации — поиск объектов без синонимов, неиспользуемых реквизитов, анализ прав доступа;
  • сопоставление структур при обмене данными между разными конфигурациями.

Важно понимать: метаданные доступны только на чтение. Изменить состав реквизитов или добавить объект программно нельзя — для этого используется конфигуратор. Код работает только с описанием структуры, а не с самими данными таблиц.

Как посмотреть метаданные в конфигураторе

Самый наглядный способ — дерево конфигурации. Откройте конфигуратор, выполните команду «Конфигурация → Открыть конфигурацию». В левой части появится иерархическое дерево: общие объекты, константы, справочники, документы, регистры, отчеты и обработки. Двойной щелчок по объекту открывает окно редактирования с закладками «Данные» (реквизиты и табличные части), «Движения», «Права» и другими.

Для быстрого поиска нужного объекта используйте комбинацию Ctrl+F в дереве конфигурации или команду «Конфигурация → Поиск ссылок на объекты метаданных», чтобы увидеть, где конкретный объект используется. Это полезно при оценке последствий удаления реквизита.

Если нужен список объектов в виде таблицы для анализа или документации, воспользуйтесь командой «Конфигурация → Отчет по конфигурации». Она формирует табличный документ с составом объектов, их реквизитами и свойствами. Отчет можно отфильтровать по видам объектов и сохранить в файл.

Программное получение метаданных через встроенный язык

Глобальный контекст встроенного языка содержит свойство «Метаданные» — это корневой объект описания конфигурации. Через него доступны коллекции по видам объектов: Метаданные.Справочники, Метаданные.Документы, Метаданные.РегистрыСведений, Метаданные.РегистрыНакопления, Метаданные.Отчеты и так далее. Каждая коллекция поддерживает перебор, поиск по имени и получение количества элементов.

bsl
Для Каждого Док Из Метаданные.Документы Цикл
    Сообщить(Док.Имя + " | " + Док.Синоним);
КонецЦикла;

// Проверка существования объекта перед обращением
Если Метаданные.Справочники.Найти("Контрагенты") <> Неопределено Тогда
    Сообщить("Справочник есть в конфигурации");
КонецЕсли;

У каждого объекта описания есть вложенные коллекции. У справочника — Реквизиты и ТабличныеЧасти, у документа дополнительно — Движения, у регистра сведений — Измерения и Ресурсы. Типовой перебор реквизитов выглядит так:

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

// Стандартные (системные) реквизиты: Ссылка, Дата, Номер и др.
Для Каждого СтРеквизит Из МетаДок.СтандартныеРеквизиты Цикл
    Сообщить(СтРеквизит.Имя);
КонецЦикла;

Обратите внимание на различие: пользовательские реквизиты лежат в коллекции «Реквизиты», а системные поля (Ссылка, Дата, Номер, Проведен) — в «СтандартныеРеквизиты». Это частая причина «потери» полей при построении универсальных выгрузок.

Получение метаданных конкретного объекта данных

Иногда нужно узнать структуру не всей конфигурации, а конкретного экземпляра — например, переданной в процедуру ссылки. Для этого у любого объекта данных есть метод «Метаданные()», который возвращает описание именно того вида объекта, к которому относится ссылка.

bsl
Процедура ПоказатьСтруктуру(Ссылка) Экспорт
    Мета = Ссылка.Метаданные();
    Сообщить("Объект: " + Мета.ПолноеИмя());
    Для Каждого Реквизит Из Мета.Реквизиты Цикл
        Сообщить(Реквизит.Имя + " = " + Ссылка[Реквизит.Имя]);
    КонецЦикла;
КонецПроцедуры

Метод «ПолноеИмя()» возвращает строку вида «Документ.РеализацияТоваровУслуг» — этот формат используется для программного построения запросов и обращения к таблицам. Обратная операция — получение объекта метаданных по полному имени — выполняется через Метаданные.НайтиПоПолномуИмени().

Для безопасного универсального кода всегда проверяйте результат поиска на Неопределено. Обращение к несуществующему объекту напрямую (Метаданные.Справочники.Несуществующий) вызовет исключение и прервет выполнение.

Типичные ошибки
01
Обращение к объекту метаданных по имени без проверки через Найти() — внешняя обработка падает в конфигурации, где такого объекта нет
02
Перебор только коллекции Реквизиты без СтандартныеРеквизиты — в выгрузке теряются Дата, Номер и Ссылка
03
Игнорирование табличных частей — универсальная выгрузка документа отдает только шапку без строк
04
Попытка изменить метаданные программно — коллекции доступны только для чтения, изменения вносятся через конфигуратор

Выгрузка метаданных в XML и работа без запуска 1С

Конфигуратор позволяет выгрузить конфигурацию в файлы: «Конфигурация → Выгрузить конфигурацию в файлы». В результате создается структура каталогов с XML-файлами, где каждому объекту метаданных соответствует отдельный файл с полным описанием: имена, типы реквизитов, свойства, состав движений.

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

Ограничения: выгрузка занимает заметное время на крупных конфигурациях, а формат XML-файлов платформа может менять между версиями. Для разового анализа проще воспользоваться отчетом по конфигурации или программным перебором.

Сравнение способов

Конфигуратор

Подходит для визуального просмотра и разовой проверки. Требует доступа к конфигуратору и знания структуры дерева

Встроенный язык

Подходит для автоматизации: универсальные обработки, проверки, выгрузки. Требует прав на выполнение кода

Выгрузка в XML-файлы

Подходит для анализа вне платформы и сравнения версий. Неудобна для быстрой разовой задачи

Готовые обработки и проверка прав доступа

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

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

Контрольные точки

Как проверить результат

Полнота списка объектов
Норма

Количество элементов в коллекции совпадает с числом объектов в дереве конфигуратора

Тревожный признак

Часть объектов отсутствует — проверьте, не перебираете ли вы не ту коллекцию

Состав реквизитов
Норма

Выведены и пользовательские, и стандартные реквизиты

Тревожный признак

Нет полей Дата, Номер, Ссылка — не обработана коллекция СтандартныеРеквизиты

Работа в другой конфигурации
Норма

Обработка корректно отрабатывает и сообщает об отсутствующих объектах

Тревожный признак

Возникает исключение при обращении по имени — нет проверки через Найти()

Для проверки корректности кода удобно запускать его сначала в толстом клиенте или через консоль кода в режиме предприятия на копии базы. Сообщения о структуре выводятся в окно служебных сообщений, откуда их легко скопировать для анализа.

Ограничения и безопасная работа

Чтение метаданных — безопасная операция, она не меняет ни данные, ни конфигурацию. Риск возникает только в двух случаях: когда универсальная обработка на основе метаданных выполняет запись (например, массовое изменение реквизитов) и когда код запускается в рабочей базе без предварительной проверки на копии.

Помните и о производительности: перебор всех метаданных — быстрая операция, но перебор данных всех таблиц, найденных через метаданные, на большой базе может занять часы. Ограничивайте выборки запросами с отборами и не выбирайте данные целиком без необходимости.

Итог

Что важно запомнить

Метаданные 1С доступны через конфигуратор (дерево конфигурации, отчет по конфигурации), программно через объект «Метаданные» и через выгрузку в XML. Для универсального кода всегда проверяйте существование объектов через Найти(), учитывайте стандартные реквизиты и табличные части, а изменяющие данные обработки тестируйте на копии базы.

Часто задаваемые вопросы

Можно ли изменить метаданные программно из встроенного языка?

Нет. Объект «Метаданные» доступен только для чтения. Добавление реквизитов, объектов и изменение их свойств выполняется в конфигураторе с последующим обновлением конфигурации базы данных. Существуют средства пакетной модификации через выгрузку в файлы, но это отдельный инструментарий, а не встроенный язык.

Как получить список реквизитов табличной части документа?

Обратитесь к коллекции ТабличныеЧасти объекта метаданных, найдите нужную часть по имени и переберите её коллекцию Реквизиты: Метаданные.Документы.РеализацияТоваровУслуг.ТабличныеЧасти.Товары.Реквизиты. Перед обращением проверьте существование табличной части через Найти().

Как узнать, какие регистры изменяет документ при проведении?

Эта информация хранится в коллекции «Движения» объекта метаданных документа. Перебор Метаданные.Документы.ИмяДокумента.Движения покажет все регистры, по которым документ может формировать записи. Фактический набор движений конкретного проведенного документа определяется его модулем проведения.

Почему Метаданные.НайтиПоПолномуИмени возвращает Неопределено?

Чаще всего причина в неверном формате строки: полное имя строится как «ВидОбъекта.ИмяОбъекта», например «Справочник.Номенклатура», с учетом регистра букв и точного вида объекта. Проверьте правильность имени через ПолноеИмя() любой ссылки этого вида и убедитесь, что объект существует в конфигурации.

Можно ли получить метаданные из внешней обработки, открытой в режиме предприятия?

Да, объект «Метаданные» доступен в любом контексте встроенного языка, включая внешние обработки. Ограничение касается только безопасного режима: в нем часть операций может быть запрещена, поэтому проверяйте поведение обработки в целевой базе.

Как выгрузить структуру конфигурации в таблицу для документации?

Используйте команду «Конфигурация → Отчет по конфигурации» в конфигураторе: она формирует табличный документ с составом объектов и реквизитов, который можно сохранить в файл. Для автоматизированной выгрузки напишите обработку с перебором коллекций метаданных и выводом результата в табличный документ или CSV.