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

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

Метаданные 1С: где используются и как с ними работать

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

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

На практике с метаданными сталкиваются не только разработчики. Администратор видит их при обновлении конфигурации и реструктуризации базы. Консультант — когда настраивает отчёты и права. Даже пользователь косвенно работает с метаданными каждый раз, когда открывает документ: состав колонок, обязательность полей и поведение формы определяются описанием объекта в конфигурации.

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

Что такое метаданные и где они хранятся

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

Физически метаданные хранятся внутри файла информационной базы (для файлового варианта — в файле 1Cv8.1CD) или в базе данных на сервере СУБД (MS SQL, PostgreSQL, Oracle, IBM Db2). При работе в клиент-серверном варианте структура метаданных определяет, какие таблицы и поля будут созданы на уровне СУБД. Разработчику не нужно создавать таблицы вручную — платформа делает это автоматически при обновлении конфигурации базы данных.

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

Роль метаданных при работе платформы

Платформа 1С использует метаданные постоянно, даже когда разработчик не обращается к ним явно. При создании нового объекта в конфигураторе — например, документа «ЗаказКлиента» с реквизитом «Контрагент» — платформа при обновлении конфигурации БД формирует соответствующие таблицы и поля в СУБД. Состав и типы полей полностью определяются описанием реквизитов.

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

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

Обращение к метаданным из встроенного языка

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

Типовые сценарии обращения: получить объект метаданных по ссылке (Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)) или Ссылка.Метаданные()), перебрать все документы конфигурации, проверить наличие реквизита у объекта, определить синоним для вывода пользователю. Например, проверка наличия реквизита перед обращением к нему защищает код от ошибки при переносе в другую конфигурацию.

bsl
МетаОбъект = Ссылка.Метаданные(); // метаданные объекта по ссылке
ИмяОбъекта = МетаОбъект.Имя;      // например, "РеализацияТоваровУслуг"
Синоним = МетаОбъект.Синоним;      // представление для пользователя

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

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

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

Метаданные в запросах, СКД и отчётах

Язык запросов 1С целиком построен на метаданных: имена таблиц в запросе — это имена объектов конфигурации (Справочник.Номенклатура, Документ.ЗаказКлиент, РегистрНакопления.Продажи), а поля — реквизиты, измерения и ресурсы. Если реквизит переименован в конфигураторе, запрос с его старым именем перестанет работать — конструктор запросов и проверка модулей помогают найти такие места.

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

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

Метаданные в обменах, выгрузках и интеграциях

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

В универсальных обработках выгрузки и загрузки (например, через XML, JSON или табличные документы) метаданные используются для обхода произвольных объектов: обработка получает список реквизитов и табличных частей объекта через Метаданные и выгружает их без жёсткого описания структуры. Так работают типовые механизмы выгрузки-загрузки данных между идентичными конфигурациями.

При интеграции через HTTP-сервисы и веб-сервисы метаданные помогают сопоставить поля внешней системы с реквизитами 1С: по имени или синониму реквизита строится карта соответствия. Это удобно, но требует контроля: совпадение имён не гарантирует совпадение типов, а обращение к несуществующему реквизиту вызовет исключение.

Как безопасно обратиться к реквизиту по имени
  1. 1
    Получите объект метаданных: МетаОбъект = Ссылка.Метаданные()
  2. 2
    Проверьте наличие реквизита: МетаОбъект.Реквизиты.Найти(ИмяРеквизита) <> Неопределено
  3. 3
    Проверьте табличные части отдельно через МетаОбъект.ТабличныеЧасти.Найти()
  4. 4
    Только после проверки обращайтесь к значению реквизита
  5. 5
    Проверьте результат на тестовой копии базы перед запуском в рабочей

Метаданные при обновлении и администрировании

При обновлении конфигурации платформа сравнивает метаданные новой версии с метаданными базы данных и выполняет реструктуризацию: добавляет таблицы и поля, изменяет типы, переносит данные. Окно «Изменения в структуре данных» перед обновлением — это прямое отражение различий метаданных. Его стоит внимательно читать: удаление реквизита означает безвозвратную потерю данных в нём.

Обработчики обновления (отложенные и монопольные) также опираются на метаданные: они определяют, какие объекты обрабатывать, и часто проверяют версию данных через служебные регистры. Администратору полезно понимать, что длительная реструктуризация больших таблиц — это следствие изменения метаданных, и планировать окно обновления соответственно.

Типичные задачи и ошибки при работе с метаданными

К типовым прикладным задачам относятся: универсальная печать произвольных объектов, сравнение структур двух конфигураций, поиск всех мест использования справочника (анализ типов реквизитов), построение карты базы данных, аудит прав по объектам метаданных. Во всех этих задачах перебор коллекций Метаданные.Справочники, Метаданные.Документы и вложенных коллекций реквизитов — стандартный приём.

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

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

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

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

Частые вопросы

Чем метаданные отличаются от данных в 1С?

Метаданные описывают структуру (какие есть документы и реквизиты), а данные — это конкретные записи: сами документы, элементы справочников, строки регистров. Метаданные меняются в конфигураторе, данные — в режиме предприятия.

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

Вызовите метод Ссылка.Метаданные() — он вернёт объект описания метаданных, у которого есть свойства Имя, Синоним и полное имя вида «Документ.ЗаказКлиента». Для типа значения также работает Метаданные.НайтиПоТипу().

Почему после переименования реквизита перестал работать отчёт?

Запросы и СКД обращаются к полям по именам из метаданных. После переименования старое имя перестаёт существовать, и схему отчёта нужно открыть в конструкторе и обновить поля. Данные при этом не теряются — меняется только обращение к ним.

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

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

Что такое расширение конфигурации и как оно связано с метаданными?

Расширение добавляет или переопределяет объекты метаданных без изменения основной конфигурации. Платформа объединяет метаданные конфигурации и расширений при запуске. Это удобно для доработок типовых решений: обновление поставщика не затирает изменения.

Где посмотреть различия метаданных перед обновлением?

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