1с 8 работа с метаданными. Работа с метаданными. Что такое метаданные

Понятие «метаданные»

Основу концепции системы 1:Предприятие составляет понятие метаданные. Однако прежде чем дать расшифровку этого понятия, рассмотрим понятие объекта метаданных.

Объекты конфигурации (объект метаданных) - это составные элементы, "детали", из которых складывается любое прикладное решение.

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

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

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

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

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

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

Объект метаданных

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

Приведем такой пример. Объект метаданных «Справочник» в системе 1С:Предприятие предназначен для ведения списков одно­родных элементов данных - справочников, картотек, нормативных сборников и тому подобное. Использование объектов метаданных этого типа позволяет организовать ведение любых справочников, необходимых для автоматизации деятельности предприятия.

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

Что такое метаданные

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

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

Зачем нужна работа с метаданными

Бывают ситуации когда надо обработать по одному правилу все схожие между собой объекты. Допустим нам надо написать обработку, которая будет производить некие действия со всеми справочниками у которых есть реквизит Товар . Без использования метаданных надо будет проанализировать вручную всю ветку со справочниками в дереве конфигурации и для каждого справочника написать отдельный код. А с использованием метаданных мы можем программно обойти все справочники, а затем для каждого справочника можем проанализировать все его реквизиты. И в случае если искомый реквизит найден обработать все элементы справочника. Этот подход значительно уменьшит количество кода и предварительной ручной работы. Опять же если в конфигурацию будет добавлен новый справочник, в первом случае (без использования метаданных) необходимо будет дорабатывать обработку. Если же были использованы метаданные, никакой доработки не потребуется.

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

Примеры

Обход метаданных в цикле

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

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

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

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

Запрос = Новый Запрос; Запрос. Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Пользователи.Ссылка |ИЗ | Справочник.Пользователи КАК Пользователи" ; Результат = Запрос. Выполнить () ; Выборка = Результат. Выбрать() ; Пока Выборка. Следующий() Цикл МетаданныеОбъекта = Метаданные. НайтиПоТипу(ТипЗнч(Выборка. Ссылка) ) ; Сообщить(МетаданныеОбъекта. Имя) ; Сообщить(МетаданныеОбъекта. Синоним) ; КонецЦикла ;

Получение метаданных по полному имени

Cуществует еще один метод, который позволяет получить метаданные по полному имени объекта. Речь идет о методе НайтиПоПолномуИмени() . Если взять тот же справочник Пользователи , то его полное имя выглядить как Справочник.Пользователи . Соответственно код для получения метаданных справочника Пользователи по полному имени выглядит вот так

МетаданныеПользователи = Метаданные. НайтиПоПолномуИмени("Справочник.Пользователи" ) ;

Если выбирать между получением метаданных по ссылке и по полному имени, то мне больше по душе метод НайтиПоТипу() .

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

В документации не приводится полный перечень возможных значений атрибутов. Полный перечень атрибутов метаданных можно получить, сформировав в конфигураторе текстовый файл "Описание метаданных". Установленные значения атрибутов можно также узнать из текстового описания структуры метаданных.

Атрибуты, являющиеся по сути признаками с двумя возможными значениями имеют числовой тип и принимают значения 0 или 1. Атрибуты, которые могут иметь несколько возможных значений, выдают строку, отражающую установленный вариант. Атрибуты, отражающие свойство метаданных, выбираемое как ссылка на другой объект метаданных (например, журнал документа) имеют тип "Метаданные".

Пример :

ВыбМетодУдаления=Метаданные.НепосредственноеУдалениеОбъектов;

У объекта "Метаданные" могут существовать методы для доступа к массивам подчиненных метаданных. Например, для глобального атрибута "Метаданные" для обращения к документам используется метод "Документ".

В качестве параметра методов для доступа к массивам подчиненных метаданных передается:

  • число - выдает объект метаданных по указанному номеру;
  • строка - выдает объект метаданных по указанному идентификатору;
  • параметр не указан - выдает количество подчиненных объектов этого типа.

Пример получения списка документов конфигурации:

Для Инд = 1 По Метаданные.Документ() Цикл Сообщить(Метаданные.Документ(Инд).Идентификатор); КснецЦикла;

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

Пример :

Для Инд = 1 До Метаданные.ГрафаОтбора(Идент).Ссылки.Количество() Цикл Сообщить(Метаданные.ГрафаОтбора(Идент). Ссылки.Получить(Инд).ПолныйИдентификатор()); КонецЦикла;



Просмотров